ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

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.

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 or oriented!

That is completely dependent on what you made the defined end effector or planning link (or whatever nomenclature the motion planning framework that you are using uses). That would be independent of the definition of these messages.

The messages define a pose. How it gets used is up to the component consuming those messages.

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 or oriented!

That is completely dependent on what you made the defined end effector or planning link (or whatever nomenclature the motion planning framework that you are using uses). That would be independent of the definition of these messages.

The messages define a pose. How it gets used is up to the component consuming those messages.

Finally: the message spec defines how the data should be structured and to a certain extend, what its semantics are. Not what the data should be used for, or how a component must interpret it. So that will always depend on the usage specification that the consuming component gives you. Example: a motion planning component might state that it accepts Pose messages on a certain topic and that it will make the curently active end effector follow the messages that it receives. The messages themselves will then not contain any reference to that end effector, but they will express the target pose of the end effector.