Directory: | ./ |
---|---|
File: | include/hpp/bezier-com-traj/data.hh |
Date: | 2025-03-18 04:20:50 |
Exec | Total | Coverage | |
---|---|---|---|
Lines: | 45 | 45 | 100.0% |
Branches: | 41 | 82 | 50.0% |
Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Copyright 2018, LAAS-CNRS | ||
3 | * Author: Steve Tonneau | ||
4 | */ | ||
5 | |||
6 | #ifndef BEZIER_COM_TRAJ_LIB_DATA_H | ||
7 | #define BEZIER_COM_TRAJ_LIB_DATA_H | ||
8 | |||
9 | #include <ndcurves/bezier_curve.h> | ||
10 | |||
11 | #include <Eigen/Dense> | ||
12 | #include <hpp/bezier-com-traj/definitions.hh> | ||
13 | #include <hpp/bezier-com-traj/flags.hh> | ||
14 | #include <hpp/bezier-com-traj/local_config.hh> | ||
15 | #include <hpp/bezier-com-traj/solver/solver-abstract.hpp> | ||
16 | #include <hpp/bezier-com-traj/utils.hh> | ||
17 | #include <hpp/centroidal-dynamics/centroidal_dynamics.hh> | ||
18 | #include <vector> | ||
19 | |||
20 | namespace bezier_com_traj { | ||
21 | /** | ||
22 | * @brief Contact data contains all the contact information | ||
23 | * relative to a contact phase: contact points and normals | ||
24 | * (within Equilibrium object), as well as any additional | ||
25 | * kinematic and angular constraints. | ||
26 | */ | ||
27 | struct BEZIER_COM_TRAJ_DLLAPI ContactData { | ||
28 | 116 | ContactData() | |
29 | 116 | : contactPhase_(0), | |
30 |
1/2✓ Branch 2 taken 116 times.
✗ Branch 3 not taken.
|
116 | Kin_(Eigen::Matrix3d::Zero()), |
31 |
2/4✓ Branch 1 taken 116 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 116 times.
✗ Branch 5 not taken.
|
116 | kin_(VectorX::Zero(0)), |
32 |
2/4✓ Branch 1 taken 116 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 116 times.
✗ Branch 5 not taken.
|
116 | Ang_(Eigen::Matrix3d::Zero()), |
33 |
2/4✓ Branch 1 taken 116 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 116 times.
✗ Branch 5 not taken.
|
116 | ang_(VectorX::Zero(0)) {} |
34 | |||
35 | 209 | ContactData(const ContactData& other) | |
36 | 418 | : contactPhase_( | |
37 |
1/2✓ Branch 2 taken 209 times.
✗ Branch 3 not taken.
|
209 | new centroidal_dynamics::Equilibrium(*(other.contactPhase_))), |
38 | 209 | Kin_(other.Kin_), | |
39 |
1/2✓ Branch 1 taken 209 times.
✗ Branch 2 not taken.
|
209 | kin_(other.kin_), |
40 |
1/2✓ Branch 1 taken 209 times.
✗ Branch 2 not taken.
|
209 | Ang_(other.Ang_), |
41 |
1/2✓ Branch 1 taken 209 times.
✗ Branch 2 not taken.
|
209 | ang_(other.ang_) {} |
42 | |||
43 | 18 | ContactData(centroidal_dynamics::Equilibrium* contactPhase) | |
44 | 18 | : contactPhase_(contactPhase), | |
45 |
1/2✓ Branch 2 taken 18 times.
✗ Branch 3 not taken.
|
18 | Kin_(Eigen::Matrix3d::Zero()), |
46 |
2/4✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 5 not taken.
|
18 | kin_(VectorX::Zero(0)), |
47 |
2/4✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 5 not taken.
|
18 | Ang_(Eigen::Matrix3d::Zero()), |
48 |
2/4✓ Branch 1 taken 18 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 18 times.
✗ Branch 5 not taken.
|
18 | ang_(VectorX::Zero(0)) {} |
49 | 343 | ~ContactData() {} | |
50 | |||
51 | centroidal_dynamics::Equilibrium* contactPhase_; | ||
52 | MatrixX3 Kin_; // inequality kinematic constraints | ||
53 | VectorX kin_; | ||
54 | MatrixX3 Ang_; // inequality angular momentum constraints | ||
55 | VectorX ang_; | ||
56 | }; | ||
57 | |||
58 | /** | ||
59 | * @brief Used to define the constraints on the trajectory generation problem. | ||
60 | * Flags are used to constrain initial and terminal com positions an | ||
61 | * derivatives. Additionally, the maximum acceleration can be bounded. | ||
62 | */ | ||
63 | struct BEZIER_COM_TRAJ_DLLAPI Constraints { | ||
64 | 41 | Constraints() | |
65 | 41 | : flag_(INIT_POS | INIT_VEL | END_VEL | END_POS), | |
66 | 41 | constraintAcceleration_(false), | |
67 | 41 | maxAcceleration_(10.), | |
68 | 41 | reduce_h_(1e-3) {} | |
69 | |||
70 | Constraints(ConstraintFlag flag) | ||
71 | : flag_(flag), | ||
72 | constraintAcceleration_(false), | ||
73 | maxAcceleration_(10.), | ||
74 | reduce_h_(1e-3) {} | ||
75 | |||
76 | 41 | ~Constraints() {} | |
77 | |||
78 | ConstraintFlag flag_; | ||
79 | bool constraintAcceleration_; | ||
80 | double maxAcceleration_; | ||
81 | double reduce_h_; | ||
82 | }; | ||
83 | |||
84 | /** | ||
85 | * @brief Defines all the inputs of the problem: | ||
86 | * Initial and terminal constraints, as well as selected | ||
87 | * cost functions. Also,a list of ContactData defines the | ||
88 | * different phases of the problem. While the method | ||
89 | * can handle any phase greater than one, using more | ||
90 | * than three phases is probably too constraining. | ||
91 | */ | ||
92 | struct BEZIER_COM_TRAJ_DLLAPI ProblemData { | ||
93 | 40 | ProblemData() | |
94 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | : c0_(point_t::Zero()), |
95 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | dc0_(point_t::Zero()), |
96 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | ddc0_(point_t::Zero()), |
97 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | j0_(point_t::Zero()), |
98 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | c1_(point_t::Zero()), |
99 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | dc1_(point_t::Zero()), |
100 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | ddc1_(point_t::Zero()), |
101 |
2/4✓ Branch 1 taken 40 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 40 times.
✗ Branch 5 not taken.
|
40 | j1_(point_t::Zero()), |
102 | 40 | useAngularMomentum_(false), | |
103 | 40 | costFunction_(ACCELERATION), | |
104 |
1/2✓ Branch 2 taken 40 times.
✗ Branch 3 not taken.
|
80 | representation_(DOUBLE_DESCRIPTION) {} |
105 | |||
106 | std::vector<ContactData> contacts_; | ||
107 | point_t c0_, dc0_, ddc0_, j0_, c1_, dc1_, ddc1_, j1_; | ||
108 | point_t l0_; | ||
109 | bool useAngularMomentum_; | ||
110 | Constraints constraints_; | ||
111 | CostFunction costFunction_; | ||
112 | GIWCRepresentation representation_; | ||
113 | }; | ||
114 | |||
115 | typedef solvers::ResultData ResultData; | ||
116 | |||
117 | /** | ||
118 | * @brief Specialized ResultData that computes the Bezier curves | ||
119 | * corresponding to the computed trajectory | ||
120 | */ | ||
121 | struct BEZIER_COM_TRAJ_DLLAPI ResultDataCOMTraj : public ResultData { | ||
122 | 113 | ResultDataCOMTraj() | |
123 | 113 | : ResultData(), | |
124 |
1/2✓ Branch 1 taken 113 times.
✗ Branch 2 not taken.
|
113 | c_of_t_(bezier_t::zero(3)), |
125 |
1/2✓ Branch 1 taken 113 times.
✗ Branch 2 not taken.
|
113 | dL_of_t_(bezier_t::zero(3)), |
126 |
2/4✓ Branch 1 taken 113 times.
✗ Branch 2 not taken.
✓ Branch 4 taken 113 times.
✗ Branch 5 not taken.
|
113 | dc1_(point_t::Zero()), |
127 |
2/4✓ Branch 2 taken 113 times.
✗ Branch 3 not taken.
✓ Branch 5 taken 113 times.
✗ Branch 6 not taken.
|
226 | ddc1_(point_t::Zero()) {} |
128 | 116 | ~ResultDataCOMTraj() {} | |
129 | |||
130 | bezier_t c_of_t_; // center of mass trajectory | ||
131 | bezier_t dL_of_t_; // angular momentum derivative trajectory | ||
132 | point_t dc1_; // terminal velocity | ||
133 | point_t ddc1_; // terminal acceleration | ||
134 | }; | ||
135 | } // end namespace bezier_com_traj | ||
136 | |||
137 | #endif | ||
138 |