aligator  0.14.0
A primal-dual augmented Lagrangian-type solver for nonlinear trajectory optimization.
Loading...
Searching...
No Matches
frame-collision.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "./fwd.hpp"
5
6#include <pinocchio/multibody/geometry.hpp>
7#include <pinocchio/multibody/model.hpp>
8#include <pinocchio/multibody/frame.hpp>
9#include <pinocchio/algorithm/geometry.hpp>
10
12
13namespace aligator {
14
15template <typename Scalar> struct FrameCollisionDataTpl;
16
17template <typename _Scalar>
19public:
20 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
21 using Scalar = _Scalar;
24 using BaseData = typename Base::Data;
25 using Model = pinocchio::ModelTpl<Scalar>;
26 using SE3 = pinocchio::SE3Tpl<Scalar>;
28 using GeometryModel = pinocchio::GeometryModel;
29
32
33 FrameCollisionResidualTpl(const int ndx, const int nu, const Model &model,
34 const GeometryModel &geom_model,
35 const pinocchio::PairIndex frame_pair_id)
36 : Base(ndx, nu, 1)
37 , pin_model_(model)
38 , geom_model_(geom_model)
39 , frame_pair_id_(frame_pair_id) {
40 if (frame_pair_id >= geom_model_.collisionPairs.size()) {
41 ALIGATOR_OUT_OF_RANGE_ERROR(
42 "Provided collision pair index {:d} is not valid "
43 "(geom model has {:d} pairs).",
44 frame_pair_id, geom_model.collisionPairs.size());
45 }
47 geom_model
48 .geometryObjects[geom_model.collisionPairs[frame_pair_id_].first]
49 .parentFrame;
51 geom_model
52 .geometryObjects[geom_model.collisionPairs[frame_pair_id_].second]
53 .parentFrame;
54 }
55
56 void evaluate(const ConstVectorRef &x, BaseData &data) const;
57
58 void computeJacobians(const ConstVectorRef &x, BaseData &data) const;
59
60 shared_ptr<BaseData> createData() const {
61 return std::make_shared<Data>(*this);
62 }
63
64protected:
65 pinocchio::PairIndex frame_pair_id_;
66 pinocchio::FrameIndex frame_id1_;
67 pinocchio::FrameIndex frame_id2_;
68};
69
70template <typename Scalar>
72 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
74 using typename Base::Matrix6Xs;
75 using typename Base::Vector3s;
76 using SE3 = pinocchio::SE3Tpl<Scalar>;
77
78 pinocchio::DataTpl<Scalar> pin_data_;
79 pinocchio::GeometryData geom_data;
81 Matrix6Xs Jcol_;
82 Matrix6Xs Jcol2_;
87 Vector3s distance_;
88 Vector3s distance2_;
89
91};
92
93} // namespace aligator
94
95#ifdef ALIGATOR_ENABLE_TEMPLATE_INSTANTIATION
96#include "aligator/modelling/multibody/frame-collision.txx"
97#endif
Main package namespace.
pinocchio::GeometryData geom_data
FrameCollisionDataTpl(const FrameCollisionResidualTpl< Scalar > &model)
pinocchio::DataTpl< Scalar > pin_data_
pinocchio::SE3Tpl< Scalar > SE3
Matrix6Xs Jcol_
Jacobian of the collision point.
StageFunctionDataTpl< Scalar > Base
Vector3s distance_
Distance from nearest point to joint for each collision frame.
SE3 jointToP1_
Placement of collision point to joint.
pinocchio::SE3Tpl< Scalar > SE3
shared_ptr< BaseData > createData() const
Instantiate a Data object.
FrameCollisionResidualTpl(const int ndx, const int nu, const Model &model, const GeometryModel &geom_model, const pinocchio::PairIndex frame_pair_id)
void computeJacobians(const ConstVectorRef &x, BaseData &data) const
pinocchio::ModelTpl< Scalar > Model
FrameCollisionDataTpl< Scalar > Data
void evaluate(const ConstVectorRef &x, BaseData &data) const
pinocchio::GeometryModel GeometryModel
StageFunctionDataTpl(const int ndx, const int nu, const int nr)
const int nu
Control dimension.
StageFunctionDataTpl< Scalar > Data
Represents unary functions of the form , with no control (or next-state) arguments.
StageFunctionTpl< Scalar > Base