2013年2月7日木曜日

Recognizing tomatos on my robot using Raspberry Pi

15万円台、トマト収穫ロボットの基礎技術の紹介です。

今回は、ロボットの目、形状認識の紹介です。
特徴は、2次元の画像データ1枚から、トマトを抽出し、かつ抽出したトマトの3次元の位相関係を作る点です。この位相関係が出来れば、その後の処理を効率よくすすめる事が出来ます。
    Step1: 2次元画像を使ったトマト形状認識と、その他 controlデータ抽出
    Step2: 3次元位相構造の作成

この認識で使っているアルゴリズムは、Computer Visionで開発された様々なOpenCVに実装されているアルゴリズムと、トマトを栽培しながら観察した植物体の位相構造などから作ったアルゴリズムを組合せました。(3D GISの開発経験も役に立ちました)
この内容は、トマト収穫機や収穫済みのトマトのパッキングなど、広範囲に使える基礎的な技術です。また、webcamなどの安価なカメラで行う事を前提に開発しています。

下に表示した画像からのトマト抽出結果は、ブログ標題の背景写真を使っています。トマトの表面が光っている、またガクがついているなど、画像を使った形状認識に於いては、条件が悪いデータです。

青い範囲(640x480)が、Actuatorのmotion planning の対象であり、その中は精度を高めて認識をしています。赤い丸で囲まれた物が、第一段階の画像処理をして認識したトマトです。青い四角の範囲では、ほぼ100%の認識です。この処理は、アルゴリズムの高速化に苦労しました。今は、i5クラスのマシンで1秒の数分の1以下のオーダです。

第一ステップの認識
青い四角は、特に認識精度を要求する範囲
赤い○は、トマトとして認識した形状
シアンの○は、後処理に必要なcontrolデータ
画像のふちは、切れたデータの処理が完成していないので
誤認識が発生しています。(改善予定)
この処理の後に、第二段階として、さらに独自のテンプレートを使った位相構造抽出処理をして、一定の誤差内の3次元データを生成します。3次元データが出来た段階で、トマト認識処理は終了です。第二段階は位相構造の演算が主なので短時間で終わります。
その3次元データは、ActuatorのMotion Planningの元データになります。
このように書くと、単純だけど、僕に取っては認識処理は結構複雑で悩みました。

可能な限り、2次元の画像データから3次元のデータを生成します。その方がコストが安く出来ます。全ては、15万円トマト収穫機の実現のためです。

この認識は、Raspberry Piの性能では負荷が高いので、他の処理への影響も考えてserviceで実施する様にしています。
ただし、プログラム処理ロジックのチューニングの余地がかなりあるので、他の機能の性能が定量的に把握できた段階で、再検討をします。1台のRaspberry Piを専用に割当てても良いし。。。。。

今は、Raspberry Piで画像を取得して、Recognizing Serviceに送って、あっという間に処理して返します。RDCSの腕の見せ所です。
RDCSによって、Raspberry Piは、実際の性能以上のロボットコントローラになります。
こういうのが、smartですよね。
The network is the computer. いい言葉です。

peace!

0 件のコメント:

コメントを投稿