Trajectory Generation
A trajectory is a time-parameterized motion:
Moro 0.5.0 provides compact numerical point-to-point trajectories using polynomial interpolation.
Normalized time
Let
and define
Then
Using normalized time makes the polynomial coefficients independent of the absolute time origin.
Physical-time derivatives satisfy
and
Linear interpolation
For endpoint positions \(x_0\) and \(x_f\),
Therefore
and
Cubic interpolation
For
with endpoint velocities \(v_0\) and \(v_f\),
Velocity and acceleration are
Quintic interpolation
For
with endpoint velocities \(v_0,v_f\) and accelerations \(a_0,a_f\),
Let
Then
Classical zero-derivative profiles
For \(x_0=0\), \(x_f=1\), and zero supported derivative conditions:
Linear
Cubic
Quintic
This gives the teaching progression
linear -> position
cubic -> position + velocity
quintic -> position + velocity + acceleration
Vector trajectories
The same formulas apply componentwise to vector-valued coordinates.
For joint space,
For Cartesian position space,
With zero derivative boundary conditions, a Cartesian position trajectory lies on the line segment between \(p_0\) and \(p_f\).
Nonzero derivative conditions can produce a curved path because the polynomial acts independently on each Cartesian component.
Separation from robot algorithms
Trajectory generation is independent of robot kinematics.
A Cartesian trajectory may later be resolved using sequential inverse kinematics:
cart = position_trajectory(...)
ik = solve_position_trajectory(robot, cart.p, q0=...)
Similarly, a joint-space trajectory can be passed directly to visualization as a time-major matrix.
No robot constraints or dynamic feasibility conditions are enforced by the trajectory generator itself.