GCC Code Coverage Report | |||||||||||||||||||||
|
|||||||||||||||||||||
Line | Branch | Exec | Source |
1 |
/////////////////////////////////////////////////////////////////////////////// |
||
2 |
// BSD 3-Clause License |
||
3 |
// |
||
4 |
// Copyright (C) 2019-2024, 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/core/utils/exception.hpp" |
||
15 |
#include "crocoddyl/multibody/actuations/floating-base-thrusters.hpp" |
||
16 |
#include "crocoddyl/multibody/actuations/floating-base.hpp" |
||
17 |
#include "crocoddyl/multibody/actuations/full.hpp" |
||
18 |
|||
19 |
namespace crocoddyl { |
||
20 |
namespace unittest { |
||
21 |
|||
22 |
const std::vector<ActuationModelTypes::Type> ActuationModelTypes::all( |
||
23 |
ActuationModelTypes::init_all()); |
||
24 |
|||
25 |
259 |
std::ostream& operator<<(std::ostream& os, ActuationModelTypes::Type type) { |
|
26 |
✓✓✓✓ ✗✗ |
259 |
switch (type) { |
27 |
57 |
case ActuationModelTypes::ActuationModelFull: |
|
28 |
57 |
os << "ActuationModelFull"; |
|
29 |
57 |
break; |
|
30 |
116 |
case ActuationModelTypes::ActuationModelFloatingBase: |
|
31 |
116 |
os << "ActuationModelFloatingBase"; |
|
32 |
116 |
break; |
|
33 |
31 |
case ActuationModelTypes::ActuationModelFloatingBaseThrusters: |
|
34 |
31 |
os << "ActuationModelFloatingBaseThrusters"; |
|
35 |
31 |
break; |
|
36 |
55 |
case ActuationModelTypes::ActuationModelSquashingFull: |
|
37 |
55 |
os << "ActuationModelSquashingFull"; |
|
38 |
55 |
break; |
|
39 |
case ActuationModelTypes::NbActuationModelTypes: |
||
40 |
os << "NbActuationModelTypes"; |
||
41 |
break; |
||
42 |
default: |
||
43 |
break; |
||
44 |
} |
||
45 |
259 |
return os; |
|
46 |
} |
||
47 |
|||
48 |
1709 |
ActuationModelFactory::ActuationModelFactory() {} |
|
49 |
1709 |
ActuationModelFactory::~ActuationModelFactory() {} |
|
50 |
|||
51 |
boost::shared_ptr<crocoddyl::ActuationModelAbstract> |
||
52 |
1709 |
ActuationModelFactory::create(ActuationModelTypes::Type actuation_type, |
|
53 |
StateModelTypes::Type state_type) const { |
||
54 |
1709 |
boost::shared_ptr<crocoddyl::ActuationModelAbstract> actuation; |
|
55 |
✓✗ | 3418 |
StateModelFactory factory; |
56 |
boost::shared_ptr<crocoddyl::StateAbstract> state = |
||
57 |
✓✗ | 3418 |
factory.create(state_type); |
58 |
1709 |
boost::shared_ptr<crocoddyl::StateMultibody> state_multibody; |
|
59 |
// Thruster objects |
||
60 |
3418 |
std::vector<crocoddyl::Thruster> ps; |
|
61 |
1709 |
const double d_cog = 0.1525; |
|
62 |
1709 |
const double cf = 6.6e-5; |
|
63 |
1709 |
const double cm = 1e-6; |
|
64 |
✓✗✓✗ ✓✗ |
1709 |
pinocchio::SE3 p1(Eigen::Matrix3d::Identity(), Eigen::Vector3d(d_cog, 0, 0)); |
65 |
✓✗✓✗ ✓✗ |
1709 |
pinocchio::SE3 p2(Eigen::Matrix3d::Identity(), Eigen::Vector3d(0, d_cog, 0)); |
66 |
✓✗✓✗ ✓✗ |
1709 |
pinocchio::SE3 p3(Eigen::Matrix3d::Identity(), Eigen::Vector3d(-d_cog, 0, 0)); |
67 |
✓✗✓✗ ✓✗ |
1709 |
pinocchio::SE3 p4(Eigen::Matrix3d::Identity(), Eigen::Vector3d(0, -d_cog, 0)); |
68 |
✓✗✓✗ |
1709 |
ps.push_back(crocoddyl::Thruster(p1, cm / cf, crocoddyl::ThrusterType::CCW)); |
69 |
✓✗✓✗ |
1709 |
ps.push_back(crocoddyl::Thruster(p2, cm / cf, crocoddyl::ThrusterType::CW)); |
70 |
✓✗✓✗ |
1709 |
ps.push_back(crocoddyl::Thruster(p3, cm / cf, crocoddyl::ThrusterType::CW)); |
71 |
✓✗✓✗ |
1709 |
ps.push_back(crocoddyl::Thruster(p4, cm / cf, crocoddyl::ThrusterType::CCW)); |
72 |
// Actuation Squashing objects |
||
73 |
1709 |
boost::shared_ptr<crocoddyl::ActuationModelAbstract> act; |
|
74 |
1709 |
boost::shared_ptr<crocoddyl::SquashingModelSmoothSat> squash; |
|
75 |
✓✗ | 3418 |
Eigen::VectorXd lb; |
76 |
✓✗ | 3418 |
Eigen::VectorXd ub; |
77 |
✓✓✓✓ ✗ |
1709 |
switch (actuation_type) { |
78 |
542 |
case ActuationModelTypes::ActuationModelFull: |
|
79 |
state_multibody = |
||
80 |
542 |
boost::static_pointer_cast<crocoddyl::StateMultibody>(state); |
|
81 |
actuation = |
||
82 |
✓✗ | 542 |
boost::make_shared<crocoddyl::ActuationModelFull>(state_multibody); |
83 |
542 |
break; |
|
84 |
692 |
case ActuationModelTypes::ActuationModelFloatingBase: |
|
85 |
state_multibody = |
||
86 |
692 |
boost::static_pointer_cast<crocoddyl::StateMultibody>(state); |
|
87 |
✓✗ | 1384 |
actuation = boost::make_shared<crocoddyl::ActuationModelFloatingBase>( |
88 |
692 |
state_multibody); |
|
89 |
692 |
break; |
|
90 |
196 |
case ActuationModelTypes::ActuationModelFloatingBaseThrusters: |
|
91 |
state_multibody = |
||
92 |
196 |
boost::static_pointer_cast<crocoddyl::StateMultibody>(state); |
|
93 |
actuation = |
||
94 |
✓✗ | 392 |
boost::make_shared<crocoddyl::ActuationModelFloatingBaseThrusters>( |
95 |
196 |
state_multibody, ps); |
|
96 |
196 |
break; |
|
97 |
279 |
case ActuationModelTypes::ActuationModelSquashingFull: |
|
98 |
state_multibody = |
||
99 |
279 |
boost::static_pointer_cast<crocoddyl::StateMultibody>(state); |
|
100 |
|||
101 |
✓✗ | 279 |
act = boost::make_shared<crocoddyl::ActuationModelFull>(state_multibody); |
102 |
|||
103 |
✓✗✓✗ |
279 |
lb = Eigen::VectorXd::Zero(state->get_nv()); |
104 |
✓✗✓✗ |
279 |
ub = Eigen::VectorXd::Zero(state->get_nv()); |
105 |
✓✗ | 279 |
lb.fill(-100.0); |
106 |
✓✗ | 279 |
ub.fill(100.0); |
107 |
279 |
squash = boost::make_shared<crocoddyl::SquashingModelSmoothSat>( |
|
108 |
✓✗ | 279 |
lb, ub, state->get_nv()); |
109 |
|||
110 |
279 |
actuation = boost::make_shared<crocoddyl::ActuationSquashingModel>( |
|
111 |
✓✗ | 279 |
act, squash, state->get_nv()); |
112 |
279 |
break; |
|
113 |
default: |
||
114 |
throw_pretty(__FILE__ ":\n Construct wrong ActuationModelTypes::Type"); |
||
115 |
break; |
||
116 |
} |
||
117 |
3418 |
return actuation; |
|
118 |
} |
||
119 |
|||
120 |
19935 |
void updateActuation( |
|
121 |
const boost::shared_ptr<crocoddyl::ActuationModelAbstract>& model, |
||
122 |
const boost::shared_ptr<crocoddyl::ActuationDataAbstract>& data, |
||
123 |
const Eigen::VectorXd& x, const Eigen::VectorXd& u) { |
||
124 |
✓✗✓✗ |
19935 |
model->calc(data, x, u); |
125 |
19935 |
} |
|
126 |
|||
127 |
} // namespace unittest |
||
128 |
} // namespace crocoddyl |
Generated by: GCOVR (Version 4.2) |