aligator  0.6.1
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
contact-map.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "aligator/fwd.hpp"
4
5namespace aligator {
6
8template <typename _Scalar> struct ContactMapTpl {
9 using Scalar = _Scalar;
11 using PoseVec = StdVectorEigenAligned<Vector3s>;
12
13 ContactMapTpl(const std::vector<bool> &contact_states,
14 const PoseVec &contact_poses)
15 : contact_states_(contact_states), contact_poses_(contact_poses) {
16 if (contact_states.size() != contact_poses.size()) {
18 fmt::format("contact_states and contact_poses should have same size, "
19 "currently ({} and {}).",
20 contact_states.size(), contact_poses.size()));
21 }
22 size_ = contact_states_.size();
23 }
24
25 void addContact(const bool state, const Vector3s &pose) {
26 contact_states_.push_back(state);
27 contact_poses_.push_back(pose);
28 size_ += 1;
29 }
30
31 void removeContact(const size_t i) {
32 if (size_ == 0) {
33 ALIGATOR_RUNTIME_ERROR("ContactMap is empty!");
34 } else {
35 contact_states_.erase(contact_states_.begin() + long(i));
36 contact_poses_.erase(contact_poses_.begin() + long(i));
37 size_ -= 1;
38 }
39 }
40
41 const std::vector<bool> &getContactStates() const { return contact_states_; }
42
43 bool getContactState(const std::size_t i) const { return contact_states_[i]; }
44
45 const PoseVec &getContactPoses() const { return contact_poses_; }
46
47 const Vector3s &getContactPose(const std::size_t i) const {
48 return contact_poses_[i];
49 }
50
51 std::size_t getSize() const { return size_; }
52
53private:
54 std::vector<bool> contact_states_;
55 PoseVec contact_poses_;
56 std::size_t size_;
57};
58
59} // namespace aligator
#define ALIGATOR_RUNTIME_ERROR(msg)
Definition exceptions.hpp:6
#define ALIGATOR_DOMAIN_ERROR(msg)
Forward declarations.
Main package namespace.
Contact map for centroidal costs and dynamics.
const std::vector< bool > & getContactStates() const
const Vector3s & getContactPose(const std::size_t i) const
void removeContact(const size_t i)
StdVectorEigenAligned< Vector3s > PoseVec
std::size_t getSize() const
ContactMapTpl(const std::vector< bool > &contact_states, const PoseVec &contact_poses)
bool getContactState(const std::size_t i) const
const PoseVec & getContactPoses() const
void addContact(const bool state, const Vector3s &pose)