@@ -350,6 +350,18 @@ std::vector<hardware_interface::StateInterface> URPositionHardwareInterface::exp
350350 hardware_interface::StateInterface (tf_prefix + " payload" , " cog.y" , &rtde_payload_cog_[1 ]));
351351 state_interfaces.emplace_back (
352352 hardware_interface::StateInterface (tf_prefix + " payload" , " cog.z" , &rtde_payload_cog_[2 ]));
353+ state_interfaces.emplace_back (
354+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixx" , &rtde_payload_inertia_[0 ]));
355+ state_interfaces.emplace_back (
356+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.iyy" , &rtde_payload_inertia_[1 ]));
357+ state_interfaces.emplace_back (
358+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.izz" , &rtde_payload_inertia_[2 ]));
359+ state_interfaces.emplace_back (
360+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixy" , &rtde_payload_inertia_[3 ]));
361+ state_interfaces.emplace_back (
362+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.ixz" , &rtde_payload_inertia_[4 ]));
363+ state_interfaces.emplace_back (
364+ hardware_interface::StateInterface (tf_prefix + " payload" , " inertia.iyz" , &rtde_payload_inertia_[5 ]));
353365
354366 return state_interfaces;
355367}
@@ -407,6 +419,20 @@ std::vector<hardware_interface::CommandInterface> URPositionHardwareInterface::e
407419 hardware_interface::CommandInterface (tf_prefix + " payload" , " cog.y" , &payload_center_of_gravity_[1 ]));
408420 command_interfaces.emplace_back (
409421 hardware_interface::CommandInterface (tf_prefix + " payload" , " cog.z" , &payload_center_of_gravity_[2 ]));
422+ command_interfaces.emplace_back (
423+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixx" , &payload_inertia_[0 ]));
424+ command_interfaces.emplace_back (
425+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.iyy" , &payload_inertia_[1 ]));
426+ command_interfaces.emplace_back (
427+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.izz" , &payload_inertia_[2 ]));
428+ command_interfaces.emplace_back (
429+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixy" , &payload_inertia_[3 ]));
430+ command_interfaces.emplace_back (
431+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.ixz" , &payload_inertia_[4 ]));
432+ command_interfaces.emplace_back (
433+ hardware_interface::CommandInterface (tf_prefix + " payload" , " inertia.iyz" , &payload_inertia_[5 ]));
434+ command_interfaces.emplace_back (
435+ hardware_interface::CommandInterface (tf_prefix + " payload" , " transition_time" , &payload_transition_time_));
410436 command_interfaces.emplace_back (
411437 hardware_interface::CommandInterface (tf_prefix + " payload" , " payload_async_success" , &payload_async_success_));
412438
@@ -825,6 +851,7 @@ hardware_interface::return_type URPositionHardwareInterface::read(const rclcpp::
825851 readData (data_package_buffer_, " tcp_offset" , tcp_offset_);
826852 readData (data_package_buffer_, " payload" , rtde_payload_mass_);
827853 readData (data_package_buffer_, " payload_cog" , rtde_payload_cog_);
854+ readData (data_package_buffer_, " payload_inertia" , rtde_payload_inertia_);
828855
829856 // required transforms
830857 extractToolPose ();
@@ -954,6 +981,8 @@ void URPositionHardwareInterface::initAsyncIO()
954981
955982 payload_mass_ = NO_NEW_CMD_ ;
956983 payload_center_of_gravity_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
984+ payload_inertia_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
985+ payload_transition_time_ = NO_NEW_CMD_ ;
957986
958987 friction_model_viscous_.fill (NO_NEW_CMD_ );
959988 friction_model_coulomb_.fill (NO_NEW_CMD_ );
@@ -1020,10 +1049,16 @@ void URPositionHardwareInterface::checkAsyncIO()
10201049
10211050 if (!std::isnan (payload_mass_) && !std::isnan (payload_center_of_gravity_[0 ]) &&
10221051 !std::isnan (payload_center_of_gravity_[1 ]) && !std::isnan (payload_center_of_gravity_[2 ]) &&
1023- ur_driver_ != nullptr ) {
1024- payload_async_success_ = ur_driver_->setPayload (payload_mass_, payload_center_of_gravity_);
1052+ !std::isnan (payload_inertia_[0 ]) && !std::isnan (payload_inertia_[1 ]) && !std::isnan (payload_inertia_[2 ]) &&
1053+ !std::isnan (payload_inertia_[3 ]) && !std::isnan (payload_inertia_[4 ]) && !std::isnan (payload_inertia_[5 ]) &&
1054+ !std::isnan (payload_transition_time_) && ur_driver_ != nullptr ) {
1055+ payload_async_success_ = ur_driver_->setTargetPayload (payload_mass_, payload_center_of_gravity_, payload_inertia_,
1056+ payload_transition_time_);
1057+
10251058 payload_mass_ = NO_NEW_CMD_ ;
10261059 payload_center_of_gravity_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1060+ payload_inertia_ = { NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ , NO_NEW_CMD_ };
1061+ payload_transition_time_ = NO_NEW_CMD_ ;
10271062 }
10281063
10291064 if (!std::isnan (friction_model_viscous_[0 ]) && ur_driver_ != nullptr ) {
0 commit comments