|
| | Problem (ConstraintsRef constraints, Span< const double > a_linearization, std::size_t idx_s_start=0, Boundary3 boundary={}, StationaryBounds num_stationary_max={}, double a_linearization_floor=1.0e-10, Span< const double > b_linearization={}) |
| | Prepare a third-order problem and immediately linearize constraints.
|
| | Problem (ConstraintsRef constraints, Span< const double > a_linearization, std::size_t idx_s_start, Boundary3 boundary, std::size_t symmetric_num_stationary_max, double a_linearization_floor=1.0e-10, Span< const double > b_linearization={}) |
| ConstraintsRef | constraints () const noexcept |
| const std::vector< double > & | a_linearization () const noexcept |
| const std::vector< double > & | b_linearization () const noexcept |
| | Copied b_linearization; empty when direct linearization is used.
|
| std::size_t | idx_s_start () const noexcept |
| std::size_t | idx_s_final () const noexcept |
| Boundary3 | boundary () const noexcept |
| StationaryBounds | num_stationary_max () const noexcept |
| StationaryBounds | num_stationary () const noexcept |
| double | a_linearization_floor () const noexcept |
| std::size_t | s_len () const noexcept |
Prepared TOPP3 problem descriptor.
Construction borrows a ConstraintsRef, owns a copy of a_linearization, infers idx_s_final, and immediately asks Rust to linearize third-order constraints into the underlying constraint cache. The owning Robot or Constraints object must outlive this problem and solver calls using it.
By default every third-order row of a station is linearized directly at a_linearization[k]. Passing a non-empty b_linearization selects adaptive anchoring (Rust LinearizationModeTopp3::GivenFeasibleAdaptive): each row is anchored where it is nearly active at the feasible state (a_linearization, b_linearization). This requires a_linearization and b_linearization to be the a and b of the same previously solved third-order profile, with equal length; a TOPP2 profile discretizes b differently and must not be used. Prefer it when a spans a wide range over the window, and especially when a can approach zero (around 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 well away from zero the default direct linearization is cheaper and nearly identical.
Prepared TOPP3 problem descriptor.
Boundary3 boundary() const noexcept
ConstraintsRef constraints() const noexcept
COPP_API Profile3rd solve(const Problem &problem, const clarabel::Options &options={})
Solve TOPP3-SOCP and return an accepted third-order profile.
Definition at line 62 of file topp3.hpp.