# Can someone explain geometry_msgs as used for robot arm poses e.g.?

I'm trying to work with a robot arm, and struggling to find anything to explain in detail how anything works. I have gone through the ROS documentation tutorials, and the PR2 moveit tutorial for example. Pose goals are used but never explained.

What do position and orientation variables refer to in this context? Position and orientation of what relative to what? What does the origin refer to, where is it specified and how is it retrieved?

The robot I'm working with has 7 joint angles. Are poses and joint specifications redundant, or can they be used together? It seems from my specification that both are simultaneously significant, though I would think the joint angles completely specify the position. Again, what does a pose goal position and orientation mean for a robot arm determined by 7 joint angles?

Thanks! -Jason

P.S. If you are thinking that I just don't know enough about robotics or ROS to understand, please be so kind as to direct me to where I can find information sufficient to actually LEARN (I'm an ECE PhD btw).

edit retag close merge delete

Sort by » oldest newest most voted

What do position and orientation variables refer to in this context? Position and orientation of what relative to what? What does the origin refer to, where is it specified and how is it retrieved?

geometry_msgs/Pose is a 6D Cartesian pose, relative to 'nothing' - or whatever the sender and receiver agree upon out of band. The comment in the message definition:

A representation of pose in free space, composed of position and orientation.

geometry_msgs/PoseStamped is also a 6D Cartesian pose, but the message includes a header, which include a frame_id field which allows the sender to specify to what the pose is relative. Again, the comment in the message definition:

A Pose with reference coordinate frame and timestamp

Note that this header also includes a stamp field, so not only is a PoseStamped explicit wrt its space dimension, but also the time dimension.

The robot I'm working with has 7 joint angles. Are poses and joint specifications redundant, or can they be used together? It seems from my specification that both are simultaneously significant, though I would think the joint angles completely specify the position. Again, what does a pose goal position and orientation mean for a robot arm determined by 7 joint angles?

There are no messages to specify "joint specifications" in geometry_msgs, so I think you are referring to sensor_msgs/JointState here. In that case, yes: a 7 element vector with joint angles would completely define a robot pose, but only in joint space or in the robots local frame (whatever that is) after FK.

As to "are they redundant": sort-of, but I'm not sure I see a problem there: sensor_msgs/JointState is typically used to report joint angles coming from a sensor of sorts. It's obviously all in joint space. geometry_msgs/Pose can be used to report measurements - such as coming from a localisation framework fi - but is typically just used to store 6D poses.

One area where they would both appear would be in MoveIt, where you can specify joint space goals as well as Cartesian goals to plan to. But in those cases you only ever specify one or the other, never together - as one would expect.

Edit:

I don't understand the 4d orientation vector for example. I guess this is a quaternion?

Have you seen the msg documentation? From here:

Point position
Quaternion orientation


So, yes. orientation is of type Quaternion. In the linked documentation, clicking on the Quaternion typename then gets you to here:

This represents an orientation in free space in quaternion form.

So a Pose is a Point and a Quaternion combined, which together specify the 6D Cartesian pose of a link in free space. I don't know how to make this more clear.

I don't know what it supposed to be being oriented by this quaternion. The robot base, or "body"? I know how to set a pose goal for the robot arm, but I have no idea which part is being positioned ...

more

As to whether there is documentation about all this: there might be, but I haven't looked.

( 2017-07-11 05:07:43 -0500 )edit

Thanks very much for your reply. I'm ordering a couple of ROS programming books and a Robotics textbook which will hopefully help, though it would be really nice if there were an online tutorial, e.g. in MoveIt, that explained what the pose variables mean when specifying the PR2 arm pose goal e.g.

( 2017-07-11 06:20:14 -0500 )edit

I don't understand the 4d orientation vector for example. I guess this is a quaternion? I don't know what it supposed to be being oriented by this quaternion. The robot base, or "body"? I know how to set a pose goal for the robot arm, but I have no idea which part is being positioned or oriented!

( 2017-07-11 06:25:16 -0500 )edit

Note that I focused on the use of Poses in manipulation contexts, as that was what you seem to be doing as well. In reality Pose messages are used in many different applications, from UAVs to mobile bases to things that have nothing to do with robots whatsoever. As a 'pose' is basically a ..

( 2017-07-11 10:41:07 -0500 )edit

.. mathematical concept, that is all possible without having change anything to the msg itself.

( 2017-07-11 10:41:28 -0500 )edit