0.4.1
Loading...
Searching...
No Matches
ErrorEquations.hpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9/// @file ErrorEquations.hpp
10/// @brief Error Equations for the local navigation frame
11/// @author T. Topp (topp@ins.uni-stuttgart.de)
12/// @date 2022-01-12
13
14#pragma once
15
16#include <Eigen/Core>
17
18namespace NAV
19{
20/// @brief Calculates the matrix ๐…_๐œ“'_๐œ“
21/// @param[in] n_omega_in Angular rate vector of the n-system with respect to the i-system in [rad / s], resolved in the n-system
22/// @return 3x3 matrix in [rad / s]
23/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.64, p. 587 - ๐…_11
24/// @note See T. Hobiger (2021) Inertialnavigation V07 - equation (7.22)
25[[nodiscard]] Eigen::Matrix3d n_F_dpsi_dpsi(const Eigen::Vector3d& n_omega_in);
26
27/// @brief Calculates the matrix ๐…_๐œ“'_๐›ฟv
28/// @param[in] latitude Geodetic latitude of the body in [rad]
29/// @param[in] height Geodetic height of the body in [m]
30/// @param[in] R_N North/South (meridian) earth radius in [m]
31/// @param[in] R_E East/West (prime vertical) earth radius in [m]
32/// @return 3x3 matrix in [1 / m]
33/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.65, p. 587 - ๐…_12
34/// @note See T. Hobiger (2021) Inertialnavigation V07 - equation (7.21)
35[[nodiscard]] Eigen::Matrix3d n_F_dpsi_dv(double latitude, double height, double R_N, double R_E);
36
37/// @brief Calculates the matrix ๐…_๐œ“'_๐›ฟr
38/// @param[in] latitude Geodetic latitude of the body in [rad]
39/// @param[in] height Geodetic height of the body in [m]
40/// @param[in] n_velocity Velocity of the body with respect to the e-system in [m / s], resolved in the n-system
41/// @param[in] R_N North/South (meridian) earth radius in [m]
42/// @param[in] R_E East/West (prime vertical) earth radius in [m]
43/// @return 3x3 matrix in [rad / s] for latitude and [1 / (m ยท s)] for height
44/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.66, p. 587 - ๐…_13
45/// @note See T. Hobiger (2021) Inertialnavigation V07 - equation (7.21)
46[[nodiscard]] Eigen::Matrix3d n_F_dpsi_dr(double latitude, double height, const Eigen::Vector3d& n_velocity, double R_N, double R_E);
47
48/// @brief Calculates the matrix ๐…_๐œ“'_๐›ฟฯ‰
49/// @param[in] n_Dcm_b DCM from body to navigation frame
50/// @return 3x3 matrix in [-]
51/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.63, p. 587 - ๐…_15
52[[nodiscard]] Eigen::Matrix3d n_F_dpsi_dw(const Eigen::Matrix3d& n_Dcm_b);
53
54/// @brief Calculates the matrix ๐…_๐›ฟv'_๐œ“
55/// @param[in] n_force_ib Specific force of the body with respect to inertial frame in [m / s^2], resolved in local navigation frame coordinates
56/// @return 3x3 matrix in [m / s^2]
57/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.67, p. 587 - ๐…_21
58/// @note See T. Hobiger (2021) Inertialnavigation V08 - equation (8.4)
59[[nodiscard]] Eigen::Matrix3d n_F_dv_dpsi(const Eigen::Vector3d& n_force_ib);
60
61/// @brief Calculates the matrix ๐…_๐›ฟv'_๐›ฟv
62/// @param[in] n_velocity Velocity of the body with respect to the e-system in [m / s], resolved in the n-system
63/// @param[in] latitude Geodetic latitude of the body in [rad]
64/// @param[in] height Geodetic height of the body in [m]
65/// @param[in] R_N North/South (meridian) earth radius in [m]
66/// @param[in] R_E East/West (prime vertical) earth radius in [m]
67/// @return 3x3 matrix in [1 / s]
68/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.68, p. 587 - ๐…_22
69/// @note See T. Hobiger (2021) Inertialnavigation V08 - equation (8.6, 8.15)
70[[nodiscard]] Eigen::Matrix3d n_F_dv_dv(const Eigen::Vector3d& n_velocity, double latitude, double height, double R_N, double R_E);
71
72/// @brief Calculates the matrix ๐…_๐›ฟv'_๐›ฟr
73/// @param[in] n_velocity Velocity of the body with respect to the e-system in [m / s], resolved in the n-system
74/// @param[in] latitude Geodetic latitude of the body in [rad]
75/// @param[in] height Geodetic height of the body in [m]
76/// @param[in] R_N North/South (meridian) earth radius in [m]
77/// @param[in] R_E East/West (prime vertical) earth radius in [m]
78/// @param[in] g_0 Magnitude of the gravity vector in [m/s^2] (see \cite Groves2013 Groves, ch. 2.4.7, eq. 2.135, p. 70)
79/// @param[in] r_eS_e Geocentric radius. The distance of a point on the Earth's surface from the center of the Earth in [m]
80/// @return 3x3 matrix in [m / s^2] for latitude and [1 / s^2] for height
81/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.69, p. 588 - ๐…_23
82/// @note See T. Hobiger (2021) Inertialnavigation V08 - equation (8.14, 8.16)
83[[nodiscard]] Eigen::Matrix3d n_F_dv_dr(const Eigen::Vector3d& n_velocity, double latitude, double height, double R_N, double R_E, double g_0, double r_eS_e);
84
85/// @brief Calculates the matrix ๐…_๐œ“'_๐›ฟf
86/// @param[in] n_Dcm_b DCM from body to navigation frame
87/// @return 3x3 matrix in [-]
88/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.63, p. 587 - ๐…_24
89[[nodiscard]] Eigen::Matrix3d n_F_dv_df(const Eigen::Matrix3d& n_Dcm_b);
90
91/// @brief Calculates the matrix ๐…_๐›ฟr'_๐›ฟv
92/// @param[in] latitude Geodetic latitude of the body in [rad]
93/// @param[in] height Geodetic height of the body in [m]
94/// @param[in] R_N North/South (meridian) earth radius in [m]
95/// @param[in] R_E East/West (prime vertical) earth radius in [m]
96/// @return 3x3 matrix in [1 / m] for latitude and longitude and [-] for height
97/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.70, p. 588 - ๐…_32
98/// @note See T. Hobiger (2021) Inertialnavigation V07 - equation (7.5)
99[[nodiscard]] Eigen::Matrix3d n_F_dr_dv(double latitude, double height, double R_N, double R_E);
100
101/// @brief Calculates the matrix ๐…_๐›ฟr'_๐›ฟr
102/// @param[in] n_velocity Velocity of the body with respect to the e-system in [m / s], resolved in the n-system
103/// @param[in] latitude Geodetic latitude of the body in [rad]
104/// @param[in] height Geodetic height of the body in [m]
105/// @param[in] R_N North/South (meridian) earth radius in [m]
106/// @param[in] R_E East/West (prime vertical) earth radius in [m]
107/// @return 3x3 matrix in [1 / s] for latitude and [1 / (m ยท s)] for height
108/// @note See \cite Groves2013 Groves, ch. 14.2.4, eq. 14.71, p. 588 - ๐…_33
109/// @note See T. Hobiger (2021) Inertialnavigation V07 - equation (7.5)
110[[nodiscard]] Eigen::Matrix3d n_F_dr_dr(const Eigen::Vector3d& n_velocity, double latitude, double height, double R_N, double R_E);
111
112/// @brief Calculates the matrix ๐…_๐›ฟf'_๐›ฟf
113/// @param[in] beta_a Gauss-Markov constant for the accelerometer ๐›ฝ = 1 / ๐œ (๐œ correlation length)
114/// @return 3x3 matrix in [1 / s]
115/// @note See T. Hobiger (2021) Inertialnavigation V06 - equation (6.3)
116[[nodiscard]] Eigen::Matrix3d n_F_df_df(const Eigen::Vector3d& beta_a);
117
118/// @brief Calculates the matrix ๐…_๐›ฟฯ‰'_๐›ฟฯ‰
119/// @param[in] beta_omega Gauss-Markov constant for the gyroscope ๐›ฝ = 1 / ๐œ (๐œ correlation length)
120/// @return 3x3 matrix in [1 / s]
121/// @note See T. Hobiger (2021) Inertialnavigation V06 - equation (6.3)
122[[nodiscard]] Eigen::Matrix3d n_F_dw_dw(const Eigen::Vector3d& beta_omega);
123
124} // namespace NAV
Eigen::Matrix3d n_F_dv_df(const Eigen::Matrix3d &n_Dcm_b)
Calculates the matrix ๐…_๐œ“'_๐›ฟf.
Eigen::Matrix3d n_F_dpsi_dr(double latitude, double height, const Eigen::Vector3d &n_velocity, double R_N, double R_E)
Calculates the matrix ๐…_๐œ“'_๐›ฟr.
Eigen::Matrix3d n_F_dpsi_dv(double latitude, double height, double R_N, double R_E)
Calculates the matrix ๐…_๐œ“'_๐›ฟv.
Eigen::Matrix3d n_F_dr_dv(double latitude, double height, double R_N, double R_E)
Calculates the matrix ๐…_๐›ฟr'_๐›ฟv.
Eigen::Matrix3d n_F_dv_dr(const Eigen::Vector3d &n_velocity, double latitude, double height, double R_N, double R_E, double g_0, double r_eS_e)
Calculates the matrix ๐…_๐›ฟv'_๐›ฟr.
Eigen::Matrix3d n_F_dpsi_dw(const Eigen::Matrix3d &n_Dcm_b)
Calculates the matrix ๐…_๐œ“'_๐›ฟฯ‰
Eigen::Matrix3d n_F_dw_dw(const Eigen::Vector3d &beta_omega)
Calculates the matrix ๐…_๐›ฟฯ‰'_๐›ฟฯ‰
Eigen::Matrix3d n_F_dv_dpsi(const Eigen::Vector3d &n_force_ib)
Calculates the matrix ๐…_๐›ฟv'_๐œ“
Eigen::Matrix3d n_F_df_df(const Eigen::Vector3d &beta_a)
Calculates the matrix ๐…_๐›ฟf'_๐›ฟf.
Eigen::Matrix3d n_F_dpsi_dpsi(const Eigen::Vector3d &n_omega_in)
Calculates the matrix ๐…_๐œ“'_๐œ“
Eigen::Matrix3d n_F_dr_dr(const Eigen::Vector3d &n_velocity, double latitude, double height, double R_N, double R_E)
Calculates the matrix ๐…_๐›ฟr'_๐›ฟr.
Eigen::Matrix3d n_F_dv_dv(const Eigen::Vector3d &n_velocity, double latitude, double height, double R_N, double R_E)
Calculates the matrix ๐…_๐›ฟv'_๐›ฟv.