[[2016a/Member]] 目次 #contents *課題 [#wb6aa14b] 今回の課題は、下図を制作し、経路を黒い線にそって動くロボットを制作することだ。~ #ref(2016a/Member/ryo/Mission2/2016a-mission2.png,100%) 私は、A地点 → P直進 → Q直進 → Q直進 → R左折 → B地点、を経路とするものを作った。~ [[(2016年前期/課題2より):http://yakushi.shinshu-u.ac.jp/robotics/?2016a%2FMission2]] *ロボットの説明 [#l52bd66c] これが、機体の全体像。 #ref(2016a/Member/ryo/Mission2/image1 (6).JPG,100%) 前回のものより、小回りがききやすいよう機体を小さくした。~ 光センサーをタイヤと近くすることで、センサーの左右のふれを小さくした。 #ref(2016a/Member/ryo/Mission2/image3 (1).JPG,100%) 前輪を取り、代わりに球面を帯びたパーツをつけ、滑らかに動くようにした。 *プログラムの説明 [#jfd21752] **基本の定義 [#u5aef079] 以下がサブルーチンを作る上での基本的な定義である。 #define BLACK 42 //これ以下は黒 #define WHITE 50 //これ以上は白 #define RIGHT_S OnFwd(OUT_A);OnRev(OUT_C); //右旋回 #define RIGHT_K OnFwd(OUT_A);Off(OUT_C); //右回転 #define LEFT_S OnFwd(OUT_C);OnRev(OUT_A); //左旋回 #define LEFT_K OnFwd(OUT_C);Off(OUT_A); //左回転 #define go_fwd(t) OnFwd(OUT_AC);Wait(t);Off(OUT_AC); //t秒間前進 #define STEP 1 **サブルーチン [#o741bbc7] 黒の線上をたどっていくプログラム。交差点で一時停止し、音が鳴るようになっている。~ 交差点を判断するためにはタイマーを使い、黒が0.5秒以上続いた時、交差点と判断するようにした。~ また、線の左側をたどるようになっており、黒では右に、白では左に回転するようになっている。~ その他では直進する。 sub line_trace() { ClearTimer(0); while(FastTimer(0) < 50) { if (SENSOR_2 < BLACK) { RIGHT_S; } else if (SENSOR_2 < BLACK ) { RIGHT_K; } else if (SENSOR_2 > WHITE ) { LEFT_S; ClearTimer(0); } else if (SENSOR_2 >= WHITE ) { LEFT_K; ClearTimer(0); } else { OnFwd(OUT_AC); ClearTimer(0); } Wait(STEP); } Off(OUT_AC); ClearTimer(0); PlaySound(SOUND_UP); Wait(100); } ~~ 上のプログラムで黒の時、右回転するため、交差点で右に傾いた状態で止まる。~ 機体を正常な傾きに戻すことと、交差点を通過することを目的としている。 sub turn_left_i() { while (FastTimer(0) < 142) { LEFT_K; } ClearTimer(0); } ~~ 上のプログラムと使用用途は一緒だが、最後の直角を左回転するため判断の時間を長くしている。 sub turn_left_ii() { while (FastTimer(0) < 252) { LEFT_S; } ClearTimer(0); } **メインプログラム [#e5c43893] task main() { SetSensor (SENSOR_2, SENSOR_LIGHT); go_fwd(110); line_trace(); turn_left_i(); line_trace(); turn_left_i(); line_trace(); turn_left_i(); line_trace(); turn_left_ii(); line_trace(); // AからPへ turn_left_i(); // Pを通過 line_trace(); // PからQへ turn_left_i(); // Qを通過 line_trace(); // 一周回ってQへ turn_left_i(); // Qを通過 line_trace(); // QからRへ turn_left_ii(); // Rを左折 go_fwd(110); line_trace(); } *反省・感想 [#be89c822] ゴールにたどりつくこともあったが、たどりつかないことも多かった。~ 交差点で止まった後の、通過するところでうまくいかないことが多かった。~ もっと時間調節を慎重にやらなければいけなかったと思う。~ また、サブルーチンやタイマーに対する理解が遅かったために、作業が遅れてしまったことも~ 達成しきれなかった要因だったと思う。サブルーチンを使うことですっきりとしたプログラムを~ 書くことができることがわかった。次回の課題では、今回のことを生かして、~ 課題を達成できるよう頑張りたい。