協働ロボットの作業変更に柔軟に対応する画像処理開発研究
~OpenCVとROS2の結合~

ルールベースの画像処理ライブラリであるOpenCVを用いることで、カメラの設置位置や照明の変更に対して低コストかつ柔軟に変更

課題

  • AIを用いた物体認識は、カメラの設置位置や照明が変更されると一般的に検出精度が低下する。このため、設置場所や作業内容が頻繁に変更される協働ロボットにおいてはAIモデルを再訓練するコストが大きい

対策

  • ルールベースの画像処理ライブラリであるOpenCVを用いることで、カメラの設置位置や照明の変更に対して低コストかつ柔軟に変更できる

ファミリーレストランで配膳ロボットをご覧になった方は多いでしょう。
また、自動走行ロボットを用いた公道の配送実験や、食品工場での盛り付けロボットなどのニュースを目にする機会も増えてきており、ここ数年で私たちの周りにロボットが急速に普及しています。
そのようなロボットの中で、食品業や製造業を中心に注目されているのが「協働ロボット」です。
従来の産業用アームロボットはパワーが強いため、ロボットの周囲を柵で囲み、床に固定するなどの対応が必要でした。このため、設置面積の制約が大きくレイアウト変更も困難でした。
2013年にこの規制が緩和され、安全基準を満たしたものは「協働ロボット」として人間と同じ作業スペースで稼動させることができるようになりました。設置面積が小さく、可搬性も高いため工場レイアウトの変更に柔軟に対応できるなどの特徴があります。
これによって少量多品種が求められるような工程に協働ロボットが普及していくと期待されています。
 ロボット革命・産業IoTイニシアティブ協議会(RRI):協働ロボット事例集
 https://www.jmfrri.gr.jp/content/files/WG02/WG2_Docu/wg2_jirei2022.pdf

協働ロボットの用途は、製造工程でのワーク仕分け、加工、検査、箱詰めなどがあり、ラインの頻繁な変更に応じてプログラムを柔軟に変更する必要が出てきます。
そこで今回は、オープンソースの画像処理ライブラリであるOpenCVを用いた高速・軽量な画像処理を、ロボット操作のプラットフォームであるROS2と結合した研究事例を紹介します。

研究概要:
ロボット周辺に配置したカメラでワークの座標を取得し、ロボットアームを移動します。


アーム、マーカー、ワーク、カメラを配置した模式図

要素技術:
画像認識
マーカー認識、座標変換、オブジェクト検出、色空間
ロボット操作
 ROS2(moveitパッケージ)

マーカー認識
 AprilTag
 マーカー認識には2次元画像マーカーApriltagを用います。


AprilTagの例

2次元マーカーとして日常生活ではQRコード(QRコード(R)は、株式会社デンソーウェーブの登録商標です)を頻繁に目にします。これはコード内に文字情報を持たせることができるという利点があります。マーカーの位置や向きを取得することも可能ですが、本来の用途ではありません。
一方、AprilTagは外見的にはQRコードに似ていますが、位置情報とIDに特化されたデザインになっており、QRコードよりも座標検出精度が高いとされています。
AprilTagはライブラリが豊富に存在しており、今回はpupilのPython向けモジュールを使用しました。
・AprilTagモジュール:https://github.com/pupil-labs/apriltags
このライブラリを用いると、Apriltagのファミリー、閾値などのパラメータを与えるだけで、画像ファイルからタグのIDと座標を取得することができます。
今回は作業領域の四隅にAprilTagを配置しました。AprilTagが4つ検出されると作業領域の画像座標が確定します。


検出されたAprilTagにIDと輪郭を重ねて表示したところ

座標変換
作業領域が正方形であるという条件から射影変換とスケール変換を行うと、画像上の不等辺四角形の作業領域を正方形に戻すことができます。
これにより、カメラとマーカーの位置関係が変わっても作業領域内の実座標(x,y)を取得することができるという仕組みです。


射影変換で作業領域を真上から見た画像に変換

オブジェクト検出(明度)
画像からオブジェクトを検出する簡単な手法として「閾値」を使うものがあります。
デジタル画像は明るさを0~255の数値で表わします。オブジェクトが置かれた場所は背景より暗くなるため、閾値より画素値が小さい箇所に物体が存在すると定義するものです。
単なる閾値では影やノイズなども拾ってしまうことがあるため、一定以上の面積をもつ領域だけを抽出するように設定します。これは、オブジェクトの大きさが決まっていて、かつ射影変換によって作業領域が常に同じサイズで得られることから比較的ロバストに動作します。


(図版)明度を用いて物体を検出した画像

しかし、実際にこの手法を動かすと、カメラに映ったオブジェクトと検出位置が少しずれて見えることがあります。
これは、単純な閾値では物体の「影」も検出対象になり、影を含めた領域を算出してしまうためです。

オブジェクト検出(YUV色空間)
影を検出対象から外すために、画像の「色」情報に注目します。
デジタル画像は色をRGBで保存していますが、画像処理においてはYUV(輝度、色差)やHSB(色相、彩度、明度)といった色空間を用いることがあります。
YUVはTV放送でも用いられる色空間で、RGBよりも人の目の感じ方を再現しやすいとされています。
RGBからYUV色空間への変換は次のような行列で定義されます(ITU-R BT.601)。


図左はUV(色差)平面の模式図で、原点に近いほど無彩色、離れるほど鮮やかな色を表します。
この平面に作業領域の画像をプロットしたものが(図右)です。


(図左)入力画像
(図中)UV平面の模式図
(図右)入力画像の画素値をUV平面にプロットしたもの。赤い色が直線上にプロットされている

このように、YUV色空間を用いることで影を取り除き、特定の色を持った物体だけを抽出することができるようになります

オブジェクト検出(明度/色差比較)
RGB(閾値)検出とYUV(色差)検出の結果を比べてみます。


左画像が入力。中画像が「明度」で検出したもの、左画像が「色差」を用いて赤色のオブジェクトを検出したものになります。
右画像はオブジェクトの影の影響が小さくなっていることが見て取れます。
今回用いたのは画像サイズ1280x720のUSBカメラになります。
実測ではオブジェクトの検出誤差が3mm程度に収まっていました。
安価なカメラでも、用途によっては十分な検出精度となるでしょう。

ROS2連携
前記手法で得られたオブジェクト座標をROS2と連携します。
ROS2側ではmoveitというパッケージを用いて、ステージ上にロボットアーム”Panda”を表示しています。
ここでは、前記手法で算出した座標をmoveitに与えることで、オブジェクトの位置にハンドを移動させました。


まとめ
AIは学習後のロバスト性により高い物体検知能力を持ちますが、処理がブラックボックスのため、環境変化で検出率が下がった場合の対策として再学習にコストがかかります。
OpenCVは上述した通りライブラリが豊富であるため、環境変化に対して柔軟で低コストな対策を実現できます。
また、協働ロボットは自律移動ロボットと組み合わせて使われることもあり、環境変化に対応する必要があります。OpenCVとAIはそれぞれ利点があるため、状況に応じて使い分けることも重要です。
富士ソフトではAI、OpenCVを組み合わせた様々なロボットビジョンのニーズにお応えできる体制が整っています。協働ロボットの画像処理開発については、ぜひ富士ソフトにご相談ください。

ROSとROS2開発はぜひ、
富士ソフトにご用命ください!

お問い合わせはこちら