GCC Code Coverage Report


Directory: ./
File: unittest/factory/actuation.cpp
Date: 2025-05-13 10:30:51
Exec Total Coverage
Lines: 0 73 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