@@ -385,6 +385,26 @@ std::vector<hardware_interface::StateInterface> URPositionHardwareInterface::exp
385385 hardware_interface::StateInterface (tf_prefix + " payload" , " cog.y" , &rtde_payload_cog_[1 ]));
386386 state_interfaces.emplace_back (
387387 hardware_interface::StateInterface (tf_prefix + " payload" , " cog.z" , &rtde_payload_cog_[2 ]));
388+ <<<<<<< HEAD
389+ =======
390+ state_interfaces.emplace_back (
391+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixx" , &rtde_payload_inertia_[0 ]));
392+ state_interfaces.emplace_back (
393+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.iyy" , &rtde_payload_inertia_[1 ]));
394+ state_interfaces.emplace_back (
395+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.izz" , &rtde_payload_inertia_[2 ]));
396+ state_interfaces.emplace_back (
397+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixy" , &rtde_payload_inertia_[3 ]));
398+ state_interfaces.emplace_back (
399+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixz" , &rtde_payload_inertia_[4 ]));
400+ state_interfaces.emplace_back (
401+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.iyz" , &rtde_payload_inertia_[5 ]));
402+ // Motion primitives stuff
403+ state_interfaces.emplace_back (hardware_interface::StateInterface (tf_prefix + HW_IF_MOTION_PRIMITIVES ,
404+ " execution_status" , &hw_moprim_states_[0 ]));
405+ state_interfaces.emplace_back (hardware_interface::StateInterface (tf_prefix + HW_IF_MOTION_PRIMITIVES ,
406+ " ready_for_new_primitive" , &hw_moprim_states_[1 ]));
407+ >>>>>>> 3d18755 (Allow setting payload inertia matrix via set_payload service backwards-compatible (#1811 ))
388408
389409 return state_interfaces;
390410}
@@ -442,6 +462,20 @@ std::vector<hardware_interface::CommandInterface> URPositionHardwareInterface::e
442462 hardware_interface::CommandInterface (tf_prefix + " payload" , " cog.y" , &payload_center_of_gravity_[1 ]));
443463 command_interfaces.emplace_back (
444464 hardware_interface::CommandInterface (tf_prefix + " payload" , " cog.z" , &payload_center_of_gravity_[2 ]));
465+ command_interfaces.emplace_back (
466+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixx" , &payload_inertia_[0 ]));
467+ command_interfaces.emplace_back (
468+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.iyy" , &payload_inertia_[1 ]));
469+ command_interfaces.emplace_back (
470+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.izz" , &payload_inertia_[2 ]));
471+ command_interfaces.emplace_back (
472+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixy" , &payload_inertia_[3 ]));
473+ command_interfaces.emplace_back (
474+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixz" , &payload_inertia_[4 ]));
475+ command_interfaces.emplace_back (
476+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.iyz" , &payload_inertia_[5 ]));
477+ command_interfaces.emplace_back (
478+ hardware_interface::CommandInterface (tf_prefix + " payload" , " transition_time" , &payload_transition_time_));
445479 command_interfaces.emplace_back (
446480 hardware_interface::CommandInterface (tf_prefix + " payload" , " payload_async_success" , &payload_async_success_));
447481
@@ -896,6 +930,7 @@ hardware_interface::return_type URPositionHardwareInterface::read(const rclcpp::
896930 readData (data_package_buffer_, " tcp_offset" , tcp_offset_);
897931 readData (data_package_buffer_, " payload" , rtde_payload_mass_);
898932 readData (data_package_buffer_, " payload_cog" , rtde_payload_cog_);
933+ readData (data_package_buffer_, " payload_inertia" , rtde_payload_inertia_);
899934
900935 // required transforms
901936 extractToolPose ();
@@ -1027,6 +1062,8 @@ void URPositionHardwareInterface::initAsyncIO()
10271062
10281063 payload_mass_ = NO_NEW_CMD_ ;
10291064 payload_center_of_gravity_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1065+ payload_inertia_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1066+ payload_transition_time_ = NO_NEW_CMD_ ;
10301067
10311068 gravity_vector_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
10321069 friction_model_viscous_.fill (NO_NEW_CMD_ );
@@ -1094,10 +1131,16 @@ void URPositionHardwareInterface::checkAsyncIO()
10941131
10951132 if (!std::isnan (payload_mass_) && !std::isnan (payload_center_of_gravity_[0 ]) &&
10961133 !std::isnan (payload_center_of_gravity_[1 ]) && !std::isnan (payload_center_of_gravity_[2 ]) &&
1097- ur_driver_ != nullptr ) {
1098- payload_async_success_ = ur_driver_->setPayload (payload_mass_, payload_center_of_gravity_);
1134+ !std::isnan (payload_inertia_[0 ]) && !std::isnan (payload_inertia_[1 ]) && !std::isnan (payload_inertia_[2 ]) &&
1135+ !std::isnan (payload_inertia_[3 ]) && !std::isnan (payload_inertia_[4 ]) && !std::isnan (payload_inertia_[5 ]) &&
1136+ !std::isnan (payload_transition_time_) && ur_driver_ != nullptr ) {
1137+ payload_async_success_ = ur_driver_->setTargetPayload (payload_mass_, payload_center_of_gravity_, payload_inertia_,
1138+ payload_transition_time_);
1139+
10991140 payload_mass_ = NO_NEW_CMD_ ;
11001141 payload_center_of_gravity_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1142+ payload_inertia_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1143+ payload_transition_time_ = NO_NEW_CMD_ ;
11011144 }
11021145
11031146 if (!std::isnan (gravity_vector_[0 ]) && !std::isnan (gravity_vector_[1 ]) && !std::isnan (gravity_vector_[2 ]) &&
0 commit comments