アクア研として書くのは恐らく初めてですね。
アクア研所属14のみやびです。鉞が怖いとびくびくしながら更新しています。
さて、アクア研として初めに何をしようか迷ったのですが、
自分が興味のある部分から行こうということで、制御に関することをやってみました。
今回作ったのは、任意の経路をトレースする(しようとする)物体のシミュレータです。
youtubeにちょっとした動作テストの動画をあげましたので、興味がありましたら。
パラメータ調整している時間がなかったのでまだまだトレースとは言えません。
以下では、
①制御するためにどのように考えたのか
②今後どのように発展させるのか
この二つについて簡単にお話ししたいと思います。
①制御するためにどのように考えたのか
今回はPID制御を使おうと考えました。
PID制御とは、大雑把にいうと、制御したい対象の現在の値と目標値との差(偏差)に対して
P:そのもの
I:積分値
D:微分値
を算出して、それにいい感じの係数をかけて出力に回すという方法です。
時間による出力をu(t)、偏差をe(t)などとすると、
u(t)=Kp*e(t)+Ki*(∫(0→t)e(x)dx)+Kd*(de(t)/dt)
と書けます。
ところで、いい感じと表現したのは比喩ではなく、
トライアンドエラーで繰り返していけばいい雰囲気で制御できる係数を発見できてしまいます。
むしろ最適係数を一般に出す方法は存在しないように思えます(制御対象の特性で変わるので)
さて、今回はトレースしたいので位置が制御対象ですね。
目標値はどのように設定設定するかというと、
マーカーを任意の点におき、それらを繋いだ経路が目標値ということにします。
このマーカーをつないだ経路をトレースするように動いて欲しいです。
では、偏差はどのように設定すれば良いでしょうか。
もしマーカーとの距離だけを偏差として設定すると、確かに全てのマーカーを通るような挙動になりそうですが、
それは経路をトレースしているようには見えない可能性があります。(例えばぐるぐる渦巻き状に近づいても良くなる)
そこで、偏差を二つ出してそれぞれに対して制御したら良いのではと考えました。
つまり、経路とのズレと、マーカーとの距離二つを考えれば良いということです。
制御したい対象が二つになっても、出力を算出する量に二つ偏差に対する項を足し合わせれば良いはずです。
そんな感じで、偏差二つに対しての出力を考えています。
F(t)=u(t)として推進力を与え、質量1とした運動方程式に沿って速度と位置を計算して、位置を描画しています。
②今後どのように発展させるのか
・描画関係のプログラムの書き方を工夫する
マルチスレッドの方が描画がきれいになりそう。演算スレッドと描画スレッドを分けたい。
今後の勉強のためにもやってみたいです。
・外乱を考慮する
実は外乱によって受ける力の項も含めて計算してるのですが、調整が出来ていないので0のままになっています。
そこらへんの調整をします。
・出力の次元を考える
動きを見ていて、制御したい対象と出力の次元が異なると制御がすぐに効いてこないので良くないと思いました。
(位置を制御したいのに直接制御しているのは力(加速度))
制御に関しても勉強したいと思います。
そろそろ新歓展示も考えなければいけません。
ハードにソフト、理論と学びたいことは尽きません。
頑張ります。
アクア研 みやび。