2016a/Member

はじめに

今回の課題は自分の似顔絵を書くロボットの作成でした。条件は

・マクロや関数などを使い、main関数がなるべく単純になるようにプログラムを作ること。

・定数名やマクロなどは分かりやすい名前を用いること

・余裕をもってA4の紙の中に収まる大きさにすること  などでした

ロボットについて

私たちの作ったロボットは写真のように元の形を改良し、前にモーターをつけました

ロボティクス 003.JPG

ペンを上げ下げするのに私たちはタイヤにはさみ回転させました

ロボティ 002.JPG
ロボティ 01.JPG

このロボの工夫したところはこの写真のようにギアとギアの接合部分のところにゴムをつけ、モーターのギアをある程度空回りさせたことです。
このことによりペンを下に下げすぎても途中でギアが空回りし、ロボが持ち上がることがなくなります。またペンを下げる時間を考えずにある程度長くすれば空回りしてくれるため電力が落ちても筆圧が一定で楽でした。

ロボティクス 004.JPG

またペンが紙にひっかかり、ペンが傾かないようにこの赤で囲まれた部分でペンをロックしました

プログラミングについて

・定義したプログラム

#define go(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC);              //前に進む
#define left(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_AC)  //左回転
#define right(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_AC) //右回転
#define back(t) OnRev(OUT_AC);Wait(t);Off(OUT_AC);       //後ろに進む
#define up OnRev(OUT_B);Wait(10);Off(OUT_B);          //ペンを上げる 
#define down OnFwd(OUT_B);Wait(40);Off(OUT_B);         //ペンを下げる

このほかの顔のパーツや髪の毛などの様々なプログラムはこの定義を組み合わせてつくりました。
もうすこし輪郭などを定義して作れば行数も少なくなったと思います。
たとえば輪郭は次のようになっています
・輪郭のプログラム

go(90);
up;
go(70)
right(95);
back(90);
down;
go(110);
up;
go(80)
right(95);
back(90);
down;
go(90);
up;
go(60)
right(90);
back(80);
down;
go(110);

このように輪郭だけでもとても長いプログラムになってしまいました。
・プログラムを書いて思ったこと
90度回転し線をつなげるのにもただ回転したのではロボットが前に行きすぎるのでバックを挟まなくてはいけなかったりと様々なところで私のイメージとは異なることがありました。

絵の成功部分と失敗部分

ロボティクス 001.JPG

成功部分

・髪の毛の左側をロボを回転させたとこが一発本番でうまくいった
・右側の髪の毛の部分また右下の輪郭のつなぎ目以外は線と線がぴったり合っていた
・目と口の間隔の調整に成功した

失敗部分

・髪の毛の左の部分を手を抜いてロボを回転させて書こうとしたがこれがなかなか合わず 普通に四角で書いた方が早かった
・顔のサイズがわからず最初に置くところがわからなかった
・電力が落ちているのを気づかなく、回転が甘くなり輪郭の右側の線が斜めに傾いてしまった
・鼻をあきらめた

まとめ

電力の上がり下がりが激しく、回転の角度や線の長さが変わってしまうのがめんどくさくテストぎりぎりまで調整していた。また細かな動きが予想以上に難しく、人の手はこんな微調整を繰り返しているのかと途中で感動した。


添付ファイル: fileロボティクス 001.JPG 111件 [詳細] fileロボティクス 003.JPG 118件 [詳細] fileロボティクス 004.JPG 117件 [詳細] fileロボティ 01.JPG 111件 [詳細] fileロボティ 002.JPG 122件 [詳細] fileロボティ 001.JPG 64件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-06-08 (水) 23:20:42 (1173d)