@@ -676,6 +676,11 @@ URPositionHardwareInterface::on_configure(const rclcpp_lifecycle::State& previou
676676 // The driver will offer an interface to receive the program's URScript on this port.
677677 const int script_sender_port = stoi (info_.hardware_parameters [" script_sender_port" ]);
678678
679+ // Newer software version (5.23.0 / 10.11.0) support reporting the actual joint torques. On older
680+ // versions fall back to the currents, instead.
681+ use_currents_as_efforts_ = ((info_.hardware_parameters [" use_currents_as_efforts" ] == " true" ) ||
682+ (info_.hardware_parameters [" use_currents_as_efforts" ] == " True" ));
683+
679684 // The ip address of the host the driver runs on
680685 std::string reverse_ip = info_.hardware_parameters [" reverse_ip" ];
681686 if (reverse_ip == " 0.0.0.0" ) {
@@ -858,6 +863,17 @@ URPositionHardwareInterface::on_configure(const rclcpp_lifecycle::State& previou
858863 RCLCPP_INFO (rclcpp::get_logger (" URPositionHardwareInterface" ), " Initializing InstructionExecutor" );
859864 instruction_executor_ = std::make_shared<urcl::InstructionExecutor>(ur_driver_);
860865
866+ if (!use_currents_as_efforts_) {
867+ if ((version_info_.major == 5 && version_info_.minor < 23 ) ||
868+ (version_info_.major == 10 && version_info_.minor < 11 ) || version_info_.major < 5 ) {
869+ RCLCPP_ERROR (get_logger (),
870+ " Driver configured to use actual torques as efforts, which is not supported by this software "
871+ " version %s. Please use version 5.23.0 / 10.11.0 or newer for this feature." ,
872+ version_info_.toString ().c_str ());
873+ return hardware_interface::CallbackReturn::ERROR ;
874+ }
875+ }
876+
861877 async_thread_ = std::make_shared<std::thread>(&URPositionHardwareInterface::asyncThread, this );
862878
863879 // Start async thread for sending motion primitives
@@ -971,7 +987,11 @@ hardware_interface::return_type URPositionHardwareInterface::read(const rclcpp::
971987 packet_read_ = true ;
972988 readData (data_package_buffer_, " actual_q" , urcl_joint_positions_);
973989 readData (data_package_buffer_, " actual_qd" , urcl_joint_velocities_);
974- readData (data_package_buffer_, " actual_current" , urcl_joint_efforts_);
990+ if (use_currents_as_efforts_) {
991+ readData (data_package_buffer_, " actual_current" , urcl_joint_efforts_);
992+ } else {
993+ readData (data_package_buffer_, " actual_current_as_torque" , urcl_joint_efforts_);
994+ }
975995 readData (data_package_buffer_, " target_speed_fraction" , target_speed_fraction_);
976996 readData (data_package_buffer_, " speed_scaling" , speed_scaling_);
977997 readData (data_package_buffer_, " runtime_state" , runtime_state_);
0 commit comments