Gazebo Sim
API Reference
9.0.0
insert_drive_file
Tutorials
library_books
Classes
toc
Namespaces
insert_drive_file
Files
launch
Gazebo Website
Index
List
Hierarchy
Members: All
Members: Functions
Members: Variables
Members: Typedefs
Members: Enumerations
Members: Enumerator
List
Members
Functions
Typedefs
Variables
Enumerations
Enumerator
src
gz-sim
src
systems
multicopter_control
Common.hh
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2019 Open Source Robotics Foundation
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*
16
*/
17
18
#ifndef GZ_SIM_SYSTEMS_MULTICOPTERVELOCITYCONTROL_COMMON_HH_
19
#define GZ_SIM_SYSTEMS_MULTICOPTERVELOCITYCONTROL_COMMON_HH_
20
21
#include <Eigen/Geometry>
22
#include <optional>
23
#include <vector>
24
25
#include <sdf/sdf.hh>
26
27
#include "gz/sim/config.hh"
28
#include "
gz/sim/EntityComponentManager.hh
"
29
#include "
gz/sim/Model.hh
"
30
31
#include "
Parameters.hh
"
32
33
namespace
gz
34
{
35
namespace
sim
36
{
37
// Inline bracket to help doxygen filtering.
38
inline
namespace
GZ_SIM_VERSION_NAMESPACE {
39
namespace
systems
40
{
41
namespace
multicopter_control
42
{
44
struct
EigenTwist
45
{
46
Eigen::Vector3d
linear
;
47
Eigen::Vector3d
angular
;
48
};
49
52
struct
FrameData
53
{
54
// Even though this struct contains Eigen objects, None of them are
55
// fixed-size vectorizable, so there is no need to override the new operator
56
Eigen::Isometry3d
pose
;
57
Eigen::Vector3d
linearVelocityWorld
;
58
Eigen::Vector3d
angularVelocityBody
;
59
};
60
66
RotorConfiguration
loadRotorConfiguration
(
const
EntityComponentManager
&_ecm,
67
const
sdf::ElementPtr &_sdf,
68
const
Model
&_model,
69
const
Entity
&_comLink);
70
75
std::optional<Eigen::Matrix4Xd>
calculateAllocationMatrix
(
76
const
RotorConfiguration
&_rotorConfiguration);
77
82
void
createFrameDataComponents
(
EntityComponentManager
&_ecm,
83
const
Entity
&_link);
84
89
std::optional<FrameData>
getFrameData
(
const
EntityComponentManager
&_ecm,
90
const
Entity
&_link,
91
const
NoiseParameters
&_noise);
92
97
inline
Eigen::Matrix3d
skewMatrixFromVector
(
const
Eigen::Vector3d &_vector)
98
{
99
Eigen::Matrix3d skewMatrix;
100
skewMatrix << 0, -_vector.z(), _vector.y(), _vector.z(), 0, -_vector.x(),
101
-_vector.y(), _vector.x(), 0;
102
return
skewMatrix;
103
}
104
109
inline
Eigen::Vector3d
vectorFromSkewMatrix
(
110
const
Eigen::Matrix3d &_skewMatrix)
111
{
112
return
Eigen::Vector3d(_skewMatrix(2, 1), _skewMatrix(0, 2),
113
_skewMatrix(1, 0));
114
}
115
116
}
// namespace multicopter_control
117
}
// namespace systems
118
}
// namespace GZ_SIM_VERSION_NAMESPACE
119
}
// namespace sim
120
}
// namespace gz
121
122
#endif