2011a/A2/課題3左
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2011a]]
目次
#contents
*課題3 [#z7102968]
**内容 [#u5e40b06]
ボールを探し、ライトがあるところまで持っていくロボット。
**ルール [#ua010aa8]
周回コース(黒い線)上にあるボールを探し、運んでいく(又は飛ばす)ロボットを作成せよ。
周回コース(どのように進んでも良い)
--通常の交差点が2箇所以上ある。
--ロータリー型の交差点が1箇所以上ある。
--直角に曲がるコーナーおよびそのコーナーをショートカットするコース(点線)が存在する。
--急なヘアピンカーブが1箇所以上ある。
--スタート地点に目印がある。
--黒い線の幅は15〜20mm程度。
-センサー、モーターはいくつ使ってもよい。
-ボールを持ったらその場でライトのところまで飛ばすか、そのまま運んで持っていく。
*メンバー紹介 [#cf90e3f8]
-安野
-大庭
*ロボット紹介 [#r8927d14]
<ロボット概要>
ライントレースをせず、紙の上を自由に動き回ってボールを探す。
ボールを見つけたらその場でライトを探し、持っていく(又は投げる)。
#ref(./110721_145526.jpg)
<センサー>
-タッチセンサーがうまく感知しなかったので、てこの原理を利用して少ない力でもセンサーを押せるようにした。
-広い範囲でセンサーに感知させるように工夫した。
-光センサーは、ランタンを見つけるために、本体前部の上に取りつけた。
#ref(./110721_145538.jpg)
<車輪>
-車輪は一つの方が安定したので、両方一つずつにした。
-車輪を一つにした代わりに、アームの下に安定用のパーツを付けた。
-多少前部に重心が偏ってしまった。
#ref(./110721_145548.jpg)
<上部>
-アーム以外は結構シンプルな作りにした。
-タッチセンサのコードを長いものにしたので、多少コードがごちゃごちゃしてしまった。
#ref(./110722_113713.jpg)
<アーム部分>
-タッチセンサが反応したら、アームが閉じてボールをホールドする。
-できるだけボールが入る面積を大きくした。
-安定感が少し悪く、ボールを運ぶときにぐらつくことがある。
#ref(./110722_172417.jpg)110722_172417.jpg
<ギア>
-一つのモーターで二つのアームを動かせるようにした。
-ギアの特徴をいかし、都合のいい方向に変えた。
-無理やりつなげた結果、たまにギアがうまく噛まない時があった。
*プログラム紹介 [#me1e579e]
**安野 [#y96a9d35]
<ボールを蹴る>
#define GO(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define BACK(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define turn_L(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define turn_R(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);
#define HOLD OnFwd(OUT_B); Wait(35); //ボールを掴む
#define RELEASE OnFwd(OUT_B); Wait(35);Off(OUT_B); //ボールを離す
task SEARCH() //ボールを探すプログラム
{
while(true)
{
GO(200);turn_L(50);
}
}
task MISSION() //ランタンにボール持っていくプログラム
{
int lmax=0; //光の変数
int tmax=0; //時間の変数
HOLD;
ClearTimer(0); //タイマーをリセット
while(FastTimer(0)<=400)
{
OnFwd(OUT_A);
OnRev(OUT_C);
if(SENSOR_1>lmax)
{
lmax=SENSOR_1;tmax=FastTimer(0); //lmax、tmaxを随時更新
}
}
turn_R(400-tmax); //ランタンがある方向に向く
Wait(20);
RELEASE;
BACK(50);
HOLD;
GO(70);
}
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
while(true)
{
start SEARCH; //サーチプログラム始動
until(SENSOR_2 == 1);
stop SEARCH; //サーチプログラム終了
start MISSION; //ミッションスタート
Wait(1000);
stop MISSION; //ミッションコンプリート
}
}
**大庭 [#x55902c5]
<ボールを掴んで持っていく>
#define MOVE(t) OnFwd(OUT_A+OUT_C); Wait(t); //直進 (関数を使う)
#define BACK OnRev(OUT_A+OUT_B); Wait(200); //2秒間後退
#define TURN(t) OnFwd(OUT_C);OnRev(OUT_A); Wait(t); //右折
#define move(t) OnFwd(OUT_A+OUT_C); Wait(t); //直進
#define turn_R(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); //右折
#define turn_L(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); //左折
#define tomaru Off(OUT_A+OUT_C); //停止
#define tukamu OnFwd(OUT_B); Wait(50); //ボールをホールド
#define throw OnRev(OUT_B); Wait(50); //ボールを離す
task SEARCH()
{
while (SENSOR_2==0){
MOVE(200); //タッチセンサーが押されてない間、自由に動き回ってボールを探す
TURN(200);
move(100);
turn_R(100);
MOVE(200);
turn_L(100);
move(100);
TURN(200);
}
}
task MISSION()
{
tukamu; //ボールをつかむ
tomaru;
Off(OUT_B);
Wait(300);
int lmax = 0; //光の変数
int tmax = 0; //時間の変数
ClearTimer(0);
while(FastTimer(0)<800){ //一周回り一番光の強い値を測定する(8秒間続ける)
OnFwd(OUT_C);OnRev(OUT_A); //ランタンを見つける
if(SENSOR_1>lmax){
lmax = SENSOR_1;
tmax = FastTimer(0);
}
}
OnFwd(OUT_A); OnRev(OUT_C); //一番光の強い位置(ランタン)へ行く
Wait(800-tmax);
PlaySound(SOUND_UP) ; Wait(20);
MOVE(200); //ランタンへ向かう
throw; //ボールを離す
BACK;
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1に光、2にタッチセンサーをセット
SetSensor(SENSOR_2,SENSOR_TOUCH);
while(true){
start SEARCH; //サーチタスクを開始
until(SENSOR_2 == 1); //タッチセンサが押されたら開始
stop SEARCH; //サーチタスクを終了
start MISSION; //ミッションタスクを開始
Wait(1000);
stop MISSION; //ミッションタスクを終了
}
}
*まとめ [#rbf59baf]
**安野 [#ic31dd5f]
今回の課題をやっていて気づいた問題は
タッチセンサーが上手く働かない
アームの動きを止めてしまうと、ボールを掴みきれない
の二点だった。
タッチセンサーの件は軽いタッチでも反応する様に、
かませる板とタッチセンサーの位置を工夫して解決。
アームの件はボールを掴んでいる間、常にモーター
を動かしつづける事で解決した。
今回は自分でも上手く出来たと思う。ロボット作りから
プログラムまでいろいろ大変だったけど、最終的にはス
ムーズに動いてくれて良かった。次はロボコン。頑張ります。
**大庭 [#w228c073]
-自由に動き回るロボットなので、ボールを見つけるのにすごく時間がかかってしまう。
-ライントレースをしないので、プログラムは簡単にできたが、ボールの場所によっては見つけ出すのに時間がかかりそう。
-マクロを多用して、プログラムを短くした。
-ロボットが止まってからボールを掴むと、ボールがうまく掴めなかったので、掴んでから止まるという形に直した。
-最初タッチセンサがうまく動かなかったので、少ない力で反応させるのにすごく苦労した。
-アームのホールド力が少し弱くて、ボールが離れてしまっていたので、その部分の改善にもとても苦労した。
-今回は自分たちが作ったプログラムで、いかにロボットをうまく動かせるかが難しかったと思う。
-タスクを2つ作り、片方でボールを探し、片方でボールを持っていくという形にした。
*コメント [#uf7c9142]
#comment
終了行:
[[2011a]]
目次
#contents
*課題3 [#z7102968]
**内容 [#u5e40b06]
ボールを探し、ライトがあるところまで持っていくロボット。
**ルール [#ua010aa8]
周回コース(黒い線)上にあるボールを探し、運んでいく(又は飛ばす)ロボットを作成せよ。
周回コース(どのように進んでも良い)
--通常の交差点が2箇所以上ある。
--ロータリー型の交差点が1箇所以上ある。
--直角に曲がるコーナーおよびそのコーナーをショートカットするコース(点線)が存在する。
--急なヘアピンカーブが1箇所以上ある。
--スタート地点に目印がある。
--黒い線の幅は15〜20mm程度。
-センサー、モーターはいくつ使ってもよい。
-ボールを持ったらその場でライトのところまで飛ばすか、そのまま運んで持っていく。
*メンバー紹介 [#cf90e3f8]
-安野
-大庭
*ロボット紹介 [#r8927d14]
<ロボット概要>
ライントレースをせず、紙の上を自由に動き回ってボールを探す。
ボールを見つけたらその場でライトを探し、持っていく(又は投げる)。
#ref(./110721_145526.jpg)
<センサー>
-タッチセンサーがうまく感知しなかったので、てこの原理を利用して少ない力でもセンサーを押せるようにした。
-広い範囲でセンサーに感知させるように工夫した。
-光センサーは、ランタンを見つけるために、本体前部の上に取りつけた。
#ref(./110721_145538.jpg)
<車輪>
-車輪は一つの方が安定したので、両方一つずつにした。
-車輪を一つにした代わりに、アームの下に安定用のパーツを付けた。
-多少前部に重心が偏ってしまった。
#ref(./110721_145548.jpg)
<上部>
-アーム以外は結構シンプルな作りにした。
-タッチセンサのコードを長いものにしたので、多少コードがごちゃごちゃしてしまった。
#ref(./110722_113713.jpg)
<アーム部分>
-タッチセンサが反応したら、アームが閉じてボールをホールドする。
-できるだけボールが入る面積を大きくした。
-安定感が少し悪く、ボールを運ぶときにぐらつくことがある。
#ref(./110722_172417.jpg)110722_172417.jpg
<ギア>
-一つのモーターで二つのアームを動かせるようにした。
-ギアの特徴をいかし、都合のいい方向に変えた。
-無理やりつなげた結果、たまにギアがうまく噛まない時があった。
*プログラム紹介 [#me1e579e]
**安野 [#y96a9d35]
<ボールを蹴る>
#define GO(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define BACK(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define turn_L(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);
#define turn_R(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);
#define HOLD OnFwd(OUT_B); Wait(35); //ボールを掴む
#define RELEASE OnFwd(OUT_B); Wait(35);Off(OUT_B); //ボールを離す
task SEARCH() //ボールを探すプログラム
{
while(true)
{
GO(200);turn_L(50);
}
}
task MISSION() //ランタンにボール持っていくプログラム
{
int lmax=0; //光の変数
int tmax=0; //時間の変数
HOLD;
ClearTimer(0); //タイマーをリセット
while(FastTimer(0)<=400)
{
OnFwd(OUT_A);
OnRev(OUT_C);
if(SENSOR_1>lmax)
{
lmax=SENSOR_1;tmax=FastTimer(0); //lmax、tmaxを随時更新
}
}
turn_R(400-tmax); //ランタンがある方向に向く
Wait(20);
RELEASE;
BACK(50);
HOLD;
GO(70);
}
task main()
{
SetSensor(SENSOR_1, SENSOR_LIGHT);
SetSensor(SENSOR_2, SENSOR_TOUCH);
while(true)
{
start SEARCH; //サーチプログラム始動
until(SENSOR_2 == 1);
stop SEARCH; //サーチプログラム終了
start MISSION; //ミッションスタート
Wait(1000);
stop MISSION; //ミッションコンプリート
}
}
**大庭 [#x55902c5]
<ボールを掴んで持っていく>
#define MOVE(t) OnFwd(OUT_A+OUT_C); Wait(t); //直進 (関数を使う)
#define BACK OnRev(OUT_A+OUT_B); Wait(200); //2秒間後退
#define TURN(t) OnFwd(OUT_C);OnRev(OUT_A); Wait(t); //右折
#define move(t) OnFwd(OUT_A+OUT_C); Wait(t); //直進
#define turn_R(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); //右折
#define turn_L(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); //左折
#define tomaru Off(OUT_A+OUT_C); //停止
#define tukamu OnFwd(OUT_B); Wait(50); //ボールをホールド
#define throw OnRev(OUT_B); Wait(50); //ボールを離す
task SEARCH()
{
while (SENSOR_2==0){
MOVE(200); //タッチセンサーが押されてない間、自由に動き回ってボールを探す
TURN(200);
move(100);
turn_R(100);
MOVE(200);
turn_L(100);
move(100);
TURN(200);
}
}
task MISSION()
{
tukamu; //ボールをつかむ
tomaru;
Off(OUT_B);
Wait(300);
int lmax = 0; //光の変数
int tmax = 0; //時間の変数
ClearTimer(0);
while(FastTimer(0)<800){ //一周回り一番光の強い値を測定する(8秒間続ける)
OnFwd(OUT_C);OnRev(OUT_A); //ランタンを見つける
if(SENSOR_1>lmax){
lmax = SENSOR_1;
tmax = FastTimer(0);
}
}
OnFwd(OUT_A); OnRev(OUT_C); //一番光の強い位置(ランタン)へ行く
Wait(800-tmax);
PlaySound(SOUND_UP) ; Wait(20);
MOVE(200); //ランタンへ向かう
throw; //ボールを離す
BACK;
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT); //センサー1に光、2にタッチセンサーをセット
SetSensor(SENSOR_2,SENSOR_TOUCH);
while(true){
start SEARCH; //サーチタスクを開始
until(SENSOR_2 == 1); //タッチセンサが押されたら開始
stop SEARCH; //サーチタスクを終了
start MISSION; //ミッションタスクを開始
Wait(1000);
stop MISSION; //ミッションタスクを終了
}
}
*まとめ [#rbf59baf]
**安野 [#ic31dd5f]
今回の課題をやっていて気づいた問題は
タッチセンサーが上手く働かない
アームの動きを止めてしまうと、ボールを掴みきれない
の二点だった。
タッチセンサーの件は軽いタッチでも反応する様に、
かませる板とタッチセンサーの位置を工夫して解決。
アームの件はボールを掴んでいる間、常にモーター
を動かしつづける事で解決した。
今回は自分でも上手く出来たと思う。ロボット作りから
プログラムまでいろいろ大変だったけど、最終的にはス
ムーズに動いてくれて良かった。次はロボコン。頑張ります。
**大庭 [#w228c073]
-自由に動き回るロボットなので、ボールを見つけるのにすごく時間がかかってしまう。
-ライントレースをしないので、プログラムは簡単にできたが、ボールの場所によっては見つけ出すのに時間がかかりそう。
-マクロを多用して、プログラムを短くした。
-ロボットが止まってからボールを掴むと、ボールがうまく掴めなかったので、掴んでから止まるという形に直した。
-最初タッチセンサがうまく動かなかったので、少ない力で反応させるのにすごく苦労した。
-アームのホールド力が少し弱くて、ボールが離れてしまっていたので、その部分の改善にもとても苦労した。
-今回は自分たちが作ったプログラムで、いかにロボットをうまく動かせるかが難しかったと思う。
-タスクを2つ作り、片方でボールを探し、片方でボールを持っていくという形にした。
*コメント [#uf7c9142]
#comment
ページ名: