ロボットを使って草刈りを行う場合、考慮しなければならない点として障害物の取り扱いがあります。障害物取り扱いとしては大まかに以下の2つに分類されます。

  • IRセンサ、超音波センサ、ToFセンサ、カメラ(CMOSセンサ)などを利用して先回りして障害物を検知してそれを回避する(アクティブな障害物回避)
  • 加速度センサ、圧力センサ、接触センサなどを利用して後付けで障害物に衝突したことを検知してそれを回避する(パッシブな障害物回避)

今回の草刈ロボットにはカメラ、ホール効果センサ(脚部先端)、加速度センサの3種類のセンサが搭載されています。

カメラは草刈の対象となる物体の認識に使用し、障害物回避には使用しません。なぜなら、草刈ロボットの基本歩容パターンは「かに歩き」であり、カメラによる撮影方向とロボットの進行方向が直交しているため、進行方向の様子がタイムリーに取得できないためです。

一応カメラは160°の視野角を持ちますが、それでも進行方向を見据えるには不足しています。どうしても進行方向の様子をカメラでとらえたければ、現在固定されているカメラを可動にするか、進行方向撮影用のカメラを新たに追加するか、ロボット自体がその場にとどまって90°回転するしかありません。カメラの可動化、複数化は機構の複雑化を招き、ロボットの回転は歩容パターンの複雑化を招きます。

ということで、今回はパッシブな障害物回避を選択しました。具体的には以下の手順で障害物を回避していきます。

  1. ある一定の時間間隔でArduino Nano Everyにつないだ加速度センサからのデータ(X,Y,Z)を取得します。今回はジャイロセンサは搭載していません。なぜなら、ロボットは6足であり安定限界を超えるタイミングがほとんどないためです。障害物とは異なりますが、穴などにロボットの足先がはまった場合には姿勢が急激に変化することもあり得ます。これを回避するためには足先に設置されているホール効果センサからの信号を利用します。
  2. 予め「障害物がない場合の」加速度センサからのデータを歩容パターン(前進、後退、右旋回、左旋回)ごとに用意しておきます。下図は前進パターンの際の進行方向変位です。グラフは単調減少傾向を示しており、特に障害物がないことがわかります。変位は加速度データの累積和を2回とることで取得しています。
  3. 次に障害物にぶつかった場合の進行方向変位は下図のようになります。75ステップ付近で変位が逆方向に向いてしまっているのが分かります。

    「現時点での歩容パターンと障害物がある場合に加速度センサから得られたデータ」と「2.で予め取得しておいた障害物がない場合のデータ」を比較して、ある閾値を超えた場合には歩容パターンを後退→90°旋回と変化させます。旋回方向は左右ランダムに振っていきます。歩容パターン変化のトリガーとなる「閾値」ですが、実際に障害物に衝突したときの加速度データを何回か取得して経験的に決定していくこととします。閾値を小さく設定すれば、ちょっとしたものにぶつかるたびにイベントが発生し、方向転換を繰り返すことになります。大きく設定すれば明らかに前に進めないのに何度も前進をしようとしてしまいます。ちょうどよい塩梅を見つけ出すにはやはり試行が必要です。このあたりの学習モデルの開発は今後の課題です。