119 pinocchio::Model model_;
120 pinocchio::Data data_;
122 LegIG left_leg_, right_leg_;
126 Eigen::Vector3d com_from_waist_;
131 Eigen::Vector3d error_, com_temp_;
132 Eigen::VectorXd posture_temp_;
133 Eigen::Matrix3d baseRotation_temp_;
139 void derivatives(
const Eigen::VectorXd &q1,
const Eigen::VectorXd &q3,
140 Eigen::VectorXd &posture, Eigen::VectorXd &velocity,
141 Eigen::VectorXd &acceleration,
const double &dt);
143 pinocchio::SE3 computeBase(
const Eigen::Vector3d &com,
144 const pinocchio::SE3 &leftFoot,
145 const pinocchio::SE3 &rightFoot);
147 pinocchio::SE3 computeBase(
const Eigen::Vector3d &com,
148 const Eigen::Matrix3d &baseRotation);
150 void configureLegs();
162 return left_leg_.get_settings();
165 return right_leg_.get_settings();
168 const Eigen::VectorXd &
getQ0() {
return q0_; }
169 void setQ0(
const Eigen::VectorXd q0) { q0_ = q0; }
176 const Eigen::Vector3d &
getCoM() {
return dynamics_.getCoM(); }
178 const Eigen::Vector3d &
getVCoM() {
return dynamics_.getVCoM(); }
180 const Eigen::Vector3d &
getACoM() {
return dynamics_.getACoM(); }
182 const Eigen::Vector3d &
getAM() {
return dynamics_.getAM(); }
184 const Eigen::Vector2d &
getCoP() {
return dynamics_.getCoP(); }
186 const Eigen::Vector2d &
getNL() {
return dynamics_.getNL(); }
190 void solve(
const Eigen::Vector3d &com,
const pinocchio::SE3 &leftFoot,
191 const pinocchio::SE3 &rightFoot,
const Eigen::VectorXd &q0,
192 Eigen::VectorXd &posture,
const double &tolerance = 1e-10,
193 const int &max_iterations = 0);
195 void solve(
const Eigen::Vector3d &com,
const Eigen::Isometry3d &leftFeet,
196 const Eigen::Isometry3d &rightFeet,
const Eigen::VectorXd &q0,
197 Eigen::VectorXd &posture,
const double &tolerance = 1e-10,
198 const int &max_iterations = 0);
200 void solve(
const Eigen::Vector3d &com,
const Eigen::Matrix3d &baseRotation,
201 const pinocchio::SE3 &leftFoot,
const pinocchio::SE3 &rightFoot,
202 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
203 const double &tolerance = 1e-10,
const int &max_iterations = 0);
205 void solve(
const Eigen::Vector3d &com,
const Eigen::Matrix3d &baseRotation,
206 const Eigen::Isometry3d &leftFoot,
207 const Eigen::Isometry3d &rightFoot,
const Eigen::VectorXd &q0,
208 Eigen::VectorXd &posture,
const double &tolerance = 1e-10,
209 const int &max_iterations = 0);
211 void solve(
const pinocchio::SE3 &base,
const pinocchio::SE3 &leftFoot,
212 const pinocchio::SE3 &rightFoot,
const Eigen::VectorXd &q0,
213 Eigen::VectorXd &posture);
215 void solve(
const Eigen::Isometry3d &base,
const Eigen::Isometry3d &leftFoot,
216 const Eigen::Isometry3d &rightFoot,
const Eigen::VectorXd &q0,
217 Eigen::VectorXd &posture);
219 void solve(
const std::array<Eigen::Vector3d, 3> &coms,
220 const std::array<pinocchio::SE3, 3> &leftFeet,
221 const std::array<pinocchio::SE3, 3> &rightFeet,
222 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
223 Eigen::VectorXd &velocity, Eigen::VectorXd &acceleration,
224 const double &dt,
const double &tolerance = 1e-10,
225 const int &max_iterations = 0);
227 void solve(
const std::array<Eigen::Vector3d, 3> &coms,
228 const std::array<Eigen::Isometry3d, 3> &leftFeet,
229 const std::array<Eigen::Isometry3d, 3> &rightFeet,
230 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
231 Eigen::VectorXd &velocity, Eigen::VectorXd &acceleration,
232 const double &dt,
const double &tolerance = 1e-10,
233 const int &max_iterations = 0);
235 void solve(
const std::array<Eigen::Vector3d, 3> &coms,
236 const std::array<Eigen::Matrix3d, 3> &baseRotations,
237 const std::array<pinocchio::SE3, 3> &leftFeet,
238 const std::array<pinocchio::SE3, 3> &rightFeet,
239 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
240 Eigen::VectorXd &velocity, Eigen::VectorXd &acceleration,
241 const double &dt,
const double &tolerance = 1e-10,
242 const int &max_iterations = 0);
244 void solve(
const std::array<Eigen::Vector3d, 3> &coms,
245 const std::array<Eigen::Matrix3d, 3> &baseRotations,
246 const std::array<Eigen::Isometry3d, 3> &leftFeet,
247 const std::array<Eigen::Isometry3d, 3> &rightFeet,
248 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
249 Eigen::VectorXd &velocity, Eigen::VectorXd &acceleration,
250 const double &dt,
const double &tolerance = 1e-10,
251 const int &max_iterations = 0);
253 void solve(
const std::array<pinocchio::SE3, 3> &bases,
254 const std::array<pinocchio::SE3, 3> &leftFeet,
255 const std::array<pinocchio::SE3, 3> &rightFeet,
256 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
257 Eigen::VectorXd &velocity, Eigen::VectorXd &acceleration,
260 void solve(
const std::array<Eigen::Isometry3d, 3> &bases,
261 const std::array<Eigen::Isometry3d, 3> &leftFeet,
262 const std::array<Eigen::Isometry3d, 3> &rightFeet,
263 const Eigen::VectorXd &q0, Eigen::VectorXd &posture,
264 Eigen::VectorXd &velocity, Eigen::VectorXd &acceleration,
272 const pinocchio::SE3 &leftFoot,
273 const pinocchio::SE3 &rightFoot,
274 const Eigen::VectorXd &q0,
275 const double &tolerance = 1e-10,
276 const int &max_iterations = 20);
279 const Eigen::Isometry3d &leftFoot,
280 const Eigen::Isometry3d &rightFoot,
281 const Eigen::VectorXd &q0,
282 const double &tolerance = 1e-10,
283 const int &max_iterations = 20);
286 const Eigen::VectorXd &velocity,
287 const Eigen::VectorXd &acceleration,
288 const Eigen::Matrix<double, 6, 1> &externalWrench =
289 Eigen::Matrix<double, 6, 1>::Zero(),
290 bool flatHorizontalGround =
true);
292 void computeNL(
const double &w,
const Eigen::VectorXd &posture,
293 const Eigen::VectorXd &velocity,
294 const Eigen::VectorXd &acceleration,
295 const Eigen::Matrix<double, 6, 1> &externalWrench =
296 Eigen::Matrix<double, 6, 1>::Zero(),
297 bool flatHorizontalGround =
true);