Crocoddyl
Loading...
Searching...
No Matches
guidance-base.hpp
1
2// BSD 3-Clause License
3//
4// Copyright (C) 2026, Heriot-Watt University
5// Copyright note valid unless otherwise stated in individual files.
6// All rights reserved.
8
9#ifndef CROCODDYL_CORE_GUIDANCE_BASE_HPP_
10#define CROCODDYL_CORE_GUIDANCE_BASE_HPP_
11
12#include "crocoddyl/core/fwd.hpp"
13#include "crocoddyl/core/mathbase.hpp"
14
15namespace crocoddyl {
16
18 public:
19 virtual ~GuidanceModelBase() = default;
20
22};
23
45template <typename _Scalar>
47 public:
48 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
49
50 typedef _Scalar Scalar;
51 typedef MathBaseTpl<Scalar> MathBase;
52 typedef GuidanceDataAbstractTpl<Scalar> GuidanceDataAbstract;
53 typedef typename MathBase::VectorXs VectorXs;
54 typedef typename MathBase::MatrixXs MatrixXs;
55
61 explicit GuidanceModelAbstractTpl(const std::size_t nr);
62 virtual ~GuidanceModelAbstractTpl() = default;
63
69 virtual std::shared_ptr<GuidanceDataAbstract> createData() const;
70
77 virtual void calc(const std::shared_ptr<GuidanceDataAbstract>& data,
78 const Eigen::Ref<const VectorXs>& error) const = 0;
79
86 virtual void calcDiff(const std::shared_ptr<GuidanceDataAbstract>& data,
87 const Eigen::Ref<const VectorXs>& error) const = 0;
88
94 std::size_t get_nr() const;
95
101 virtual void print(std::ostream& os) const;
102
103 protected:
104 void checkErrorDimension(const Eigen::Ref<const VectorXs>& error) const;
105 void checkRateDimension(const Eigen::Ref<const VectorXs>& g) const;
106 void checkJacobianDimension(const Eigen::Ref<const MatrixXs>& Ge) const;
107
108 std::size_t nr_;
109};
110
111template <typename Scalar>
112std::ostream& operator<<(std::ostream& os,
114
125template <typename _Scalar>
127 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
128
129 typedef _Scalar Scalar;
130 typedef MathBaseTpl<Scalar> MathBase;
131 typedef GuidanceModelAbstractTpl<Scalar> GuidanceModelAbstract;
132 typedef typename MathBase::VectorXs VectorXs;
133 typedef typename MathBase::MatrixXs MatrixXs;
134
140 explicit GuidanceDataAbstractTpl(const GuidanceModelAbstract* const model)
141 : g(model->get_nr()), Ge(model->get_nr(), model->get_nr()) {
142 g.setZero();
143 Ge.setZero();
144 }
145 virtual ~GuidanceDataAbstractTpl() = default;
146
147 VectorXs g;
148 MatrixXs Ge;
149};
150
151} // namespace crocoddyl
152
153/* --- Details -------------------------------------------------------------- */
154#include "crocoddyl/core/guidance-base.hxx"
155
156CROCODDYL_DECLARE_EXTERN_TEMPLATE_CLASS(crocoddyl::GuidanceModelAbstractTpl)
157CROCODDYL_DECLARE_EXTERN_TEMPLATE_STRUCT(crocoddyl::GuidanceDataAbstractTpl)
158
159#endif // CROCODDYL_CORE_GUIDANCE_BASE_HPP_
Differentiable mapping from a task error to a desired task rate.
virtual std::shared_ptr< GuidanceDataAbstract > createData() const
Allocate the precomputed guidance data.
virtual void calcDiff(const std::shared_ptr< GuidanceDataAbstract > &data, const Eigen::Ref< const VectorXs > &error) const =0
Compute .
virtual void print(std::ostream &os) const
Print relevant information about the guidance model.
GuidanceModelAbstractTpl(const std::size_t nr)
Initialize the guidance-model dimension.
virtual void calc(const std::shared_ptr< GuidanceDataAbstract > &data, const Eigen::Ref< const VectorXs > &error) const =0
Compute the desired task rate .
std::size_t get_nr() const
Return the error and desired-rate dimension.
Preallocated values and derivatives produced by a guidance model.
GuidanceDataAbstractTpl(const GuidanceModelAbstract *const model)
Allocate guidance data with the size inferred from the model.