UniversalRobots / Universal_Robots_ROS_Driver

Universal Robots ROS driver supporting CB3 and e-Series
Apache License 2.0
758 stars 401 forks source link

Does the ROS driver expose the safety planes? #472

Open mzucker opened 3 years ago

mzucker commented 3 years ago

Summary

Was hoping to get some information about safety setup of the robot including safety planes on the ROS side.

Versions

Impact

It would be great if it was possible to read safety planes defined in the robot installation so they could be used for planning (e.g. in MoveIt, etc).

Use Case and Setup

The use case would be a ROS topic related to the safety parameters of the robot installation, including a list of up to the maximum number of defined safety planes (8 I believe). Then the safety planes could be defined as primitives in MoveIt and added to the planning scene, perhaps with some additional safety margin to avoid tripping a protective stop on the robot side.

Is this possible? If not, please consider this a feature request!

fmauch commented 3 years ago

I cannot think of an "easy" implementation of this and we currently do not have the plan or resources for this. So, I'll mark it as "help wanted".

mzucker commented 3 years ago

I also asked on the UR forums: https://forum.universal-robots.com/t/are-safety-planes-exposed-to-ros/16546

Maybe someone at UR will get excited about making this possible?

urrsk commented 3 years ago

@mzucker I like the idea, it could be the next step of making integration easier. See my reply on the forum https://forum.universal-robots.com/t/are-safety-planes-exposed-to-ros/16546

How do you in vision the use. An export of safety boundaries to an URDF file or?

gavanderhoorn commented 3 years ago

Could publish them as shape_msgs/Plane. That would also make it easy to keep them in-sync with whatever happens on the controller.

For MoveIt specifically you'd need something which takes those Planes and converts them into moveit_msgs/CollisionObject, but I would not suggest having the driver publish those directly. That is rather specific to MoveIt.


Or a custom message. I don't really like the fact shape_msgs/Plane does not have a Header.

geometry_msgs/PolygonStamped does have one, but a polygon is not a plane of course. Perhaps with the assumption it models an infinite square?

mzucker commented 3 years ago

I like the idea of publishing on a topic and letting users integrate with it how they want. I also agree that a header would be important to establish which frame the plane is expressed relative to (presumably 'base'). Rather than geometry_msgs/PolygonStamped, how about geometry_msgs/PoseArray? I'm thinking PoseArray vs single PoseStamped because there could be multiple safety planes defined.

There is 2 extra DOF in pose vs plane but could adapt some convention to figure out a canonical pose given a plane. For example:

Or just make a ur_msgs/SafetyPlanes message that has a header, and an array of planes?

However the message is delivered, I would almost certainly turn around and create CollisionObjects in MoveIt, but I think it would be good to allow users to do whatever they want with them.