目次
http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission3 懐中電灯を捜しボールを当てる
正面の光を認識するために光センサーを前向きに取り付けた。また横の範囲の光を取り込む必要はないので横から光が入らないようにした。
モーターの力がそのまま伝わってしまうとアームが勢いよく回りすぎてしまうのでギア比を調節することでアームが早く上下しすぎてしまうのを抑えた。また、ピンポン玉を持ち上げて運ぶことで安定してゴールまで運ぶことを可能にした。アーム部分はピンポン玉の大きさに合うよう調節した。課題3では光センサーを正面に向けたためピンポン玉が光をさえぎらないようにピンポン玉を上に持ってこれるようなアームにした。
基本的なロボットの作りは課題2と同じ
#define up OnRev(OUT_B);Wait(60); //アームを上にあげる #define down OnFwd(OUT_B);Wait(60); //アームを下にさげる #define go OnFwd(OUT_AC);Wait(80);Off(OUT_AC); //前に進みシュートする task main() { SetSensor(SENSOR_2,SENSOR_LIGHT); //センサー2にライトセンサーをセット int lightmax=0; int timemax=0; int runtime=300; ClearTimer(0); //クリアタイマーを使い時間を測る up; //ピンポン玉を持ち上げる
ここから懐中電灯を探す
OnFwd(OUT_A);OnRev(OUT_C); while (FastTimer(0)<=runtime){ if(SENSOR_2>lightmax) { lightmax=SENSOR_2; timemax=FastTimer(0);}} Off(OUT_AC);Wait(100);
精度を上げるためもう一度探す。光の最大値まで逆に回転する
OnRev(OUT_A);OnFwd(OUT_C); Wait(runtime-timemax); Off(OUT_AC);Wait(100);
ピンポン玉お下ろす
down;
ピンポン玉をシュートする
go; }
もう一度最大値を調べることで正確に当てられるようにした。
課題2に比べるとやりやすいプログラムだった。シュートが不安定なので少しむずかしかった。ロボット自体はほぼそのまま使ったので時間も短縮できた。