COPP C++ API
C++ interface for COPP trajectory optimization
Loading...
Searching...
No Matches
topp3.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <cstdint>
5#include <optional>
6#include <utility>
7#include <vector>
8
9#include "copp/clarabel.hpp"
10#include "copp/core.hpp"
12#include "copp/robot.hpp"
13
14namespace copp::solver::topp3
15{
16
25 {
26 std::size_t start = 1;
27 std::size_t end = 1;
28
29 static constexpr StationaryBounds both(std::size_t value) noexcept
30 {
31 return StationaryBounds{value, value};
32 }
33 };
34
43 {
44 public:
60 std::size_t idx_s_start = 0,
62 StationaryBounds num_stationary_max = {},
63 double a_linearization_floor = 1.0e-10);
64
68 std::size_t idx_s_start,
70 std::size_t symmetric_num_stationary_max,
71 double a_linearization_floor = 1.0e-10);
72
73 ConstraintsRef constraints() const noexcept { return constraints_; }
74 const std::vector<double> &a_linearization() const noexcept { return a_linearization_; }
75 std::size_t idx_s_start() const noexcept { return idx_s_start_; }
76 std::size_t idx_s_final() const noexcept { return idx_s_final_; }
77 Boundary3 boundary() const noexcept { return boundary_; }
78 StationaryBounds num_stationary_max() const noexcept { return num_stationary_max_; }
79 StationaryBounds num_stationary() const noexcept { return num_stationary_; }
80 double a_linearization_floor() const noexcept { return a_linearization_floor_; }
81 std::size_t s_len() const noexcept { return a_linearization_.size(); }
82
83 private:
84 ConstraintsRef constraints_;
85 std::vector<double> a_linearization_;
86 std::size_t idx_s_start_ = 0;
87 std::size_t idx_s_final_ = 0;
88 Boundary3 boundary_;
89 StationaryBounds num_stationary_max_;
90 StationaryBounds num_stationary_;
91 double a_linearization_floor_ = 1.0e-10;
92 };
93
104 struct Result
105 {
106 std::optional<Profile3rd> profile;
107 std::vector<double> x;
108 std::vector<double> z;
109 std::vector<double> s;
111 double obj_val = 0.0;
112 double obj_val_dual = 0.0;
113 double solve_time = 0.0;
114 std::uint32_t iterations = 0;
115 double r_prim = 0.0;
116 double r_dual = 0.0;
118 std::optional<double> objective_value;
119 std::vector<double> objective_terms;
120
121 bool has_profile() const noexcept { return profile.has_value(); }
122 };
123
124} // namespace copp::solver::topp3
Non-owning view of a Rust-backed constraint buffer.
Definition robot.hpp:86
Non-owning view of a contiguous one-dimensional array.
Definition core.hpp:139
double a_linearization_floor() const noexcept
Definition topp3.hpp:80
std::size_t idx_s_start() const noexcept
Definition topp3.hpp:75
Boundary3 boundary() const noexcept
Definition topp3.hpp:77
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)
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)
StationaryBounds num_stationary_max() const noexcept
Definition topp3.hpp:78
std::size_t s_len() const noexcept
Definition topp3.hpp:81
const std::vector< double > & a_linearization() const noexcept
Definition topp3.hpp:74
StationaryBounds num_stationary() const noexcept
Definition topp3.hpp:79
std::size_t idx_s_final() const noexcept
Definition topp3.hpp:76
ConstraintsRef constraints() const noexcept
Definition topp3.hpp:73
#define COPP_API
Definition core.hpp:23
SolverStatus
Clarabel termination status reported by expert SOCP results.
Definition clarabel.hpp:32
Shared third-order problem, boundary, stationary-bound, and expert result types used by TOPP3-LP,...
Third-order endpoint boundary values.
Definition core.hpp:87
Linear solver metadata captured from Clarabel after a solve.
Definition clarabel.hpp:49
Expert third-order Clarabel result.
Definition topp3.hpp:105
std::vector< double > x
Definition topp3.hpp:107
std::uint32_t iterations
Definition topp3.hpp:114
std::vector< double > objective_terms
Definition topp3.hpp:119
std::vector< double > s
Definition topp3.hpp:109
bool has_profile() const noexcept
Definition topp3.hpp:121
std::optional< Profile3rd > profile
Definition topp3.hpp:106
std::vector< double > z
Definition topp3.hpp:108
std::optional< double > objective_value
Definition topp3.hpp:118
clarabel::LinearSolverInfo linsolver
Definition topp3.hpp:117
clarabel::SolverStatus solver_status
Definition topp3.hpp:110
User-supplied upper bound for stationary boundary intervals.
Definition topp3.hpp:25
static constexpr StationaryBounds both(std::size_t value) noexcept
Definition topp3.hpp:29