## Overview

## Reference Implementations

Descartes provides reference implementations for the most common ways one might wish to specify a robot path. For more specialized requirements, you can create your own trajectory points using the interface from descartes_core.

### JointTrajectoryPt

`descartes_trajectory::JointTrajectoryPt` represents a robot configuration that is defined by specifying the position of every active joint in the robot. This point can be optionally constructed with a nominal joint position and a set of tolerances for each joint.

### CartTrajectoryPt

`descartes_trajectory::CartTrajectoryPt` represents a robot configuration where the robot's tool tip is at a specified 6-D pose. Unlike a joint trajectory point, a Cartesian point may have many possible joint solutions. Both the Cartesian and rotational components of a pose can be toleranced.

The sample space for a given Cartesian point is generated by taking the bounds of the tolerances and stepping through them with a user defined discretizing step size. The points are internally represented by a transformation matrix combining first a translation to the tool (x,y,z) coordinates followed by a moving-axis rotation about X, Y, Z in that order.

### AxialSymmetricPt

`descartes_trajectory::AxialSymmetricPt` represents a specialization of a Cartesian trajectory point with a free axis of rotation. A user may specify a nominal pose for the end-effector and an axis (X_AXIS, Y_AXIS, or Z_AXIS) representing the axis of the nominal pose about which to search for solutions. All other tolerances are held to zero. This is useful for applications like blending where one does not care the exact yaw of the tool.