-
Notifications
You must be signed in to change notification settings - Fork 19
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
base: feature/gnss-receiver-update
Are you sure you want to change the base?
Add GNSS receiver pseudorange calculation #730
Conversation
There was a problem hiding this 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がこけているので通るように修正お願いします。
CIを回し直したら全て通りました. |
CIこけていた時のエラー文などは何が表示されていましたか? |
Run .\Debug\S2E.exe 上のようなエラー文が出ており、具体的なエラー内容がわかりませんでした。 |
There was a problem hiding this 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 |
There was a problem hiding this comment.
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] |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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 |
There was a problem hiding this comment.
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++) { |
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
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()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Q]毎度パラメータを設定する必要はないかなと思いますがどうでしょう?
CIこけてた理由はわかりませんが、devマージではないのでとりあえず様子見ということで進めたいと思います。 |
Related issues
#600
Description
擬似距離の計算を以下の式に従って追加した.
擬似距離=幾何学的距離+白色ノイズ
また各GPSから得られる擬似距離と,擬似距離と幾何学的距離の差をプロットするコードを追加した.
Test results
gnss_receiver.iniのprescaler は 1とした.
【各GPSから得られる擬似距離の値】
【擬似距離の白色ノイズ標準偏差を0mとしたときの擬似距離と幾何学的距離の差】
差は10^-8m程度である.
【擬似距離の白色ノイズ標準偏差を10mとしたときの擬似距離と幾何学的距離の差】
差は3シグマである30m以内にほぼ収まっている.
Impact
Describe the scope of influence of the changes, e.g.,
The behavior of feature ** changes.
Supplementary information
Provide any supplementary information.