目次
課題は自分の似顔絵を描くロボットを製作することである。
詳しい内容として、
•マクロや関数、サブルーチンなどを使い、main関数がなるべく単純になるようにプログラムを作ること。
•定数名やマクロなどは分かりやすい名前を用いること
•余裕をもってA4の紙の中に収まる大きさにすること。いくら小さくてもよい。
•ペン以外はキットの部品を使うこと
•輪ゴムは切れやすく高価なので慎重に扱い、張力がかかりすぎないようにすること。
グループで製作されたロボットである。
RISのスピードをコントロールできないのでロボットの速度を遅くするため、ボールねじを基にする減速機を製作した。約24倍にスピードの減少、モーターが動かずにタイヤも動かないようにオートブレーキのおかげで正確さが増加した。
ペンの損害を防止するため、歯車形軸継手のキット、丸ベルトのシステムを使った。
以前にプログラミングをしたことないので長くてもとても単純なプログラムになってしまった。 turn_leftとかturn_rightという名前を付けば OnRev(OUT_C); OnFwd(OUT_A); と Off(OUT_A); OnFwd(OUT_C); 同じになるので母国語でマクロスを書いてみた。
#define vpered(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC) #define opustit(t) OnFwd(OUT_B); OnRev(OUT_B); Wait(t); Off(OUT_B) #define nazad(t) OnFwd(OUT_AC); Toggle(OUT_AC); Wait(t); Off(OUT_AC) #define podnyat(t) OnFwd(OUT_B); Wait(t); Off(OUT_B) #define napravo(t) OnRev(OUT_C); OnFwd(OUT_A); Wait(t); Off(OUT_AC) #define nalevo(t) OnRev(OUT_A); OnFwd(OUT_C); Wait(t); Off(OUT_AC) #define vlevo(t) OnFwd(OUT_C); Toggle(OUT_C); Wait(t); Off(OUT_C) #define vpravo(t) OnFwd(OUT_A); Toggle(OUT_A); Wait(t); Off(OUT_A) task main() { vpered(200); opustit(5); SetPower(OUT_AC,0); // 準備 repeat(5){ vlevo(90); // ジグザグ vpravo(90); } podnyat(5); SetPower(OUT_AC,7); nalevo(555); nazad(180); // 左に旋回 opustit(5); SetPower(OUT_AC,0); repeat(5){ vlevo(90); // ジグザグ vpravo(90); } podnyat(5); napravo(120); vpered(35); // 場所の変化 opustit(5); vlevo(1550); podnyat(5); // 頭 nalevo(120); nazad(35);napravo(30); opustit(5); // 場所の変化 repeat(5){ vlevo(90); vpravo(90); } podnyat(5); SetPower(OUT_AC,7); nalevo(555); nazad(180); opustit(5); SetPower(OUT_AC,0); repeat(5){ vlevo(90); vpravo(90); } podnyat(5); vpered(80); napravo(300); vpered(80); // 場所の変化 opustit(5); vpered(240); podnyat(5); // 前髪 vpered(40); nalevo(380); vpered(120); nalevo(450); // 場所の変化 opustit(5); vpered(50); podnyat(5); nazad(220); opustit(5); nazad(50); podnyat(5); //目 napravo(380); vpered(180); napravo(450); nazad(250); // 場所の変化 opustit(5); vpravo(370); podnyat(5); // 口 }
前に進む
#define vpered(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC)
ペンを下ろす
#define opustit(t) OnFwd(OUT_B); OnRev(OUT_B); Wait(t); Off(OUT_B)
後ろに移動する
#define nazad(t) OnFwd(OUT_AC); Toggle(OUT_AC); Wait(t); Off(OUT_AC)
ペンを上げる
#define podnyat(t) OnFwd(OUT_B); Wait(t); Off(OUT_B)
右に旋回する
#define napravo(t) OnRev(OUT_C); OnFwd(OUT_A); Wait(t); Off(OUT_AC)
左に旋回する
#define nalevo(t) OnRev(OUT_A); OnFwd(OUT_C); Wait(t); Off(OUT_AC)
左に曲がる
#define vlevo(t) OnFwd(OUT_C); Toggle(OUT_C); Wait(t); Off(OUT_C)
右に曲がる
#define vpravo(t) OnFwd(OUT_A); Toggle(OUT_A); Wait(t); Off(OUT_A)
SetPowerを使えば、もっと丁寧にペンで書けることが分かった。
vpered(200); opustit(5); SetPower(OUT_AC,0); // 準備 repeat(5){ vlevo(90); // ジグザグ vpravo(90);
青線で描いたものはロボットの向きで、赤線で描いたものはロボットの動きである。タイミングを計算するのが難しいから絵が上手く出来なかった。
ロボットを製作するのは初めてなのでペンを下ろし、360度に旋回すれば点ではなく丸を描いてしまう。そのため、無駄な動きは必要になってしまい、計算をしにくくなってしまう。次回からはプログラムの調整だけでなく、ロボットの構造の工夫をしっかり考えていきたいと思う。