2016a/Member/ryo/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[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(); // 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]
ゴールにたどりつくこともあったが、たどりつかないことも多かった。~
交差点で止まった後の、通過するところでうまくいかないことが多かった。~
もっと時間調節を慎重にやらなければいけなかったと思う。~
また、サブルーチンやタイマーに対する理解が遅かったために、作業が遅れてしまったことも~
達成しきれなかった要因だったと思う。サブルーチンを使うことですっきりとしたプログラムを~
書くことができることがわかった。次回の課題では、今回のことを生かして、~
課題を達成できるよう頑張りたい。
終了行:
[[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(); // 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]
ゴールにたどりつくこともあったが、たどりつかないことも多かった。~
交差点で止まった後の、通過するところでうまくいかないことが多かった。~
もっと時間調節を慎重にやらなければいけなかったと思う。~
また、サブルーチンやタイマーに対する理解が遅かったために、作業が遅れてしまったことも~
達成しきれなかった要因だったと思う。サブルーチンを使うことですっきりとしたプログラムを~
書くことができることがわかった。次回の課題では、今回のことを生かして、~
課題を達成できるよう頑張りたい。
ページ名: