6月30日 お片付けロボットのプログラミングを始める前に,「オママゴトしられ」とこうしろうが妹のほのちゃんに声をかける。いつもプラスチックの野菜や魚のおもちゃで遊んでいるほのちゃんであるが,「しられ」と勧められるとキョトンとしている。

 仕方なく,テストシートを裏返してママゴトセットを並べる。



 プログラムの仕様についてこうしろうと打ち合わせをする。
1.あちこち走りまわる(低速で)。つまり,Random関数で曲がる方向を決める
2.ライトセンサーで暗いと判断したら,停止しアームを動かしおもちゃを取り込む

 しかし,この仕様に基づいて作成したプログラムは失敗に終わった。白いシートに比べれば,キャベツもみかんもポテトもみんな暗いのであるが,暗さの程度がまちまちであることが失敗の原因である。「こうしろう,こりゃ接近センサー使わんとあかんわ。」

7月1日 こうしろうが接近センサーを使うようにプログラムを変更する。

okataduke.nqc
int random_go,lastlevel;

task main()
{
 SetSensorType(SENSOR_3,SENSOR_TYPE_LIGHT);
 SetSensorMode(SENSOR_3,SENSOR_MODE_RAW);
 start go_around;
 start send_signal;
 start check_signal;
}
task go_around()
{
 while(true)
 {
  random_go = Random(500);
  SetPower(OUT_A+OUT_C,2);
  OnFwd(OUT_A+OUT_C);
  Wait(random_go);
  if(Random(1) == 0)
  {
   OnRev(OUT_A);
  }
  else
  {
   OnRev(OUT_C);
  }
  Wait(180);
 }
}
task send_signal()
{
 while(true)
 {
 SendMessage(0);
 Wait(10);
 }
}
task check_signal()
{
 while(true)
 {
 lastlevel = SENSOR_3;
 SetPower(OUT_B,3);
 if(SENSOR_3 > lastlevel + 100)
  {
  Off(OUT_A+OUT_C);
  OnFwd(OUT_B);
  Wait(220);
  OnRev(OUT_B);
  Wait(180);
  Off(OUT_B);
  OnFwd(OUT_A);
  Wait(100);
  OnFwd(OUT_A+OUT_C);
  }
 }
}

 毎度おなじみの接近センサーであるがライトセンサーを未加工モード(SENSOR_MODE_RAW)で使うため微妙な光の反射の差を認識できる。キャベツであろうが,みかんであろうがなんでも,何もない状態と区別できるのである。



 みごとキャベツを取り込んだところである。でも,正直に告白するとキャベツしか取り込めない。アームのパワー,ちりとりの形状がキャベツにちょうど良いというか,キャベツ専用なのである。(そういえば,こうしろうキャベツばかりでテストしていた。)

 またしても,成功と失敗の間のグレーゾーンにおちいったが,自動お片付けロボット開発の糸口をつかんだ(?)こうしろうと私はほくそえんだ。