2008a/A9

目次

課題

今回の課題は以下の3つとなっています。

全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。

懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。

懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。

ロボットのハードウェア部分

今回のロボットの基本状態の全体は以下の様になります。

DSCF0016.JPG

今回のロボットの特徴は二点あります。

その一つは、課題にあわせて白いホイールを投げるための構造

当初、過去のチームを参考にしてタイヤの回転によりホイールを射出する、という構造を考えていました。

しかし、その構造はそれ自体の製作に時間がかかるとともに重くなり動作不能に陥るという問題にぶちあたりました。

今回の課題は、タイムリミットも一週間と短いため上記の構造は断念し、仕方ないので、ほかの多くのチームと同様に投石機のような原始的な方法に変更しました。

その部分の写真は以下の様になります。

DSCF0018.JPG

構造は単純にモーターの回転を利用してホイールを投げるという物なので、説明する様な部分はないのですが、唯一、回転しすぎて構造自体が壊れない様にストッパーを付けてあります。

下の写真の黄色いパーツがそのストッパーです。

DSCF0017.JPG

また、以下の写真がストッパーが活躍した時の写真です。

DSCF0037.JPG

もう一つは、今回の課題の制限であるモーター二つまで、という制限にあわせるために一つのモーターでタイヤを動かす構造です。

下の写真が、その構造です(制作途中の写真のためストッパーがありません。)

P2008_0701_193617.JPG

また、課題のうち初めの二つはロボット自体が動く必要はないため、回転のために後方に以下の写真の様なタイヤを付けてあります。

DSCF0039.JPG

最後に、特記するべき部分もありませんが、光センサは以下の様に配置しています。

DSCF0021.JPG

ロボットのソフトウェア部分

三つの課題用に別々のプログラムを用意しました。

プログラム製作 ユウキ アンドウ

一つ目は以下のようになります。

(一つ目の課題:全方向から懐中電灯の方向を探しだし、懐中電灯に向けてブロックを投げる。懐中電灯は動かさない。)

#define LIGHT_1 45;
#define LIGHT_2 40; 
sub shoot() /ホイールを投擲するサブタスク
{
OnFwd(OUT_A); /ホイールを投擲する為のモーター回転
Wait(50);
Off(OUT_A);
}
task main() /懐中電灯の光を探し出すタスク
{ 
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
if((SENSOR_1<LIGHT_1)&&(SENSOR_2<LIGHT_2))
{
OnFwd(OUT_C);
Wait(100);
Off(OUT_C);
}
if((SENSOR_1<LIGHT_1)&&(SENSOR_3>=LIGHT_2))
{
OnFwd(OUT_C);
until((SENSOR_1>=LIGHT_1)&&(SENSOR_3>=LIGHT_2);
shoot();
}
     
if((SENSOR_3<LIGHT_2)&&(SENSOR_1>=LIGHT_1))
{
OnRev(OUT_C);
until((SENSOR_1>=LIGHT_1)&&(SENSOR_3>=LIGHT_2);
shoot();   
}
}

二つ目の課題のプログラムは以下のようになります。

(二つ目の課題:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めればブロックを投げる。)

#define LIGHT_1 45;
#define LIGHT_2 40; 
 
sub shoot() /ホイールを投擲するサブタスク
{
OnFwd(OUT_A); /ホイールを投擲する為のモーター回転
Wait(50);
Off(OUT_A);
}  

task main() /光を見つけるとその方向に前進、止まれば投擲するタスク
{
 
SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
 
if((SENSOR_1<LIGHT_1)&&(SENSOR_2<LIGHT_2))
{
OnFwd(OUT_C);
Wait(100);
Off(OUT_C);
}
   
if((SENSOR_1<LIGHT_1)&&(SENSOR_3>=LIGHT_2))
{
OnFwd(OUT_C);
until((SENSOR_1>=LIGHT_1)&&(SENSOR_3>=LIGHT_2);
Wait(300);
shoot();
}
    
if((SENSOR_3<LIGHT_2)&&(SENSOR_1>=LIGHT_1))
{
OnRev(OUT_C);
until((SENSOR_1>=LIGHT_1)&&(SENSOR_3>=LIGHT_2);
Wait(300);
shoot();   
}
}

三つ目の課題用のプログラムは下のようになります。

(三つ目の課題:懐中電灯をゆっくり動かしたとき懐中電灯に向かって進み、懐中電灯の動きを止めれば50cmの距離まで近づいてブロックを投げる。)

#define LIGHT_1 45;
#define LIGHT_2 40; 
 
sub shoot() /ホイールを投擲する為のサブタスク
{
OnFwd(OUT_A); /ホイールを投擲するモーターの回転
Wait(50);
Off(OUT_A);
}

sub walk() /懐中電灯の光に向かって前進するサブタスク
{
while((SENSOR_1>=50)&&(SENSOR_1>=45))
{
OnFwd(OUT_A);
Wait(30);
OnRev(OUT_A);
Wait(30);
}  
task main() /メインタスク
{ 

SetSensor(SENSOR_1,SENSOR_LIGHT);
SetSensor(SENSOR_3,SENSOR_LIGHT);
 
if((SENSOR_1<LIGHT_1)&&(SENSOR_2<LIGHT_2))
{
OnFwd(OUT_C);
Wait(100);
Off(OUT_C);
}
  
if((SENSOR_1<LIGHT_1)&&(SENSOR_3>=LIGHT_2))
{
OnFwd(OUT_C);
until((SENSOR_1>=LIGHT_1)&&(SENSOR_3>=LIGHT_2);
Wait(300);
walk();
shoot();
}
    
if((SENSOR_3<LIGHT_2)&&(SENSOR_1>=LIGHT_1))
{
OnRev(OUT_C);
until((SENSOR_1>=LIGHT_1)&&(SENSOR_3>=LIGHT_2);
Wait(300);
walk();
shoot();   
}
}

感想、反省等

今回の課題は地味に大変でした。

今までの課題のような、大きく動くようなモノでもなく発表もないため簡単にこなせると思ったのですが。

一番の大変さの原因は、期間が短かったことです。

今までの課題が少なくとも2週間は与えられていたのに対して、今回の課題期間は1週間。

このため、断念した機構もありました。

とはいえ、残業というか集まって遅くまで作業したかいもあり、シンプルなが時間内に考えれる範囲では十分なロボットが完成できたと思います。

また、a9の前回の課題等が評価されてません。

評価お願いします。

コメントがあればどうぞ


プログラムに説明を付けてください。 ロボットに前回の課題は評価しておきます。遅くなってすみません。I


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-08-04 (月) 17:38:25