Code Monkey home page Code Monkey logo

s2e_pbd's Introduction

S2E_PBD

  • Precise Baseline Determination
  • CDGPSの検証用コード

使い方

  • s2e-corev5.1.*を使う
  • ExtLibrariesにEigenをコピーする
    • Eigen自体は西本くんにもらう。五十里も持っている。
  • GNSS衛星軌道の元ファイルになるsp3ファイルはダウンロードしてくるか、西本くんにもらう
    • TODO: sp3ファイルダウンロードの仕方.

s2e_pbd's People

Contributors

shingonishimoto avatar 200km avatar

Stargazers

 avatar

Watchers

 avatar

s2e_pbd's Issues

開発環境をvscodeに移行する.

Summary (概要)

開発環境をVSからvscodeに移行する.

Detail (詳細)

詳しく

Impact (影響範囲)

Priority (重要度)

Note (補足)

なるはやでやりたい

GNSS受信ch数を設定して行列のサイズを固定にする.

Summary (概要)

受信するGNSSの数に依存せず,推定量の次元数を固定で扱えるようにする.

Detail (詳細)

現状だと,GNSSの受信数に応じて推定する整数不定性の数が変わるので,行列の次元が変化して扱いにくい.
ここを固定にして,整数不定性の推定ができているのかの確認ができるようにする.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

GCCでビルドするための微修正 - [merged]

In GitLab by @satoshi_ikari on Oct 7, 2022, 12:11

Merges feature/fix-for-gcc-build -> main

Summary (概要)

GCCでビルドするための微修正

Issue (イシュー)

NA

Detail (詳細)

  • PBD_GNSSReceiverILoggableを継承しているが、GNSSReceiverがすでに継承しているので、二重継承になり定義が曖昧になっていてビルドエラーがでていた。
  • あと、logフォルダが作られていなかったのでそれも追加した

Impact (影響範囲)

大:GCCでビルドできない

Priority (重要度)

Note (補足)

NA

クロック誤差を改善

Summary (概要)

#30 で書いたようにクロック誤差がRadial方向の相対誤差に影響している.それを何とかしたい.

Detail (詳細)

Impact (影響範囲)

Priority (重要度)

Note (補足)

PCOの推定自体はできているので,一旦PCVの方にもうつって,そのあとでもよさそう.

複合航法によるロバストな航法の実現について検討

Summary (概要)

GNSSと相対位置センサの複合航法によりミッション制約の緩和などができないか検討する.

Detail (詳細)

修論に含めるかどうかは微妙だが,PCVの推定がうまく行ったら相対位置センサを使って姿勢による制約の緩和などを実現できないかどうかを検討するのはいいかもしれない.

議論が複雑になりすぎないように注意が必要.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

経験加速度の座標系をRTNにする.

経験加速度として推定している外乱項において主に支配的なものが期待の進行方向にかかるair dragやSRPなどがある.これらを考えるとECIで求めるよりはRTNで出した方が精度がいいし,経験加速度の分散として与えるときのオーダーを合わせることが可能になる.

必要な修正は経験加速度を用いて積分するときの座標返還.

整数不定性バイアスの誤差分散共分散行列が観測更新時にうまく引き継げていない.

Summary (概要)

可視衛星数が変化するタイミングで整数不定性の誤差分散共分散の値がリセットされてしまう.

Detail (詳細)

整数不定性の誤差分散の更新において,可視衛星数が変化しないときには特に問題がないが,可視衛星数が変化するときに引き続き観測する衛星に関するものもリセットされてしまっているので,そこで精度が劣化している.IARを考えるとある程度まで落ち着いたら収束させて分散を0にし,それを引き継ぐという操作がないといけないはず.

Impact (影響範囲)

大:tool類が全部死ぬ... みたいな

Priority (重要度)

小:まあ暇なら,みたいな

Note (補足)

何かれば

提案手法のvalidationを実施

Summary (概要)

case studyをいくつか実施することでvalidationを実施する.

Detail (詳細)

validationのために以下の項目を振った際の結果を確認する.

  • 軌道(SSO,ISS軌道)
  • 相対**(周期解)
  • 受信機性能
  • 相対距離

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

S2E_COREを最新に更新する.

Summary (概要)

s2e_coreを最新版(2022/04/19現在)に更新する.

Detail (詳細)

OSS化されたバージョンへの更新ができていないので対応する.また,初期軌道指定方法として軌道要素でできるようになっているそうで,この方が圧倒的に色んな実験を回しやすいので反映したい.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

SHモデルベースの手法で行列サイズを小さくするための工夫をする.

Summary (概要)

SHモデルで得られた観測量を順に使用するだけでは行列サイズを小さくしたときに精度が出ないので修正.

Detail (詳細)

行列サイズが小さくてもアンテナの観測範囲に十分分布していれば推定結果は良くなるはず.
今はそれをせずに行列サイズを小さくして比較したので,小さいときに大きく劣化してしまった.
ただ,行列サイズを大きくすればオンボードでは計算できないほどのサイズになってしまうのでこれを実施する必要がありそう.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

観測GNSS衛星の種類を増やす

Summary (概要)

GNSSの種類を増やして,観測衛星数を増やすことで精度向上を目指す.

Detail (詳細)

現状GPSしか使用しておらず,観測衛星数が12chに見てないことがほとんどになっている.これがクロック推定精度などに影響している可能性もあるため,観測衛星数を増やせないか検討する.まず,一つの方法としてGPS以外のGNSSを導入する.このためにはsp3ファイルを増やして他GNSSの観測量模擬をする必要がある.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

適応カルマンフィルタの実装

Summary (概要)

適応カルマンフィルタを実装する.

Detail (詳細)

processノイズのパラメータとかを固定にするんではなくて,推定状況に合わせて適応させる適応カルマンフィルタを実装することで,精度の改善を図る.

Impact (影響範囲)

大:tool類が全部死ぬ... みたいな

Priority (重要度)

小:まあ暇なら,みたいな

Note (補足)

何かれば

Readmeに使い方を記入 - [merged]

In GitLab by @satoshi_ikari on Oct 7, 2022, 12:05

Merges feature/add-how-to-use -> main

Summary (概要)

Readmeに使い方を記入

Issue (イシュー)

NA

Detail (詳細)

Readmeに使い方を記入

Impact (影響範囲)

NA

Priority (重要度)

NA

Note (補足)

何かあれば

加速度ログの修正

Summary (概要)

core updateによって加速度ログが残るようになっているのにできてないので,user側の実装が間違っていそう.

Detail (詳細)

coreのsample satとかの実装を見て修正する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

PCVの低仰角部分の推定精度向上

Summary (概要)

PCV推定(特に球面調和関数を使用した方)における低仰角部分の改善

Detail (詳細)

ここにあるように低仰角部分の精度が悪いので精度向上できないか検討する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

推定系のダイナミクスに高次重力項の考慮も行う.

Summary (概要)

推定系のダイナミクスが現在J2のみになっているので,高次重力項も考慮できるように修正する.

Detail (詳細)

coreで真値の軌道伝播に外乱として付与されている高次重力ポテンシャルの追加を行う.
core側の機能をうまく使って実装する方法を考える.あと,軌道の積分部分もcore側を使うべき.

Impact (影響範囲)

大:tool類が全部死ぬ... みたいな

Priority (重要度)

Note (補足)

何かれば

観測残差に対する評価を実施する.

Summary (概要)

観測残差が推定前と後でどう変化したかについて解析して論文にまとめる.

Detail (詳細)

PCO,PCVの推定結果の評価として真値との比較だけをしてもわかりにくい,観測残差がどうなったかを示すことで,わかりやすくなる.各grid点に対して実施するのが一番詳しい調査ではあるが,仰角ごとに実施してplotするだけでも良い指標になる.この論文を参考にする.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

衛星間通信の模擬

Summary (概要)

観測情報の交換を衛星通信によって行っている様子を模擬する.

Detail (詳細)

SWの構成からしっかり練り直す.現在のままだとそれぞれの衛星がまとめて管理されているが,個々の衛星で取得できる情報は観測したもののみ,その中から衛星間通信によって観測量交換を行ってDifferential GNSSを行う.この時にどの情報がどのGNSS衛星に対応しているのかという情報も併せて必要になるが,これをどのように渡すのか,そもそも通信する情報として何を渡すのかという検討が必要になる.
相手との相関が必要になる場合にはCovariance Intersection( #3 )も関係してくるかもしれないので勉強する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

位相中心補正の途中で分散が落ちてしまう現象の理解

Summary (概要)

残差ベースの手法で推定していた時に途中ですべての誤差共分散が落ちてしまうときがあり,そのせいで絶対的な誤差が増大している.

Detail (詳細)

上に書いた通り.まずはこの事象の理解をしてそうならないような対策をする.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

SDIの考え方を理解する.

Summary (概要)

SDIの考え方を理解する.

Detail (詳細)

宮村先生の発表であった,波面補正の手法Sequential Diversity Imaging(参考資料)を勉強する.
意図的に与えたPhase Diversityを元に逐次的に補正していく,バッチ処理で行うよりも収束性とかがよさそう.

位相中心の補正とかでも,姿勢変更のストラテジーを立てるのに役立つ考え方なのかもしれない.

Impact (影響範囲)

大:tool類が全部死ぬ... みたいな

Priority (重要度)

小:まあ暇なら,みたいな

Note (補足)

何かれば

LAMBDAの中で共通の可視衛星が減った時のバグを直す

Summary (概要)

可視GNSS衛星が各衛星で見えている衛星数よりも減った時(2衛星間で別の衛星を見るとき)の実装をさぼっていた影響で,基線長を長くしたときにバグってしまったのでその部分を修正する.

Detail (詳細)

この場合は誤差共分散行列の対応付けを見直さないといけないのでめんどくさいが,それをしないとうまく行かない.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

相対位置センサの観測精度およびアライメント誤差の影響解析

Summary (概要)

相対位置センサの観測精度およびアライメント誤差の影響解析

Detail (詳細)

現在,参照情報としている相対位置センサの観測精度(ランダム誤差の分散),アライメント誤差を動かしたときに今回の手法が成立するのかどうかは気になる部分なので検証する.特に初期に仮定している相対位置センサの精度はかなり良いものになっているので注意が必要.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

DGPS機能の実装

Summary (概要)

S2Eを使ってDGPSによる相対測位ができるようにする.

Detail (詳細)

  • 測位機能の実装
  • 衛星間通信による測位情報受け渡し

Impact (影響範囲)

Priority (重要度)

Note (補足)

基本的な機能が実装できれば完了とする.

位相中心を考慮した観測量の実装

Summary (概要)

現状,位相中心をなにも考慮してないのでPCO,PCVを考慮した観測量の実装をする.

Detail (詳細)

PCVに関してはANTEXファイルを拾ってきて,やればいい.まずは,この真値系の実装をやらないと何も始まらない.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

推定系のSTMに高次重力項を考慮する

Summary (概要)

STM計算に高次重力項を入れる

Detail (詳細)

現状軌道伝搬部分部分でしか考慮できてない

Impact (影響範囲)

大:tool類が全部死ぬ... みたいな

Priority (重要度)

小:まあ暇なら,みたいな

Note (補足)

何かれば

PCO推定時に途中で姿勢を変更することで初期誤差を修正できないか検討

Summary (概要)

PCO推定結果の内along-track方向の誤差がでかい.これを修正するために姿勢変更が使えないかを検討する.

Detail (詳細)

#32 から引き継ぎ.イタレーションではなくて,途中で姿勢を変更することでPCO推定誤差が良くならないかを検討する.
元々の相対軌道が回転するようなものであれば,衛星の到来方向が変化するのでPCOの推定精度が上がるのかもしれない,

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

位相中心推定をイタレーションによって改善

Summary (概要)

PCO→PCVの推定だけで終わるのではなく,くり返すことで精度が改善しないかを検討する.

Detail (詳細)

特にPCOはそれほど精度が高くないので,最初に求めたときのPCVの誤差が小さくなった状態で再度やれば改善するのではないか?

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

相対位置センサの統合

Summary (概要)

相対位置センサを組み込んだ複合航法系を構築する.

Detail (詳細)

抱えている課題を解決するような航法系を組みたい.

  • センサーキャリブレーション
  • ハイパーパラメタチューニング
  • ミッション制約の緩和

Impact (影響範囲)

Priority (重要度)

Note (補足)

上の課題に対する理論的なアプローチも行いたい.

EKFクラスの実装

Summary (概要)

EKFに限らず,推定手法のクラスを作っておいて,ダイナミクスと観測モデルを与えて初期化すれば解ける,という形にしておけば,いろんな推定手法に拡張ができる.

Detail (詳細)

詳しく

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

相対位置センサの観測頻度に関する検討

Summary (概要)

相対位置センサの観測頻度を下げる or 現実的なものにしても問題ないのかを検討する.

Detail (詳細)

現状,GNSS観測量と同じ頻度で相対位置センサの観測量が得られると仮定しているが,実際にはそうではない可能性がある.これについて調べると同時に,そうでなく頻度がさらに低い(例えば1分起きとか)場合であっても対応できるように拡張 or 評価を実施するべき.
やれることとして

  • 観測量が得られてない時間の相対位置ベクトル情報としては相対位置センサの観測量をKFを使って更新する.
    • これは本来,すでにやるべきなことではある.今はかなり高精度な相対位置センサを考えているので,それがどこまでの精度まで役に立つのか,どんな誤差特性を持ったものであれば行けるのかということにつながる.
  • そもそも相対位置の変動は観測時間の間隔においては,軌道的にそれほど大きくないということが言えるのかどうか確認する.
    • これが問題ない(相対位置ベクトルが変化していく時定数は観測頻度に対して十分大きい)といえれば実装を変える必要はなく,その評価をもとにこの実装が妥当であるということを言えばいい.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

初期位置指定方法の修正

Summary (概要)

複数衛星の初期位置を指定する際に,reference衛星以外の衛星の位置はLVLHとかで指定できるようにしたい.

Detail (詳細)

現在Dynamicsの伝搬にRelativeOrbitを使ってないので,初期位置指定方法がECIとかになっている.
ここをRelativeOrbitなどを使うことで,直感的な指定をできるようにしたい.

Impact (影響範囲)

Priority (重要度)

Note (補足)

NA

Double Differenceを観測量にした場合も実装する.

Summary (概要)

DDを観測量に取ったアルゴリズムを実装する.

Detail (詳細)

DDで参照衛星(pivot衛星)をElevation最大のGNSS衛星としたときに,観測方程式の行列をどう組み替えなければいけないかを実装しながら整理する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

NA

重力ポテンシャルの影響を考察する.

Summary (概要)

真値系の重力ポテンシャルの次数を上げたときの影響に関して調べる.

Detail (詳細)

現状だと相対測位の精度に影響しているのが重力項ではなくて初期位置だけになってしまっている.これが正しいのか,実際に計算ができていないのかを調べる.

Impact (影響範囲)

大:tool類が全部死ぬ... みたいな

Priority (重要度)

小:まあ暇なら,みたいな

Note (補足)

何かれば

シミュレーションの計算コスト低下を考える

Summary (概要)

シミュレーションの計算コスト低下を図る.

Detail (詳細)

S2Eだけで回すとそこまで遅くないのに測位部分を入れるとかなり長い時間がかかってしまっている.

  • どの部分に時間がかかっているかの洗い出し
  • 対策を講じる.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

受信機クロックバイアス推定のデバッグ

結果を確認すると観測更新時にバイアスが乗っている形になっていて,クロックの精度を見ると十分に推定できていないことが分かる.
現在の受信機クロックバイアスの真値のモデル化は白色雑音になっているが,それに対して推定系で白色雑音でモデル化してもrandom walkでモデル化しても結果が変わらず,途中から大きなバイアスが乗った推定結果になっている.推定値の移動の傾向としては一致しているが,バイアスが乗っている形になっている.この原因が何なのかを明確にして推定精度を向上させる.

経験加速度の修正

Summary (概要)

経験加速度推定がうまく行ってない感じ.それを改善する.

Detail (詳細)

定式化はあっていそうな印象ではあるが再度見直すところから.あと二つのパラメタをどうすればよくなるのかをもっと検討する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

クロックのモデル化を改善

Summary (概要)

GNSS衛星クロックのモデルと衛星クロックのモデル化が適当なので修正する.

Detail (詳細)

white noiseとかrandom walkだけだと不正確なのでアラン分散を基にPSDを使ったモデル化をする.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

PCVの推定部分を実装

Summary (概要)

PCVを球面調和関数の様なもので推定する

Detail (詳細)

モデルとして球面調和関数がいいのかどうかも検討する.ただ,第一段階としてはその方針で問題ないと考えている.
とりあえず十分な時間回して推定が収束するのかどうかは見てみる.ただ,定式化の部分からまとめていく必要があるし,リアルタイムに実施するというよりは一定時間の観測量がたまってから実施するという形になるのかもしれない.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

アライメント誤差の補正

Summary (概要)

シミュレータにアライメント誤差を入れ込んで軌道上補正を試みる.

Detail (詳細)

アンテナの位置から重心への補正を考え,一旦PCVとかは考えずにアライメント誤差が存在していた時の補正手法を検討し,シミュレーションによって検証する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

測位計算に含める整数不定性を選択的にするアルゴリズムを実装

Summary (概要)

測位計算に使用する衛星はfix解が得られているものだけに限定することで新規の衛星が来た時の精度劣化を防止する.

Detail (詳細)

現状,観測chにある衛星は全部使用して測位を実施している.ただ,不定性解除を導入している関係で新規に見えた衛星がいた場合その瞬間の不定性の精度が悪いので測位結果にも悪影響を及ぼしている.それを防止するためにfix解を得られている衛星が一定数存在している場合には解除できている衛星のみを測位計算に使用するようなアルゴリズムに修正する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

地上における精密測位(CLASなど)ではこの方法が導入されている?らしい.

GNSSのsp3ファイルをシミュレータ側と推定側で変えて情報誤差の影響を入れる.

Summary (概要)

現状GNSSの情報誤差を無視してしまっているのでそれが妥当かを検討.

Detail (詳細)

SDCPとGRAPHICを使用する中で,情報誤差が影響してくるのはGRAPHICだけなのでその部分がどれくらい精度に聞いてくるのかを確認して,問題ないなら実際と同じように放送暦を使用するように修正する.あまり重要ではないが,突っ込まれるポイントな気もするのでSFMMまでに実施したい.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

PCO推定のバグFIX

Summary (概要)

PCO推定がうまく行っていない原因を特定する.

Detail (詳細)

相対PCOの推定計算部分を実装したが,うまく推定できていない.経緯としては,はじめ不定性FIXしてない状態で解こうとしていたら不定性誤差も同時に推定されているような状態になっていたので,不定性解除部分を先に実装( #16 ).ただ,その後もうまく行っていないので原因を特定する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

GNSS受信機クラスを使った観測量の実装をする.

Summary (概要)

タイトルの通り

Detail (詳細)

今は独自の観測量のためのvector使っているけど,すでにGNSS_Receiverクラスにあるものを使う.

Impact (影響範囲)

Priority (重要度)

大:わかりやすくなる.

Note (補足)

何かれば

GNSS受信機のパラメタを整理

Summary (概要)

GNSS受信機の観測ノイズなどを適切に設定する.

Detail (詳細)

ノイズパラメタの設定をDiGiTaLからとってきただけになってしまっているので超小型衛星に適切な設定にして,それをdefaultとして検証を実施する.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

PCO推定アルゴリズムの改善

Summary (概要)

PCOの推定が初期値に応じてうまく行かないときがあるので改善する.

Detail (詳細)

現状,不定性解除できた時だけ推定に移る.という実装にしているが,初期のずれが大きいときには,不定性解除に失敗し続けることになるので推定がうまく行かない & 不定性解除にも失敗してしまうことになる.そのため,初期はfloatの状態である程度まで追い込んで,その後fixした解を用いて最終的なPCOとして推定するということができればいいのかもしれない.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

相対位置センサのバイアス誤差への対応を考える.

Summary (概要)

相対位置センサの観測量にバイアスが入ってた場合にどうすればよいかを検討.

Detail (詳細)

#38 から引き継ぐ.バイアスがあると,相対位置としてもそのバイアスを持った値になってしまう.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

PCV推定の部分のバグ修正

Summary (概要)

PCV推定の計算において同じ方向の配列に対して残差の数と重みの数が一致しないときがある.

Detail (詳細)

Description (詳細症状)

残差ベースの計算のために各方向に応じた配列を持ち,それぞれ残差と重みを保持して平均化しているが,その数が一致しないときが存在する.

Situation (発生条件)

平均化のためのgridサイズを細かくして5x5にしたときに発生したのでそれが関係しているのかもしれない?

  • 条件としてはSSO軌道で1kmのseparationで実施しているとき,時間は3時間としていて約5280s付近で発生.

Additional Materials (追加資料)

あればリンクなどを貼る

Task (作業)

  • まずはどこで不一致が生じているのかの特定して修正する.
  • あれする

Impact (影響範囲)

Priority (重要度)

Completion Condition (完了条件)

  • これがこうなる
  • あれがそうなる

Note (補足)

何かれば

整数不定性解除アルゴリズムの実装

Summary (概要)

整数不定性解除アルゴリズムの実装をし,さらなる高精度化を図る

Detail (詳細)

実装するのはmLAMBDA.現在のfloat解から更なる向上のためにこれを進める.

Impact (影響範囲)

Priority (重要度)

Note (補足)

何かれば

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.