Sen API
Sen Libraries
Loading...
Searching...
No Matches
dead_reckoner_impl.h
Go to the documentation of this file.
1// === dead_reckoner_impl.h ============================================================================================
2// Sen Infrastructure
3// Released under the Apache License v2.0 (SPDX-License-Identifier Apache-2.0).
4// See the LICENSE.txt file for more information.
5// © Airbus SAS, Airbus Helicopters, and Airbus Defence and Space SAU/GmbH/SAS.
6// =====================================================================================================================
7
8#ifndef SEN_UTIL_DR_DETAIL_DEAD_RECKONER_IMPL_H
9#define SEN_UTIL_DR_DETAIL_DEAD_RECKONER_IMPL_H
10
11// sen
13
14// std
15#include <type_traits>
16
18{
19
22
25template <typename T, typename = void>
26struct HasCommitTime: std::false_type
27{
28};
29
30template <typename T>
31struct HasCommitTime<T, std::void_t<decltype(std::declval<const T&>().asObject().getLastCommitTime())>>: std::true_type
32{
33};
34
36template <typename T>
37[[nodiscard]] T toRpr(const Location& value);
38
40template <typename T>
41[[nodiscard]] T toRpr(const Orientation& value);
42
44template <typename T>
45[[nodiscard]] T toRpr(const Velocity& value);
46
48template <typename T>
49[[nodiscard]] T toRpr(const Acceleration& value);
50
52template <typename T>
53[[nodiscard]] T toRpr(const AngularVelocity& value);
54
56template <typename T>
57[[nodiscard]] Location fromRprLocation(const T& value);
58
60template <typename T>
61[[nodiscard]] Orientation fromRprOrientation(const T& value);
62
64template <typename T>
65[[nodiscard]] Velocity fromRprVelocity(const T& value);
66
68template <typename T>
69[[nodiscard]] Acceleration fromRprAcceleration(const T& value);
70
72template <typename T>
73[[nodiscard]] AngularVelocity fromRprAngularVelocity(const T& value);
74
76[[nodiscard]] GeodeticWorldLocation toLla(const Location& worldLocation) noexcept;
77
79[[nodiscard]] Location toEcef(const GeodeticWorldLocation& latLonAlt) noexcept;
80
82[[nodiscard]] Orientation ecefToNed(const Orientation& value, const GeodeticWorldLocation& latLonAlt) noexcept;
83
85[[nodiscard]] Velocity ecefToNed(const Velocity& value, const GeodeticWorldLocation& geodeticPosition) noexcept;
86
88[[nodiscard]] Acceleration ecefToNed(const Acceleration& value, const GeodeticWorldLocation& geodeticPosition) noexcept;
89
91[[nodiscard]] Orientation nedToEcef(const Orientation& value, const GeodeticWorldLocation& latLonAlt) noexcept;
92
94[[nodiscard]] Velocity nedToEcef(const Velocity& value, const GeodeticWorldLocation& location) noexcept;
95
97[[nodiscard]] Acceleration nedToEcef(const Acceleration& value, const GeodeticWorldLocation& location) noexcept;
98
101[[nodiscard]] GeodeticSituation toGeodeticSituation(const Situation& value) noexcept;
102
104[[nodiscard]] Situation toSituation(const GeodeticSituation& value) noexcept;
105
107[[nodiscard]] Situation toSituation(const GeodeticSituation& value,
108 const Location& ecefPosition,
109 const Orientation& ecefOrientation) noexcept;
110
112[[nodiscard]] Velocity bodyToNed(const Velocity& value, const Orientation& orientationNed) noexcept;
113
115[[nodiscard]] AngularVelocity bodyToNed(const AngularVelocity& value, const Orientation& orientationNed) noexcept;
116
119 const Orientation& orientationNed) noexcept;
120
122[[nodiscard]] Acceleration bodyToNed(const Acceleration& value, const Orientation& orientationNed) noexcept;
123
125void smoothImpl(Situation& situation, const Situation& update, const DrConfig& config);
126
128[[nodiscard]] LengthMeters computeDistance(const Location& start, const Location& end);
129
131
132//-------------------------------------------------------------------------------------------------------------------
133// Inline implementation
134//-------------------------------------------------------------------------------------------------------------------
135
136template <typename T>
137inline T toRpr(const Location& value)
138{
139 return {value.x, value.y, value.z};
140}
141
142template <typename T>
143inline T toRpr(const Orientation& value)
144{
145 return {value.psi, value.theta, value.phi};
146}
147
148template <typename T>
149inline T toRpr(const Velocity& value)
150{
151 return {value.x, value.y, value.z};
152}
153
154template <typename T>
155inline T toRpr(const Acceleration& value)
156{
157 return {value.x, value.y, value.z};
158}
159
160template <typename T>
161inline T toRpr(const AngularVelocity& value)
162{
163 return {value.x, value.y, value.z};
164}
165
166template <typename T>
167inline Location fromRprLocation(const T& value)
168{
169 return {value.x, value.y, value.z};
170}
171
172template <typename T>
173inline Orientation fromRprOrientation(const T& value)
174{
175 return {value.psi, value.theta, value.phi};
176}
177
179template <typename T>
180inline Velocity fromRprVelocity(const T& value)
181{
182 return {value.xVelocity, value.yVelocity, value.zVelocity};
183}
184
186template <typename T>
187inline Acceleration fromRprAcceleration(const T& value)
188{
189 return {value.xAcceleration, value.yAcceleration, value.zAcceleration};
190}
191
193template <typename T>
195{
196 return {value.xAngularVelocity, value.yAngularVelocity, value.zAngularVelocity};
197}
198
199} // namespace sen::util::impl
200
201#endif // SEN_UTIL_DR_DETAIL_DEAD_RECKONER_IMPL_H
AccelerationMetersPerSecondSquared z
Definition algorithms.h:154
LengthMeters y
Definition algorithms.h:121
AngularVelocityRadiansPerSecond z
Definition algorithms.h:162
VelocityMetersPerSecond y
Definition algorithms.h:145
AccelerationMetersPerSecondSquared y
Definition algorithms.h:153
AccelerationMetersPerSecondSquared x
Definition algorithms.h:152
AngularVelocityRadiansPerSecond y
Definition algorithms.h:161
AngleRadians theta
Definition algorithms.h:137
LengthMeters x
Definition algorithms.h:120
VelocityMetersPerSecond x
Definition algorithms.h:144
AngleRadians psi
Definition algorithms.h:136
AngleRadians phi
Definition algorithms.h:138
LengthMeters z
Definition algorithms.h:122
VelocityMetersPerSecond z
Definition algorithms.h:146
AngularVelocityRadiansPerSecond x
Definition algorithms.h:160
Location toEcef(const GeodeticWorldLocation &latLonAlt) noexcept
Translates from Geodetic (LatLonAlt) to ECEF WorldLocation coordinates.
LengthMeters computeDistance(const Location &start, const Location &end)
Computes the distance between two World locations.
Orientation ecefToNed(const Orientation &value, const GeodeticWorldLocation &latLonAlt) noexcept
Translates the Orientation in euler angles from ECEF to NED using quaternions.
void smoothImpl(Situation &situation, const Situation &update, const DrConfig &config)
Updates the smoothed situation, both in position and orientation.
Acceleration fromRprAcceleration(const T &value)
Translates to Acceleration struct from a RPR Acceleration.
Definition dead_reckoner_impl.h:187
Velocity fromRprVelocity(const T &value)
Translates to a Velocity struct from a RPR Velocity.
Definition dead_reckoner_impl.h:180
GeodeticWorldLocation toLla(const Location &worldLocation) noexcept
Translates from ECEF Location to Geodetic (LatLonAlt) Location.
Orientation nedToEcef(const Orientation &value, const GeodeticWorldLocation &latLonAlt) noexcept
Translates the Orientation in euler angles from NED to ECEF using quaternions.
T toRpr(const Location &value)
Translates a Location struct to a RPR WorldLocation given as template argument.
Definition dead_reckoner_impl.h:137
Situation toSituation(const GeodeticSituation &value) noexcept
Converts a situation from geodetic to ECEF.
GeodeticSituation toGeodeticSituation(const Situation &value) noexcept
Converts a situation from ECEF to geodetic, building the position rotation once for all three quantit...
AngularVelocity fromRprAngularVelocity(const T &value)
Translates to AngularVelocity struct from a RPR AngularVelocity.
Definition dead_reckoner_impl.h:194
Velocity bodyToNed(const Velocity &value, const Orientation &orientationNed) noexcept
Translates Velocity vectors expressed in body coordinates to NED coordinates.
Orientation fromRprOrientation(const T &value)
Translates to an Orientation struct from a RPR Orientation.
Definition dead_reckoner_impl.h:173
Location fromRprLocation(const T &value)
Translates to a Location struct from a RPR WorldLocation.
Definition dead_reckoner_impl.h:167
Acceleration struct.
Definition algorithms.h:151
AngularAcceleration struct.
Definition algorithms.h:167
AngularVelocity struct.
Definition algorithms.h:159
Dead Reckoning configuration.
Definition algorithms.h:80
GeodeticSituation structure with the following parameters:
Definition algorithms.h:208
World location in geodetic coordinates.
Definition algorithms.h:127
World Location struct.
Definition algorithms.h:119
Orientation struct.
Definition algorithms.h:135
Situation structure with the following parameters:
Definition algorithms.h:176
Velocity struct.
Definition algorithms.h:143
Definition dead_reckoner_impl.h:18
STL namespace.
True when T can report when its data was committed. Generated RPR types can, through asObject(); a ha...
Definition dead_reckoner_impl.h:27