Gazebo Sim

API Reference

9.0.0~pre1
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"
29#include "gz/sim/Model.hh"
30
31#include "Parameters.hh"
32
33namespace gz
34{
35namespace sim
36{
37// Inline bracket to help doxygen filtering.
38inline namespace GZ_SIM_VERSION_NAMESPACE {
39namespace systems
40{
41namespace multicopter_control
42{
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
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
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