武漢大学のオープンソース統合ナビゲーションライブラリのKF-GINSプログラムの解釈(GPT3.5による)

KF-GINS分析レポート(GPT3.5による)

KF-GINS ソースコード:
https://github.com/i2Nav-WHU/KF-GINS

次に、以下のプロジェクトをファイルごとに解析してください

[0/16] 次のプログラム ファイルの概要を教えてください: .\KF-GINS-main\src\common\angle.h

このファイルは、角度変換のための定数と関数を定義する C++ ヘッダー ファイルです。

ファイルは最初に 2 つの定数を定義します。D2R は角度とラジアンの比 (つまり π/180) を表し、R2D はラジアンと角度の比 (つまり 180/π) を表します。

次に、Angle という名前のクラスが定義されます。これは 4 つの静的関数を定義します。rad2deg と deg2rad は、ラジアンと角度の間の変換を実現します。また、rad2deg と deg2rad には、形式パラメータが固有行列である 2 つの関数もあり、対応する行列の各要素をラジアンから角度、または角度からラジアンに変換できます。

最後に、ファイルはヘッダーで保護され、複数のインクルードを防ぎます。

[1/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\common\earth.h

このプログラム ファイルはEarth、地球関連の関数と定数を含む というクラスを定義します。

その中で、メンバー関数は次のとおりです。

  • gravity: 特定の場所における重力による法線加速度を計算します。
  • meridianPrimeVerticalRadius:子午線半径と魔王円半径を計算します。
  • RN: 単位円の半径を計算します。
  • cne: ナビゲーション座標系から地球中心の地上固定座標系への変換行列を計算します。
  • qne: ナビゲーション座標系から地球中心の地上固定座標系への変換四元数を計算します。
  • blh: クォータニオンをナビゲーション座標系から地球中心の地球固定座標系に変換して、緯度と経度を取得します。
  • blh2ecef:測地座標(緯度、経度、標高)を地球中心の地球固定座標に変換します。
  • ecef2blh:地球中心の地球固定座標を地球座標に変換します。
  • DRi: n 系の相対位置を地球座標の相対位置に変換します。
  • DR:地球座標の相対位置をn系の相対位置に変換します。
  • local2global: ローカル座標(原点で展開)を地球座標に変換します。
  • global2local: 地球座標をローカル座標に変換します (原点で展開)。
  • local2global: ローカル座標(原点で展開)を地球座標と回転行列に変換します。
  • global2local: 地球座標とローカル座標への回転行列 (原点で展開)。
  • iewe: 地球の自転の角速度は e 系に投影されます。
  • iewn: 地球の自転の角速度は n 系に投影されます。
  • iewn: e 系に対する n 系の回転角速度は、n 系に射影されます。

このクラスで定義されている定数は次のとおりです。

  • WGS84_WIE: 地球の自転角速度。
  • WGS84_F: 平坦度。
  • WGS84_RA: 長半径 a.
  • WGS84_RB: 準短軸 b.
  • WGS84_GM0: 地球の重力定数。
  • WGS84_E1: 第一偏心二乗。
  • WGS84_E2: 2 番目の偏心量。

[2/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\common\logging.h

プログラム ファイルは「logging.h」という名前のヘッダー ファイルで、主な機能が次のような Logging クラスを提供します。

  • グロログ システムを初期化します。
  • ログを生成するために、LOGI、LOGW、LOGE、LOGF、DLOGI などのいくつかのマクロが定義されています。
  • printMatrix() や doubleData() など、いくつかの印刷および書式設定出力関数が定義されており、これらは行列および浮動小数点データを文字列形式に変換するために使用されます。

具体的には、プログラム ファイルには次のセクションが含まれています。

  • ヘッダー ファイルと名前空間の宣言。
  • ログ出力マクロ定義。
  • Logging クラスの定義。
  • Logging クラスのメンバー関数定義。

このプログラムファイルの主な機能をまとめると、ログ出力、マトリックス印刷、浮動小数点データ形式出力などの機能を提供する、汎用的で便利なログ出力ツールライブラリです。

[3/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\common\rotation.h

このプログラム ファイルは、「rotation.h」という名前の C++ ヘッダー ファイルです。このファイルは「Rotation」という名前のクラスを定義します。このクラスには、行列と四元数の間の変換、オイラー角と行列の間の変換、ベクトルの外積演算などのための複数の静的メソッドが含まれています。具体的な方法は以下の通りです。

  • math2quaternion(): 回転行列を四元数に変換します。
  • quaternion2matrix(): クォータニオンを回転行列に変換します。
  • matrix2euler(): 回転行列をオイラー角に変換します (ZYX 次数、正面右下 IMU)。
  • quaternion2euler(): クォータニオンをオイラー角に変換します (ZYX オーダー、前面右下に IMU)。
  • rotvec2quaternion(): 回転ベクトルを四元数に変換します。
  • quaternion2vector(): クォータニオンを回転ベクトルに変換します。
  • euler2matrix(): オイラー角を回転行列 (ZYX 次数) に変換します。
  • euler2quaternion(): オイラー角を四元数に変換します。
  • skewSymmetric(): ベクトルの外積行列を計算します。
  • quaternionleft(): クォータニオンの左乗算行列を計算します。
  • quaternionright(): クォータニオンの右乗算行列を計算します。

Eigen ライブラリ内の行列およびベクトル演算に関連する関数は、ヘッダー ファイルで呼び出されます。さらに、このヘッダー ファイルには GNU 一般公衆利用許諾契約書が含まれています。

[4/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\common\types.h

プログラム ファイル common\types.h では、GNSS、IMU、および Pose の 3 つのデータ タイプが定義されており、それぞれ全地球測位衛星システム データ、慣性測定ユニット データ、および姿勢データを表します。これらの構造体には、各データ型で必要な情報を表すために使用されるさまざまなメンバー変数が含まれています。GNSS および IMU 構造では、time はタイムスタンプを表し、blh と std は位置と標準偏差を表し、dtheta と dvel は角速度と線速度を表し、odovel は元の速度を表します。Pose 構造では、R は回転行列を表し、t は並進ベクトルを表します。さらに、プログラム ファイルは、Eigen ライブラリ内のいくつかの型も参照し、typedef キーワードを使用して新しい型名を定義します。これにより、コードの記述が簡素化されます。

[5/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\fileio\filebase.h

これは、fileio\filebase.h という名前の C++ プログラム ファイルです。このファイルは、ファイルの読み取りおよび書き込み操作のための FileBase クラスを定義します。このクラスには次のメンバー関数があります。

  • コンストラクター: デフォルトのコンストラクター。
  • デストラクター: クラスのデストラクター。
  • close(): ファイル操作関数を閉じます。
  • isOpen(): ファイルが開いているかどうかを判断する関数。
  • isEof(): ファイルがファイルの終わりに達したかどうかを判断する関数。
  • fstream(): ファイルストリーム関数を取得します。
  • columns(): ファイルの列番号関数を返します。

このクラスには次のメンバー変数もあります。

  • filefp_: ファイルポインタ。
  • filetype_: ファイル タイプ、TEXT または BINARY。
  • columns_: ファイルの列数。

このファイルの主な機能は、他のファイルが呼び出すのに便利なファイル操作関数をカプセル化することです。

[6/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\fileio\fileloader.h

プログラム ファイルは、fileloader.h という名前のヘッダー ファイルです。

このファイルは、FileBase クラスを継承する FileLoader クラスを定義します。FileLoader クラスの主な役割は、データを含むファイルを読み取り、ロードすることです。このクラスには、次のパブリック メンバー関数が含まれています。

  • コンストラクター: FileLoader オブジェクトの作成に使用されます。
  • open() 関数: 指定されたファイルを開き、読み取りに必要な列数とファイル タイプを設定するために使用されます。
  • load() 関数: 連続データ ブロックをロードするために使用されます。
  • loadn() 関数: 複数のデータ ブロックを含むファイルをロードするために使用されます。
  • load() 関数: 指定されたファイルから指定されたベクトルにデータをロードするために使用されます。
  • loadn() 関数: 指定されたファイルから指定された 2 次元ベクトルに複数のデータ ブロックをロードするために使用されます。

FileLoader クラスには、実際にファイルの読み取り操作を実行するために使用されるプライベート メンバー関数 load_() も含まれています。また、ロードされたデータ ブロックを一時的に保存するために使用されるプライベート メンバー変数 data_ も含まれています。

ファイルの著作権情報と GNU General Public License の使用条件は、ファイル全体のコメントに記載されています。

[7/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\fileio\filesaver.h

このプログラム ファイルは、FileBase クラスのサブクラスである FileSaver というクラスを定義します。このクラスは、ファイルを開いたり、ファイルにデータを書き込んだりするための関数を提供します。このクラスはデータの保存に使用されます。プログラムは C++ 言語で書かれており、fstream、string、vector の標準ライブラリと、absl ライブラリの absl::strings::string_view クラスに依存します。このファイルで定義されたクラスは、ファイル ストリームの形式でテキストまたはバイナリ形式でローカル ディスク ファイルにデータを書き込みます。このうち、 dump 関数は 1 次元ベクトルをファイルに書き込み、 dumpn 関数は 2 次元ベクトルをファイルに書き込みます。

[8/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\fileio\gnssfileloader.h

プログラム ファイルは、gnssfileloader.h という名前の C++ 言語に基づくヘッダー ファイルで、主に GNSS ファイルの内容を読み取るために使用されます。GnssFileLoader クラスはファイル内で定義されており、FileLoader クラスを継承し、次の GNSS データを読み取るためのメンバー関数 next() を実装します。この関数はデータを data_vector にロードし、gnss_ 構造体を割り当ててそれを返します。ファイル名と列数を取得してテキストとして開くコンストラクターもファイル内に定義されています。ファイルから読み取られたデータには、24 時間以内の GNSS 位置座標と速度情報が含まれます。

[9/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\fileio\imufileloader.h

プログラム ファイルの名前は imufileloader.h で、FileLoader クラスを継承し、テキスト ファイルまたはバイナリ ファイルから IMU (慣性測定ユニット) データをロードするために使用される ImuFileLoader という名前のクラスを定義します。このクラスには、コンストラクター、next() メソッド、starttime() メソッド、および endtime() メソッドが含まれています。

コンストラクター ImuFileLoader の機能は、指定されたファイル名でファイルを開き、ファイルの種類 (テキスト ファイルまたはバイナリ ファイル)、各行に含まれるデータ量、およびサンプリング レートを保存することです。次に、サンプリング時間 dt がサンプリング レートから計算されます。

next() メソッドは、データ ファイルの次の行を読み取り、それを IMU オブジェクトに解析します。このメソッドは、2 つの IMU 時間間の dt も計算し、それを IMU オブジェクトの dt メンバー変数に格納します。IMU 時間間隔が 0.1 秒より大きい場合、IMU オブジェクトの dt は dt_ に設定されます。データ ファイルに 8 番目の要素がある場合、それは IMU オブジェクトの odovel メンバー変数に格納されます。

starttime() メソッドは、ファイル読み取りポインタをファイルの先頭に移動し、データの最初の行のタイムスタンプを返します。

endtime() メソッドは、ファイル読み取りポインタをファイルの末尾に移動し、データの最後の行のタイムスタンプを返します。ファイル タイプがテキスト ファイルの場合、最終行の位置は復帰を読み取ることによって決定されます。

[10/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\kf-gins\gi_engine.h

プログラムファイル名は「gi_engine.h」で、KF-GINSプログラムパッケージ内のヘッダファイルに属し、主にGIEngineクラスの宣言と定義が含まれます。GIEngine は、EKF (拡張カルマン フィルター) に基づく GNSS/INS (全地球測位システム/慣性航法システム) 統合ナビゲーション アルゴリズムです。その主な機能には、新しい IMU (慣性測定装置) データと GNSS (全地球航法衛星システム) データの追加、新しい IMU データの処理、IMU データの補間、現在時刻の取得、現在の IMU 状態の取得、現在の状態の共分散の取得などが含まれます。このうち、カルマン予測とカルマン更新はEKFに基づくカルマンフィルタリング処理である。さらに、IMU エラー補正、ステータス更新、共分散チェックなどのいくつかの補助機能が含まれています。

[11/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\kf-gins\insmech.h

プログラム ファイルは、kf-gins\insmech.h という名前の C++ ヘッダー ファイルです。このファイルは、INSMech という C++ クラスを定義します。このクラスには、内部の機械的な組み合わせ (INS Mechanization) を計算するための静的関数が含まれています。内部機械化を計算します。この C++ クラスは、posUpdate、velUpdate、attUpdate の 3 つの静的関数を定義します。各関数は 2 つの IMU データと 1 秒前の PVA 状態を入力として受け取り、現在の PVA 状態を出力として受け取ります。全体として、プログラム ファイルは INS Mechanization を計算するためのアルゴリズムを実装します。

[12/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\kf-gins\kf_gins_types.h

これは、kf_gins_types.h という名前の C++ プログラム ファイルで、主にいくつかの構造体の定義が含まれています。一般的に使用される構造には次のものがあります。

  1. 姿勢: クォータニオン、方向余弦行列、オイラー角を含む姿勢を示します。
  2. PVA: 3 つのベクトルを含む位置、速度、姿勢を表します。姿勢は姿勢によって定義されます。
  3. NavState: 位置、速度、オイラー角、IMU エラーなどのナビゲーション状態を示します。
  4. ImuError: IMU の誤差偏差とスケールファクタ誤差を示します。
  5. ImuNoise: IMU のノイズ (角速度ランダム ウォーク、加速度ランダム ウォーク、ジャイロスコープ バイアス、加速度計バイアス、ジャイロスコープ スケール ファクタ エラー、加速度計スケール ファクタ エラー、および時間関連項目) を示します。
  6. GINSOptions: 初期状態と状態標準偏差、IMU ノイズ パラメーター、設置パラメーターなど、GNSS/INS ナビゲーション システムのオプションを示します。

さらに、プログラム ファイルにはいくつかの定数と関数定義も含まれています。

[13/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\kf_gins.cpp

このプログラムは、拡張カルマン フィルター (EKF) に基づく GNSS/INS (正式名称全地球航法衛星システム/慣性航法システム) 統合ナビゲーション システムです。このプログラムは、GIEngineEKF フィルタリング アルゴリズム、ナビゲーション ステータスの更新、エラー補償などの機能を実装するクラスをカプセル化します。このプログラムは、IMU データと GNSS データを読み取り、処理し、航行状態の推定結果と関連する統計指標を出力できるインターフェイスを提供します。

プログラムはmain関数で構成されており、行列演算用のライブラリや処理経過の計測や表示用のライブラリなどの外部ライブラリmainを利用します。main 関数は、まず YAML 形式の構成ファイルを読み取り、次に IMU データと GNSS データを読み取り (ファイルから読み取り)、構成パラメーターを構造にロードして、オブジェクトを構築します次に、プログラムは出力ファイルのパスと形式を設定し、データを調整して処理し、最後にナビゲーション ステータスと関連統計を出力します。EigenabslGINSOptionsGIEngine

プログラム内の関数はloadConfig、構成ファイルを読み取り、関連するパラメーターをGINSOptions構造に保存し、プログラムで使用される標準単位に変換するために使用されます。writeNavResultこの関数はナビゲーション状態をナビゲーション結果ファイルに保存するために使用され、writeSTD関数は共分散行列の標準偏差を対応するファイルに保存するために使用されます。

[14/16] 次のプログラム ファイルの概要を教えてください: .\KF-GINS-main\src\kf-gins\gi_engine.cpp

このプログラムファイルは、Extended Kalman Filter (EKF) に基づく GNSS/INS 統合ナビゲーション システムの実装であり、ファイル名は「gi_engine.cpp」です。GNSS と IMU の測定を融合することにより、システムは GNSS または IMU を単独で使用する場合よりも正確なナビゲーション状態の推定を提供できます。

プログラムは、「GIEngine」という名前のクラスを定義することから始まり、そのコンストラクターはシステム セットアップ オプションを受け取り、いくつかの初期値と共分散行列、およびシステム ノイズ行列の初期化を設定します。位置、速度、姿勢、IMUエラーを初期化する「初期化」と呼ばれる機能が実装されています。次の「newImuProcess」関数はプログラム全体の中核部分であり、GNSS データが有効かどうかを判断することで、GNSS ナビゲーション状態を更新し、システム状態をフィードバックするかどうかを決定し、同時に IMU 測定値を介してシステム状態の伝播と共分散行列の更新を計算します。関数「imuCompensate」は、IMU のエラーを補正するために使用され、状態の伝播のために IMU データを関数「insPropagation」に渡します。最後の関数「insPropagation」は、状態遷移行列、伝播ノイズ行列、ノイズ駆動行列の初期化を実現し、機械配置アルゴリズムを通じて IMU の状態更新と姿勢誤差伝播を計算し、状態行列と共分散行列を更新します。

このプログラムは、GNSS/INS 融合ナビゲーションの基本機能を実現し、GNSS 測定と IMU 測定を効果的に融合するための手法を提供します。

[15/16] 次のプログラムファイルの概要を教えてください: .\KF-GINS-main\src\kf-gins\insmech.cpp

このプログラム ファイルは、KF-GINS (EKF ベースの GNSS/INS 統合ナビゲーション システム) の一部であり、INS の機械部分の 3 つの主要なステップ (速度更新、位置更新、および姿勢更新) を実現します。速度更新では比力積分項目と重力・ゴシック積分項目に従って速度を更新し、位置更新では中間時刻への速度外挿により位置を更新し、姿勢更新では速度更新により中間時刻の速度と位置を求め、回転四元数を計算して姿勢行列を更新する。

このプログラム ファイルには、いくつかのサブ関数と行列計算が含まれており、その重要な部分には次のものがあります。

  • 比力積分項による速度の更新
  • 速度と位置の外挿
  • 子午線や魔王円半径などの地理パラメータの計算
  • 重力/ゴシック積分項の速度更新
  • 姿勢行列と回転四元数の計算

これらの計算は、IMU 測定とナビゲーション計算の処理における重要なステップを実装します。

上記の独自の分析に基づいて、プログラムの全体的な機能と構造を要約します。次に、マークダウン テーブルを使用して、各ファイルの機能 (common\angle.h、common\earth.h、common\logging.h、common\rotation.h、common\types.h、fileio\filebase.h、fileio\fileloader.h、fileio\filesaver.h、fileio\gnssfileloader.h、fileio\imufileloader.h、kf-gins\gi_eng ine.h、kf-gins\insmech.h を含む) を整理します。 、kf-gins\kf_gins_types.h、kf_gins.cpp、kf-gins\gi_engine.cpp、kf-gins\insmech.cpp)。

プログラム全体の機能設計

このプログラムは、GNSS/INS融合によるナビゲーションシステムであり、GNSSデータとIMUデータを読み取り、両者を組み合わせて航行状況を計算し、ファイルに出力することができます。全体的な構造は 2 つの部分に分かれています。

  1. 共通フォルダーにあるヘッダー ファイルは、いくつかの基本的な数学ツール関数やデータ型定義などを提供するために使用されます。
  2. fileio フォルダーと kf-gins フォルダーにあるソース ファイルは、データの入力と出力、GNSS/INS ナビゲーション システムの計算と実装を行うために使用されます。

ファイル機能の概要

ファイル名 関数
角度.h ラジアンと角度を変換する関数を提供します。
地球.h 回転角速度、長半径と短半径、重力定数など、地球の関連パラメータの定義を提供します。
ロギング.h ログ出力、マトリックス印刷、浮動小数点データの整形出力などの機能を提供します。
回転.h 回転行列計算のためのいくつかの関数を提供します。
タイプ.h プログラムで使用されるいくつかの基本的なデータ型と定数が定義されています。
ファイルベース.h ファイル操作関数はカプセル化されているため、他のファイルから呼び出すのに便利です。
ファイルローダー.h ファイルを読み取り、データをメモリに保存します。
ファイルセーバー.h データをファイルとしてメモリに保存します。
gnssfileloader.h GNSS データ ファイルを読み取ります。
imufileloader.h IMU データ ファイルを読み取ります。
gi_engine.h GNSS/INS ナビゲーション エンジンの初期化と共分散計算を実装しました。
insmech.h IMU 測定を PVA 状態に解決する機械的オーケストレーション アルゴリズムを実装しました。
kf_gins_types.h 初期状態と状態標準偏差、IMU ノイズ パラメータ、設置パラメータなど、GNSS/INS ナビゲーション システムのオプションが定義されています。
kf_gins.cpp メイン関数は、設定ファイルを読み取り、GNSS/INS ナビゲーション システムを実行します。
gi_engine.cpp GNSS/INSナビゲーションエンジンの機能を実装しました。
insmech.cpp 機械的なオーケストレーション アルゴリズムを実装しました。

おすすめ

転載: blog.csdn.net/kanhao100/article/details/129890678