組み立てが終わってInstaBotsを動かして見た。
Arduino IDEを使ってプログラムをInstaBotsに書き込むと立たないまでも何となく立とうとしている感じ。
なにやら調整が必要というのは分かっていたので、シリアルモニターを見ながらInstaBotsのポテンショメーターを調整する。
■Kp、Kd、Ki の調整
まず、Kp。ポテンショメーターを回すとKp値が変わる。動きの違いはよくわからない。それほど顕著に変わるものではないみたい。時々暴れる。ポテンショメーターのピンの接触が悪いせいだろうか。とりあえず標準値の17に合わせる。
次にKd。ポテンショメーターを回すと、、、Kdに変化なし。あれ?
プログラムを見てみると、KpはA0端子、KdはA2端子の値を見ているようだ。
kp = analogRead(A0)*0.1; Serial.print(" kp=");Serial.print(kp);
kd = analogRead(A2)*1.0; Serial.print(" kd=");Serial.print(kd);
で、センサーシールド基板をよく見ると、ポテンショメーターを差し込んだコネクタは左からA0、A1、A2と並んでいる。ポテンショメーターをA0とA1に差し込んでいたのが間違いだったようだ。写真を見て適当に差し込んだのが間違いだった。A0はOKだが、もう1つはA2に差し込む必要があった。となりに移動して、くるくる回すとKd値が変化した。
これまた、標準値840に合わせる。
Ki値は固定値だということで、固定値をプログラムに書き込む。
ki = 0; Serial.print(" ki=");Serial.print(ki);
これを次のように変更
ki = 0.1; Serial.print(" ki=");Serial.print(ki);
この状態で何となく立っている感じ。ただし、やたら前に行こうとする。
じっと立っていない。
Kp値とKd値をいろいろいじっても安定性が変わるだけで、前に行こうとするのは変わらず。Ki値も同様。
とりあえず、安定のいいところの値はKp=20、Kd=1200、Ki=0.1となった。
ポテンショメーターをこのままにしても動くのだが、接触不良で暴れたりするので、プログラムに固定値を書き込む。ポテンショメーターはもうはずしても大丈夫。
kp = 20; Serial.print(" kp=");Serial.print(kp); //proportion
kd = 1200; Serial.print(" kd=");Serial.print(kd); //differentiation
ki = 0.1; Serial.print(" ki=");Serial.print(ki); //immigration
■前に行く問題
電池の位置を前後に変えると前に行こうとしたり、後に行こうとしたりするので重心位置の問題のようだ。そこでおもりをつけてバランスを取ることにした。
(実はプログラムで調整できることが後でわかったのだが。その話はまたあとで。)
■リモコンで操作
なんとなく立っている状態になったので、リモコンを使ってみた。
前にジョイスティックを倒す。。。あれ?左に曲がる。
後にジョイスティックを倒す。。。右に曲がる。
それではと、右にジョイスティックを倒す。。。前進!
で、左だと後進。
なんで? リモコンを90度回転させて持てばちょうどいいのだが、原因を突き止めないと。
リモコンのプログラムを見てみると、
Joystick_1_X = analogRead(A0);
Joystick_1_Y = analogRead(A1);
しかし、リモコンのセンサー基板を見ると、XがA1、YがA0に入っている。逆だ。
センサー基板の違いなのかな?よくわからんが、配線を変えるか、プログラムを変えるかする必要がありそう。配線はきれいに平行に入っているので変えたくなく、プログラムを変更することにした。
Joystick_1_X = analogRead(A1);
Joystick_1_Y = analogRead(A0);
ついでに左のジョイスティックも同様に変更しておいた。どのみち、コメントアウトされてるんだけど。
この状態で動かすと、まだ右と左が逆だったので、モーターの配線を左右逆にすることにした。なんとなく、他の人の映像を見ると前後が逆になっているような気もするのだが、まあどっちでもいいので、これでリモコン問題は解決。
次は少し改造です。
〜〜〜END〜〜〜
0 件のコメント:
コメントを投稿