カラーセンサーを使って倒立振子を作る。クララ計画
たってくれーということでクララ計画。
ジャイロセンサーを使った倒立振子は
ジャイロで直接角度が計算できるので常に90度で立っている状態にしているのだろう。
そのためのこーどとしては多分
「倒れたら失った角度を取り戻すようにするコード」
RoteteMoter(A,100,ジャイロセンサーで測った数値と90度との差出力)とかをPID制御でしているのだろう。
多分そんなに難しくないのではないか。
これをNXTの基本セットにあるカラーセンサーでできるようにすることの意義はコスト面で比較的大きいと思う。
のでやってみたい。わざわざジャイロを購入するまでの層は少ないだろうからそのまえのライトな人に倒立振子ができるようにするのは意義がある。第一カラーセンサーで倒立振子ができるのであればRCXでも倒立振子ができることとなりこれも意義として大きい。
問題点
ジャイロセンサーではジャイロから測った数値をほとんど生で使えるのだが、
それがカラーセンサーでどのように表現するかが問題となる。
youtubeなどの成功例ではカラーセンサーで
直接地面の反射率を測定していることがおおい。これは反射面の材質が均質でなかったり床に勾配があるとうまくいかない可能性が高い。反射角が変わってしまうと基準点からの反射光がうまくもどってこないのではないか。カラーセンサーをつかって毛足の短い絨毯で倒立振子している画像をまだ見たことがない。
ジャイロセンサーの代わりになるようにモーター入力あるいはカラーセンサーをつかって反射を測定するには工夫が必要だろうが、グラデーションの付いた紙をカラーセンサー前に止めて鉛直方向へ伸びるようにして角度を色の濃度に変換すれば可能となるはずだ。
まずPID制御が使えないと話しにならないのでこれの練習から入ることとする。
まずは基本的なコードから
task main()
{SetSensorColorRed(IN_2);
int light;
int degree;
while(true){
NumOut(80,LCD_LINE6,SENSOR_2);//ディスプレイにセンサー2の数値を表示
light=Sensor(IN_2);//変数lightに光センサーの値の半分の数値を入れる
degree=light/2;
RotateMotor(OUT_AC,100,degree);//変数(AとCモーターで出力する
}}
課題
1マイナス方向へのモータ出力をどのようにするか
2モーター出力はどのレベルが適正か
3PID数値はどの数値が適切か
4角度計算するカラーセンサー(水準器)をどのようにつくり、とりつけるか
これまでの問題点はプログラムコードをどのように描くかが問題点となっていた。
Cの経験があれば数分で作れたであろうものばかりだが、
今回はいよいよプログラムよりも「調整」が大幅に問題になりそうだ。出来るかどうか不明。