GithubHelp home page GithubHelp logo

toppers / hakoniwa-px4sim Goto Github PK

View Code? Open in Web Editor NEW
23.0 7.0 5.0 22.78 MB

PX4-compatible drone simulation with physics-based modeling in C, visualizations via game engines, headless operation, and automated test scenarios. Supports external parameterization and MATLAB/Simulink integration.

C++ 74.38% Python 12.71% CMake 4.20% Shell 5.18% Dockerfile 0.52% C 2.62% Batchfile 0.39%
drone drones hakoniwa mavlink px4 simulation

hakoniwa-px4sim's Issues

PX4との通信インタフェースと箱庭の物理モデルとの間のインタフェース仕様を定義し、センサ/アクチュエータモデルのコンポーネント仕様を作る

現時点(2023/11/24)で、PX4と箱庭の物理モデル(DronePhysics)との通信齟齬があり、PX4からの指示で箱庭上のドローンの姿勢制御が安定しないという問題がある。

箱庭の物理モデルは以下の通り。

image

image

image

安定しない原因は、以下のいずれかが考えられる。

  • HIL_SENSORの設定値に誤りがある
  • HIL_GPSの設定値に誤りがある
  • HIL_ACTUATOR_CONTROLSからモーター駆動する物理処理部に誤りがある
  • ドローンの物理式がPX4の想定と異なる

(※) AirSimとPX4との間の通信パケット調査した結果、上記3メッセージのみが制御に関係していることを確認した。

そこで、問題の所在を明らかにするために、下図の通り、箱庭上の物理処理部分をコンポーネント分割し、各コンポーネントの入出力仕様を明らかにする。まずは、こちらの想定で仕様を仮定義し、第三者がチェックしやすいドキュメントを整備する。

スクリーンショット 2023-11-24 10 33 49

クォータニオンの変換関数が間違っている

現象として、クォータニオンからオイラー角に変換すると、Y軸とZ軸の角度の符号が逆転していることを確認した。

該当ファイルは以下の通り。以下のずれかがずれているものと思われる。

  • euler2Quaternion
  • quaternion2Euler

箱庭が送信するセンサデータの座標系の仕様を定義する

センサのデータ値は、座標系を知らないと適切な値を設定できないものがある。

以下のデータを現時点では送信しているが、各メンバをチェックし、仮説としての仕様を定義する。
問題があれば、この仕様とコードを一致させたい。

  • HIL_GPS
  • HIL_SENSORS
  • HIL_STATE_QUATERNION

ノイズ対応

  • 各種センサに必要なノイズの選定と設定を行う。
  • 送信スレッド側でノイズを入れているが、削除する。

AirSimとPX4の間のパケットデータを解析する

以下の情報をサマリデータとしてまずは解析する。

  • 流れているパケットの種類
  • 流れているパケットの送信周期
  • 流れているパケットのシーケンス
  • 流れているパケットのデータ(代表値で良い)

Windows版の対応をする

作業タスク一覧

  • 箱庭のdocker ファイルを作成する
  • Windows版Unity環境を作成する
  • PX4のdockerコンテナをWindows向けにカスタマイズする
  • 動作チェックする

vehicle_local_positionでPID制御できるようにする

px4_hakoniwaは、現状、vehicle_global_position_groundtruth を参照してZ軸の位置のPID制御をしている。

しかし、PX4標準のモジュール群は、カルマンフィルタ (ekfs) が生成する vehicle_local_position を参照して、制御を行っている。

そのため、 px4_hakoniwa でも、同様に vehicle_local_position で位置制御できるようにしたい。

MATLAB/Simulinkの生成コード対応

以下の対応を行う予定

  • MATLAB/Simulink用の箱庭APIモデル作成
  • プラント側と制御側、それぞれのモデルで箱庭APIモデルと繋げてコード生成できるようにする
  • 生成されたコードを箱庭上で動作できるようにする

PX4の動作確認手順と方法を検討する

アクチュエータ側のチェック

与えられた入力(PWMデューティ比)に対して、機体が適切な方向に移動しているかどうを総合的にチェックする。

単体テストでは、限られた入力でのチェックしかしていないので、シミュレーションデータでの妥当性をチェック。

機体の位置

作戦:

  • ローター回転数→推力→高さのプロットをして関係性をチェック

機体の姿勢

作戦:

  • ローター回転数→ロール側のトルク→姿勢角・φ
  • ローター回転数→ピッチ側のトルク→姿勢角・θ
  • ローター回転数→ヨー側のトルク→姿勢角・ψ

センサー側のチェック

磁気センサ(チェック方法検討中)

気圧センサ(チェック方法検討中)

ジャイロセンサ(チェック方法検討中)

加速度センサ(チェック方法検討中)

GPSセンサ(チェック方法検討中)

機体のさまざまなパラメータを外部ファイルで定義できるようにする

シミュレーション全体

  • シミュレーション時間ステップ
  • ログデータ出力ディレクトリパス
  • ログ出力をマスクするコンポーネント
  • 各種MAVLINKデータの送信周期

ドローンダイナミクス

  • 地上座標系の物理式/機体座標系の物理式
  • 空気摩擦係数
  • トルク係数

ローター

  • 時定数τ
  • k
  • rpm_max

スラスター

  • ローターの位置と回転方向
  • パラメータA
  • パラメータB
  • パラメータJr

ACC

  • サンプル数
  • ノイズ

Gyro

  • サンプル数
  • ノイズ

Mag

  • サンプル数
  • ノイズ
  • 磁力量、偏角、俯角

BARO

  • サンプル数
  • ノイズ
  • 緯度、経度、高度

GPS

  • サンプル数
  • ノイズ
  • 緯度、経度、高度

センサデータの不具合修正と改善

以下の不具合を対応:

  • HIL_STATE_QUATERNION
    • zacc には、重力加速度は不要
    • zacc は、航空座標系のため、浮上する場合はマイナス値になるので符号を逆転する必要がある
  • HIL_SENSORS
    • zacc には、重力加速度が必要
    • zaccは、ROS座標系のため、浮上する場合はプラス値になる(変更不要だが、HIL_SATETE_QUATERNIONの修正影響を受けるのでその対応を実施)

以下の機能改善を対応:

  • 姿勢データを平均値としてセンシングできるようにする

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.