本ソフトウェアはROS 2のrosbagファイルで保存した入出力データを用いてPIDゲインを調整する自動調整ソフトである。PIDゲイン調整用のパッケージ、サンプルのプラント・制御器のパッケージ、実行用スクリプトから構成されている。
参考文献: Campi, M. C., Lecchini, A., & Savaresi, S. M. (2002). Virtual reference feedback tuning: a direct method for the design of feedback controllers. Automatica, 38(8), 1337-1346.
本ソフトにおけるqiita記事:https://qiita.com/KariControl/items/8e269415692312a6c5f4
OS:ubuntu 22.04 ROS version:ROS 2 humble 言語:C++、Python、shell scripts
本ソフトにおける各パッケージの概要を本節で述べる。
PIDゲイン調整用入出力信号のためのタイムスタンプ付きカスタムメッセージ。制御入力inputと出力応答outputの変数を内包。
時刻同期用ノードのパッケージ。rosbagでプレイされた入力信号と出力信号を受信。受信した入出力を時刻同期させた上でcontroller_msgsのメッセージとして出力。
PIDゲイン調整用ノードのパッケージ。time_syncから受信した入出力データにてPIDゲインの自動調整を実行。調整後のゲインをターミナル上に表示。
例題用の制御対象ノードのパッケージ。PIDゲイン調整機能とは関係ないため,例題を実行しない場合は不要。
例題用の制御器ノードのパッケージ。PIDゲイン調整機能とは関係ないため,例題を実行しない場合は不要。
本ソフトのノード構成を下記のグラフに示す。例題の関係上,制御対象の出力データのトピックが/vehicle_velocity,入力データのトピックが/accelとなっている。/plant_infoが時刻同期済みの入出力信号におけるカスタムメッセージでのトピックとである。
1.ビルド mainブランチをクローンして,下記のコマンドを実行する。
source build_setup.sh
2.初期入出力データの測定(rosbagの準備) 下記のコマンドを実行して例題用の入出力データ(rosbag)を生成しておく。
source run_velocity_control_sim.sh
なお,本例題ではlaunchファイル(control_run.py)にて例題の制御器におけるPIDゲインを設定している。rosbagデータの入出力応答を変更する場合,launchファイル上のパラメータを変更して実行する必要がある。
3.PIDゲイン調整 シェルスクリプト(source run_PID_tuning.sh)内のrosbag名を該当ファイル名に変更する。launchファイル(pid_tuner.py)にて,参照モデル(time_const)の時定数とデータ数(読み込むデータの最大データ点数max_data_points)を設定する。下記のコマンドを実行してrosbagデータからPIDゲインをオフライン計算する。
source run_PID_tuning.sh
正常に実行ができた場合,下記のようにターミナル上にてPIDゲインの調整結果が表示される。
4.ゲイン調整結果の確認 launchファイル(control_run.py)のPIDゲインを変更し,下記のコマンドを実行して制御器調整後の制御応答を確認する。
source run_velocity_control_sim.sh
本条件下で得られたrosbagデータを用いてゲイン調整を実施することにより,ゲイン調整結果を
time_syncノードでは,入出力信号をgeometory_msgs/TwistStamped型とgeometory_msgs/AccelStamped型でサブスクライブする仕様となっている。自前のrosbagを用意して例題以外の制御対象に適用する場合,time_syncノードのサブスクライブ処理と時刻同期処理の型を修正する必要がある。また,topic名に関しても自前のrosbagに合わせて変更が必要となる。
PIDゲイン調整のアルゴリズム(VRFT)の都合上,制御器調整結果が初期実験データの応答波形に依存する。望ましい制御器調整結果とならない場合,初期入出力応答の再取得やpid_tunerの最大データ点数(max_data_points)変更が必要となる。