Crocoddyl
 
Loading...
Searching...
No Matches
quadruped-gaits.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2019-2021, LAAS-CNRS, University of Edinburgh
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_MULTIBODY_UTILS_QUADRUPED_GAITS_HPP_
10#define CROCODDYL_MULTIBODY_UTILS_QUADRUPED_GAITS_HPP_
11
12#include <pinocchio/algorithm/center-of-mass.hpp>
13#include <pinocchio/algorithm/frames.hpp>
14#include <pinocchio/algorithm/kinematics.hpp>
15#include <pinocchio/multibody/frame.hpp>
16#include <pinocchio/multibody/model.hpp>
17#include <pinocchio/spatial/se3.hpp>
18
19#include "crocoddyl/core/activations/weighted-quadratic.hpp"
20#include "crocoddyl/core/fwd.hpp"
21#include "crocoddyl/core/integrator/euler.hpp"
22#include "crocoddyl/core/optctrl/shooting.hpp"
23#include "crocoddyl/core/residuals/control.hpp"
24#include "crocoddyl/multibody/actions/contact-fwddyn.hpp"
25#include "crocoddyl/multibody/actions/impulse-fwddyn.hpp"
26#include "crocoddyl/multibody/actuations/floating-base.hpp"
27#include "crocoddyl/multibody/contacts/contact-3d.hpp"
28#include "crocoddyl/multibody/fwd.hpp"
29#include "crocoddyl/multibody/impulses/impulse-3d.hpp"
30#include "crocoddyl/multibody/residuals/com-position.hpp"
31#include "crocoddyl/multibody/residuals/frame-translation.hpp"
32#include "crocoddyl/multibody/residuals/frame-velocity.hpp"
33#include "crocoddyl/multibody/residuals/state.hpp"
34
35namespace crocoddyl {
36
38 public:
39 SimpleQuadrupedGaitProblem(const pinocchio::Model& rmodel,
40 const std::string& lf_foot,
41 const std::string& rf_foot,
42 const std::string& lh_foot,
43 const std::string& rh_foot);
45
46 std::shared_ptr<crocoddyl::ShootingProblem> createWalkingProblem(
47 const Eigen::VectorXd& x0, const double stepLength,
48 const double stepHeight, const double timeStep,
49 const std::size_t stepKnots, const std::size_t supportKnots);
50
51 std::vector<std::shared_ptr<crocoddyl::ActionModelAbstract> >
52 createFootStepModels(const double timeStep, Eigen::Vector3d& comPos0,
53 std::vector<Eigen::Vector3d>& feetPos0,
54 const double stepLength, const double stepHeight,
55 const std::size_t numKnots,
56 const std::vector<pinocchio::FrameIndex>& supportFootIds,
57 const std::vector<pinocchio::FrameIndex>& swingFootIds);
58
59 std::shared_ptr<ActionModelAbstract> createSwingFootModel(
60 const double timeStep,
61 const std::vector<pinocchio::FrameIndex>& supportFootIds,
62 const Eigen::Vector3d& comTask =
63 Eigen::Vector3d::Constant(std::numeric_limits<double>::infinity()),
64 const std::vector<pinocchio::FrameIndex>& swingFootIds =
65 std::vector<pinocchio::FrameIndex>(),
66 const std::vector<pinocchio::SE3>& swingFootTask =
67 std::vector<pinocchio::SE3>());
68
69 std::shared_ptr<ActionModelAbstract> createFootSwitchModel(
70 const std::vector<pinocchio::FrameIndex>& supportFootIds,
71 const std::vector<pinocchio::FrameIndex>& swingFootIds,
72 const std::vector<pinocchio::SE3>& swingFootTask,
73 const bool pseudoImpulse = false);
74
75 std::shared_ptr<ActionModelAbstract> createPseudoImpulseModel(
76 const std::vector<pinocchio::FrameIndex>& supportFootIds,
77 const std::vector<pinocchio::FrameIndex>& swingFootIds,
78 const std::vector<pinocchio::SE3>& swingFootTask);
79
80 std::shared_ptr<ActionModelAbstract> createImpulseModel(
81 const std::vector<pinocchio::FrameIndex>& supportFootIds,
82 const std::vector<pinocchio::FrameIndex>& swingFootIds,
83 const std::vector<pinocchio::SE3>& ref_swingFootTask);
84
85 const Eigen::VectorXd& get_defaultState() const;
86
87 protected:
88 pinocchio::Model rmodel_;
89 pinocchio::Data rdata_;
90 pinocchio::FrameIndex lf_foot_id_, rf_foot_id_, lh_foot_id_, rh_foot_id_;
91 std::shared_ptr<StateMultibody> state_;
92 std::shared_ptr<ActuationModelFloatingBase> actuation_;
93 bool firtstep_;
94 Eigen::VectorXd defaultstate_;
95};
96} // namespace crocoddyl
97
98#endif // CROCODDYL_MULTIBODY_UTILS_QUADRUPED_GAITS_HPP_