ModelSpace
All Classes Namespaces Functions Variables Enumerations Pages
CalcRangeRangeRateMatrix.hpp
1// /******************************************************************************
2// * Copyright (c) ATTX LLC 2024. All Rights Reserved.
3// *
4// * This software and associated documentation (the "Software") are the
5// * proprietary and confidential information of ATTX, LLC. The Software is
6// * furnished under a license agreement between ATTX and the user organization
7// * and may be used or copied only in accordance with the terms of the agreement.
8// * Refer to 'license/attx_license.adoc' for standard license terms.
9// *
10// * EXPORT CONTROL NOTICE: THIS SOFTWARE MAY INCLUDE CONTENT CONTROLLED UNDER THE
11// * INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) OR THE EXPORT ADMINISTRATION
12// * REGULATIONS (EAR99). No part of the Software may be used, reproduced, or
13// * transmitted in any form or by any means, for any purpose, without the express
14// * written permission of ATTX, LLC.
15// ******************************************************************************/
16
17#ifndef GNC_NAVIGATION_MEASUREMENTS_CALC_RANGE_RANGERATE_MATRIX_HPP
18#define GNC_NAVIGATION_MEASUREMENTS_CALC_RANGE_RANGERATE_MATRIX_HPP
19
20#include "utils/Measurements.hpp"
21
22#define R_RR_MATRIX_H_STATES 12
23#define R_RR_MATRIX_TGT_STATES 6
24#define R_RR_MATRIX_OBS_STATES 6
25#define R_RR_MATRIX_MEAS 2
26
27namespace clockwerk {
28
29 template <typename T>
31 public:
32 /// @brief Function to calculate Measurement Sensitivity Matrix
33 /// @param time The reference time
34 /// @param tar_state The target reference state [x, y, z, vx, vy, vz]
35 /// @param obs_state The observer reference state ["]
36 int calculateMeasurements(T time, const std::array<T, R_RR_MATRIX_TGT_STATES> &tar_state, const std::array<T, R_RR_MATRIX_OBS_STATES> &obs_state,
37 std::array<T, R_RR_MATRIX_H_STATES> &out_measurements);
38
39 private:
40
41 };
42
43 template <typename T>
44 int CalcRangeRangeRateMatrix<T>::calculateMeasurements(T time, const std::array<T, R_RR_MATRIX_TGT_STATES> &tar_state, const std::array<T, R_RR_MATRIX_OBS_STATES> &obs_state,
45 std::array<T, R_RR_MATRIX_H_STATES> &out_measurements) {
46 // Now pre-calculate some simple parameters
47 // Calculate range and range^3
48 double xdiff = tar_state[0] - obs_state[0];
49 double ydiff = tar_state[1] - obs_state[1];
50 double zdiff = tar_state[2] - obs_state[2];
51 double xdotdiff = tar_state[3] - obs_state[3];
52 double ydotdiff = tar_state[4] - obs_state[4];
53 double zdotdiff = tar_state[5] - obs_state[5];
54 double range = std::sqrt(xdiff*xdiff + ydiff*ydiff + zdiff*zdiff);
55 double range3 = range*range*range;
56 double one_over_range, one_over_range3;
57 int err = clockwerk::safeDivide(1.0, range, one_over_range);
58 if(err) {return err;}
59 err = clockwerk::safeDivide(1.0, range3, one_over_range3);
60 if(err) {return err;}
61
62 // Calculate each element of our matrix:
63 out_measurements[0] = xdiff*one_over_range;
64 out_measurements[1] = ydiff*one_over_range;
65 out_measurements[2] = zdiff*one_over_range;
66
67 out_measurements[3] = 0.0;
68 out_measurements[4] = 0.0;
69 out_measurements[5] = 0.0;
70
71 out_measurements[6] = -((xdiff*(xdotdiff*xdiff + ydotdiff*ydiff+zdotdiff*zdiff))*one_over_range3 - xdotdiff*one_over_range);
72 out_measurements[7] = -((ydiff*(xdotdiff*xdiff + ydotdiff*ydiff+zdotdiff*zdiff))*one_over_range3 - ydotdiff*one_over_range);
73 out_measurements[8] = -((zdiff*(xdotdiff*xdiff + ydotdiff*ydiff+zdotdiff*zdiff))*one_over_range3 - zdotdiff*one_over_range);
74
75 out_measurements[9] = out_measurements[0];
76 out_measurements[10] = out_measurements[1];
77 out_measurements[11] = out_measurements[2];
78
79 return NO_ERROR;
80 }
81
82}
83
84#endif
#define R_RR_MATRIX_TGT_STATES
Definition CalcRangeRangeRateMatrix.hpp:23
#define R_RR_MATRIX_OBS_STATES
Definition CalcRangeRangeRateMatrix.hpp:24
#define R_RR_MATRIX_H_STATES
Definition CalcRangeRangeRateMatrix.hpp:22
Definition CalcRangeRangeRateMatrix.hpp:30
int calculateMeasurements(T time, const std::array< T, 6 > &tar_state, const std::array< T, 6 > &obs_state, std::array< T, 12 > &out_measurements)
Function to calculate Measurement Sensitivity Matrix.
Definition CalcRangeRangeRateMatrix.hpp:44
Definition Measurements.hpp:39
#define NO_ERROR
Definition clockwerkerrors.h:31