ドローンのピッチ角をPDで制御してみた
概要
ドローンのピッチ角の制御のためにPDのパラメータを調整した。
そのパラメータの適切な調整による成果やそれまでの大まかなプロセスを述べる。
ドローンの前提知識
今回扱っているのはunity上で実装した仮想的なドローン。ドローンの4つのプロペラには回転数を指定できて、その回転数に基づき推力とトルク(回転させる力)を物体に与える、という実装をしている。
ピッチとはドローンが前後に傾くことをいう。ピッチ角とはその角度であり、プロペラの回転数の差によりそれを生み出す。
↓ ピッチとはなにか
例えば、前方2個のプロペラの回転数を下げて、後方2個のプロペラの回転数を上げると、ドローンは頭が下がり前方に移動する。
これらのプロペラの回転数の差をpd制御によって決定している。
↓ ドローンが傾く原理
より理解するためのソース
- ピッチとはなにか: https://drone-journal.impress.co.jp/docs/words/1186041.html
- pd制御(pid制御)とは: https://emb.macnica.co.jp/articles/15859/
- プロペラと姿勢制御の関係: https://tajimarobotics.com/drone-actuators/
グラフ化する
パラメータの調整結果を確認するために、ピッチ角の時間推移データをグラフ化したい。
- csvで出力。このクラスを使う。
- スプレッドシートでcsvを読み込んで、グラフ化した。
成果
評価基準と定義について。
- 立ち上がり時間: 最初に目標値を超える時間: 単位s(秒)
- オーバーシュート最大値: 目標値を超えたあとの最大値: 単位rad(ラジアン)
- 目標到達時間: 目標値+-0.2の範囲に収まり始めた時間: 単位s(秒)
ここでは目標値は0.785 (PI/4ラジアン, つまり45度) である。
また、
(立ち上がり時間, オーバーシュート最大値, 目標到達時間)
と表わし、小数点3桁目を四捨五入して小数点2桁目までとする。
調整前
評価: (2.74s, 0.89rad, 12.24s)
- 立ち上がり時間が遅い、一瞬0.2秒くらい?で立ち上がるようにしたい。
- オーバーシュートが大きいが、オーバーシュートもほとんどなくしたい(最大0.76くらい?)。
調整後
評価: (0.56s, 0.82rad, 1.02s)
- 立ち上がり時間, オーバーシュート最大値, 目標到達時間はそれぞれ、80%改善, 8%改善, 92%改善。
- 立ち上がり時間は推力の関係上0.2秒は不可能であったが、かなり短縮でき、もっさり感がなくなった。
- オーバーシュートは+10%の誤差(0.75+0.08=0.83まで)は許容することにして、代わりに立ち上がり時間や目標到達時間をより短くした。
調整
調整の詳しい内容は後日アップロードする記事にて説明。
考察
調節セクションに同様。
現在の課題や、今後やること
- PIDの調整はすぐ終わるだろうと思って、csvに出力したあとのグラフ化は手動で行っていたが、予想外に調整は苦戦した。毎回手作業でグラフ化するのは非常に面倒なので、次に調整するときは先にグラフ化まで自動化しておく。
- 評価の数値も手作業で確認した。とても面倒なので自動化したい。
- 加える力と物体の回転の関係をしるために、物理について勉強し直す。
- ドローンの1方向への移動のみでなく、複数方向の移動を組み合わせても問題ないかを確認したい。
- 物理コントローラーと接続してunity上で操作できるか試してみたい。
参考文献





