FZI

Our internal Cartesian trajectory definition.

This is bit different to the other approaches as it doesn’t require the user to specify detailed timing and / or velocity information in each waypoint. Instead, a maximum velocity and acceleration can be specified in both, translation and rotation domain.

Feature list

  • Global max velocities and accelerations instead of timing information
  • Contains interpolation distance
  • Contains offsets to shift the trajectory in Cartesian space

Features required from hardware / driver

  • Control interface
  • Trajectory interpolation
  • Calculate timings and velocities / accelerations in waypoints

Message definition

[CartesianPoseTrajectoryGoal]
fzi_manipulation_msgs/CartesianExecutionConfig params
  string reference_frame
  string endeffector_frame
  float64 acceleration_lin
  float64 acceleration_rot
  float64 velocity_lin
  float64 velocity_rot
  float64 interpolation_lin
  float64 interpolation_rot
  geometry_msgs/Pose trajectory_offset
  bool has_trajectory_offset
  geometry_msgs/Pose tcp_offset
  bool has_tcp_offset
geometry_msgs/Pose[] points

Field details

Interpolation

The used interpolation distances are currently used to create setpoints between the ones specified to get closer to the desired Cartesian linear motion when this is being executed using a joint-based backend, e.g. by using an inverse kinematics solver for each setpoint and creating a joint-based trajectory out of that.

Trajectory Offset

The trajectory offset offsets the trajectory relative to the specified reference_frame. This can be useful in situations where a trajectory shall be executed in contact with a surface but it should be executed a couple of centimeters above the surface for testing purposes. This is equivalent to applying the specified transformation on the reference_frame before executing the trajectory.

TCP Offset

The tcp offset shifts the trajectory relative to the specified endeffector_frame. This is useful for example if a trajectory is specified directly ontop of an object’s surface, but the endeffector should keep a distance to the surface at all times, e.g. to make room for a gluing layer being applied. This is equivalent to applying the specified transformation on the endeffector_frame before executing the trajectory.