本リポジトリでは、箱庭ドローンの数式を線形モデル化して、解析的にドローン制御のPIDパラメータを調査する方法をまとめています。
具体的には、こんなことができます。
箱庭ドローンの物理モデルはこちら。
現時点(2024/11/19)では、まだ開発中のステータスであり、こちらでその構想を説明しております。
箱庭ドローンおよび制御モデルの線形モデル化については、こちらを参照してください。
線形モデル解析では、Pythonライブラリを利用します。
そのため、最初に、以下のコマンドでPythonライブラリをインストールしてください。
pip install -r requirements.txt
線形モデル解析は以下の2ステップで行います。
以下のコマンドを実行することで、線形モデル解析を行うことができます。
python src/libs/pid_param_view.py models/expanded_models/expanded_control_alt_spd.json --uptime 100 --input_increment 0.01 --step --bode
成功すると、下図のように、ステップ応答とボード線図および極配置図が表示されます。
左下にある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パラメータは、以下に配置されていますので、適宜変更してください。
src/drone_control/config/param-api-mixer.txt
箱庭ドローンのシミュレーションと評価に使用されるJSON設定ファイルの構造について説明します。 このJSON設定ファイルを用いることで、シミュレーション条件や入力信号、評価基準を簡単に設定・変更することができます。以下に各項目の詳細を説明します。
simulation
: シミュレーション環境および入力信号の設定を含むセクションです。evaluation
: 評価基準および関連データファイルを指定するセクションです。simulation
キー詳細simulation_time_step
float
type
string
"controller"
を指定します。プラントモデルの評価開始の場合は "plant"
を指定します。controller_type
string
type
が controller
の場合は、使用するコントローラー(src/drone_control/workspace)の種類を指定します。"spd_z"
: AltSpeedController"pos_z"
: PositionController"pos"
: PositionController"spd"
: SpeedController"angle"
: AngleControllersignals
object
type
: 信号の種類
"step"
: ステップ信号。急激な変化を与え、ステップ応答を確認するために使用します。"sine"
: サイン波信号。周期的な入力を与え、システムの周波数応答を確認するために使用します。parameters
: 信号の種類に応じたパラメータ。
step
:offsets
: ステップ信号のオフセット値(配列形式)。sine
:amp
: サイン波の振幅(配列形式)。freq
: サイン波の周波数(Hz、配列形式)。offsets
: サイン波のオフセット値(配列形式)。signal_input_timings
array
name
: signals
で定義された信号の名前。duration_sec
: 信号が適用される継続時間(秒単位)。evaluation
キー詳細ステップ応答とサイン波応答の評価基準を定義できます。
step_evaluation
object
config_params
評価設定パラメータ:
AXIS
: 評価対象の軸(例: "Vz"
はZ軸方向の速度)。INVERT_AXIS
: 軸の向きを反転するかどうか(true
または false
)。EVALUATION_START_TIME
: 評価を開始する時間(秒単位)。CONVERT_TO_DEGREE
: 値を度に変換するかどうか(true
または false
)。target_params
評価の目標値:
TARGET_TR
: 立ち上がり時間(秒単位)。TARGET_TD
: 遅延時間(秒単位)。TARGET_OS
: オーバーシュート率。TARGET_TS
: 定常時間(秒単位)。TARGET_VALUE
: システムが到達すべき目標値。input_data
object
signals
で定義した信号時系列データをファイル出力するための情報。log_file
string
cache_len
integer
output_data
object
log_file
string
以下の形式で、サイン波信号(sine
)用の評価設定を追加します。
freq_evaluation
object
freq
:
float
output_inverse
:
boolean
true
で反転、false
でそのまま評価します。start_time
:
float
input_data
object
log_file
:
string
axis
:
string
"target_vz"
)。max_val
:
float
cache_len
:
integer
output_data
object
log_file
:
string
axis
:
string
"Vz"
)。