2015a/Member 目次
書道ロボットの製作。詳細はhttp://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMission1を参照。
二つのモーター(AとC)を使いロボットの前後動そして左右の動きも行った。アームの動きは1つのモーターだけで行い(B)なるべく単純な動きにするため上下動だけにした。
最初はアームをロボットが進む方向と垂直に、つまり横向きに少し回転させることでペン先を上げ下げして文字を書こうとした。しかしこのやり方には欠点が2つあり、1つはペンが回りすぎてしまい戻ってこなくなってしまう場合があること、もう1つは横から降りてくるので毎回地面につく点の位置が微妙に変わってしまうことだ。そこでアームの動きは縦に回転させることにした。そうすることで車体がある分回り過ぎることもなく、降りる点が多少ずれてもロボットは前後に進んでいるので文字にほとんど影響が出なくなった。
アームが上がるとき非常に速く上がりすぎてしまうためアームが飛んでいってしまうことがあった。そこでアームを固定するために後ろから補強をした。ただ反省点として最終的には配られた部品でやったのだが撮った画像が練習時の他のレゴブロックで補強していた時のものしかなく写真をはることができなかった。
アームにペンをただゴムで巻きつけるだけでは取り外しが大変であるのでちょうどよい筆圧にするために下の写真のように工夫をした。
/*各モーターの役割 */ /*前進後退左右の移動 OUT_AC */ /*アームの上下動 OUT_B */ /*本体の前後左右の動きのマクロ定義*/ #define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); #define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC); #define right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC); #define left(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_AC); /* ペンの上げ下げの為のマクロ定義*/ #define up OnRev(OUT_B);Wait(9);Off(OUT_B); #define down OnFwd(OUT_B);Wait(8);Off(OUT_B); #define upup OnRev(OUT_B);Wait(4);Off(OUT_B);
二つの横棒をここで書く。距離が狭いためペンの上下の時間を短くした。
task main () { go(50); //村の木の部分の横棒 upup; go(40); down; go(50); //寸の部分の横棒
ここで本体を回転させ寸の縦棒を書く。
up; go(70); left(105); back(50); down; back(170); //寸の部分の縦棒
木の部分を書くために左側に方向転換し移動。
up; left(105); go(70); right(105); down; go(170); //木の部分の縦棒 up;
go(90); right(15); back(250); down; go(130); //木の部分の左払い up; go(100); right(190); go(70); OnFwd(OUT_C);Wait(30);Off(OUT_C); back(70); down; back(85); //木の部分の右払い up; left(10); go(20); down; go(20); //寸の部分の点
}
まずは二つの十字架を書くような形で村を作ることにした。ただ村の二つの横棒の間隔が他のところよりも狭くしなければいけないのでペンの上下の間隔をそこだけ短くした。最も難問だったのが村の左払いと右払いの部分である。左払いに関しても右払いに関しても本体とペンとの間隔があるのでその分余分に前後に進めたり片側のタイヤだけを動かし角度を調節したりした。この部分の角度調整だけに3〜4時間もかけた。
どうしても動画がアップロードできません
紙に水平にロボットをセットしないとうまく書けないことがある。ごくまれにアームがペンの重さに負けて降りてきてしまうことがある。
今回の課題は短い期間の中での作業でかなり難しかった。ほんの少しの角度のずれに何時間もかけて調整し大変だった。ただ最後に読める字が完成したときの達成感はかなりあった。