懐中電灯にボールをぶつけるロボット

課題内容

今回の内容は「懐中電灯にボールをぶつけるロボット」。 懐中電灯を半径1メートル以内に設置し、 Mindstorms Robotics Invention System(以下RIS)を用いて360度回転、懐中電灯を照射されている角度にボールをぶつけるという課題であった。

なお、ロボット本体が懐中電灯に接触しない限りどこからピンポン玉を放ってもよいものとする。

難点

  1. ボールを1メートルまっすぐに射出すること
  2. 正確に懐中電灯の方向を察知すること

ロボットの説明

今回は課題2のロボットに光センサーを上につけ、また、難点1を克服するためにアーム部分に誘導ブロックをつけた構造となっている。

本体などの詳しい説明はこちら→http://yakushi.shinshu-u.ac.jp/robotics/?2015a%2FMember%2Ftadahiko%2FMission2#w59046ab

光センサー

センサー.jpg

ポイント

  • 懐中電灯に反応させるためにRISの上に設置。
  • 感度を上げるために周りをブロックで囲う。

誘導ブロック

誘導ブロック.jpg

ポイント

  • ボールをまっすぐに送るために設置。

完成

全体.jpg

プログラムの説明

実際のプログラム

#define short_break Off(OUT_AC);Wait(100);
#define clip_on OnRev(OUT_B);Wait(10);Off(OUT_B);
 
task main ()
{
  SetSensor(SENSOR_2,SENSOR_LIGHT);
  ClearTimer(0);	//0番目のタイマーをリセット
  int light_max;	//整数型の変数を宣言
  light_max = 0;	//仮の最大値
  int time_max;	//整数型の変数を宣言
  time_max = 0;	//価値の最大値を与える時間
  int run_time;	//整数型の変数を宣言
  run_time = 280;	//1周するのにかかる時間
  OnFwd(OUT_A);OnRev(OUT_C);	//反時計回りに回転
  while(FastTimer(0)<run_time)	//1回転するまで
  {
    if(SENSOR_2>light_max)	//light_maxの値を超えたら
    {
      light_max = SENSOR_2;	//light_maxを塗り替える
    }
  }
  short_break;	//1週したら1秒待機
  OnFwd(OUT_A);OnRev(OUT_C);	//反時計回りに回転
  until(SENSOR_2==light_max);
  short_break;
  OnFwd(OUT_AC);Wait(50);clip_on;Wait(10);	//シュート
  Off(OUT_AC);
}

使用した関数

#define short_break Off(OUT_AC);Wait(100);
#define clip_on OnRev(OUT_B);Wait(10);Off(OUT_B);

解説

1秒停止 ▲轡紂璽箸瞭虻

定義づけ

task main ()
{
  SetSensor(SENSOR_2,SENSOR_LIGHT);
ClearTimer(0);	//0番目のタイマーをリセット
  int light_max;	//整数型の変数を宣言
light_max = 0;	//仮の最大値
  int time_max;	//整数型の変数を宣言
time_max = 0;	//価値の最大値を与える時間
  int run_time;	//整数型の変数を宣言
  run_time = 280;	//1周するのにかかる時間

解説

.織ぅ沺爾魑動し、懐中電灯までの経過時刻を測る。 懐中電灯の値を上書きするため最初の値は0と定義。 2中電灯までの経過時刻を記憶するため最初の値は0と定義。

動き

  OnFwd(OUT_A);OnRev(OUT_C);	//反時計回りに回転
while(FastTimer(0)<run_time)	//1回転するまで
  {
    if(SENSOR_2>light_max)	//light_maxの値を超えたら
    {
    light_max = SENSOR_2;	//light_maxを塗り替える
    }
  }
  short_break;	//1週したら1秒待機
  OnFwd(OUT_A);OnRev(OUT_C);	//反時計回りに回転
until(SENSOR_2==light_max);
  short_break;
OnFwd(OUT_AC);Wait(50);clip_on;Wait(10);	//シュート
  Off(OUT_AC);
}

解説

360度反時計回りに回転し全方位の値を記憶する。 light_maxよりも大きな値を見つけたらその値を記憶する。 1回転後、記憶した値の最大値の方向を向く。 げ中電灯に向かってシュート。

動画

https://www.youtube.com/watch?v=sf-SZk2snu4

感想

今回の課題では、少ない時間の中でもミッションをこなすことができたのでよかったと思う。

先生のヒントなど、骨組みは教えてくださったのでさほど難しい内容ではないように思えた。

今までは定義づけを#defineでやっていたものの、int関数も問題なく扱うことができた。

今までの課題で学んだことを生かしてロボコンをにて成功を収めたい。


添付ファイル: file全体.jpg 85件 [詳細] fileセンサー.jpg 77件 [詳細] file誘導ブロック.jpg 87件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-07-27 (月) 22:34:15 (1481d)