以下、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。この実施の形態は、本発明を、入力画像に含まれる動体を検出する動体検出装置を搭載し、外部環境(外部刺激)や内部状態に応じて自律的に行動を発現する自律型のロボット装置に適用したものである。ここでは、先ず、ロボット装置について説明し、次に、ロボット装置における動体検出処理について説明する。
(1−1)ロボット装置の構成
図1は、本実施の形態におけるロボット装置を示す斜視図である。図1に示すように、本実施の形態によるロボット装置1は、4足歩行の脚式移動ロボット装置とされ、胴体部ユニット2の前後左右にそれぞれ脚部ユニット3A,3B,3C,3Dが連結されると共に、胴体部ユニット2の前端部に頭部ユニット4が連結されて構成されている。
胴体部ユニット2には、図2に示すように、CPU(Central Processing Unit)10、DRAM(Dynamic Random Access Memory)11、フラッシュROM(Read Only Memory)12、PC(Personal Computer)カードインターフェース回路13及び信号処理回路14が内部バス15を介して相互に接続されることにより形成されたコントロール部16と、このロボット装置1の動力源としてのバッテリ17とが収納されている。また、胴体部ユニット2には、ロボット装置1の向きや動きの加速度を検出するための角速度センサ18及び加速度センサ19なども収納されている。また、胴体部ユニット2の頭部とは反対方向に位置する後端部には尻尾部5が形成されている。
また、頭部ユニット4には、外部の状況を撮像するとともに、周囲の明るさを検出するためのCCD(Charge Coupled Device)カメラ20と、前後に倒すといった使用者からの物理的な働きかけを検出するためのタッチセンサ21と、前方に位置する物体までの距離を測定するための距離センサ22と、外部音を集音するためのマイクロホン23と、各種音声を出力するためのスピーカ24と、頭部ユニット4内に格納可能とされたヘッドライト25と、ロボット装置1の「目」に相当するLED(Light Emitting Diode)(図示せず)などがそれぞれ所定位置に配置されている。なお、ロボット装置1においては、タッチセンサ21以外にも、胴体部ユニット2及び頭部ユニット4の所定位置に複数のタッチセンサが配置されている。
さらに、各脚部ユニット3A〜3Dの関節部分や各脚部ユニット3A〜3D及び胴体部ユニット2の各連結部分、並びに頭部ユニット4及び胴体部ユニット2の連結部分などにはそれぞれ自由度数分のアクチュエータ261〜26n及びポテンショメータ271〜27nが配設されている。例えば、アクチュエータ261〜26nはサーボモータを構成として有している。サーボモータの駆動により、脚部ユニット3A〜3Dが制御されて、目標の姿勢或いは動作に遷移する。
そして、これら角速度センサ18、加速度センサ19、タッチセンサ21、距離センサ22、マイクロホン23、スピーカ24、及び各ポテンショメータ271〜27nなどの各種センサ並びにヘッドライト25、LED及び各アクチュエータ261 〜26nは、それぞれ対応するハブ281〜28nを介してコントロール部16の信号処理回路14と接続され、CCDカメラ20及びバッテリ17は、それぞれ信号処理回路14と直接接続されている。
信号処理回路l4は、上述の各センサから供給されるセンサデータや画像データ及び音声データを順次取り込み、これらをそれぞれ内部バス15を介してDRAM11内の所定位置に順次格納する。また信号処理回路14は、これと共にバッテリ17から供給されるバッテリ残量を表すバッテリ残量データを順次取り込み、これをDRAM11内の所定位置に格納する。
このようにしてDRAM11に格納された各センサデータ、画像データ、音声データ及びバッテリ残量データは、この後CPU10がこのロボット装置1の動作制御を行う際に利用される。
実際上CPU10は、ロボット装置1の電源が投入された初期時、胴体部ユニット2の図示しないPCカードスロットに装填されたメモリカード29又はフラッシュROM12に格納された制御プログラムをPCカードインターフェース回路13を介して又は直接読み出し、これをDRAM11に格納する。
また、CPU10は、この後上述のように信号処理回路14よりDRAM11に順次格納される各センサデータ、画像データ、音声データ及びバッテリ残量データに基づいて自己及び周囲の状況や、使用者からの指示及び働きかけの有無などを判断する。
ここで、例えば本実施の形態における顔検出タスクを実行する際には、CCDにより撮像された入力画像から顔候補を検出し、距離センサ等の値を使用し、上述した4つの条件に当てはめて非顔候補を検出し、顔候補から非顔候補を排除したものを顔領域として出力する。
さらに、CPU10は、この判断結果及びDRAM11に格納した制御プログラムに基づいて続く行動を決定すると共に、当該決定結果に基づいて必要なアクチュエータ261〜26nを駆動させることにより、頭部ユニット4を上下左右に振らせたり、各脚部ユニット3A〜3Dを駆動させて歩行させるなどの行動を行わせる。
また、この際CPU10は、必要に応じて音声データを生成し、これを信号処理回路14を介して音声信号としてスピーカ24に与えることにより当該音声信号に基づく音声を外部に出力させたり、上述のLEDを点灯、消灯又は点滅させる。また、CPU10は、後述するように、CCDカメラ20を用いて周囲の明るさを検出させ、その検出結果に応じてヘッドライト25を点灯させる。
このようにしてこのロボット装置1においては、自己及び周囲の状況や、使用者からの指示及び働きかけに応じて自律的に行動し得るようになされている。
(1−2)制御プログラムのソフトウェア構成
ここで、ロボット装置1における上述の制御プログラムのソフトウェア構成は、図3に示すようになる。この図3において、デバイス・ドライバ・レイヤ30は、この制御プログラムの最下位層に位置し、複数のデバイス・ドライバからなるデバイス・ドライバ・セット31から構成されている。この場合、各デバイス・ドライバは、CCDカメラ20(図2)やタイマ等の通常のコンピュータで用いられるハードウェアに直接アクセスすることを許されたオブジェクトであり、対応するハードウェアからの割り込みを受けて処理を行う。
また、ロボティック・サーバ・オブジェクト32は、デバイス・ドライバ・レイヤ30の最下位層に位置し、例えば上述の各種センサやアクチュエータ261〜26n等のハードウェアにアクセスするためのインターフェースを提供するソフトウェア群でなるバーチャル・ロボット装置33と、電源の切換えなどを管理するソフトウェア群でなるバワーマネージャ34と、他の種々のデバイス・ドライバを管理するソフトウェア群でなるデバイス・ドライバ・マネージャ35と、ロボット装置1の機構を管理するソフトウェア群でなるデザインド・ロボット装置36とから構成されている。
マネージャ・オブジェクト37は、オブジェクト・マネージャ38及びサービス・マネージャ39から構成されている。オブジェクト・マネージャ38は、ロボティック・サーバ・オブジェクト32、ミドル・ウェア・レイヤ40、及びアプリケーション・レイヤ41に含まれる各ソフトウェア群の起動や終了を管理するソフトウェア群であり、サービス・マネージャ39は、メモリカード29(図2)に格納されたコネクションファイルに記述されている各オブジェクト間の接続情報に基づいて各オブジェクトの接続を管理するソフトウェア群である。
ミドル・ウェア・レイヤ40は、ロボティック・サーバ・オブジェクト32の上位層に位置し、画像処理や音声処理などのこのロボット装置1の基本的な機能を提供するソフトウェア群から構成されている。また、アプリケーション・レイヤ41は、ミドル・ウェア・レイヤ40の上位層に位置し、当該ミドル・ウェア・レイヤ40を構成する各ソフトウェア群によって処理された処理結果に基づいてロボット装置1の行動を決定するためのソフトウェア群から構成されている。
なお、ミドル・ウェア・レイヤ40及びアプリケーション・レイヤ41の具体なソフトウェア構成をそれぞれ図4に示す。
ミドル・ウェア・レイヤ40は、図4に示すように、騒音検出用、温度検出用、明るさ検出用、音階認識用、距離検出用、姿勢検出用、タッチセンサ用、動き検出用及び色認識用の各信号処理モジュール50〜58並びに入力セマンティクスコンバータモジュール59などを有する認識系60と、出力セマンティクスコンバータモジュール68並びに姿勢管理用、トラッキング用、モーション再生用、歩行用、転倒復帰用、ライト点灯用及び音再生用の各信号処理モジュール61〜67などを有する出力系69とから構成されている。
認識系60の各信号処理モジュール50〜58は、ロボティック・サーバ・オブジェクト32のバーチャル・ロボット装置33によりDRAM11(図2)から読み出される各センサデータや画像データ及び音声データのうちの対応するデータを取り込み、当該データに基づいて所定の処理を施して、処理結果を入力セマンティクスコンバータモジュール59に与える。ここで、例えば、バーチャル・ロボット装置33は、所定の通信規約によって、信号の授受或いは変換をする部分として構成されている。
入力セマンティクスコンバータモジュール59は、これら各信号処理モジュール50〜58から与えられる処理結果に基づいて、「うるさい」、「暑い」、「明るい」、「ボールを検出した」、「転倒を検出した」、「撫でられた」、「叩かれた」、「ドミソの音階が聞こえた」、「動く物体を検出した」又は「障害物を検出した」などの自己及び周囲の状況や、使用者からの指令及び働きかけを認識し、認識結果をアプリケーション・レイヤ41(図2)に出力する。
アプリケーション・レイヤ4lは、図5に示すように、行動モデルライブラリ70、行動切換モジュール71、学習モジュール72、感情モデル73及び本能モデル74の5つのモジュールから構成されている。
行動モデルライブラリ70には、図6に示すように、「バッテリ残量が少なくなった場合」、「転倒復帰する場合」、「障害物を回避する場合」、「感情を表現する場合」、「ボールを検出した場合」などの予め選択された複数の条件項目にそれぞれ対応させて、それぞれ独立した行動モデル701〜70nが設けられている。
そして、これら行動モデル701〜70nは、それぞれ入力セマンティクスコンバータモジュール59から認識結果が与えられたときや、最後の認識結果が与えられてから一定時間が経過したときなどに、必要に応じて後述のように感情モデル73に保持されている対応する情動のパラメータ値や、本能モデル74に保持されている対応する欲求のパラメータ値を参照しながら続く行動をそれぞれ決定し、決定結果を行動切換モジュール71に出力する。
なお、この実施の形態の場合、各行動モデル701〜70nは、次の行動を決定する手法として、図7に示すような1つのノード(状態)NODE0〜NODEnから他のどのノードNODE0〜NODEnに遷移するかを各ノードNODE0〜NODEnに間を接続するアークARC1〜ARCnに対してそれぞれ設定された遷移確率P1〜Pnに基づいて確率的に決定する有限確率オートマトンと呼ばれるアルゴリズムを用いる。
具体的に、各行動モデル701〜70nは、それぞれ自己の行動モデル701〜70nを形成するノードNODE0〜NODEnにそれぞれ対応させて、これらノードNODE0〜NODEnごとに図8に示すような状態遷移表80を有している。
この状態遷移表80では、そのノードNODE0〜NODEnにおいて遷移条件とする入力イベント(認識結果)が「入力イベント名」の列に優先順に列記され、その遷移条件についてのさらなる条件が「データ名」及び「データ範囲」の列における対応する行に記述されている。
したがって、図8の状態遷移表80で表されるノードNODE100では、「ボールを検出(BALL)」という認識結果が与えられた場合に、当該認識結果と共に与えられるそのボールの「大きさ(SIZE)」が「0から1000」の範囲であることや、「障害物を検出(OBSTACLE)」という認識結果が与えられた場合に、当該認識結果と共に与えられるその障害物までの「距離(DISTANCE)」が「0から100」の範囲であることが他のノードに遷移するための条件となっている。
また、このノードNODE100では、認識結果の入力がない場合においても、行動モデル701〜70nが周期的に参照する感情モデル73及び本能モデル74にそれぞれ保持された各情動及び各欲求のパラメータ値のうち、感情モデル73に保持された「喜び(JOY)」、「驚き(SURPRISE)」若しくは「悲しみ(SUDNESS)」のいずれかのパラメータ値が「50から100」の範囲であるときには他のノードに遷移することができるようになっている。
また、状態遷移表80では、「他のノードヘの遷移確率」の欄における「遷移先ノード」の行にそのノードNODE0〜 NODEnから遷移できるノード名が列記されていると共に、「入力イベント名」、「データ値」及び「データの範囲」の列に記述された全ての条件が揃ったときに遷移できる他の各ノードNODE0〜NODEnへの遷移確率が「他のノードヘの遷移確率」の欄内の対応する箇所にそれぞれ記述され、そのノードNODE0〜NODEnに遷移する際に出力すべき行動が「他のノードヘの遷移確率」の欄における「出力行動」の行に記述されている。なお、「他のノードヘの遷移確率」の欄における各行の確率の和は100[%]となっている。
したがって、図7の状態遷移表80で表されるノードNODE100では、例えば「ボールを検出(BALL)」し、そのボールの「SIZE(大きさ)」が「0から1000」の範囲であるという認識結果が与えられた場合には、「30[%]」の確率で「ノードNODE120(node 120)」に遷移でき、そのとき「ACTION1」の行動が出力されることとなる。
各行動モデル701〜70nは、それぞれこのような状態遷移表80として記述されたノードNODE0〜NODEnがいくつも繋がるようにして構成されており、入力セマンティクスコンバータモジュール59から認識結果が与えられたときなどに、対応するノードNODE0〜NODEnの状態遷移表を利用して確率的に次の行動を決定し、決定結果を行動切換モジュール71に出力するようになされている。
図5に示す行動切換モジュール71は、行動モデルライブラリ70の各行動モデル701〜70nからそれぞれ出力される行動のうち、予め定められた優先順位の高い行動モデル701〜70nから出力された行動を選択し、当該行動を実行すべき旨のコマンド(以下、これを行動コマンドという。)をミドル・ウェア・レイヤ40の出力セマンティクスコンバータモジュール68に送出する。なお、この実施の形態においては、図6において下側に表記された行動モデル701〜70nほど優先順位が高く設定されている。
また、行動切換モジュール71は、行動完了後に出力セマンティクスコンバータモジュール68から与えられる行動完了情報に基づいて、その行動が完了したことを学習モジュール72、感情モデル73及び本能モデル74に通知する。
一方、学習モジュール72は、入力セマンティクスコンバータモジュール59から与えられる認識結果のうち、「叩かれた」や「撫でられた」など、使用者からの働きかけとして受けた教示の認識結果を入力する。
そして、学習モジュール72は、この認識結果及び行動切換モジュール71からの通知に基づいて、「叩かれた(叱られた)」ときにはその行動の発現確率を低下させ、「撫でられた(誉められた)」ときにはその行動の発現確率を上昇させるように、行動モデルライブラリ70における対応する行動モデル701〜70nの対応する遷移確率を変更する。
他方、感情モデル73は、「喜び(joy)」、「悲しみ(sadness)」、「怒り(anger)」、「驚き(surprise)」、「嫌悪(disgust)」及び「恐れ(fear)」の合計6つの情動について、各情動ごとにその情動の強さを表すパラメータを保持している。そして、感情モデル73は、これら各情動のパラメータ値を、それぞれ入力セマンティクスコンバータモジュール59から与えられる「叩かれた」及び「撫でられた」などの特定の認識結果と、経過時間及び行動切換モジュール71からの通知などに基づいて周期的に更新する。
具体的には、感情モデル73は、入力セマンティクスコンバータモジュール59から与えられる認識結果と、そのときのロボット装置1の行動と、前回更新してからの経過時間などに基づいて所定の演算式により算出されるそのときのその情動の変動量を△E[t]、現在のその情動のパラメータ値をE[t]、その情動の感度を表す係数をkeとして、(1)式によって次の周期におけるその情動のパラメータ値E[t+1]を算出し、これを現在のその情動のパラメータ値E[t]と置き換えるようにしてその情動のパラメータ値を更新する。また、感情モデル73は、これと同様にして全ての情動のパラメータ値を更新する。
なお、各認識結果や出力セマンティクスコンバータモジュール68からの通知が各情動のパラメータ値の変動量△E[t]にどの程度の影響を与えるかは予め決められており、例えば「叩かれた」といった認識結果は「怒り」の情動のパラメータ値の変動量△E[t]に大きな影響を与え、「撫でられた」といった認識結果は「喜び」の情動のパラメータ値の変動量△E[t]に大きな影響を与えるようになっている。
ここで、出力セマンティクスコンバータモジュール68からの通知とは、いわゆる行動のフィードバック情報(行動完了情報)であり、行動の出現結果の情報であり、感情モデル73は、このような情報によっても感情を変化させる。これは、例えば、「吠える」といった行動により怒りの感情レベルが下がるといったようなことである。なお、出力セマンティクスコンバータモジュール68からの通知は、上述した学習モジュール72にも入力されており、学習モジュール72は、その通知に基づいて行動モデル701〜70nの対応する遷移確率を変更する。
なお、行動結果のフィードバックは、行動切換モジュール71の出力(感情が付加された行動)によりなされるものであってもよい。
一方、本能モデル74は、「運動欲(exercise)」、「愛情欲(affection)」、「食欲(appetite)」及び「好奇心(curiosity)」の互いに独立した4つの欲求について、これら欲求ごとにその欲求の強さを表すパラメータを保持している。そして、本能モデル74は、これらの欲求のパラメータ値を、それぞれ入力セマンティクスコンバータモジュール59から与えられる認識結果や、経過時間及び行動切換モジュール71からの通知などに基づいて周期的に更新する。
具体的には、本能モデル74は、「運動欲」、「愛情欲」及び「好奇心」については、認識結果、経過時間及び出力セマンティクスコンバータモジュール68からの通知などに基づいて所定の演算式により算出されるそのときのその欲求の変動量をΔI[k]、現在のその欲求のパラメータ値をI[k]、その欲求の感度を表す係数kiとして、所定周期で(2)式を用いて次の周期におけるその欲求のパラメータ値I[k+1]を算出し、この演算結果を現在のその欲求のパラメータ値I[k]と置き換えるようにしてその欲求のパラメータ値を更新する。また、本能モデル74は、これと同様にして「食欲」を除く各欲求のパラメータ値を更新する。
なお、認識結果及び出力セマンティクスコンバータモジュール68からの通知などが各欲求のパラメータ値の変動量△I[k]にどの程度の影響を与えるかは予め決められており、例えば出力セマンティクスコンバータモジュール68からの通知は、「疲れ」のパラメータ値の変動量△I[k]に大きな影響を与えるようになっている。
なお、本実施の形態においては、各情動及び各欲求(本能)のパラメータ値がそれぞれ0から100までの範囲で変動するように規制されており、また係数ke、kiの値も各情動及び各欲求ごとに個別に設定されている。
一方、ミドル・ウェア・レイヤ40の出力セマンティクスコンバータモジュール68は、図4に示すように、上述のようにしてアプリケーション・レイヤ41の行動切換モジュール71から与えられる「前進」、「喜ぶ」、「鳴く」又は「トラッキング(ボールを追いかける)」といった抽象的な行動コマンドを出力系69の対応する信号処理モジュール61〜67に与える。
そしてこれら信号処理モジュール61〜67は、行動コマンドが与えられると当該行動コマンドに基づいて、その行動を行うために対応するアクチュエータ261〜26n(図2)に与えるべきサーボ指令値や、スピーカ24(図2)から出力する音の音声データ及び又は「目」のLEDに与える駆動データを生成し、これらのデータをロボティック・サーバ・オブジェクト32のバーチャル・ロボット装置33及び信号処理回路14(図2)を順次介して対応するアクチュエータ261〜26n又はスピーカ24又はLEDに順次送出する。
このようにしてロボット装置1においては、制御プログラムに基づいて、自己(内部)及び周囲(外部)の状況や、使用者からの指示及び働きかけに応じた自律的な行動を行うことができるようになされている。
(2)動体検出
上述のロボット装置1においては、上述したミドル・ウェア・レイヤ40における動き検出用モジュール57において、撮像手段としてのカメラ20にて撮像された画像から動体を検出することができる。
図9は、上述のロボット装置1における動体検出処理に関わる要部のみを示すブロック図である。図9に示すように、カメラ20からの入力画像は、信号処理回路14(図2)により順次取り込まれ、内部バス15を介してDERAM11内の所定位置に順次格納される。動体検出に使用される画像は輝度画像であり、DRAM11に格納される際、撮像画像が輝度画像に変換される。
上述したように、ロボティック・サーバ・オブジェクト32は、デバイス・ドライバ・レイヤ30の最下位層に位置し、各種センサやアクチュエータ261〜26n等のハードウェアにアクセスするためのインターフェースを提供するソフトウェア群でなるバーチャル・ロボット装置33を有する。
また、ミドル・ウェア・レイヤ40は、ロボティック・サーバ・オブジェクト32の上位層に位置し、動き検出等の画像処理や音声処理等のこのロボット装置1の基本的な機能を提供するソフトウェア群から構成されている。
更に、アプリケーション・レイヤ41は、ミドル・ウェア・レイヤ40の上位層に位置し、当該ミドル・ウェア・レイヤ40を構成する各ソフトウェア群によって処理された処理結果に基づいてロボット装置1の行動を決定するためのソフトウェア群から構成されている。
動体検出処理では、先ず、CPU10(図2)がロボティック・サーバ・オブジェクト32及びバーチャル・ロボット装置33、並びにミドル・ウェア・レイヤ40を構成する画像処理オブジェクトを順次起動する。そして、ロボティック・サーバ・オブジェクト32のバーチャル・ロボット装置33によりDRAM11から輝度画像データを取り込み、この輝度画像データが動き検出オブジェクト57に送られる。動き検出オブジェクト57は、時間軸上で隣接する画像間の差分を、複数の画素からなるブロック毎に求めたブロック差分値を算出し、そのブロック差分値が所定の閾値以上であるブロックを動体候補であるブロックと判断し、更に該動体候補ブロックが隣接してなるブロック連結領域を動体領域として検出する処理を実行する。そして、この検出結果をアプリケーション・レイヤ41の行動モデルライブラリ70に出力する。行動モデルライブラリ70は、動体を検出したという情報に基づき行動を決定し、決定結果を行動切換モジュール71に出力する。
行動切り替えモジュール71は、当該行動を実行すべき旨のコマンド(以下、これを行動コマンドという。)をミドル・ウェア・レイヤ40の出力セマンティクスコンバータモジュール68に送出する・出力セマンティックスコンバータモジュール68は、「トラッキング(ボールを追いかける)」といった抽象的な行動コマンドを対応する信号処理モジュールであるトラッキングモジュール62に与える。
そしてトラッキングモジュール62は、行動コマンドが与えられると当該行動コマンドに基づいて、その行動を行うために対応するアクチュエータ261〜26nに与えるべきサーボ指令値を生成し、これらのデータをロボティック・サーバ・オブジェクト32のバーチャル・ロボット装置33及び信号処理回路14(図2)を順次介して対応するアクチュエータ261〜26nに順次送出する。
このようにしてロボット装置1においては、制御プログラムに基づいて、自律的に動体検出結果を使用して動体をトラッキングすることができ、リアルタイムに正確な動体検出を可能とし、ユーザとの円滑なコミュニケーションを実現することができる。
次に、動き検出モジュール57における動体検出処理について詳細に説明する。図10は、動体検出方法を示すフローチャートである。図10に示すように、先ず、動体検出処理を開始するか否かの判断を行う(ステップS1)。この開始判定としては、例えば
1:姿勢遷移中
2:歩行中
3:首が動作中
であるか否かにより、判断することができる。即ち、ロボット装置1自身が動いている場合には、カメラ20も動いてしまうため、本実施の形態においては、例えば伏せをしていた状態から立ち上がった時等の姿勢遷移中、歩行中、及び頭部ユニット4を回転させる等の首動作中においては、動体検出処理を行わないものとする。
次に、輝度画像として入力される前画像(前フレーム画像)と、この前画像に時間軸上で隣接し、同じく輝度画像である現画像(現フレーム画像)とを比較し、その差分値を求める。この際、前画像及び現画像共に、複数の画素からなるブロックに分割し、各画像間でブロック毎の差分二乗和を求める。そして、この差分二乗和が一定値以上である場合、そのブロックは動きがあると判断する(ステップS2)。以下、動きありと判断したブロックを動体候補ブロックという。
図11は、ステップS2において動体候補ブロックを検出する方法を説明するための図である。図11に示すように、現画像C及び前画像Pは、例えば水平方向が104、垂直方向が80の画素からなる。これらの現画像Cと前画像Pとの輝度差分値を画素単位で算出し、複数の画素からなるブロック単位の差分値を求める。先ず、各画像を水平方向をi個、垂直方向をj個に分割したブロックとし、図12に示すように、各ブロック毎に、現画像ブロックBCijと前画像ブロックBPijとの差分二乗和を算出する。そして、各ブロック毎の差分二乗和が所定の閾値以上であるか否かを判定する。ここでは、現画像C及び前画像Pにおける1ブロックは、水平方向が4画素、垂直方向が4画素のそれぞれブロックBCij及びブロックBPij(1≦i≦26、1≦j≦20)とする。
ここで、例えは、差分値が所定の閾値以上であるものを各画素毎に抽出する場合、104×80=8320画素数分だけ判断する必要があるのに対し、このようにブロックに分割することで、判定対象が図11に示す場合は、26×20=520ブロック数分となる。即ち、このように解像度を下げることで、従来はノイズ等であるのに検出されてしまっていたような画素単位の検出をなくすと共に、処理を迅速化することができる。また、ブロック毎に判断する閾値をある程度下げ、検出感度を大きくしても検出対象となるのはブロック単位であるため、ノイズを効率的に排除しつつちょっとした動体の動きについても検出可能とすることができる。
なお、ここでは、4×4画素からなるブロックとして説明するが、ブロックの大きさは、カメラの性能や、周囲の明るさ等の環境に応じて適宜設定するものとする。また、動体候補ブロックと判定するための閾値においても、カメラや環境に応じて適宜設定するものとする。
図10に戻って、ステップS2にて検出された、各ブロックBCijのうち差分二乗和が閾値以上であった動体候補ブロックにラベリングを行う(ステップS3)。ラベリングは、動体候補となるブロックにフラグを立てることにより行うことができる。
そして、ラベリングしたブロックである動体候補ブロックが隣接する領域を1つ領域(以下、ブロック連結領域という。)として連結し、このブロック連結領域のサイズが所定値以上であるか否かを判断する(ステップS4)。
このステップS4では、サイズが所定値未満であるブロック連結領域は、動体を示す領域ではないと判断する。即ち、ブロック連結領域の大きさが全て所定値未満である場合には、動体検出処理を終了する。ここでブロック連結領域の大きさとして、該領域に含まれる動体候補ブロックの合計ブロック数(ラベル数)を使用することができる。
そして、このステップS4にて所定の大きさ以上であるブロック連結領域が複数検出された場合には、そのなかで最も大きい領域を動体が存在する領域として検出するためのターゲットとして選択する(ステップS5)。
通常の画素単位でラベリングを行う場合では、ラベリングされた領域の細かい凹凸や溝の削除をするため、ラベリングされた画素の例えば4近傍又は8近傍を連結させたり削除したりする膨張・収縮処理等が必要となり、計算量が大きくなってしまう。一方、本実施の形態においては、ブロック単位でラベリングするため、ラベリングされた動体候補ブロックの連結性を改善すると共に、上述の膨張・収縮処理等が不要となり、ラベリング等に要する時間を低減することができる。
図13は、ラベリング結果の一例を示す図である。図13に示すように、ラベリングの結果、隣接する動体候補ブロックを連結させたブロック連結領域S1〜S3が検出され、例えばブロック連結領域S1が10ブロック、ブロック連結領域S2が3ブロック、ブロック連結領域が1ブロックからなる場合、ブロック連結領域Saが最も大きく、動体領域として動体領域とすべきターゲット(動体候補領域)としてステップS5にて選択される。
ここで、例えばブロック連結領域Scは、動体とするには小さすぎ、ノイズと判断されステップS4にてキャンセルされる領域となり、ブロック連結領域Sbは、ステップS4にてキャンセルはされなかったものの、ステップS5において、ブロック連結領域Saより小さいため、例えば分離されたその他の動体とされてターゲットから除かれる。
図10に戻って、最後に、ターゲットとされたブロック連結領域が動体であるか否かの最終判定を行う(ステップS6)。この判定では、例えば、
条件1:ブロック連結領域の画像に対する占有率が30%より大きい
条件2:ターゲットの縦又は横の広がりが画像の縦又は横の大きさの70%以上
条件3:ラベル数が極端に多い
の3つの条件に合致する場合にステップS5にてターゲットとしたブロック連結領域を検出対象とせず、動体検出処理を終了する。一方、ブロック連結領域が以上の条件に当てはまらない場合には、当該ブロック連結領域を動体領域として検出する。
ここで、上記条件1において、ブロック連結領域が画像に占める割合が30%より大きい場合は、例えばロボット装置1のカメラ20の前で物体が動いたような場合が想定でき、そのように近くの物体をトラッキングのターゲットとしないよう、検出対象とせずにキャンセルするものである。
また、条件2において、ブロック連結領域の画像に対する占有率が30%以下であったとしても、そのブロック連結領域の水平方向の広がりが画像の水平方向の大きさの70%より大きかったり、ブロック連結領域の垂直方向の広がりが画像の垂直方向の大きさの70%より大きく、ブロック連結領域が高域に広がっているような場合を示す。これは、例えば、上述のような歩行可能なロボット装置1であると、サーボモータ等が微振動し、それがカメラ20等に伝わり、結果として、画像のエッジ部分のブロックが動体候補として検出されてしまうことにより、これらが連結された場合等が挙げられる。従って、このようにブロック連結領域の水平方向及び垂直方向の広がりが大きいものもターゲットとすべきではないとして検出対象とせずにキャンセルする。
更に、条件3においては、ステップS2にて動体候補ブロックと判定されたものについてステップS3にてラベリングを行うが、このラベリングされた動体候補ブロックの数が極端に多い場合、例えば、複数の動体が撮像範囲内に含まれるような場合が想定されるが、そのような場合も、ロボット装置1として、ブロック連結領域をトラッキングするには適切ではない判断とし、検出対象とせずにキャンセルするようにする。
そして、キャンセルされずに残ったロック隣接領域を動体が存在する動体領域として検出する。このように、ラベリングを行い、検出対象としない各条件に当てはめることにより、複数の動体を分離し、ノイズを除去すると共に、画面全体を占めるような大きな動体や、複数の小さな動体をトラッキング対象から排除し、モータの微振動による誤検出を防止することができる。
こうして検出された動体領域の情報が、上述したように行動モデルライブラリ70に伝えられ、行動切替モジュール71にて行動が決定され、例えばトラッキングモジュールに対して、上記動体領域(動体)をトラッキングするよう行動コマンドが出力される。
図14は、検出された動体領域を説明するための図である。図14に示すように、画像110は、動体候補ブロックが連結され、ステップS4にて動体を示す領域と判断されたブロック連結領域111、112、113を有するものとする。これら3つのブロック隣接領域111、112、113は、上述したように、ステップ5にて、最も大きい領域であるブロック連結領域111が動体候補領域とされ、ステップS6に示す所定の条件を満たすとして動体として検出されたものとする。
ここで、トラッキングモジュール71は、この動体領域111における重心位置を求め、その重心位置の水平方向位置及び垂直方向位置を検出し、頭部ユニット4を回転して上記重心位置がカメラ20の撮像画像の中心となるよう、カメラトラッキングを開始することができる。即ち、トラッキングモジュール71は、上記重心位置に応じて、首等を回転させるアクチュエータ26nを制御する制御信号を生成し、トラッキングを制御するものである。
ここで、例えばロボット装置1において、ミドル・ウェア・レイヤ40における他の機能が使用されておらず、動体検出のみを実行している場合、又は演算処理に余裕があるような場合であってリソースが競合しない範囲で他の動作を発現することができるような状態である場合等において、検出した動体領域の大きさに応じて異なる動作を発現するようにしておいてもよい。
例えば、動体領域の大きさと、それに応じて発現する行動とを下記表1のように設定することができる。
上記表1に示すように、ステップS3にてラベリングされステップS4にて連結されたブロック連結領域の画像に占める占有率が6%未満である場合(レベルL1)は、ステップS4にてターゲットとしてふさわしくないものとしてキャンセルされる。また、占有率が30%より大きい場合(レベルL6)にも、ステップS6にてターゲットとして不適当とされキャンセルされる。
一方、占有率が6%以上12%未満である場合(レベルL2)は、トラッキングモジュール62により首による動体のカメラトラッキングを開始する。更に、動体領域が12%以上18%未満である場合(レベルL3)には、首による動体トラッキングに加え、例えば図1に示す尻尾部5を振ったり、耳をパタパタしたりする等、興味を示している仕草等を示す動作を合わせて発現するようにする。
また、占有率が18%以上24%未満である場合(レベルL4)は、首による動体のカメラトラッキングに加え、動体を発見したことを示す反応として、スピーカ24等から音を出力したり、LED等の発光手段を発光させる等の動作を発現する。
更に、占有率が24%以上30%未満である場合(レベルL5)は、例えば、実際に動体の移動方向に移動したり、動体に近づいて動体に触れたり、動体を蹴ったりする等の動作を発現することで、更に積極的なインタラクションを図るようにする。または、首による動体のカメラトラキングに加え、レベルL2により発現される動作及びレベルL3により発現される動作を合わせて行うようにしたり、尻尾部5の振り方を大きくしたり、発光手段により複数色の光を順次点灯させるようにしてもよい。なお、動体の移動方向に移動したり、動体に近づいたりする場合は、ロボット装置1自体が移動するため、動体検出が困難になる。そのような場合には、動体に近づいた時点、動体に触れた時点等、ロボット装置1が移動を停止した時点で再び動体検出を開始するようにすればよい。例えば動体に近づく動作等により動体検出を停止した後、次に動体検出を再開するまでの間が短い場合等は、例えば自身の移動速度と検出されていた動体の移動速度とから、再び動体が検出可能とされる位置を予測する等して動体検出を開始するようにしてもよい。
本実施の形態においては、現画像と1つ前のフレームである前画像との画素毎の差分値を求め、これをブロック単位で閾値処理し、所定の閾値以上であるブロックにフラグを付してラベリングする。そして、ラベリングした動体候補ブロックのうち隣接するブロックを連結したブロック連結領域とし、所定の大きさのもののみ動体領域として検出すべきターゲットとする。このように、ブロック単位で閾値処理し、ラベリングを行うことにより、画素単位で行う場合に比して、閾値判定する対象が少なく、連結処理の際に膨張・収縮等も不要となり演算量を削減することができる。
更に、ターゲットとするブロック連結領域が複数ある場合は、最も大きいもの選択し、更にその選択したターゲットが、所定の大きさ未満であって、画面全体に広がりすぎず、更に先に判定された動体候補ブロックの数が所定数以下である場合にのみ、ターゲットを動体領域として検出するため、トラッキング対象として適切な動体のみを正確に検出することができる。更に、上述のブロック単位で閾値処理をする際に、閾値を下げて感度を上げても、後段において、ラベリングされたブロック数が多すぎたり、ターゲットとする領域が大きすぎたり、広がりすぎたりするような場合にはこれをキャンセルする処理を有するので、ちょっとした動きでも検出できると共に、トラッキングするのみふさわしい動体領域のみを正確に検出することができる。
更に、ロボット装置が検出された結果に応じ、カメラで動体をトラッキングするのみでなく更に異なる動作を合わせて発現するようにすることで、ロボット装置1の近くで動いている動体に対してより自然で生物らしいインタラクションが可能となる。