Problem
Given the following:
- $A$ - maximum acceleration.
- $J$ - constant jerk (the rate of change of acceleration).
- $v$ - initial velocity.
- $a$ - initial acceleration (where, in practice, $a ∈ [-A, A]$, however, this is not a requirement for a solution).
How might one determine the shortest possible "stopping distance", i.e. the distance traveled at the end of which both velocity and acceleration simultaneously arrive at 0?
Edit: David kindly pointed out that "stopping distance" isn't the correct term here. Perhaps "arrival distance" is better suited? This is because I'm looking for a solution where not only velocity reaches 0, but both velocity and acceleration reach 0.
Attempt
So far, I've been using the following equation to solve this within my application:
$d = \frac{v^2}{2A} + \frac{vA}{2J}$
However, I realized that while this accounts for an initial velocity, it does not account for initial acceleration and instead assumes 0. What I would really like to achieve is to solve distance for both an initial velocity $v$ and an initial acceleration $a$.
I also know that when $a=0$ and $v=0$, $d=0$.
The paper On-Line Planning of Time-Optimal, Jerk-Limited Trajectories by Haschke et al. hints at the complexity of this problem in the introduction:
While Kröger et al. [7] developed an online capable method to compute time- optimal trapezoidal velocity profiles from arbitrary initial conditions, Herrera and Sidobre [6] presented an approach to compute jerk-limited trajectories, but only zero initial acceleration conditions could be handled. To the best of our knowledge, a universal solution to compute time-optimal third-order trajectories with arbitrary initial conditions were not available till now, because the lack of symmetric zero boundary conditions enormously complicates the problem.
I plan to keep reading through this and report back with any useful findings.
I'll continue to update this section with edits showing my work in progress when I resume work tomorrow if no one beats me to it in the meantime.
Context
I'm attempting to improve a motion profile for some linear actuators that are present in an art installation that I'm working on in a small team.
Previously, the linear actuator was driven using a constant acceleration selected by us. We could achieve fast movement nicely with high acceleration, and we could achieve slow movement nicely with slow acceleration, however slow movement with a high acceleration resulted in a lot of "chatter" from the motor. The idea is to apply a constant jerk rather than a constant acceleration to achieve smoother behavior at both low and high speeds.
I think my implementation is nearing completion, however, I've just noticed that my current arrival distance function (above) does not account for initial acceleration. As a result, the arrival distance appears accurate at high velocities, however, is very inaccurate at low velocities with high acceleration. This error results in late deceleration, which results in overshooting, which in turn results in the motor eternally oscillating around the target position. I believe a proper solution for arrival distance will at least take us a step closer to the behavior we wish to achieve.
Any assistance/guidance is greatly appreciated!