How to control UR bots through ROS?

Hi

I am new to your robots and trying to understand how they are used via ROS. I see there is the driver, however what would be the ROS interface to send motion commands / trajectories? Would this be via moveit, and if so would a moveit package need to be created by the end user?

Additionally I have been looking at the driver page and it mentions utilising ROS Control and that this enables use of position based control. Does this mean that velocity based control is unavailable, or is this what is meant by “speed scaling” on the ur_controllers page?

Thanks

1 Like

Phew, that’s a lot of questions. I’ll try to quickly answer them to my knowledge.

what would be the ROS interface to send motion commands / trajectories?

By default, a trajectory controller is loaded. It exposes a ROS action server of the type control_msgs/FollowJointTrajectory. You can either create trajectories on your own (which is a bit of work if you’re not familiar with the interface) or one option is to use MoveIt!

would a moveit package need to be created by the end user?

There already exist moveit packages inside the universal_robot repository which currently has to be cloned from my fork, as written in the installation instruction. Currently, there is a manual step necessary to use the driver with MoveIt! See issue #55 for details and the discussion on this.

Does this mean that velocity based control is unavailable, or is this what is meant by “speed scaling”

Velocity control is currently being added to the driver (see this Pull Request). “Speed scaling” on the other hand is a UR feature where the robot limits commanded motions to setup constraints and therefore virtually reducing execution speed. The implemented controller is capable of being aware of this, nothing more.

1 Like