@@ -415,7 +415,18 @@ std::vector<hardware_interface::StateInterface> URPositionHardwareInterface::exp
415415 hardware_interface::StateInterface (tf_prefix + " payload" , " cog.y" , &rtde_payload_cog_[1 ]));
416416 state_interfaces.emplace_back (
417417 hardware_interface::StateInterface (tf_prefix + " payload" , " cog.z" , &rtde_payload_cog_[2 ]));
418-
418+ state_interfaces.emplace_back (
419+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixx" , &rtde_payload_inertia_[0 ]));
420+ state_interfaces.emplace_back (
421+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.iyy" , &rtde_payload_inertia_[1 ]));
422+ state_interfaces.emplace_back (
423+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.izz" , &rtde_payload_inertia_[2 ]));
424+ state_interfaces.emplace_back (
425+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixy" , &rtde_payload_inertia_[3 ]));
426+ state_interfaces.emplace_back (
427+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixz" , &rtde_payload_inertia_[4 ]));
428+ state_interfaces.emplace_back (
429+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.iyz" , &rtde_payload_inertia_[5 ]));
419430 // Motion primitives stuff
420431 state_interfaces.emplace_back (hardware_interface::StateInterface (tf_prefix + HW_IF_MOTION_PRIMITIVES ,
421432 " execution_status" , &hw_moprim_states_[0 ]));
@@ -478,6 +489,20 @@ std::vector<hardware_interface::CommandInterface> URPositionHardwareInterface::e
478489 hardware_interface::CommandInterface (tf_prefix + " payload" , " cog.y" , &payload_center_of_gravity_[1 ]));
479490 command_interfaces.emplace_back (
480491 hardware_interface::CommandInterface (tf_prefix + " payload" , " cog.z" , &payload_center_of_gravity_[2 ]));
492+ command_interfaces.emplace_back (
493+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixx" , &payload_inertia_[0 ]));
494+ command_interfaces.emplace_back (
495+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.iyy" , &payload_inertia_[1 ]));
496+ command_interfaces.emplace_back (
497+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.izz" , &payload_inertia_[2 ]));
498+ command_interfaces.emplace_back (
499+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixy" , &payload_inertia_[3 ]));
500+ command_interfaces.emplace_back (
501+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixz" , &payload_inertia_[4 ]));
502+ command_interfaces.emplace_back (
503+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.iyz" , &payload_inertia_[5 ]));
504+ command_interfaces.emplace_back (
505+ hardware_interface::CommandInterface (tf_prefix + " payload" , " transition_time" , &payload_transition_time_));
481506 command_interfaces.emplace_back (
482507 hardware_interface::CommandInterface (tf_prefix + " payload" , " payload_async_success" , &payload_async_success_));
483508
@@ -999,6 +1024,7 @@ hardware_interface::return_type URPositionHardwareInterface::read(const rclcpp::
9991024 readData (data_package_buffer_, " tcp_offset" , tcp_offset_);
10001025 readData (data_package_buffer_, " payload" , rtde_payload_mass_);
10011026 readData (data_package_buffer_, " payload_cog" , rtde_payload_cog_);
1027+ readData (data_package_buffer_, " payload_inertia" , rtde_payload_inertia_);
10021028
10031029 // required transforms
10041030 extractToolPose ();
@@ -1138,6 +1164,8 @@ void URPositionHardwareInterface::initAsyncIO()
11381164
11391165 payload_mass_ = NO_NEW_CMD_ ;
11401166 payload_center_of_gravity_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1167+ payload_inertia_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1168+ payload_transition_time_ = NO_NEW_CMD_ ;
11411169
11421170 gravity_vector_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
11431171 friction_model_viscous_.fill (NO_NEW_CMD_ );
@@ -1205,10 +1233,16 @@ void URPositionHardwareInterface::checkAsyncIO()
12051233
12061234 if (!std::isnan (payload_mass_) && !std::isnan (payload_center_of_gravity_[0 ]) &&
12071235 !std::isnan (payload_center_of_gravity_[1 ]) && !std::isnan (payload_center_of_gravity_[2 ]) &&
1208- ur_driver_ != nullptr ) {
1209- payload_async_success_ = ur_driver_->setPayload (payload_mass_, payload_center_of_gravity_);
1236+ !std::isnan (payload_inertia_[0 ]) && !std::isnan (payload_inertia_[1 ]) && !std::isnan (payload_inertia_[2 ]) &&
1237+ !std::isnan (payload_inertia_[3 ]) && !std::isnan (payload_inertia_[4 ]) && !std::isnan (payload_inertia_[5 ]) &&
1238+ !std::isnan (payload_transition_time_) && ur_driver_ != nullptr ) {
1239+ payload_async_success_ = ur_driver_->setTargetPayload (payload_mass_, payload_center_of_gravity_, payload_inertia_,
1240+ payload_transition_time_);
1241+
12101242 payload_mass_ = NO_NEW_CMD_ ;
12111243 payload_center_of_gravity_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1244+ payload_inertia_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1245+ payload_transition_time_ = NO_NEW_CMD_ ;
12121246 }
12131247
12141248 if (!std::isnan (gravity_vector_[0 ]) && !std::isnan (gravity_vector_[1 ]) && !std::isnan (gravity_vector_[2 ]) &&
0 commit comments