Gijs van der Hoorn¶
https://github.com/gavanderhoorn/common_msgs/pull/1/files
Feature list¶
- Contains accelerations
- Contains wrenches
- Contains posture information to handle redundancies
Features required from hardware / driver¶
- Control interface
Message definition¶
[LinearTrajectory]
std_msgs/Header header
string child_frame_id
LinearTrajectoryPoint[] points
Duration time_from_start
Pose pose
Twist velocity
Accel acceleration
Wrench wrench
sensor_msgs/JointState configuration # optional
Field details¶
The following list is not complete. Please see the linked PR for more information.
header.frame_id¶
The trajectory describes the motion of this frame relative to header.frame_id.
child_frame_id¶
Each point in the trajectory specifies at least a valid pose and a time at which that pose must be reached by child_frame_id.
time_from_start¶
Time (in seconds) at which the system state encoded in this trajectory point is to be attained, relative to the start of trajectory execution.
Required field.
It is an error to not initialise this field.
configuration¶
Preferred joint space configuration to achieve pose.
Optional field.
This field is encoded as a sensor_msgs/JointState to allow for the greatest flexibility when describing joint configurations (compared to bitmasks or lists of booleans/integers).
Only the name and position fields of the JointState message are used. Values in other fields are ignored.
Joints present in the system, but for which no values are provided will be considered unrestricted wrt possible IK solutions (ie: so called ‘free’ joints).
Leaving this field empty in case of kinematic systems for which multiple IK solutions exist for a given pose, in general or because of their by-design underconstraint nature (ie: in case of (hyper-)redundancy), could lead to motion discontinuities (ie: mid-motion configuration changes) as IK solvers may not provide the closest or preferred solutions automatically for those types of systems.
Example of a 6D kinematic configuration with all joints given values:
configuration.name = ['joint_1', 'joint_2', ..., 'joint_6']
configuration.position = [0.1092, 0.4012, ..., 1.6323]
Drivers moving robots to this trajectory point are required to use an IK solution either identical to or as close as possible to this joint configuration.
Encoding a “configuration bitmask” (ie: shoulder, elbow, wrist) typically used in industrial robotics into a ‘configuration’ field may be done as follows:
configuration.name = ['joint_2', 'joint_3', 'joint_4']
configuration.position = [0.0, 0.0, 3.1415]
Note: if only ‘joint_4’ would have been specified, the shoulder and elbow joints would not have been constrained, leading to potentially different solutions being used.
Also note: as configuration encodes joint angles instead of binary states, turn numbers and configuration flags can be expressed as a single joint angle.