GCC Code Coverage Report


Directory: ./
File: unittest/factory/actuation.cpp
Date: 2025-06-03 08:14:12
Exec Total Coverage
Lines: 0 74 0.0%
Functions: 0 4 0.0%
Branches: 0 99 0.0%

Line Branch Exec Source
1 ///////////////////////////////////////////////////////////////////////////////
2 // BSD 3-Clause License
3 //
4 // Copyright (C) 2019-2025, University of Edinburgh, Heriot-Watt University
5 // Copyright note valid unless otherwise stated in individual files.
6 // All rights reserved.
7 ///////////////////////////////////////////////////////////////////////////////
8
9 #include "actuation.hpp"
10
11 #include "crocoddyl/core/actuation/actuation-squashing.hpp"
12 #include "crocoddyl/core/actuation/squashing-base.hpp"
13 #include "crocoddyl/core/actuation/squashing/smooth-sat.hpp"
14 #include "crocoddyl/multibody/actuations/floating-base-thrusters.hpp"
15 #include "crocoddyl/multibody/actuations/floating-base.hpp"
16 #include "crocoddyl/multibody/actuations/full.hpp"
17
18 namespace crocoddyl {
19 namespace unittest {
20
21 const std::vector<ActuationModelTypes::Type> ActuationModelTypes::all(
22 ActuationModelTypes::init_all());
23
24 ✗ std::ostream& operator<<(std::ostream& os, ActuationModelTypes::Type type) {
25 ✗ switch (type) {
26 ✗ case ActuationModelTypes::ActuationModelFull:
27 ✗ os << "ActuationModelFull";
28 ✗ break;
29 ✗ case ActuationModelTypes::ActuationModelFloatingBase:
30 ✗ os << "ActuationModelFloatingBase";
31 ✗ break;
32 ✗ case ActuationModelTypes::ActuationModelFloatingBaseThrusters:
33 ✗ os << "ActuationModelFloatingBaseThrusters";
34 ✗ break;
35 ✗ case ActuationModelTypes::ActuationModelSquashingFull:
36 ✗ os << "ActuationModelSquashingFull";
37 ✗ break;
38 ✗ case ActuationModelTypes::NbActuationModelTypes:
39 ✗ os << "NbActuationModelTypes";
40 ✗ break;
41 ✗ default:
42 ✗ break;
43 }
44 ✗ return os;
45 }
46
47 ✗ ActuationModelFactory::ActuationModelFactory() {}
48 ✗ ActuationModelFactory::~ActuationModelFactory() {}
49
50 std::shared_ptr<crocoddyl::ActuationModelAbstract>
51 ✗ ActuationModelFactory::create(ActuationModelTypes::Type actuation_type,
52 StateModelTypes::Type state_type) const {
53 ✗ std::shared_ptr<crocoddyl::ActuationModelAbstract> actuation;
54 ✗ StateModelFactory factory;
55 ✗ std::shared_ptr<crocoddyl::StateAbstract> state = factory.create(state_type);
56 ✗ std::shared_ptr<crocoddyl::StateMultibody> state_multibody;
57 // Thruster objects
58 ✗ std::vector<crocoddyl::Thruster> ps;
59 ✗ const double d_cog = 0.1525;
60 ✗ const double cf = 6.6e-5;
61 ✗ const double cm = 1e-6;
62 ✗ pinocchio::SE3 p1(Eigen::Matrix3d::Identity(), Eigen::Vector3d(d_cog, 0, 0));
63 ✗ pinocchio::SE3 p2(Eigen::Matrix3d::Identity(), Eigen::Vector3d(0, d_cog, 0));
64 ✗ pinocchio::SE3 p3(Eigen::Matrix3d::Identity(), Eigen::Vector3d(-d_cog, 0, 0));
65 ✗ pinocchio::SE3 p4(Eigen::Matrix3d::Identity(), Eigen::Vector3d(0, -d_cog, 0));
66 ✗ ps.push_back(crocoddyl::Thruster(p1, cm / cf, crocoddyl::ThrusterType::CCW));
67 ✗ ps.push_back(crocoddyl::Thruster(p2, cm / cf, crocoddyl::ThrusterType::CW));
68 ✗ ps.push_back(crocoddyl::Thruster(p3, cm / cf, crocoddyl::ThrusterType::CW));
69 ✗ ps.push_back(crocoddyl::Thruster(p4, cm / cf, crocoddyl::ThrusterType::CCW));
70 // Actuation Squashing objects
71 ✗ std::shared_ptr<crocoddyl::ActuationModelAbstract> act;
72 ✗ std::shared_ptr<crocoddyl::SquashingModelSmoothSat> squash;
73 ✗ Eigen::VectorXd lb;
74 ✗ Eigen::VectorXd ub;
75 ✗ switch (actuation_type) {
76 ✗ case ActuationModelTypes::ActuationModelFull:
77 state_multibody =
78 ✗ std::static_pointer_cast<crocoddyl::StateMultibody>(state);
79 actuation =
80 ✗ std::make_shared<crocoddyl::ActuationModelFull>(state_multibody);
81 ✗ break;
82 ✗ case ActuationModelTypes::ActuationModelFloatingBase:
83 state_multibody =
84 ✗ std::static_pointer_cast<crocoddyl::StateMultibody>(state);
85 ✗ actuation = std::make_shared<crocoddyl::ActuationModelFloatingBase>(
86 ✗ state_multibody);
87 ✗ break;
88 ✗ case ActuationModelTypes::ActuationModelFloatingBaseThrusters:
89 state_multibody =
90 ✗ std::static_pointer_cast<crocoddyl::StateMultibody>(state);
91 actuation =
92 ✗ std::make_shared<crocoddyl::ActuationModelFloatingBaseThrusters>(
93 ✗ state_multibody, ps);
94 ✗ break;
95 ✗ case ActuationModelTypes::ActuationModelSquashingFull:
96 state_multibody =
97 ✗ std::static_pointer_cast<crocoddyl::StateMultibody>(state);
98
99 ✗ act = std::make_shared<crocoddyl::ActuationModelFull>(state_multibody);
100
101 ✗ lb = Eigen::VectorXd::Zero(state->get_nv());
102 ✗ ub = Eigen::VectorXd::Zero(state->get_nv());
103 ✗ lb.fill(-100.0);
104 ✗ ub.fill(100.0);
105 ✗ squash = std::make_shared<crocoddyl::SquashingModelSmoothSat>(
106 ✗ lb, ub, state->get_nv());
107
108 ✗ actuation = std::make_shared<crocoddyl::ActuationSquashingModel>(
109 ✗ act, squash, state->get_nv());
110 ✗ break;
111 ✗ default:
112 ✗ throw_pretty(__FILE__ ":\n Construct wrong ActuationModelTypes::Type");
113 break;
114 }
115 ✗ return actuation;
116 ✗ }
117
118 } // namespace unittest
119 } // namespace crocoddyl
120