Borrowed value descriptor for a TOPP3 problem solved from C. More...
#include <formulation.h>
Data Fields | |
| struct CoppRobot * | robot |
| Mutable robot handle that owns station-indexed constraint storage. | |
| size_t | idx_s_start |
| Start station index. | |
| struct CoppSliceF64 | a_linearization |
| Reference profile a[k] used to linearize third-order constraints. | |
| double | a_start |
| Boundary value a(idx_s_start) = dot{s}^2. | |
| double | a_final |
| Boundary value a(idx_s_final) = dot{s}^2. | |
| double | b_start |
| Boundary value b(idx_s_start) = ddot{s}. | |
| double | b_final |
| Boundary value b(idx_s_final) = ddot{s}. | |
| size_t | num_stationary_max_start |
| User-input stationary upper bound at the start. | |
| size_t | num_stationary_max_end |
| User-input stationary upper bound at the end. | |
| double | a_linearization_floor |
| Denominator floor used when linearizing third-order constraints. | |
| struct CoppSliceF64 | b_linearization |
| Optional path acceleration b[k] paired with a_linearization. | |
Borrowed value descriptor for a TOPP3 problem solved from C.
This is not an owning handle. robot, a_linearization, and b_linearization are borrowed only during the solver call. Building the internal TOPP3 problem mutates the robot's internal linearized third-order constraint cache.
The example below builds a TOPP3 descriptor using a seed a profile for third-order constraint linearization.
b_linearization is the last field, so a positional initializer that omits it, such as the one above, leaves it empty and selects direct linearization. The example below refines around a previously solved third-order profile with adaptive linearization.
Definition at line 289 of file formulation.h.
| struct CoppRobot* Topp3Problem::robot |
Mutable robot handle that owns station-indexed constraint storage.
Definition at line 293 of file formulation.h.
| size_t Topp3Problem::idx_s_start |
Start station index.
The final index is derived from a_linearization.len - 1.
Definition at line 298 of file formulation.h.
| struct CoppSliceF64 Topp3Problem::a_linearization |
Reference profile a[k] used to linearize third-order constraints.
Definition at line 302 of file formulation.h.
| double Topp3Problem::a_start |
Boundary value a(idx_s_start) = dot{s}^2.
Definition at line 306 of file formulation.h.
| double Topp3Problem::a_final |
Boundary value a(idx_s_final) = dot{s}^2.
Definition at line 310 of file formulation.h.
| double Topp3Problem::b_start |
Boundary value b(idx_s_start) = ddot{s}.
Definition at line 314 of file formulation.h.
| double Topp3Problem::b_final |
Boundary value b(idx_s_final) = ddot{s}.
Definition at line 318 of file formulation.h.
| size_t Topp3Problem::num_stationary_max_start |
User-input stationary upper bound at the start.
Definition at line 322 of file formulation.h.
| size_t Topp3Problem::num_stationary_max_end |
User-input stationary upper bound at the end.
Definition at line 326 of file formulation.h.
| double Topp3Problem::a_linearization_floor |
Denominator floor used when linearizing third-order constraints.
Definition at line 330 of file formulation.h.
| struct CoppSliceF64 Topp3Problem::b_linearization |
Optional path acceleration b[k] paired with a_linearization.
Leave empty (data = NULL, len = 0, as zero-initialization does) to linearize every third-order row of station k at a_linearization[k]. When non-empty, each row is instead anchored where that row is nearly active at the feasible state (a_linearization, b_linearization), so a slack row is anchored high and a tight one stays near the state. It must then have the same length as a_linearization, otherwise the solver returns COPP_STATUS_SOLVER_INVALID_INPUT when it builds the problem, and the two must be the a and b of one previously solved third-order profile; the b of a TOPP2 profile is discretized differently and must not be used.
Prefer this adaptive mode when a spans a wide range over the window, and especially when a can approach zero (about 1e-10): anchoring both rows of one axis at the same small a_linearization[k] cancels b and c and leaves a[k] <= 3 * a_linearization[k]. On profiles that stay well away from zero the two modes agree closely, and leaving this field empty is cheaper.
Definition at line 352 of file formulation.h.