2017b/Member

1.作ったロボット

全体(上)

上から見た全体。写真の右へと進む。

全体(下)

ロボットの裏側。写真の上の丸いパーツと2つのタイヤの3点で床と接する。前をタイヤにしたときコップを掴む部分が高くなってしまいスムーズに掴めなかったので、できるだけロボットの前方が低くなるようにこのパーツを使った。

正面

正面。写真に見られる光センサでコップを判別する。コップに近づくことでより確実に判別できる。#ref(2017b/Member/ryok/Mission3/1518393483610[1].jpg,20%,コップを掴み持ち上げる部分(裏側)) 1つのモーターでコップを掴み、持ち上げる。左手前のギアを伝ってコップを掴み、それ以上ギアが回らなくなったらギアと一緒にコップも持ち上がる。

コップを掴む

コップを掴んだ次の瞬間には↓

コップを持ち上げる

コップが持ち上がる

コップを掴む部分

コップに直接あたる部分。写真のようなつくりにすることで、コップを持ち上げるのにもっとも適した高さに微調整しやすい。

回転センサ

写真のように右のタイヤの内側に角度センサを取り付けた。

2.プログラム

コース

プログラムの大まかな流れ:Aからスタートして図の左上のコップを掴んでXにピンポン玉を入れる→空のコップを捨てる→Xの1番近くにあるコップを掴んでXにピンポン玉を入れる→空のコップをYに入れる

   #define cup_getup OnFwd(OUT_B);Wait(15);Off(OUT_B);//紙コップをつかむ
   #define cup_putdown OnRev(OUT_B);Wait(30);Off(OUT_B);//紙コップをはなす
   #define turn_right(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_AC);//右旋回
   #define turn_left(s) OnFwd(OUT_C);OnRev(OUT_A);Wait(s);Off(OUT_AC);//左旋回
sub search_cup()
{
    SetSensor(SENSOR_1,SENSOR_ROTATION);
    SetSensor(SENSOR_2,SENSOR_LIGHT);
    int sun_MAX = 100;//明るさの値であり、のちに値を下げるものなので最初は少し高めに設定している
    int sensor_MAX = 0;//回転の値であり、のちに上がっていくものなので最初は0としてある
    ClearSensor(SENSOR_1);
    while(SENSOR_1 < 4)//回転センサーが4となるまで繰り返し
    {
        SetPower(OUT_AC,2);
        OnFwd(OUT_A);
        OnRev(OUT_C);
        if(SENSOR_2 < sun_MAX)//もし明るさがそれまでに記録した値より低くなった時以下のことをする
        {
            sun_MAX = SENSOR_2;//最低の明るさを更新
            sensor_MAX = SENSOR_1;//最低の明るさを記録した時の回転センサーの値を更新
        }
    }
    Off(OUT_AC);
    Wait(100);
    SetPower(OUT_AC,2);
    OnRev(OUT_A);
    OnFwd(OUT_C);
    until(SENSOR_1 < sensor_MAX);//先ほど最低の明るさを記録したところまで待つ
    Off(OUT_AC);
    Wait(100);
    OnFwd(OUT_AC);//紙コップがある方向に近づく
    Wait(40);
    Off(OUT_AC);
}
task main()
{
    OnFwd(OUT_AC);//A地点から1つ目の紙コップ付近まで近づく
    Wait(140);
    Off(OUT_AC);
    int A;
    for (A=1; A<=2; A++)//以下のことを2回繰り返し
    {
        SetPower(OUT_AC,2);
        OnFwd(OUT_C);//紙コップを見つけるために一時的に左旋回
        OnRev(OUT_A);
        Wait(20);
        Off(OUT_AC);
        Wait(100);
        search_cup();//紙コップを見つけて紙コップに近づく
        Wait(100);
    }
    cup_getup;//紙コップをつかむ
    turn_right(185);//紙コップをつかんだ地点で右旋回し、X地点の方向を向く
    Wait(100);
    OnFwd(OUT_AC);//X地点に近づく
    Wait(50);
    Off(OUT_AC);
    OnFwd(OUT_B);//紙コップを持ち上げる
    OnRev(OUT_AC);//紙コップを持ち上げながら下がり、紙コップからピンポン玉を出す
    Wait(100);
    Off(OUT_ABC);
    Wait(100); 
    turn_left(150);//持っている紙コップを移動の邪魔にならない位置におくため左旋回
    Wait(100);
    cup_putdown;//紙コップをはなす
    turn_right(155);//2つ目の紙コップの方向を向くために右旋回
    OnFwd(OUT_AC);//紙コップに近づく
    Wait(140);
    Off(OUT_AC);
    turn_right(40);//紙コップがある方向を向くため右旋回
    OnFwd(OUT_AC);//更に紙コップに近づく
    Wait(40);
    Off(OUT_AC);
    int B;
    for (B=1; B<=2; B++)//以下のことを2回繰り返し
    {
        SetPower(OUT_AC,2);
        turn_left(20);//紙コップを見つけるために一時的に左旋回
        Wait(100);
        search_cup();//紙コップを見つけて紙コップに近づく
        Wait(100);
    }
    cup_getup;//紙コップをつかむ
    Off(OUT_AC);
    Wait(100);
    turn_right(160);//紙コップをつかんだ地点で右旋回し、X地点の方向を向く
    OnFwd(OUT_B);//紙コップを持ち上げる
    OnRev(OUT_AC);//紙コップを持ち上げながら下がり、紙コップからピンポン玉を出す
    Wait(100);
    Off(OUT_ABC);
    turn_left(85);//X地点の方向を向いてる状態からY地点の方向をを向くため左旋回
    OnFwd(OUT_AC);//Y地点に近づき、紙コップをY地点に置く
    Wait(160);
    Off(OUT_AC);
}

3.感想

ロボットは自分たちが予想した動きと異なる動きをすることが多かった。その解決のために、プログラムであったり、ロボットの作りであったり、またセンサや光の加減、フィールドの問題など多くのことを考えなければならず、とても苦労した。同じプログラムでも少しづつ異なる動きをすることもあり、より確実に動くロボットにするには、何度も何度も動かすことが大事だと感じた。


添付ファイル: file2017b-mission3.png 42件 [詳細] file1518393481804[1].jpg 36件 [詳細] file1518393481511[1].jpg 36件 [詳細] file1518393483757[1].jpg 27件 [詳細] file1518393483610[1].jpg 20件 [詳細] file1518393483488[1].jpg 41件 [詳細] file1518393483366[1].jpg 20件 [詳細] file1518393483257[1].jpg 24件 [詳細] file1518393482441[1].jpg 25件 [詳細] file1518393482346[1].jpg 21件 [詳細] file1518393482225[1].jpg 22件 [詳細] file1518393482097[1].jpg 33件 [詳細] file1518393482009[1].jpg 20件 [詳細] file1518393483052.jpg 16件 [詳細] file1518393482932.jpg 41件 [詳細] file1518393482772.jpg 32件 [詳細] file1518393483155.jpg 58件 [詳細] fileattachments (1).zip 16件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-02-12 (月) 15:52:32 (552d)