画像認識処理によって雑草が見つかった場合の処理の流れは、以下のようになります。
- 雑草がアームの可動範囲内にあるかどうかの判別をおこなう。判別は雑草が前景でハサミが背景であるかどうかでおこなう。はさみ、アーム部分は常にレンズの前に位置しており、遮るものが特になければはさみ、アーム全体を含む画像が256×256の解像度で映し出される。この画像の中からはさみ、アーム部分のみを抜き出す。抜き出した画像のスーパーピクセルを算出し、アームのカバー色およびそれに隣接するはさみ先端の色を持つセグメントのみマスクして他は黒く塗りつぶす。これを画像①とする。下の写真でははさみ先端部がうまく抽出できていないが、カバー部分と同じ素材(青色ニトリルゴム)ではさみ先端部を覆うことによって解決可能である。はさみとニトリルゴムとは異種材料向け接着剤(セメダイン社の多用途3000など)で張り合わせる。
次に現時点での画像を②とする。ROIを画像①に含まれるアームカバーおよびはさみ先端部に限定し、画像②と比較する。比較は画像色情報の減算(画像②ー画像①)結果がある決められた閾値を上回るかどうかで行う。雑草がはさみよりも前面に位置していても、接近しすぎる場合も当然ありうる。しかし、これはスーパーピクセルを求めたときに青色のカバー部分が欠けることによって認識することができる。したがって画像色情報の減算(画像②ー画像①)結果がある決められた閾値を上回ることが期待できる - 雑草がアームの可動範囲内にある場合、雑草の根元付近を特定するための画像認識処理をおこなう。画像認識処理は雑草判別時と同じ仕組み、すなわち学習済みのカスケード分類器を使用するか、動画中に含まれる連続した画像の差分処理によって行う。後者の場合、特に雑草が背景から前景に変化したタイミングあるいははさみが接触したことによって発生する変形を捉える。下の写真は雑草がはさみ先端部の背景だったところから前景に移ったタイミングの例である。前景、背景の判別処理は1.と同様である。
前景、背景判別処理の有利な点は1.の処理が流用できることだが、「どこをはさみで切断するか」という問いには答えてくれない。この点は今後の検討課題だが、アーム部分のサーボ角度からはさみ先端部が地面からどれだけ離れているかは分かるので、極端に雑草上部を刈り込むような動作を行う可能性があれば、処理を一旦中断して雑草探索モードに切り替えることとする。 - 雑草がアームの可動範囲内にある場合、はさみの回転軸付近が雑草の根元に一致するように逆運動解析によってサーボ角度を算出する。ハサミを所定の位置に移動させる前に、ハサミを30°開いた状態にしておく。はさみが雑草の根元をとらえているかどうかの判別は、1.と同様に前景と背景の識別処理によっておこなう。今回の場合ははさみの片側部分が最後面、雑草が中間、はさみのもう片方が最前面の3層となる。はさみが雑草の根元をうまくとらえられなければ、アームを元の位置に戻してから同様の処理を行う。3回試行してもはさみが雑草の根元をうまくとらえられなければ、give upしてアームを元の位置に戻してから別の雑草の探索を続ける
- はさみが雑草の根元をうまくとらえられたら、ハサミを3回開閉するようにサーボに指令を送る。この時雑草が刈り取れたかどうかを判断する処理は現時点では実装しない
- 雑草がアームの可動範囲内になければ雑草の探索を続ける
次にCADを使ったシミュレーション手順については以下のようになります。
- グランド上に新たにボディを作成し、画像を射影する
- 前進歩容パターンでロボットを動作させる
- 画像がカメラの視野角に入っているかどうかを判別する(視野角は水平方向160°、垂直方向90°)。ここでは簡略化してカメラの正面に画像が配置されたことで視野角に入ったと解釈する
- 画像が視野角に入っていたらその画像が雑草を含むかどうか判別する
- 画像に雑草が入っていたら上記の画像認識、アーム、はさみ連動処理をおこなう
- 1枚の画像で動作が確認出来たら、画像枚数を増やす。また、追加画像には雑草を含むケースと含まないケースをランダムに配置する