Closed fmauch closed 1 year ago
This could be fixed easily by providing a mechanism to send ur_scripts just like the ROS1 driver. Sending ur_scripts should be the first feature added before anything else, as it lets you do anything missing.
Note: There is a set_payload service available in the gpio controller that should be working. Also, with #721 a direct URScript interface will be available soon.
Edit: I just checked again, and setPayload is working with the current version of the driver. Closing this.
Hi @fmauch, we are trying to use the setPayload service on a UR10e and latest binary for ROS2 Humble. What are the units for the Mass and Center of Gravity (x, y, z) in the ROS API?
They follow the general ROS unit standards (REP 103): Meters for the CoG displacement from the tool mount and kilogramms for the mass.
Oh this is interesting actually.
The fact that it is in meters likely causes confusion at first, as the API on the UR control panel is set to millimeters, and the ur_robot_dtivet API on the ROS side has no mention of units. This has caused me, and others in my team, to believe the ROS API is in millimeters, and we input values that are far too large for the driver. The robot entered violation immediately, but we were not certain why it was doing so. We figured it out last evening, but not without lots of confusion.
Another point of confusion we did not get at first: the robot must be running the external_control UR_Caps to allow for a change of payload. This is clear once one reads the source code, but at first it is confusing when one does not run the external control program, as 1- the io_and_status_controller/set_payload service returns Success even though the payload was is not actually changed, and 2- the io_and_status_controller/set_io service actually sets the IOs successfully, and has a similar namespace, giving us the impression that something is wrong with the set_payload service.
I think what I am trying to suggest is to have the payload service fail when the payload is not set, and give an explanation (e.g. when external contril is not running), and/or some documentation of the units and the requirements to run the services in the ur_robot_driver package, because to the best of my knowledge these are not existing, unless these are present and I missed them.
In the ROS1 driver we could set the payload through ROS. This is still missing.