目次

課題3について

詳しくは課題3を参照。

ロボットの紹介

robot ロボットの全体像です。

robot

赤丸で囲った歯車は、一定以上の力を加えると空回りするものを使っています。また、この挟む動作では1つのモーターで両のはさみが連動するような工夫もなされています。

robot

こちらは光センサーの位置を示しています。周りの囲いは先ほど紹介したはさみを支えるための支柱です。

robot

これはロボットの後方から見た図です。ここから見えるモーターで缶をはさみごと持ち上げます。

ゴールまでの道筋

robot 緑丸で囲った缶をゴールまで運びます。

まず光センサーでスタート近くの缶を認識してつかみます。

その後時間で次の缶までの角度を決定し光センサーで感知するまで直進します。

缶を発見したら2つの缶を積んでゴールに押し込み終了です。

プログラムの紹介

2つの機械を赤外線で連動させます。

台車のプログラム

#define signal_can 11       //積む側のプログラムに移行
#define signal_move 12     //台車側のプログラムに移行
#define signal_last 13     //最後ゴールの円に置く指示
#define turn_right(t) OnFwd(OUT_C); OnRev(OUT_A); Wait(t); Off(OUT_AC);  //右回転
#define turn_left(t) OnFwd(OUT_A); OnRev(OUT_C); Wait(t); Off(OUT_AC);     //左回転
#define back(t) OnFwd(OUT_AC); Wait(t); Off(OUT_AC);              //後退
sub move_can()    //缶を積む前と積んでいる最中の動き
{
  OnRev(OUT_AC);
  until(Message() == signal_can);    //缶を見つけるまで前進
  OnRev(OUT_AC);                   //缶との距離を詰める
  Wait(150);
  Off(OUT_AC);
  until(Message() == signal_move);  //缶上げ終わるまで停止
}
sub tyokkaku()      //90度曲がる部分の動き
{
  OnFwd(OUT_C);
  OnRev(OUT_A);
  Wait(80);
  Off(OUT_AC);
}
sub last()     //最後に缶をゴールに置く部分の動き
{
  turn_left(31);
  SendMessage(signal_last);
  until(Message() == signal_move);
  back(100);
}
task main()
{
  ClearMessage();
  move_can();
  tyokkaku();        
  move_can();
  last();  
}

昇降のプログラム

#define signal_can 11              //積む側のプログラムに移行
#define signal_move 12             //台車側のプログラムに移行
#define signal_last 13             //最後缶をゴールに置く指示
#define close OnFwd(OUT_B);   //アームを閉じる
#define open(t) OnRev(OUT_B); Wait(t); Off(OUT_B);    //アームを開く
#define can_up(t) OnRev(OUT_A); Wait(t); Off(OUT_A);  //アームを上げる
#define can_down(t) OnFwd(OUT_A); Wait(t); Off(OUT_A); //アームを下げる
#define can_find 28                    //缶判別の値
sub hazime()      //動き始め(缶を見つけるまでは何もしない)
{
  Off(OUT_AB);
  until(SENSOR_2 < can_find);
  SendMessage(signal_can);
  Wait(150);   //缶との距離を詰めている間少し待つ
}
sub ageru()  //缶を持ち上げる
{
  close;
  can_up(200);
  SendMessage(signal_move);
}
sub idoutyuu()  //移動中缶を上げる(重さで少し下がってくるので)
{ 
  while(SENSOR_2 < can_find){
       can_up(10);
       Wait(20);
  }
}
sub tumu()  //缶を積む
{   
   can_up(20);  //上まで上げる
   SendMessage(signal_can);
   can_down(100);  //缶を合わせる
   open(100);      //開いて
   can_down(100);  //下まで下げて次の缶を持ち上げる準備
}
sub last()  //最後ゴールに缶を置く時
{
   until(Message() == signal_last);
   can_down(200);
   SendMessage(signal_move);
}
task main()
{
   SetSensor(SENSOR_2,SENSOR_LIGHT);
   hazime();
   ageru();
   idoutyuu();
   tumu();
   ageru();
   last();
}

結果

1つ目の缶の判断までは良かったのですが‥。

昇降のシステムがうまく機能せずにあえなく失敗してしまいました。

反省点

昇降システムが作動しなかった理由として考えられることは、ギアの組み合わせが悪かったことです。もっと小さいギアを採用していれば、昇降スピードは落ちたかもしれませんが少ない力で確実に上ってくれたはずです。

感想

先生も授業の最後におっしゃっていましたが、いくら機械だからと言って結果が毎回同じになるとは限らないことを強く感じました。特に未熟者な私たちの設計では確実性に欠けます。少ない時間で効率的に問題解決への道筋を確立することはとても難しいことだと身をもって体験できました。

おまけ

実はコンテストの2日前までは別のタイプのロボットで挑もうとしていました。直前の変更のせいで本番に失敗してしまったのかもしれませんが‥。せっかく途中まで作っていたので紹介させてください。

試作品

robot これはキャタピラを使って缶を積んでいくものでした。

robot

写真の左側に壁を取り付け、見えている白いギアでその壁を左右に動かすことができます。それで缶を挟んでキャタピラで持ち上げる作戦でした。後はキャタピラを止めた時に缶が落ちてこないように、ある程度まで上ったら“弁”のようなシステムを取り入れるだけだったのですが・・・。

robot

写真のように弁に引っかかりどうしても缶が傾いてしまうのでこのシステムを断念しました。


添付ファイル: fileS_6506366947224.jpg 80件 [詳細] fileS_6506366824325.jpg 64件 [詳細] file2017a-mission3.png 70件 [詳細] filegia.jpg 70件 [詳細] fileS_6511413643000.jpg 41件 [詳細] fileS_6511413658516.jpg 71件 [詳細] filemaru.jpg 74件 [詳細] fileS_6506362960034.jpg 89件 [詳細] fileS_6506376668236.jpg 66件 [詳細] fileS_6511412004114.jpg 29件 [詳細] fileS_6511412601182.jpg 46件 [詳細] fileS_6511412038711.jpg 118件 [詳細] fileS_6511412020095.jpg 44件 [詳細] fileS_6511412643798.jpg 47件 [詳細] fileS_6511412627613.jpg 39件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-08-13 (日) 13:25:06 (738d)