Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add GNSS receiver pseudorange calculation #730

Open
wants to merge 15 commits into
base: feature/gnss-receiver-update
Choose a base branch
from

Conversation

fukudakazuya
Copy link
Contributor

@fukudakazuya fukudakazuya commented Dec 31, 2024

Related issues

#600

Description

擬似距離の計算を以下の式に従って追加した.
擬似距離=幾何学的距離+白色ノイズ
また各GPSから得られる擬似距離と,擬似距離と幾何学的距離の差をプロットするコードを追加した.

Test results

gnss_receiver.iniのprescaler は 1とした.
【各GPSから得られる擬似距離の値】
pseudorange

【擬似距離の白色ノイズ標準偏差を0mとしたときの擬似距離と幾何学的距離の差】
差は10^-8m程度である.
pseudorange_error_0

【擬似距離の白色ノイズ標準偏差を10mとしたときの擬似距離と幾何学的距離の差】
差は3シグマである30m以内にほぼ収まっている.
pseudorange_error

Impact

Describe the scope of influence of the changes, e.g., The behavior of feature ** changes.

Supplementary information

Provide any supplementary information.

@fukudakazuya fukudakazuya added priority::medium priority medium component component emulation minor update add functionality in a backwards compatible manner labels Dec 31, 2024
@fukudakazuya fukudakazuya self-assigned this Dec 31, 2024
@fukudakazuya fukudakazuya requested review from sksat and a team as code owners December 31, 2024 08:35
@fukudakazuya fukudakazuya requested review from 200km, ogoogo, Hiro-0110, seki-hiro, suzuki-toshihir0, t-hosonuma and conjikidow and removed request for a team December 31, 2024 08:35
Copy link
Member

@200km 200km left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PRありがとうございます。次の点対応をお願いします。

  • PR名を適切に設定してください(featureなどbranch名をそのまま入れるのはやめてください)
  • CIがこけているので通るように修正お願いします。

@fukudakazuya fukudakazuya changed the title Feature/gnss receiver update pseudorange Add GNSS receiver pseudorange calculation Jan 5, 2025
@fukudakazuya
Copy link
Contributor Author

fukudakazuya commented Jan 6, 2025

CIを回し直したら全て通りました.
Build on Windows VS2022のrun simulation(Sample sat)でのみエラーが出ていたという状況だったのですが,どのように修正したら良いか分からず,CIを再度回したら通ったという感じなので,このままマージしてしまってまたCIがこけてしまう可能性があり不安です...
色々コミット履歴がありますが,結局最初の方と何も変わっていません.

@200km
Copy link
Member

200km commented Jan 6, 2025

CIこけていた時のエラー文などは何が表示されていましたか?

@fukudakazuya
Copy link
Contributor Author

fukudakazuya commented Jan 6, 2025

Run .\Debug\S2E.exe
Starting simulation...
Data path: ../../
Ini file: ./settings/sample_simulation_base.ini
Air density model : STANDARD
Error: Process completed with exit code 1.

上のようなエラー文が出ており、具体的なエラー内容がわかりませんでした。

Copy link
Member

@200km 200km left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コメントつけました。このPRで対応せず、今後の別PRで対応したいという場合は、それでも良いですが忘れないようにissueを登録したり、#600 のissueの中でタスクリストとしてメモするなどしてください。

@@ -18,6 +18,15 @@

namespace s2e::components {

// GNSS satellite number definition
// TODO: Move to initialized file?
const size_t kNumberOfGpsSatellite = 32; //!< Number of GPS satellites
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[WANT] これらはscopeが広い変数になっているので、せめてclass内に留めるようにして欲しいです。
(特に、GNSS受信機が観測できるGNSS衛星数とS2E内で模擬しているGNSS衛星数を分けたいので。)

@@ -54,6 +63,7 @@ class GnssReceiver : public Component, public logger::ILoggable {
* @param [in] antenna_position_b_m: GNSS antenna position at the body-fixed frame [m]
* @param [in] quaternion_b2c: Quaternion from body frame to component frame (antenna frame)
* @param [in] half_width_deg: Half width of the antenna cone model [deg]
* @param [in] pseudorange_noise_standard_deviation_m: Standard deviation of normal random noise for pseudorange [m]
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[NITS] こちらを加えると後方互換性を崩すインターフェースの修正になるので、major updateになります。
PR作成時のlabelを変えてもらえると良いかなと思います。

@@ -139,6 +151,10 @@ class GnssReceiver : public Component, public logger::ILoggable {
double half_width_deg_ = 0.0; //!< Half width of the antenna cone model [deg]
AntennaModel antenna_model_; //!< Antenna model

// GNSS observation
double pseudorange_noise_standard_deviation_m_; //!< Random noise for pseudorange [m]
math::Vector<kNumberOfGpsSatellite> pseudorange_list_m_; //!< Pseudorange list for each GPS satellite
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MUST]
math::Vectorよりも、std::vectorなどの方がリスト表現には適しているかなと思います。
また、これがGps衛星だけしか扱わないのは違うかなと思います。

@@ -64,6 +68,18 @@ void GnssReceiver::MainRoutine(const int time_count) {
math::Quaternion quaternion_i2b = dynamics_->GetAttitude().GetQuaternion_i2b();
CheckAntenna(position_true_eci, quaternion_i2b);

// Pseudorange calculation
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[WANT] 後でここにノイズを加えていくことなどを考えて、関数として抜き出した方が良いかなと思います。また、関数化するときに搬送波位相と被る部分などをさらに抜き出して再利用性を上げることも考えてみてください。

@@ -64,6 +68,18 @@ void GnssReceiver::MainRoutine(const int time_count) {
math::Quaternion quaternion_i2b = dynamics_->GetAttitude().GetQuaternion_i2b();
CheckAntenna(position_true_eci, quaternion_i2b);

// Pseudorange calculation
size_t number_of_calculated_gnss_satellites = gnss_satellites_->GetNumberOfCalculatedSatellite();
for (size_t i = 0; i < number_of_calculated_gnss_satellites; i++) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[MUST]計算対象は可視衛星だけにすべきと思います。

double geometric_distance_m = (gnss_satellite_position_ecef_m - position_true_ecef_m).CalcNorm();
randomization::NormalRand pseudorange_random_noise_m;
pseudorange_random_noise_m.SetParameters(0.0, pseudorange_noise_standard_deviation_m_, randomization::global_randomization.MakeSeed());
double pseudorange_m = geometric_distance_m + pseudorange_random_noise_m;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[WANT] 今後どのようなノイズ・効果を加えていくべきかを明確にするため、TODOコメントでメモを書いておいてもらえると読みやすいかなと思います。

math::Vector<3> position_true_ecef_m = dynamics_->GetOrbit().GetPosition_ecef_m();
double geometric_distance_m = (gnss_satellite_position_ecef_m - position_true_ecef_m).CalcNorm();
randomization::NormalRand pseudorange_random_noise_m;
pseudorange_random_noise_m.SetParameters(0.0, pseudorange_noise_standard_deviation_m_, randomization::global_randomization.MakeSeed());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[Q]毎度パラメータを設定する必要はないかなと思いますがどうでしょう?

src/components/real/aocs/gnss_receiver.cpp Show resolved Hide resolved
@200km
Copy link
Member

200km commented Jan 6, 2025

CIこけてた理由はわかりませんが、devマージではないのでとりあえず様子見ということで進めたいと思います。

@fukudakazuya fukudakazuya added major update incompatible API changes and removed minor update add functionality in a backwards compatible manner labels Jan 6, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
component component emulation major update incompatible API changes priority::medium priority medium
Projects
Status: No status
Development

Successfully merging this pull request may close these issues.

2 participants