- 追加された行はこの色です。
- 削除された行はこの色です。
[[ロボティクス入門ゼミ]]
目次
#contents
*課題1 似顔絵を描くロボット [#gc700278]
*ロボット本体 [#l9f46215]
**設計 [#e3ea3e8a]
これは3回の劇的な改良を経て頂きに達したロボットである。
#ref(20120522_174052 (800x600).jpg)
~ 重量配分を考慮したことにより50:50の理想的な前後重量配分であり、このことにより旋回する際の振動を軽減しサブルーチンを利用した旋回に対応。
**創意工夫 [#g9214da4]
~ 特徴はなんといってもご覧の通りやたらと長いアーム。このアームのリーチにより紙の上に載ることなく似顔絵を書くことができる。
~ 紙の上に載ることがないので紙とタイヤの摩擦を0にすることに成功。
~ ここでアームの稼働システムについて説明しよう。
#ref(robot_image3.png)
~ 仕組みは至って簡単でゴムでアームを引っ張りペンを上にあげている状態を保ち、ペンで絵を書くときはアームの下にあるモーターを動かすことによりモーターのカムがアームに接触しペンが下がる。
~ モーターに直接タイヤを繋ぐのではなく、ギアを入れることによって速度調整がプログラムでできない欠点を克服。
~ このことにより速度の微調整することができ、マシンの鋭敏さを剥ぎ取り正確さを取り入れた。
#ref(robot_image2.png)
~ 前輪をキャスターにすると旋回し前進したときキャスターが横を向いているとちゃんとまっすぐ前進しないということが判明し、キャスターをやめて下のようにした。
#ref(robot_image4.png)
~ 紙の上に載らないという利点が生かされる設計である。
**弱点 [#m34f0801]
~ アームの部分が長すぎるため先端が重たくなり真っ直ぐとした直線が描きにくい。
~ アームと動力(タイヤ)の部分が離れすぎているため細かい微調整がしづらい。
~ あれこれと付け足していったのでロボット自体が重くなり前輪への負担が増大。
*プログラムの概要[#e5e7ec12]
**理想図 [#w845885c]
#ref(robot_image.png)
~ まず1のところで顔の部品の縦線に当たるところをすべて描き、2のところでは顔の部分の横線に当たるところをすべて描く。無駄な動きをなくし、スムーズなタッチで顔を描く。
**プログラム [#md47cb35]
#define TURN_TIME_R 97 //右90度回転
#define TURN_TIME_L 90 //左90度回転
#define STOP_TIME 100 //動作終了時の停止時間
#define FACE_LINE_l 100 //顔の輪郭(横の輪郭の時間)
#define FACE_LINE_s 160 //顔の輪郭(縦の輪郭の時間)
#define FACE_PARTS 40 //顔のパーツ(目、鼻、口の時間)
sub turn_right() //90°右曲り
{
OnFwd(OUT_C);OnRev(OUT_A);Wait(TURN_TIME_R);
Off(OUT_AC);Wait(STOP_TIME);
}
sub turn_left() //90°左曲がり
{
OnFwd(OUT_A);OnRev(OUT_C);Wait(TURN_TIME_L);
Off(OUT_AC);Wait(STOP_TIME);
}
sub face_line_l() //縦の顔の輪郭
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(FACE_LINE_l);
Off(OUT_ABC);Wait(STOP_TIME);
}
sub face_line_s() //横の顔の輪郭
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(FACE_LINE_s);
Off(OUT_ABC);Wait(STOP_TIME);
}
sub face_parts() //顔のパーツ
{
OnFwd(OUT_B);OnRev(OUT_AC);Wait(FACE_PARTS);
Off(OUT_ABC);Wait(STOP_TIME);
}
task main()
{
face_line_l();
turn_left();
OnFwd(OUT_AC);Wait(70);Off(OUT_AC);Wait(STOP_TIME);
turn_right();
OnFwd(OUT_AC);Wait(FACE_PARTS);Off(OUT_AC);Wait(STOP_TIME);
face_parts();
turn_left();
OnFwd(OUT_AC);Wait(70);Off(OUT_AC);Wait(STOP_TIME);
turn_right();
OnFwd(OUT_AC);Wait(55);Off(OUT_AC);Wait(STOP_TIME);
face_line_l();
turn_left(); //場面変更(理想図1→2へ移動)
OnFwd(OUT_AC);Wait(120);Off(OUT_AC);Wait(STOP_TIME);
turn_right();
OnFwd(OUT_AC);Wait(280);Off(OUT_AC);Wait(STOP_TIME);
turn_right();
face_line_s();
turn_left();
OnFwd(OUT_AC);Wait(25);Off(OUT_AC);Wait(STOP_TIME);
turn_right();
OnFwd(OUT_AC);Wait(95);Off(OUT_AC);Wait(STOP_TIME);
face_parts();
turn_left();
OnFwd(OUT_AC);Wait(70);Off(OUT_AC);Wait(STOP_TIME);
turn_right();
OnFwd(OUT_AC);Wait(105);Off(OUT_AC);Wait(STOP_TIME);
face_parts();
OnRev(OUT_AC);Wait(45);Off(OUT_AC);Wait(STOP_TIME);
face_parts();
}
**現実 [#qc68f8c5]
実際にこのプログラムで走らせて描いた似顔絵です。
#ref(20120523_225331.jpg)
現実はそう甘くなかった。