toppers / hakoniwa-drone-education

This repository is designed to provide a clear, educational framework for controlling drones using the Hakoniwa Drone Simulator.
6 stars 1 forks source link

hakoniwa-drone-education

本リポジトリでは、箱庭ドローンの数式を線形モデル化して、解析的にドローン制御のPIDパラメータを調査する方法をまとめています。

具体的には、こんなことができます。

箱庭ドローンの物理モデルはこちら

image

現時点(2024/11/19)では、まだ開発中のステータスであり、こちらでその構想を説明しております。

image

目次

物理モデル

image

制御モデル

image

線形モデル解析

箱庭ドローンおよび制御モデルの線形モデル化については、こちらを参照してください。

線形モデル解析手順

線形モデル解析では、Pythonライブラリを利用します。

そのため、最初に、以下のコマンドでPythonライブラリをインストールしてください。

pip install -r requirements.txt

線形モデル解析は以下の2ステップで行います。

  1. 解析的に求めた線形モデルの伝達関数を Json ファイルで定義する
  2. 定義したJsonファイルの伝達関数を用いて、古典制御ベースの道具を用いて解析を行う

1. 解析的に求めた線形モデルの伝達関数を Json ファイルで定義する

Json ファイルの作成手順

2. 定義したJsonファイルの伝達関数を用いて、古典制御ベースの道具を用いて解析を行う

以下のコマンドを実行することで、線形モデル解析を行うことができます。

 python src/libs/pid_param_view.py models/expanded_models/expanded_control_alt_spd.json --uptime 100 --input_increment 0.01 --step --bode

成功すると、下図のように、ステップ応答とボード線図および極配置図が表示されます。

image

左下にあるPIDパラメータ調整を行うことで、ステップ応答やボード線図、極配置図が変化します。

本ツールの使い方の詳細は、helpを参照してください。

 python src/libs/pid_param_view.py -h
usage: pid_param_view.py [-h] [--uptime UPTIME] [--max_input_value MAX_INPUT_VALUE] [--input_increment INPUT_INCREMENT] [--step] [--bode] [--ny] [--p P] [--i I] [--d D] file_path

PID パラメータ調整とステップ応答

positional arguments:
  file_path             Transfer function JSONファイルのパス

options:
  -h, --help            show this help message and exit
  --uptime UPTIME       グラフ描画間隔。単位はmsecです
  --max_input_value MAX_INPUT_VALUE
                        入力可能な最大値
  --input_increment INPUT_INCREMENT
                        数値入力のステップサイズ
  --step                ステップ応答を表示するかどうか
  --bode                ボード線図と位相線図を表示するかどうか
  --ny                  ナイキスト線図を表示するかどうか
  --p P                 Pゲインのパラメータ名
  --i I                 Iゲインのパラメータ名
  --d D                 Dゲインのパラメータ名

箱庭ドローンシミュレータの環境構築手順

サポート対象

環境構築手順

本リポジトリーをクローンします。

git clone https://github.com/toppers/hakoniwa-drone-education.git

ワークスペースを作ります。

cd hakoniwa-drone-education && mkdir workspace

ワークスペースに移動します。

cd workspace

インストーラを起動します。

bash ../installer/install.bash

インストールが成功すると、以下のようになります。

% ls
hakoniwa-px4sim         hakoniwa-webserver      root                    setup.bash              static.webgl.zip

箱庭ドローンシミュレータのバイナリやコンフィグファイル類は、すべて root に入っています。 setup.bash は、環境変数定義ファイルです。ツール利用する際に source してください。

シミュレーション評価時の準備

シミュレーション評価設定ファイルを作成します。

例:src/drone_evaluation/input/spd_z-step-input.json

{
  "simulation": {
    "simulation_time_step": 0.001,
    "type": "controller",
    "controller_type": "spd_z",
    "signals": {
      "step1": {
        "type": "step",
        "parameters": {
          "comment": "target speed z : 1 m/sec",
          "offsets": [ 1 ]
        }
      },
      "step2": {
        "type": "step",
        "parameters": {
          "comment": "target speed z : 0 m/sec",
          "offsets": [ 0 ]
        }
      },
      "step3": {
        "type": "step",
        "parameters": {
          "comment": "target speed z : 1 m/sec",
          "offsets": [ 1 ]
        }
      }
    },
    "signal_input_timings": [
      {
        "name": "step1",
        "duration_sec": 99.0
      },
      {
        "name": "step2",
        "duration_sec": 100.0
      },
      {
        "name": "step3",
        "duration_sec": 100.0
      }
    ]
  },
  "evaluation": {
    "step_evaluation": {
      "config_params": {
        "AXIS": "Vz",
        "INVERT_AXIS": true,
        "EVALUATION_START_TIME": 200.0,
        "CONVERT_TO_DEGREE": false
      },
      "target_params": {
          "TARGET_TR": 2.0,
          "TARGET_TD": 1.01,
          "TARGET_OS": 0.04,
          "TARGET_TS": 5.49,
          "TARGET_VALUE": 1.0
      }
    },
    "input_data": {
      "log_file": "in.csv",
      "cache_len": 1024
    },
    "output_data": {
      "log_file": "drone_log0/drone_dynamics.csv"
    }
  }
}

詳細は、シミュレーションと評価設定フォーマット を参照してください。

シミュレーション実行方法

cd workspace
source setup.bash

Z軸方向の速度制御の評価を実行する場合は、以下のコマンドを実行してください。

bash ../src/drone_evaluation/evaluate.bash ../src/drone_evaluation/input/spd_z-step-input.json

成功すると以下のようにログファイルが出力されます。

% ls drone_log0                                                                                    
drone_dynamics.csv      log_baro.csv            log_gps.csv             log_mag.csv             log_rotor_1.csv         log_rotor_3.csv
log_acc.csv             log_battery.csv         log_gyro.csv            log_rotor_0.csv         log_rotor_2.csv         log_thrust.csv

TODO: 結果の解析方法はペンディング中。

PIDパラメータの変更方法

PIDパラメータは、以下に配置されていますので、適宜変更してください。

src/drone_control/config/param-api-mixer.txt

シミュレーションと評価設定フォーマット

箱庭ドローンのシミュレーションと評価に使用されるJSON設定ファイルの構造について説明します。 このJSON設定ファイルを用いることで、シミュレーション条件や入力信号、評価基準を簡単に設定・変更することができます。以下に各項目の詳細を説明します。


ルートキー


simulation キー詳細

simulation_time_step

type

controller_type

signals

信号の詳細

signal_input_timings


evaluation キー詳細

ステップ応答とサイン波応答の評価基準を定義できます。


step_evaluation

config_params

評価設定パラメータ:

target_params

評価の目標値:

input_data

log_file
cache_len

output_data

log_file

以下の形式で、サイン波信号(sine)用の評価設定を追加します。


freq_evaluation

評価設定パラメータ:

input_data

評価設定パラメータ:

output_data

評価設定パラメータ: