別棟備忘録4

*

Japaninoロボ Ep.5 回避性能の定量評価

      2015/10/24

前々回前回のエントリでは、japaninoでマイコンロボットを制作し、障害物回避のためのスケッチを数パターン考案した。
課題研究では、その後考案されたスケッチについて、その優劣の定量評価に取り組んだ。
その手法については、机の脚が障害物となる物理室で、3分間走行させたときの探査面積を比較するというアイディアが採用された。詳細はこちらのpdfファイル(2012全国高総文祭自然科学部門研究発表に向けた論文)参照。ちょっと流れ図が怪しかったりする。先のエントリに記載した流れ図が正解。
探査の様子。ロボットの軌跡を用紙に記入し、通過したマスの合計面積を求めて探査面積とします。

スケッチS[逃避型],スケッチM[回避型],スケッチA[空間発見型],スケッチU[ランダム型],そしてロボット型掃除機SZ-300(X)による死闘の結果が次のグラフ。
結果のグラフ

(論文にあるとおり)エラーバーは1σ。試行回数5回ではちょっとデータとしてあやしい…ものの、傾向は読みとれる…か。
すーいすいと障害物を回避できるはずのスケッチM[回避型]やA[空間発見型]で平均探査面積が伸びないのは、先述のように途中で角にはまってしまう「欠陥」があり、3分間フルに探査できないため。(その証拠に)角にはまるまでの実探査時間で探査面積を割った「1秒あたりの探査面積」は優れている。
そして意外にふるわなかった掃除機X。
探査面積のさらなる増加を目論んで取り組んだことはまとめると2つ。各スケッチのパラメータ(センサーの600、450といった閾値等)の変更と、角にはまると抜け出せないスケッチAの改良。
前者については探査面積の変化がほとんど誤差の範囲とみなせる程度で、大幅な探査面積の増加は無かった。
後者については様々なアイディアが出された中で、最終的にうまくいたものを以下紹介。

 スケッチA2「空間発見逃避型」

最終的に上手くいったのは、繰り返し旋回のプログラムが実行されたときにその回数をカウントし、一定回数に達したときに角にはまっていると判断して大きくターンするというものであった。
この発想でいくと、流れ図は次のように修正されまして…
スケッチA2
そこから書き起こしたスケッチはこんな感じ。(動作チェックのSerialも敢えて残してあります。)

int dis_L = 0;
int dis_R = 0;
int dis_sLR = 0;
int count = 0;
unsigned int dis_tLR = 0;
void setup(){
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
  pinMode(13,OUTPUT);
  analogWrite(6,100);
  analogWrite(10,100);
  Serial.begin(19200);
  delay(100);
}
void loop(){
  int dis_L = analogRead(0);
  int dis_R = analogRead(1);
  dis_sLR = dis_L + dis_R;
  dis_tLR = dis_L * dis_R;
  Serial.println(dis_tLR);
      if(dis_sLR < 400){
      digitalWrite(4,LOW);
      digitalWrite(5,HIGH);
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      count = 0;
    }else{
  if(count > 50){
if(dis_L < dis_R){
      digitalWrite(4,HIGH);
      digitalWrite(5,LOW);
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      delay(500);
  }else{
      digitalWrite(4,LOW);
      digitalWrite(5,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(9,LOW);
     delay(500);
  }
  }else{
  if(dis_L < dis_R){
      digitalWrite(4,HIGH);
      digitalWrite(5,LOW);
      digitalWrite(8,LOW);
      digitalWrite(9,HIGH);
      count = count + 1;
  }else{
      digitalWrite(4,LOW);
      digitalWrite(5,HIGH);
      digitalWrite(8,HIGH);
      digitalWrite(9,LOW);
      count = count + 1;
  }
}
 while(dis_sLR > 250){
  int dis_L = analogRead(0);
  int dis_R = analogRead(1);
  dis_sLR = dis_L + dis_R;
  }
    }
   }
  

カウントの閾値50は「うまくいった最小値」。スケッチ的に「1回の首振りでカウント+1」とはなっていないので、試行錯誤で定めていく必要があった部分。
動作の様子

と、このように、鬼門であった「角に45°で進入」した際にも華麗なる180°ターンをみせて角にはまらないようになりました。
このスケッチA2は従来の1sあたりの探査面積を維持しつつ3分探査できる優れもので、探査面積は30.1m2 に達しました。というわけで、「30m2 をめざそう」というスローガンを掲げていた研究グループにとっては一応の達成感(というか、これでもう実験しなくていいという解法感?)があったわけです。
以上の研究内容をまとめて、2012全国高等学校総合文化祭自然科学部門 研究発表「物理」の部で口頭発表+2012中部大学自由研究発表会にてポスター発表を行った。その際のポスター.pdf(2.37MB)

・FAQ よくある質問・

Q.高文祭と中部大、それぞれの発表について結果はどうでしたか?

A.…いずれも受賞には至らずでした。。ちなみに、全国高文祭では「回れ!ペットボトル」が最優秀賞、中部大では「サクラの茎頂培養」が優秀賞と同校対決にも辛酸を舐めており。。

・今後の課題の備忘録・
・マイクロスイッチの搭載
・もっとユニークな発想のスケッチ作り
・充電池の数を減らせないか&小型安定化
・ArdunoUNOでの製作
・遠隔操作
・ライントレース
・クラスボックス探査
・内部リンク・
Japaninoを用いたマイコンロボット製作に戻る

 - Japaninoマイコンロボ