課題1(書道ロボット)の目次 #contents * 課題 [#w83014b2] 各自の名前の中の一文字をA4用紙の中に書きなさい。ただし7画以上の文字を選ぶこと。 もし7画以上の文字がない場合には合計7画以上になるように複数の文字を書きなさい。 今回は「涼」という文字を書くことにした。 * 書道ロボットの概要 [#dea94fe9] &ref(./0001.jpg,10%,上から見たロボット); &ref(./0002.jpg,10%,後ろから見たロボット); モータは左右のタイヤに1つずつ(モータA,C)、ペンの上げ下げに1つ(モータB)使われており、モータの回転によって直接ペンを上下させタイヤの動きによって文字を書いていく大変シンプルなロボットになっている。前輪は椅子のキャスターのように自由に動かすことができ、急なカーブにも対応できるようになっている。そして後輪は曲がりやすいよう小さめのタイヤを使っている。 前進すると前輪が引っ掛かってうまく前に進めないため、後ろ向きに進むようになっている。 * プログラムの内容 [#kf2cb337] ** 関数 [#ta31381c] 左折、右折、前進は文字を書くとき頻繁に使うと考えたので関数として定義した。 動作を安定させるため、最後にWaitを入れている。 void turn_left(int s) //左に曲がる関数を定義 { OnFwd(OUT_C); OnRev(OUT_A); Wait(s); Off(OUT_AC); Wait(30); OnFwd(OUT_C); OnRev(OUT_A); Wait(s); Off(OUT_AC); Wait(30); } void turn_right(int t) //右に曲がる関数を定義 { OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC); Wait(30); OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC); Wait(30); } void go_straight(int u) //前進する関数を定義 { OnFwd(OUT_AC); Wait(u); Off(OUT_AC); Wait(30); OnFwd(OUT_AC); Wait(u); Off(OUT_AC); Wait(30); } ペンを下ろしたのち、前進し、ペンを上げ止まる関数を定義し、文字を書いた。 これも動作を安定させるため最後にWaitを入れている。 void write(int v) //文字を書く関数を定義 { OnFwd(OUT_B); Wait(5); Off(OUT_B); OnFwd(OUT_AC); Wait(v); Off(OUT_ABC); Wait(30); OnFwd(OUT_B); Wait(5); Off(OUT_B); OnFwd(OUT_AC); Wait(v); Off(OUT_ABC); Wait(30); } ** プログラム「涼」 [#f9cf0b52] task main() { write(15); //1画目 OnFwd(OUT_A); Wait(125); OnRev(OUT_C); Wait(45); write(15); //2画目 OnFwd(OUT_C); Wait(140); write(18); //3画目 go_straight(40); turn_left(64); write(8); //4画目 turn_left(31); OnRev(OUT_AC); Wait(10); write(30); //5画目 turn_right(72); repeat(2) //6,7,8画目 { write(20); turn_left(31); write(7); turn_left(31); } OnFwd(OUT_C); Wait(18); go_straight(20); write(20); //9画目 turn_right(46); write(5); //10画目 go_straight(15); turn_left(36); write(10); //11画目 OnRev(OUT_C); Wait(15); turn_left(36); go_straight(20); turn_left(33); write(10); //12画目 write(15); //1画目 OnFwd(OUT_A); Wait(125); OnRev(OUT_C); Wait(45); write(15); //2画目 OnFwd(OUT_C); Wait(140); write(18); //3画目 go_straight(40); turn_left(64); write(8); //4画目 turn_left(31); OnRev(OUT_AC); Wait(10); write(30); //5画目 turn_right(72); repeat(2) //6,7,8画目 { write(20); turn_left(31); write(7); turn_left(31); } OnFwd(OUT_C); Wait(18); go_straight(20); write(20); //9画目 turn_right(46); write(5); //10画目 go_straight(15); turn_left(36); write(10); //11画目 OnRev(OUT_C); Wait(15); turn_left(36); go_straight(20); turn_left(33); write(10); //12画目 } * 制作上の課題と問題点 [#s0b970d4] -関数ばかりを使い転送に大幅な時間がかかってしまった。サブルーチンなどの転送に時間をかけないものを使うことを考慮しておくべきであったと思われる。 -最初にアームをつけようとしたがセンサなどまだ理解しきれない仕組みのものであったため断念したので、直接のモータでのペンの上げ下げにしたがペンを糸や輪ゴムで固定するしかなく不安定で曲がった文字になってしまった。また、左右のタイヤを離しすぎたため回転が大きくなりA4に収まる文字を書くことが難しくなってしまった。よってペンをしっかり固定し、小刻みに動くことができるものにするために変速ギアやアームを積極的に使っていき工夫をすべきであったと考える。 -他グループの、アーム自体を移動させタイヤの動きを最小限にしてモータなどの性能をカバーする方法は思いつかず大変興味深く感じた。 *製作時間(授業時間外) [#o1920e9a] 講義の空き時間や休日に集まって製作した。 -ロボットの作成…約3時間 -プログラムの作成…約10時間 -レポートの作成…約4時間 * まとめ [#o3a7bc2c] 今回は簡単なロボットを早く作りプログラムに専念したため余計な動きが必要になることが多くなったと思われる。よって次回からは課題に適したロボットにすることに時間をかけ、効率よくプログラムを反映して無駄の少ない動きのものにしていくべきであると考える。そして他のグループからや調べたりすることにより入手できる情報を取り入れつつ、独自の性能を持ったロボットを作り上げていきたいと思う。