Skip to content

Commit 1c28bc6

Browse files
committed
Modify pseudorange calculation
1 parent 48e6d6d commit 1c28bc6

File tree

2 files changed

+63
-23
lines changed

2 files changed

+63
-23
lines changed

src/components/real/aocs/gnss_receiver.cpp

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
2525
quaternion_b2c_(quaternion_b2c),
2626
half_width_deg_(half_width_deg),
2727
antenna_model_(antenna_model),
28-
pseudorange_noise_standard_deviation_m_(pseudorange_noise_standard_deviation_m),
2928
dynamics_(dynamics),
3029
gnss_satellites_(gnss_satellites),
3130
simulation_time_(simulation_time) {
@@ -34,6 +33,7 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
3433
velocity_random_noise_ecef_m_s_[i].SetParameters(0.0, velocity_noise_standard_deviation_ecef_m_s[i],
3534
randomization::global_randomization.MakeSeed());
3635
}
36+
pseudorange_random_noise_m_.SetParameters(0.0, pseudorange_noise_standard_deviation_m, randomization::global_randomization.MakeSeed());
3737
}
3838

3939
GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clock_generator, PowerPort* power_port, const size_t component_id,
@@ -48,7 +48,6 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
4848
quaternion_b2c_(quaternion_b2c),
4949
half_width_deg_(half_width_deg),
5050
antenna_model_(antenna_model),
51-
pseudorange_noise_standard_deviation_m_(pseudorange_noise_standard_deviation_m),
5251
dynamics_(dynamics),
5352
gnss_satellites_(gnss_satellites),
5453
simulation_time_(simulation_time) {
@@ -57,6 +56,7 @@ GnssReceiver::GnssReceiver(const int prescaler, environment::ClockGenerator* clo
5756
velocity_random_noise_ecef_m_s_[i].SetParameters(0.0, velocity_noise_standard_deviation_ecef_m_s[i],
5857
randomization::global_randomization.MakeSeed());
5958
}
59+
pseudorange_random_noise_m_.SetParameters(0.0, pseudorange_noise_standard_deviation_m, randomization::global_randomization.MakeSeed());
6060
}
6161

6262
void GnssReceiver::MainRoutine(const int time_count) {
@@ -69,16 +69,7 @@ void GnssReceiver::MainRoutine(const int time_count) {
6969
CheckAntenna(position_true_eci, quaternion_i2b);
7070

7171
// Pseudorange calculation
72-
size_t number_of_calculated_gnss_satellites = gnss_satellites_->GetNumberOfCalculatedSatellite();
73-
for (size_t i = 0; i < number_of_calculated_gnss_satellites; i++) {
74-
math::Vector<3> gnss_satellite_position_ecef_m = gnss_satellites_->GetPosition_ecef_m(i);
75-
math::Vector<3> position_true_ecef_m = dynamics_->GetOrbit().GetPosition_ecef_m();
76-
double geometric_distance_m = (gnss_satellite_position_ecef_m - position_true_ecef_m).CalcNorm();
77-
randomization::NormalRand pseudorange_random_noise_m;
78-
pseudorange_random_noise_m.SetParameters(0.0, pseudorange_noise_standard_deviation_m_, randomization::global_randomization.MakeSeed());
79-
double pseudorange_m = geometric_distance_m + pseudorange_random_noise_m;
80-
pseudorange_list_m_[i] = pseudorange_m;
81-
}
72+
SetGnssObservationList();
8273

8374
if (is_gnss_visible_) {
8475
// Antenna of GNSS-R can detect GNSS signal
@@ -195,6 +186,32 @@ void GnssReceiver::SetGnssInfo(const math::Vector<3> antenna_to_satellite_i_m, c
195186
gnss_information_list_.push_back(gnss_info_new);
196187
}
197188

189+
double GnssReceiver::CalcGeometricDistance(const size_t gnss_system_id) {
190+
math::Vector<3> gnss_satellite_position_ecef_m = gnss_satellites_->GetPosition_ecef_m(gnss_system_id);
191+
math::Vector<3> position_true_ecef_m = dynamics_->GetOrbit().GetPosition_ecef_m();
192+
double geometric_distance_m = (gnss_satellite_position_ecef_m - position_true_ecef_m).CalcNorm();
193+
return geometric_distance_m;
194+
}
195+
196+
double GnssReceiver::CalcPseudorange(const size_t gnss_system_id) {
197+
// TODO: Add effect of radio wave propagation time
198+
// TODO: Add effect of clock bias
199+
// TODO: Add ionospheric delay
200+
double geometric_distance_m = CalcGeometricDistance(gnss_system_id);
201+
double pseudorange_m = geometric_distance_m + pseudorange_random_noise_m_;
202+
return pseudorange_m;
203+
}
204+
205+
void GnssReceiver::SetGnssObservationList() {
206+
// TODO: Add carrier phase observation
207+
pseudorange_list_m_.assign(kTotalNumberOfGnssSatellite, 0.0);
208+
for (size_t i = 0; i < gnss_information_list_.size(); i++) {
209+
size_t gnss_system_id = gnss_information_list_[i].gnss_id;
210+
double pseudorange_m = CalcPseudorange(gnss_system_id);
211+
pseudorange_list_m_[gnss_system_id] = pseudorange_m;
212+
}
213+
}
214+
198215
void GnssReceiver::AddNoise(const math::Vector<3> position_true_ecef_m, const math::Vector<3> velocity_true_ecef_m_s) {
199216
for (size_t i = 0; i < 3; i++) {
200217
position_ecef_m_[i] = position_true_ecef_m[i] + position_random_noise_ecef_m_[i];

src/components/real/aocs/gnss_receiver.hpp

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,6 @@
1818

1919
namespace s2e::components {
2020

21-
// GNSS satellite number definition
22-
// TODO: Move to initialized file?
23-
const size_t kNumberOfGpsSatellite = 32; //!< Number of GPS satellites
24-
const size_t kNumberOfGlonassSatellite = 26; //!< Number of GLONASS satellites
25-
const size_t kNumberOfGalileoSatellite = 28; //!< Number of Galileo satellites
26-
const size_t kNumberOfBeidouSatellite = 62; //!< Number of BeiDou satellites
27-
const size_t kNumberOfQzssSatellite = 5; //!< Number of QZSS satellites
28-
const size_t kNumberOfNavicSatellite = 7; //!< Number of NavIC satellites
29-
3021
/**
3122
* @enum AntennaModel
3223
* @brief Antenna pattern model to emulate GNSS antenna
@@ -142,6 +133,19 @@ class GnssReceiver : public Component, public logger::ILoggable {
142133
virtual std::string GetLogValue() const;
143134

144135
protected:
136+
// GNSS satellite number definition
137+
// TODO: Move to initialized file?
138+
static const size_t kNumberOfGpsSatellite = 32; //!< Number of GPS satellites
139+
static const size_t kNumberOfGlonassSatellite = 26; //!< Number of GLONASS satellites
140+
static const size_t kNumberOfGalileoSatellite = 28; //!< Number of Galileo satellites
141+
static const size_t kNumberOfBeidouSatellite = 62; //!< Number of BeiDou satellites
142+
static const size_t kNumberOfQzssSatellite = 5; //!< Number of QZSS satellites
143+
static const size_t kNumberOfNavicSatellite = 7; //!< Number of NavIC satellites
144+
145+
static const size_t kTotalNumberOfGnssSatellite = kNumberOfGpsSatellite + kNumberOfGlonassSatellite + kNumberOfGalileoSatellite +
146+
kNumberOfBeidouSatellite + kNumberOfQzssSatellite +
147+
kNumberOfNavicSatellite; //<! Total number of GNSS satellites
148+
145149
// Parameters for receiver
146150
const size_t component_id_; //!< Receiver ID
147151

@@ -152,8 +156,8 @@ class GnssReceiver : public Component, public logger::ILoggable {
152156
AntennaModel antenna_model_; //!< Antenna model
153157

154158
// GNSS observation
155-
double pseudorange_noise_standard_deviation_m_; //!< Random noise for pseudorange [m]
156-
math::Vector<kNumberOfGpsSatellite> pseudorange_list_m_; //!< Pseudorange list for each GPS satellite
159+
randomization::NormalRand pseudorange_random_noise_m_; //!< Random noise for pseudorange [m]
160+
std::vector<double> pseudorange_list_m_{kTotalNumberOfGnssSatellite, 0.0}; //!< Pseudorange list for each GPS satellite
157161

158162
// Simple position observation
159163
randomization::NormalRand position_random_noise_ecef_m_[3]; //!< Random noise for position at the ECEF frame [m]
@@ -210,6 +214,25 @@ class GnssReceiver : public Component, public logger::ILoggable {
210214
* @param [in] gnss_system_id: ID of target GNSS satellite
211215
*/
212216
void SetGnssInfo(const math::Vector<3> antenna_to_satellite_i_m, const math::Quaternion quaternion_i2b, const size_t gnss_system_id);
217+
/**
218+
* @fn CalcGeometricDistance
219+
* @brief Calculate the geometric distance between the GNSS satellite and the GNSS receiver antenna
220+
* @param [in] gnss_system_id: ID of target GNSS satellite
221+
* @return Geometric distance between the GNSS satellite and the GNSS receiver antenna [m]
222+
*/
223+
double CalcGeometricDistance(const size_t gnss_system_id);
224+
/**
225+
* @fn CalcPseudorange
226+
* @brief Calculate the pseudorange between the GNSS satellite and the GNSS receiver antenna
227+
* @param [in] gnss_system_id: ID of target GNSS satellite
228+
* @return Pseudorange between the GNSS satellite and the GNSS receiver antenna [m]
229+
*/
230+
double CalcPseudorange(const size_t gnss_id);
231+
/**
232+
* @fn SetGnssObservationList
233+
* @brief Calculate and set the GNSS observation list for each GNSS satellite
234+
*/
235+
void SetGnssObservationList();
213236
/**
214237
* @fn AddNoise
215238
* @brief Substitutional method for "Measure" in other sensor models inherited Sensor class

0 commit comments

Comments
 (0)