(57)【要約】【課題】  専用の遊具を認識したり、専用の遊具を咥えたり、咥えたまま運んだり、咥えたまま転がったりして、より豊かな生き生きとした動作を行うことのできるロボット装置を提供する。【解決手段】  ロボット装置１は、４足歩行の脚式移動ロボットであり、胴体部ユニット２の前後左右にそれぞれ脚部ユニット３Ａ，３Ｂ，３Ｃ，３Ｄが連結されると共に、胴体部ユニット２の前端部に頭部ユニット４が連結されて構成されている。頭部ユニット４には、骨の形状の遊具２００を咥えることのできる口（顎）部を備えている。口部は、上顎部と下顎部からなり、骨２００の咥え部分２０３を咥えて確実に保持する構造を採る。また、骨２００を認識するための画像認識処理アルゴリズム、骨を咥えるための骨咥え制御アルゴリズム及び骨を咥えたことを検出する骨咥え検出アルゴリズムにしたがったプログラムを制御部であるＣＰＵにて実行する。【選択図】  図１
2005074538.tif 000002
【特許請求の範囲】
【請求項１】
外部環境に基づいて自律的に行動するロボット装置において、
外部環境内における被写体を撮像する画像撮像手段と、
上記画像撮像手段によって撮像された画像に基づいた画像データに含まれるラベルの円形度を計算する計算手段と、
上記計算手段によって計算された円形度によって上記被写体の特徴部を区別する判別手段とを備え、
ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有する遊具を上記被写体としたときには、上記咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を上記計算手段によって計算し、上記判別手段は上記円形度に基づいて上記咥え部分と上記側面部を区別することを特徴とするロボット装置。
【請求項２】
複数の脚部を有し、各脚部を所定パターンで駆動するようにして歩行することを特徴とする請求項１記載のロボット装置。
【請求項３】
上記棒状の咥え部分によって上記遊具の配置角度を検出することを特徴とする請求項１記載のロボット装置。
【請求項４】
上記判別手段は、短期記憶に基づいて上記咥え部分、上記二つの側面部を区別することを特徴とする請求項１記載のロボット装置。
【請求項５】
上記計算手段は、補填処理が施されて得られた上記ラベルの円形度を計算することを特徴とする請求項１記載のロボット装置。
【請求項６】
上記ロボット装置の頭部ユニットに形成された口部は、上顎部とこの上顎部に対して移動する下顎部を備えてなり、下顎部には上記咥え部分を受けるための窪みが形成され、さらに摩擦係数の高い材料を用いて、咥えた骨を保持する構造とされていることを特徴とする請求項１記載のロボット装置。
【請求項７】
上記口部によって物体を咥えたことを検出する咥え検出アルゴリズムを実行する制御手段を備え、上記上顎部と上記下顎部との関節に対する負荷を推定し、推定した上記負荷が物体を把持する方向にあるときには上記下顎部を動かすアクチュエータのゲインを調整することを特徴とする請求項１記載のロボット装置。
【請求項８】
上記制御手段は、上記アクチュエータのゲインが所定の値よりも大きいと判定したときには、アクチュエータのゲインを下げることを特徴とする請求項７記載のロボット装置。
【請求項９】
上記制御手段は、上記上顎部と上記下顎部との関節角度から上記口部が目的の物体を把持したか否かを判断することを特徴とする請求項８記載のロボット装置。
【請求項１０】
外部環境に基づいて自律的に行動するロボット装置の制御方法において、
外部環境内における被写体を撮像する画像撮像工程と、
上記画像撮像工程によって撮像された画像に基づいた画像データに含まれるラベルの円形度を計算する計算工程と、
上記計算工程によって計算された円形度によって上記被写体の特徴部を区別する判別工程とを備え、
ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有する遊具を上記被写体としたときには、上記咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を上記計算工程によって計算し、上記判別工程は上記計算工程によって計算された円形度に基づいて上記咥え部分と上記側面部を区別することを特徴とするロボット装置の制御方法。
【請求項１１】
上記計算工程は、補填処理が施されて得られた上記ラベルの円形度を計算することを特徴とする請求項１０記載のロボット装置の制御方法。
【請求項１２】
上記口部によって物体を咥えたことを検出する咥え検出アルゴリズムを実行する制御工程を備え、上記上顎部と上記下顎部との関節に対する負荷を推定し、推定した上記負荷が物体を把持する方向にあるときには上記下顎部を動かすアクチュエータのゲインを調整することを特徴とする請求項１０記載のロボット装置の制御方法。
【請求項１３】
上記制御工程は、上記アクチュエータのゲインが所定の値よりも大きいと判定したときには、アクチュエータのゲインを下げることを特徴とする請求項１２記載のロボット装置の制御方法。
【請求項１４】
上記制御工程は、上記上顎部と上記下顎部との関節角度から上記口部が目的の物体を把持したか否かを判断することを特徴とする請求項１３記載のロボット装置の制御方法。
【請求項１５】
外部環境に基づいて自律的に行動するロボット装置の遊具において、
ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有し、上記咥え部分及び二つの側面部の所定領域を上記ロボット装置による画像認識処理によってラベル付けされる色とし、そのラベルの円形度が計算されることによって咥え部分と側面部が区別されることを特徴とするロボット装置の遊具。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ロボット装置及びロボット装置の制御方法、並びにロボット装置の遊具に関し、例えばエンターティンメントロボットに適用して好適なものであり、画像認識処理によりロボット装置が識別可能であり、かつロボット装置が口で咥え、さらに運んだり、遊んだりすることのできる遊具に対する、ロボット装置の制御に関する。
【背景技術】
【０００２】
電気的若しくは磁気的な作用を用いて人間の動作に似せた運動を行う機械装置のことを「ロボット」という。ロボットの語源は、スラブ語の"ＲＯＢＯＴＡ(奴隷機械)"に由来すると言われている。わが国では、ロボットが普及し始めたのは１９６０年代末からであるが、その多くは、工場における生産作業の自動化・無人化などを目的としたマニピュレータや搬送ロボットなどの産業用ロボット（industrial robot）であった。
【０００３】
最近では、イヌやネコ、クマのように４足歩行の動物の身体メカニズムやその動作を模したペット型ロボット、あるいは、ヒトやサルなどの２足直立歩行を行う動物の身体メカニズムや動作を模した「人間形」若しくは「人間型」のロボット（humanoid robot）など、脚式移動ロボットの構造やその安定歩行制御に関する研究開発が進展し、実用化への期待も高まってきている。これら脚式移動ロボットは、クローラ式ロボットに比し不安定で姿勢制御や歩行制御が難しくなるが、階段の昇降や障害物の乗り越えなど、柔軟な歩行・走行動作を実現できるという点で優れている。
【０００４】
アーム式ロボットのように、ある特定の場所に植設して用いるような据置きタイプのロボットは、部品の組立・選別作業など固定的・局所的な作業空間でのみ活動する。これに対し、移動式のロボットは、作業空間は非限定的であり、所定の経路上または無経路上を自在に移動して、所定の若しくは任意の人的作業を代行したり、ヒトやイヌあるいはその他の生命体に置き換わる種々のサービスを提供することができる。
【０００５】
脚式移動ロボットの用途の１つとして、産業活動・生産活動等における各種の難作業の代行が挙げられる。例えば、原子力発電プラントや火力発電プラント、石油化学プラントにおけるメンテナンス作業、製造工場における部品の搬送・組立作業、高層ビルにおける清掃、火災現場その他における救助といったような危険作業・難作業の代行などである。
【０００６】
また、脚式移動ロボットの他の用途として、上述の作業支援というよりも、生活密着型、すなわち人間との「共生」あるいは「エンターティンメント」という用途が挙げられる。この種のロボットは、ヒトあるいはイヌ（ペット）、クマなどの比較的知性の高い脚式移動動物の動作メカニズムや四肢を利用した豊かな感情表現を忠実に再現する。また、あらかじめ入力された動作パターンを単に忠実に実行するだけではなく、ユーザ（あるいは他のロボット）から受ける言葉や態度（「褒める」とか「叱る」、「叩く」など）に対して動的に対応した、生き生きとした応答表現を実現することも要求される。
【０００７】
本件出願人は、特開２００１−１９１２８０号公報等に、複数の脚を有するロボット装置がピンクのボールを認識し、ボールに接近し、ボールを蹴るという動作を行うための制御方法を開示している。
【０００８】
【特許文献１】特開２００１−１９１２８０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
しかし、上記ロボット装置は、ボールを蹴ったり、つついたりして、自身の体から離すように移動することはできても、咥える等してボールを保持したり、保持したまま移動したり、遊んだりすることはできなかった。遊具を咥えて持ち上げたり、咥えたまま運んだり、咥えたまま転がったりすれば、より豊かな生き生きとした動作を表現することができるはずである。
【００１０】
本発明は、上記実情に鑑みてなされたものであり、専用の遊具を認識したり、専用の遊具を咥えたり、咥えたまま運んだり、咥えたまま転がったりして、より豊かな生き生きとした動作を行うことのできるロボット装置及びロボット装置の制御方法、並びにロボット装置の遊具に関する。
【課題を解決するための手段】
【００１１】
本発明に係るロボット装置は、外部環境に基づいて自律的に行動するロボット装置において、外部環境内における被写体を撮像する画像撮像手段と、上記画像撮像手段によって撮像された画像に基づいた画像データに含まれるラベルの円形度を計算する計算手段と、上記計算手段によって計算された円形度によって上記被写体の特徴部を区別する判別手段とを備え、ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有する遊具を上記被写体としたときには、上記咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を上記計算手段によって計算し、上記判別手段は上記円形度に基づいて上記咥え部分と上記側面部を区別することによって上記課題を解決する。
【００１２】
計算手段は、咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を計算し、判別手段は円形度に基づいて咥え部分と側面部を区別する。
【００１３】
本発明に係るロボット装置の制御方法は、外部環境に基づいて自律的に行動するロボット装置の制御方法において、外部環境内における被写体を撮像する画像撮像工程と、上記画像撮像工程によって撮像された画像に基づいた画像データに含まれるラベルの円形度を計算する計算工程と、上記計算工程によって計算された円形度によって上記被写体の特徴部を区別する判別工程とを備え、ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有する遊具を上記被写体としたときには、上記咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を上記計算工程によって計算し、上記判別工程は上記計算工程によって計算された円形度に基づいて上記咥え部分と上記側面部を区別する。
【００１４】
計算工程は咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を計算し、判別工程は円形度に基づいて咥え部分と側面部を区別する。
【００１５】
本発明に係るロボット装置の遊具は、外部環境に基づいて自律的に行動するロボット装置の遊具において、ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有し、上記咥え部分及び二つの側面部の所定領域を上記ロボット装置による画像認識処理によってラベル付けされる色とし、そのラベルの円形度が計算されることによって咥え部分と側面部が区別されることによって上記課題を解決する。
【発明の効果】
【００１６】
本発明に係るロボット装置によれば、計算手段は咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を計算し、判別手段は円形度に基づいて咥え部分と側面部を区別するので、専用の遊具を認識でき、専用の遊具を咥えたり、咥えたまま運んだり、咥えたまま転がったりして、より豊かな生き生きとした動作を行うことができる。
【００１７】
本発明に係るロボット装置の制御方法によれば、計算工程は咥え部分及び二つの側面部の所定領域に付けられた色に基づいたラベルの円形度を計算し、判別工程は円形度に基づいて咥え部分と側面部を区別するので、専用の遊具を認識でき、専用の遊具を咥えたり、咥えたまま運んだり、咥えたまま転がったりして、より豊かな生き生きとした動作を行うことができる。
【００１８】
本発明に係るロボット装置の遊具によれば、ロボット装置の頭部ユニットに形成された口部によって咥えられる棒状の咥え部分と、その咥え部分を挟んで両端に略三角形状に形成された二つの側面部を有し、上記咥え部分及び二つの側面部の所定領域を上記ロボット装置による画像認識処理によってラベル付けされる色とし、そのラベルの円形度が計算されることによって咥え部分と側面部が区別され、ロボット装置に咥えられたり、咥えられた運ばれたりされる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施の形態について図面を参照しながら説明する。この実施の形態は、周囲環境（或いは外部刺激）や内部状態に応じて自律行動をする自律型のロボット装置であり、特に４脚をそれぞれ自在に駆動しながら接地面に対して胴体部を移動する歩行動作を自律して行う。
【００２０】
このロボット装置は、後述するＣＰＵ（Central Processing Unit）によって実行される、画像認識処理アルゴリズム、骨咥え制御アルゴリズム、咥え検出アルゴリズムによって、後述する専用の遊具を認識し、近づいて咥えたり、咥えたまま歩行したり等の動作を行う。
【００２１】
先ず、ロボット装置の構成について説明する。  
図１に示すように、本実施の形態によるロボット装置１は、４足歩行の脚式移動ロボットであり、胴体部ユニット２の前後左右にそれぞれ脚部ユニット３Ａ，３Ｂ，３Ｃ，３Ｄが連結されると共に、胴体部ユニット２の前端部に頭部ユニット４が連結されて構成されている。頭部ユニット４には、本発明の遊具の具体例である骨の形状の遊具（以下、適宜、骨と記すこともある）２００を咥えることのできる口（顎）部を備えている。口部は、上顎部と下顎部からなり、上記骨２００の咥え部分２０３を咥えて確実に保持する構造を採る。口部の構造については詳細を後述する。
【００２２】
胴体部ユニット２には、図２に示すように、ＣＰＵ１０、ＤＲＡＭ（Dynamic Random Access Memory）１１、フラッシュＲＯＭ（Read ０nly Memory）１２、ＰＣ（Personal Computer）カードインターフェース回路１３及び信号処理回路１４が内部バス１５を介して相互に接続されることにより形成されたコントロール部１６と、このロボット装置１の動力源としてのバッテリ１７とが収納されている。また、胴体部ユニット２には、ロボット装置１の向きや動きの加速度を検出するための角速度センサ１８及び加速度センサ１９なども収納されている。
【００２３】
また、頭部ユニット４には、外部の状況を撮像するとともに、周囲の明るさを検出するためのＣＣＤ（Charge Coupled Device）カメラ２０と、前方に位置する物体までの距離を測定するための距離センサ２２と、外部音を集音するためのマイクロホン２３と、各種音声を出力するためのスピーカ２４と、ロボット装置１の「目」に相当するＬＥＤ（Light Emitting Diode）（図示せず）などがそれぞれ所定位置に配置されている。
【００２４】
さらに、各脚部ユニット３Ａ〜３Ｄの関節部分や各脚部ユニット３Ａ〜３Ｄ及び胴体部ユニット２の各連結部分、並びに頭部ユニット４及び胴体部ユニット２の連結部分などにはそれぞれ自由度数分のアクチュエータ２６１〜２６ｎ及びポテンショメータ２７１〜２７ｎが配設されている。例えば、アクチュエータ２６１〜２６ｎはサーボモータを構成として有している。サーボモータの駆動により、脚部ユニット３Ａ〜３Ｄが制御されて、目標の姿勢或いは動作に遷移する。もちろん、歩行動作もサーボモータの駆動により制御された脚部ユニット３Ａ〜３Ｄの接地面に対する自在な動きにより成される。
【００２５】
そして、これら角速度センサ１８、加速度センサ１９、タッチセンサ２１、距離センサ２２、マイクロホン２３、スピーカ２４、及び各ポテンショメータ２７１〜２７ｎなどの各種センサ並びに、ＬＥＤ及び各アクチュエータ２６１ 〜２６ｎは、それぞれ対応するハブ２８１〜２８ｎを介してコントロール部１６の信号処理回路１４と接続され、ＣＣＤカメラ２０及びバッテリ１７は、それぞれ信号処理回路１４と直接接続されている。
【００２６】
信号処理回路ｌ４は、上述の各センサから供給されるセンサデータや画像データ及び音声データを順次取り込み、これらをそれぞれ内部バス１５を介してＤＲＡＭ１１内の所定位置に順次格納する。本実施の形態では、ＣＣＤカメラ２０によって撮像された被写体の画像信号は、信号処理回路１４によって所定の映像信号処理が施されて取り込まれ、画像データとされてＤＲＡＭ１１の所定の位置に格納される。また信号処理回路１４は、これと共にバッテリ１７から供給されるバッテリ残量を表すバッテリ残量データを順次取り込み、これをＤＲＡＭ１１内の所定位置に格納する。
【００２７】
このようにしてＤＲＡＭ１１に格納された各センサデータ、画像データ、音声データ及びバッテリ残量データは、この後ＣＰＵ１０がこのロボット装置１の動作制御を行う際に利用される。ＣＰＵ１０が行う動作制御としては、本発明の特徴である、画像認識処理アルゴリズム、骨咥え制御アルゴリズム、咥え検出アルゴリズムに基づいた各プログラム（画像認識処理プログラム、骨咥え検出プログラム、咥え検出プログラム）による制御がある。これらのアルゴリズムについては詳細を後述する。
【００２８】
実際上ＣＰＵ１０は、ロボット装置１の電源が投入された初期時、胴体部ユニット２の図示しないＰＣカードスロットに装填されたメモリカード２９又はフラッシュＲＯＭ１２に格納された上記制御処理用の各プログラムをＰＣカードインターフェース回路１３を介して又は直接読み出し、これをＤＲＡＭ１１に格納する。
【００２９】
また、ＣＰＵ１０は、この後上述のように信号処理回路１４よりＤＲＡＭ１１に順次格納される各センサデータ、画像データ、音声データ及びバッテリ残量データに基づいて自己及び周囲の状況や、使用者からの指示及び働きかけの有無などを判断する。
【００３０】
さらに、ＣＰＵ１０は、この判断結果に基づいて決定すると共に、上記各プログラムに基づいて必要なアクチュエータ２６１〜２６ｎを駆動させることにより、頭部ユニット４の口部によって骨を咥えたり、頭部ユニット４を上下左右に振らせたり、各脚部ユニット３Ａ〜３Ｄを駆動させて歩行させるなどの行動を行わせる。
【００３１】
また、この際ＣＰＵ１０は、必要に応じて音声データを生成し、これを信号処理回路１４を介して音声信号としてスピーカ２４に与えることにより当該音声信号に基づく音声を外部に出力させたり、上述のＬＥＤを点灯、消灯又は点滅させる。このようにしてこのロボット装置１においては、自己及び周囲の状況や、使用者からの指示及び働きかけに応じて自律的に行動し得るようになされている。
【００３２】
図３にはロボット装置１が咥えて遊ぶ対象となる遊具の外観を示す。この遊具は、一般的に犬が咥えて遊ぶという観念を抱かせる骨の形状をしている。図３の（ａ）は遊具を安定した状態で床に置いた様子を示す。図３の（ｂ）は遊具を縦にした状態で床に置いた様子を示す。図３の（ｃ）は安定した状態で床に置かれた遊具の正面図である。図３の（ｄ）は安定した状態で床に置かれた遊具の側面図である。この骨の形状の遊具は、スティック状の咥え部分２０３の両端に略トライアングル状の側面部２０１Ｌ，２０１Ｒを設けた形状である。咥え部分２０３はピンク色とされている。また側面部２０１Ｌ，２０１Ｒの外側には、太い略Ｙ状にピンク色の領域２０２が設けられている。側面部２０１Ｌ，２０１Ｒの内側２０４Ｌ，２０４Ｒは、外周から咥え部分２０３に向かって厚くなるように形成されている。咥え部分２０３の長さは、ロボット装置１の頭部ユニット４の口部が咥えられるのに十分な長さとされている。また、上記内側２０４Ｌ，２０４Ｒを外周から咥え部分２０３に向かって厚くなるように形成しているため、ロボット装置が咥え部分２０３のいずれか側面部側を咥えたとしても、傾斜により中央部を咥えるようにするためである。
【００３３】
ロボット装置１は、この遊具２００をＣＣＤカメラ２０を使って撮影し、その画像信号を信号処理部１４にて処理し、画像データをＤＲＡＭ１１に格納する。ロボット装置１は、ＤＲＡＭ１１から画像データを取得して、ＣＰＵ１０によって実行される画像認識処理プログラムにしたがって、自分の遊具であることを認識する。画像による認識は、咥え部分２０３、側面部２０１Ｌ，２０１Ｒのピンク色の形状識別により可能である。また、ピンク色の形状識別により咥え部分２０３の向きを判別し、咥えることができるか否かの判断を行うこともできる。咥え部分２０３のラベルの向きを基に骨の配置角度を検出することもできる。
【００３４】
ロボット装置１による遊具の認識方法について説明する。画像認識処理プログラムにしたがって行われるが、先ず認識方法の原理について説明する。ロボット装置１は、ＣＣＤカメラ２０によって撮影した画像データから、ピンク領域の円形度を算出し、その値を用いて遊具を認識する。また、遊具の特徴部となる咥え部分、側面部分を区別する。円形度Ｒは、ピンク領域の面積とその周囲長を使って以下の式によって求められる。
Ｒ＝４π面積／（周囲長＊周囲長）    ・・・（１）
また、ピンク領域に対して膨張処理と補填処理を施すことによって認識性能を向上することもできる。
【００３５】
図４には図形の種類が“円”、“正方形”、“正三角形”の場合の、面積、周囲長、円形度を示す。また、図５には上記遊具とピンクボールの実画像と、これらの画像処理結果（ピンクカラーテーブル領域の演算結果）を示す。
【００３６】
実際に、ロボット装置１は、上記（１）式によって求めた円形度と、さらに短期に記憶したデータにより、撮影した対象物を分類する。図６に示すように円形度は０．０から１．０まで円形に向かうにしたがって高くなる。言い換えると円形から形状が離れるほど小さい値になる。
【００３７】
例えば、円形度Ｒが０．７〜１．０のときには図７に実画像と画像処理結果を示すようなピンクボールであると識別する。また、円形度Ｒが０．５５〜０．６のときには図８に実画像と画像処理結果を示すような上記遊具の側面部２０１Ｌ、２０１Ｒであると識別する。また、円形度Ｒが０．１５〜０．５のときには図８に実画像と画像処理結果を示すような上記遊具の咥え部分２０３であると識別する。
【００３８】
また、円形度Ｒが０．０〜０．１５のときにはノイズ地帯であり、０．５〜０．５５のときには無所属地帯その１であるとする。また、円形度Ｒが０．６〜０．７のときには無所属地帯その２であるとする。照明条件や、見る角度によっては、時間の経過に伴って円形度Ｒが変化する場合がある。円形度Ｒがノイズ地帯に入っていても、ピンク領域が一定以上の面積があればピンクの不明物体に分類する。また、現在は、円形度Ｒが無所属地帯その１にあるが、咥え部分２０３を識別できた０．１５〜０．５に入っていたという記憶があれば咥え部分２０３と識別する。同様に、０．５５〜０．６に入っていたという記憶があれば側面部２０１と識別する。いずれの記憶もなければ、ピンクの不明物体とする。また、現在は、円形度Ｒが無所属地帯その２にあるが、ピンクボールを識別できた０．７〜１．０に入っていたという記憶があればピンクボールと識別する。同様に、０．５５〜０．６に入っていたという記憶があれば側面部２０１と識別する。いずれの記憶もなければ、ピンクの不明物体とする。
【００３９】
このように円形度と短期の記憶にしたがった分類を行うことにより、上記遊具（骨２００）とピンクボールとの誤識別を排除することができる。また、環境のロバストさにも適応できる。
【００４０】
次に、認識性能を向上するための補填処理及び膨張処理の原理について図９を参照しながら説明する。照明の影響によって、ピンクボールや上記遊具の一部には、白飛び１０２や影１０５を生じ、ボールや上記遊具の一部が欠けて見えることがある。すると、円形度の計測値が理論値と一致しにくくなり、形状を誤認識する原因となる。そこで、ラベル内を左右方向及び上下方向にスキャンし、左右両端の間、及び、上下両端の間で、ラベル付けされていない画素に対して、強制的にラベルを割り当てる。符号１０３は左右（横）方向スキャンによる補填を示し、符号１０４は上下（縦）方向スキャンによる補填を示す。白飛び１０２部分や、影１０５で暗くなった部分の色をラベルと同色に書き換える。これにより、補填したラベルの形状の円形度が理論値に近づき、認識精度が向上する。なお、補填処理によっても埋めきれない部分１０６は残ってしまうこともある。もちろん、もっと時間をかけて斜め方向にスキャンして強制的にラベルを割り当ててもよい。また、周囲の例えば８画素を強制的に同色に書き換える膨張処理を行ってもよい。この膨張処理では、ピンクは破線で示した領域まで膨張する。
【００４１】
次に、ロボット装置１がＣＰＵ１０によって画像認識処理プログラムを実行することによって行う画像認識の処理の流れについて図１０〜図２１を参照して説明する。先ず、図１０のステップＳ１にて画像データを取得する。ＣＣＤカメラ２０にて撮影し、信号処理回路１４によって映像信号処理が施され、ＤＲＡＭ１１に格納されていた画像データである。次に、カラーデータテーブル（ＣＤＴ）のピンクチャンネルのデータを取得する。ハード的に画像のどこがピンクになっているかが計算できるので、ピンクのチャンネルという画像に対してアクセスすると、ｘ方向が何画素目でｙ方向が何画素目のこの画素はピンクであるか否かを１，０のデータで検出できる。例えば、ピンクなら１、ピンクでないなら０というデータである。
【００４２】
フローチャートでは、ステップＳ２にノイズ多発環境処理をオンにするか否かという分岐処理があるがこれについては後述する。ステップＳ３では、ＣＤＴのピンクチャンネルのデータに対して膨張処理を１回だけ施す。この膨張処理については図９を用いて説明した通りである。境界部のピンクの周囲８画素もピンクにして、照明の影響による白飛び等を埋めてしまおうとする処理である。ステップＳ４〜ステップＳ６は、ステップＳ２に続く処理であるのではここでは説明を省略する。
【００４３】
次に、ステップＳ７では、ラベリング処理を行う。ラベリング処理は、１つの画像中にピンクのかたまりが何個あるかを求める方法である。例えば、図８の（ｂ）に示したように、遊具の咥え部分２０３に相当するピンクのかたまりと、側面部２０１Ｒに相当するピンクのかたまりがあったとすると、そのかたまりは２個あることになる。
【００４４】
ステップＳ８では、補填処理を行う。この補填処理についても図９を参照して既に説明したのでここでは省略する。ステップＳ３にて行った膨張処理でも埋めきれなかった白飛び等を埋めてしまおうとする処理である。
【００４５】
しかし、ステップＳ１の画像データ取得からピンクチャンネルのデータ取得処理にて、色温度等の関係でロボット装置１が木の床や、肌色等もピンクと誤認識してしまった場合には、その後の膨張処理、ラベリング処理、補填処理を行うことにより膨大なデータ処理をしてしまうことになる。これを避けるために、ノイズ多発環境となってしまったときには、収縮を行う。収縮というのは、上記膨張の反対であり、ある画素がピンクでなかったら、周りの８近傍もピンクではないとする。これにより小さなノイズは消すことができる、不必要に多くなってしまったラベリング数を減らすことができる。
【００４６】
このため、ステップＳ９にてラベル数が一定数以上であるか否かをチェックし、一定数（例えば１０個）以上であると判断すると、ノイズ多発環境処理をオンにする（ステップＳ１０）。そして、次の画像データを取得するときにはステップＳ２にてノイズ多発環境処理がオンにされていると判定するので、ステップＳ４に進んで収縮処理を行い、小さなノイズを消す。この収縮によりピンク領域は小さくなっているので、ステップＳ５にて収縮解除値を計算し、ステップＳ６により上記膨張処理を２回かける。
【００４７】
ステップＳ５では、ステップＳ４にて収縮をしたときに、収縮をする前よりもどのくらいピンクが減ったかという差分を出している。収縮処理の後にピンクでなくなった画素の累積を計算することになる。ピンクの点のようなノイズの場合、収縮によってノイズはピンクでないものになる。ピンクノイズがなくなり、さらに照明環境が変化してピンクボールだけとなった場合は、収縮によって変わるのはピンクボールの輪郭だけである。それによって、ピンクの減る量は全体としては、ピンクノイズの場合よりも少なくなる。このようにステップＳ５は、収縮によって何％が書き換えられたかを計算する処理を行う。
【００４８】
ステップＳ９にて依然としてラベル数が一定数よりも多いと判定すれば、次の画像データを取得したときにも、ステップＳ４にて収縮処理を行うことになる。ステップＳ９にてラベル数が一定数よりも少なくなったと判定し、さらにステップＳ１１にてノイズ多発環境がオンであると判定するとステップＳ１２に進む。ステップＳ１２では、収縮解除条件をクリアしてもよいか否かを判断し、良ければステップＳ１３にてノイズ多発環境処理をオフにする。
【００４９】
図２２〜図２６には、骨とボールの画像処理結果を示す。上記図１０におけるステップＳ１３までの処理手順によって得られた画像処理結果であり、これらの画像処理結果を元にして、後述の図１１のステップＳ１４〜ステップＳ１９の処理手順が行われる。図２２の（ａ）は、骨全体の画像である。図２２の（ｂ）は画像処理結果である。咥え部分と側面のピンク部分が若干膨張しているのが判る。図２３の（ａ）は、骨の咥え部分を略正面から捉えた画像である。白飛びしている様子が判る。図２３の（ｂ）の画像処理結果では、咥え部分に補填処理、膨張処理を施した結果白飛びがなくなっている。また、図２４の（ａ）は、縦置きの骨の画像である。図２４の（ｂ）の画像処理では、側面部分に補填処理を施した結果、三角形の底辺部分がほぼ直線になっている。図２５の（ａ）は、ボールの画像である。照明の影響で白飛びが発生している。図２５の（ｂ）の画像処理結果では、補填処理及び膨張処理により白飛びがなくなり、膨張しているのが判る。図２６の（ａ）は、骨とボールを一緒にした画像である。図２６の（ｂ）の画像処理結果では、それぞれのピンク部分が補填処理、膨張処理されている。
【００５０】
次に、図１１のステップＳ１４に進んで各ラベル、例えば上記遊具（骨：BONE）の咥え部分（スティック）と側面、ボール（BALL）、ピンク色の不明物体（PINK）の各ラベルについてステップＳ１４に示すように、面積、重心、周囲長、円形度、画像上の傾き角を計算し、これらの情報と履歴（過去の記憶）から、各ラベルを、骨の咥え部分、骨の側面部分、ピンクボール、ピンク色の不明物体、ノイズに分類する。この図１１のステップＳ１４の各ラベル処理は、図１２のサブルーチンを持つ。
【００５１】
図１２のサブルーチンでは、ステップＳ２１においてラベルを全数処理したかで分岐し、全数に達していないのであれば、ステップＳ２２にて、各ラベルの面積：Ｓ、重心位置：（ｘ、ｙ）、周囲長：Ｌ、円形度：Ｒ＝４πＳ／（Ｌ＊Ｌ）、画像上の傾き角θ（２次モーメント方式）を計算する。
【００５２】
そして、上記ステップＳ２２の情報を使ってステップＳ２３にてラベルの円形度Ｒの値が上記遊具（骨）のスティック部分の範囲内にあるか否かをチェックする。例えば、円形度Ｒが０．４であり、上記図６においてスティック部分の範囲にあると判定するとステップＳ２４に進んで骨スティック詳細処理を行う。このステップＳ２４の骨スティック詳細処理については後述する。
【００５３】
ステップＳ２３にてラベルの円形度の値が骨のスティック部分の範囲内にはなく、かつステップＳ２５にて無所属地帯１の範囲内にあると判定するとステップＳ２６に進んで無所属地帯１詳細処理を行う。このステップＳ２６の無所属地帯１詳細処理についても後述する。
【００５４】
ステップＳ２５にてラベルの円形度の値が無所属地帯１の範囲内にはなく、かつステップＳ２７にて骨の側面部の範囲内にあると判定するとステップＳ２８に進んで骨側面処理処理を行う。このステップＳ２８の骨側面処理についても後述する。
【００５５】
ステップＳ２７にてラベルの円形度の値が骨の側面部の範囲内にはなく、かつステップＳ２９にて無所属地帯２の範囲内にあると判定するとステップＳ３０に進んで無所属地帯２詳細処理を行う。このステップＳ３０の無所属地帯２詳細処理についても後述する。
【００５６】
ステップＳ２９にてラベルの円形度の値が無所属地帯２の範囲内にはなく、かつステップＳ３１にてボールの範囲内にあると判定するとステップＳ３２に進んでボール詳細処理を行う。このステップＳ３２のボール詳細処理についても後述する。
【００５７】
ステップＳ２９にてラベルの円形度の値が無所属地帯２の範囲内にはなく、かつステップＳ３１にてボールの範囲内にない判定するとステップＳ３３に進んで例外詳細処理を行う。このステップＳ３３の例外詳細処理についても後述する。
【００５８】
ステップＳ２４の骨スティック詳細処理、ステップＳ２６の無所属地帯１詳細処理、ステップＳ２８の骨側面詳細処理、ステップＳ３０の無所属地帯２詳細処理、ステップＳ３２のボール詳細処理、ステップＳ３３の例外詳細処理が終わると、図１３のステップＳ３４、ステップＳ３５、ステップＳ３６及びステップＳ３７を実行し、ステップＳ２１に戻る。ステップＳ２１にてラベルを全数処理したと判定すると、各ラベル処理は終了となる。
【００５９】
図１４には、上記ステップＳ２４の骨スティック詳細処理のサブルーチンを示す。先ず、ステップＳ２４０１にてラベル面積が識別面積（所定の閾値）以上、または前回フレームで骨のスティックを認識したかを判定する。ラベル面積Ｓは既に計算しているが、そのラベル面積Ｓが所定の閾値（例えば５０画素や、１００画素とか）以上であるか否かにより、信頼性を確保しようとする。物体が遠くにあるとロボット装置からは小さく見えることになる。そのときはボール、骨を誤認識しやすい。実際に４０ｃｍとか５０ｃｍ離れたときには、どれくらいの画素が見えるとかは予め判っているので、その値を閾値として用い、ラベル面積Ｓが閾値以上か否かを判定することにより、誤認識が発生しない状況を作る。そして、ラベルを骨のスティック部分と認識する（ステップＳ２４０２）。または、前回フレームで骨と認識したというような過去のデータ（短期記憶）を用いてもよい。これは、過去では大きく見えて骨と認識し、その後、人がその骨を取り上げ、ロボット装置から離した場合を想定できる。この場合、ラベル面積は小さくなる。過去、一度は骨のスティックと記憶していた場合は、現在は小さくてもスティックと認識するようにしている（ステップＳ２４０２）。
【００６０】
ステップＳ２４０３では、ラベル面積がスティックと認識した、その他のラベル面積以上であるか否かを判定する。骨のスティック部分であると認識したラベルが複数あったときに、今認識処理したラベルと処理済みのラベルの面積を比較し、大きい方を残すのが目的である。今認識処理したラベルの面積の方が大きければ、ステップＳ２４０４にて骨のスティック部分の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００６１】
ステップＳ２４０１にてラベル面積Ｓが識別面積以上ではなく、または前回のフレームで骨のスティックを認識していないと判定すれば、ステップＳ２４０５に進む。ステップＳ２４０５では、ラベル面積が検出最小面積以上、または前回フレームでピンク（ピンクの不明物体）が見えていたか否かを判定する。例えば、上記ステップＳ２４０１での識別面積を５０画素とし、検出最小面積を１０画素とした場合、今見ているラベルの面積が２０画素であったならば、ＹＥＳと判定し、ステップＳ２４０６に進み、ボールか骨ではないがピンクの不明物体であると認識する。ラベルの面積が１０画素よりも小さいものは、ノイズとして破棄する。カメラから例えば８０ｃｍまでの距離がピンクとして認識できる距離で、４０〜５０ｃｍに近づくと、ピンクが骨かボールであるとはっきりしてくることになるということを前提にしている。そして、ステップＳ２４０７にて、ラベル面積が、ピンクの不明物体と認識した、その他のラベル面積以上であるか否かを判定する。ピンクの不明物体と認識したラベルが複数あったときに、今認識処理したラベルと処理済みのラベルの面積を比較し、大きい方を残すのが目的である。今認識処理したラベルの面積の方が大きければ、ステップＳ２４０７にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００６２】
次に、図１５及び図１６を参照して、上記ステップＳ２６の無所属地帯１詳細処理のサブルーチンを説明する。先ず、ステップＳ２６０１にてラベル面積が識別面積（所定の閾値）以上、または前回フレームで骨のスティックか側面を認識したかを判定する。ラベル面積が識別面積以上であるかの判定は、上記ステップＳ２４０１と同様に、誤認識が発生しない状況を作るためである。また、前回フレームで骨のスティックか側面かを認識したかを判定するのは、やはり上記ステップＳ２４０１と同様に、過去、一度は骨のスティック又は側面と記憶していた場合は、現在は小さくてもスティック又は側面と認識するためである。
【００６３】
ステップＳ２６０２では、前回フレームで骨のスティックを認識したか否かを判定する。判定していればステップＳ２６０３に進んでラベルを骨のスティック部分と認識する。ステップＳ２６０４では、ラベル面積がスティックと認識した、その他のラベル面積以上であるか否かを判定する。骨のスティック部分であると認識したラベルが複数あったときに、今認識処理したラベルと処理済みのラベルの面積を比較し、大きい方を残すのが目的である。今認識処理したラベルの面積の方が大きければ、ステップＳ２６０５にて骨のスティック部分の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００６４】
上記ステップＳ２６０１にてラベル面積Ｓが識別面積以上ではなく、または前回のフレームで骨のスティックか側面を認識していないと判定すれば、図１６のステップＳ２６０６に進み、ラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたか否かを判定する。ステップＳ２６０６にてラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたと判定すると、ステップＳ２６０７に進んでラベルはボールか骨ではないがピンクの不明物体であると認識する。ステップＳ２６０８にて、ラベル面積が、ピンクの不明物体と認識した、その他のラベル面積以上であるか否かを判定する。ピンクの不明物体と認識したラベルが複数あったときに、今認識処理したラベルと処理済みのラベルの面積を比較し、大きい方を残すためである。今認識処理したラベルの面積の方が大きければ、ステップＳ２６０９にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００６５】
上記ステップＳ２６０２にて、前回フレームで骨のスティックを認識していないと判定すればステップＳ２６１０に進んで前回フレームで骨の側面を認識したか否かを判定する。前回フレームで骨の側面部分を認識しているのであればステップＳ２６１１に進んでラベルを骨の側面部分と認識する。ステップＳ２６１２にて、ラベル面積が、側面と認識した、その他のラベル面積以上であるか否かを判定する。側面と認識したラベルが複数あったときに、今認識処理したラベルと処理済みのラベルの面積を比較し、大きい方を残すためである。今認識処理したラベルの面積の方が大きければ、ステップＳ２６１３にて骨の側面部分の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。ステップＳ２６０５、ステップＳ２６０９及びステップＳ２６１３の処理が終了するか、あるいはステップＳ２６０１、ステップＳ２６０４、ステップＳ２６０６、ステップＳ２６０８、ステップＳ２６１０、ステップＳ２６１２の各分岐処理にてＮＯと判定されると無所属地帯１詳細処理を終了する。
【００６６】
次に、図１７を参照して、上記ステップＳ２８の骨側面詳細処理のサブルーチンを説明する。先ず、ステップＳ２８０１にてラベル面積が識別面積（所定の閾値）以上、または前回フレームで側面を認識したか否かを判定する。ラベル面積が識別面積以上であるかの判定は、上記ステップＳ２４０１と同様に、誤認識が発生しない状況を作るためである。また、前回フレームで骨の側面を認識したかを判定するのは、やはり上記ステップＳ２４０１と同様に、過去、一度は骨の側面と記憶していた場合は、現在は小さくても側面と認識するためである。
【００６７】
ステップＳ２８０２では、ラベルを骨の側面部分と認識する。ステップＳ２８０３では、ラベル面積が側面と認識した、その他のラベル面積以上であるか否かを判定する。骨の側面部分であると認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ２８０４にて骨の側面部分の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００６８】
上記ステップＳ２６０１にてラベル面積Ｓが識別面積以上ではなく、または前回のフレームで骨の側面を認識していないと判定すれば、ステップＳ２８０５に進み、ラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたか否かを判定する。ステップＳ２８０５にてラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたと判定すると、ステップＳ２８０６に進んでラベルはボールか骨ではないがピンクの不明物体であると認識する。ステップＳ２８０７にて、ラベル面積が、ピンクの不明物体と認識した、その他のラベル面積以上であるか否かを判定する。ピンクの不明物体と認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ２８０８にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００６９】
次に、図１８及び図１９を参照して、上記ステップＳ３０の無所属地帯２詳細処理のサブルーチンを説明する。先ず、ステップＳ３００１にてラベル面積が識別面積（所定の閾値）以上、または前回フレームで骨の側面かボールを認識したかを判定する。
【００７０】
ステップＳ３００２では、前回フレームで骨の側面を認識したか否かを判定する。判定していればステップＳ３００３に進んでラベルを骨の側面部分と認識する。ステップＳ３００４では、ラベル面積が骨の側面と認識した、その他のラベル面積以上であるか否かを判定する。骨の側面部分であると認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３００５にて骨の側面部分の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００７１】
上記ステップＳ３００１にてラベル面積Ｓが識別面積以上ではなく、または前回のフレームで骨の側面かボールを認識していないと判定すれば、図１９のステップＳ３００６に進み、ラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたか否かを判定する。ステップＳ３００６にてラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたと判定すると、ステップＳ３００７に進んでラベルはボールか骨ではないがピンクの不明物体であると認識する。ステップＳ３００８では、ラベル面積が、ピンクの不明物体と認識した、その他のラベル面積以上であるか否かを判定する。ピンクの不明物体と認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３００９にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００７２】
上記ステップＳ３００２にて、前回フレームで骨の側面を認識していないと判定すればステップＳ３０１０に進んで前回フレームでボールを認識したか否かを判定する。前回フレームでボールを認識しているのであればステップＳ３０１１に進んでラベルをボールと認識する。ステップＳ３０１２にて、ラベル面積が、ボールと認識した、その他のラベル面積以上であるか否かを判定する。ボールと認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３０１３にてボールの面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。ステップＳ３００５、ステップＳ３００９及びステップＳ３０１３の処理が終了するか、あるいはステップＳ３００１、ステップＳ３００４、ステップＳ３００６、ステップＳ３００８、ステップＳ３０１０、ステップＳ３０１２の各分岐処理にてＮＯと判定されると無所属地帯２詳細処理を終了する。
【００７３】
次に、図２０を参照して、上記ステップＳ３２のボール詳細処理のサブルーチンを説明する。先ず、ステップＳ３２０１にてラベル面積が識別面積（所定の閾値）以上、または前回フレームでボールを認識したかを判定する。ラベル面積が識別面積以上であるかの判定は、上記ステップＳ２４０１と同様に、誤認識が発生しない状況を作るためである。また、前回フレームでボールを認識したかを判定するのは、やはり上記ステップＳ２４０１と同様に、過去、一度はボールと記憶していた場合は、現在は小さくてもボールと認識するためである。
【００７４】
ステップＳ３２０２では、ラベルをボールと認識する。ステップＳ３２０３では、ラベル面積がボールと認識した、その他のラベル面積以上であるか否かを判定する。ボールであると認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３２０４にて骨の側面部分の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００７５】
上記ステップＳ３２０１にてラベル面積Ｓが識別面積以上ではなく、または前回のフレームでボールを認識していないと判定すれば、ステップＳ３２０５に進み、ラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたか否かを判定する。ステップＳ３２０５にてラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたと判定すると、ステップＳ３２０６に進んでラベルはボールか骨ではないがピンクの不明物体であると認識する。ステップＳ３２０７にて、ラベル面積が、ピンクの不明物体と認識した、その他のラベル面積以上であるか否かを判定する。ピンクの不明物体と認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３２０８にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００７６】
次に、図２１を参照して、上記ステップＳ３３の例外詳細処理のサブルーチンを説明する。ステップＳ３３０１では、ラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたか否かを判定する。ステップＳ３３０１にてラベル面積が検出最小面積以上、または前回フレームでピンクが見えていたと判定すると、ステップＳ３３０２に進んでラベルはボールか骨ではないがピンクの不明物体であると認識する。ステップＳ３３０３にて、ラベル面積が、ピンクの不明物体と認識した、その他のラベル面積以上であるか否かを判定する。ピンクの不明物体と認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３３０４にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。
【００７７】
以上の、骨スティック詳細処理（図１２のステップＳ２４）、無所属地帯１詳細処理（ステップＳ２６）、骨側面詳細処理（ステップＳ２８）、無所属地帯２詳細処理（ステップＳ３０）、ボール詳細処理（ステップＳ３２）、例外詳細処理（ステップＳ３３）がそれぞれ終了し、どれかに分類されると、図１２のステップＳ３４に進む。ステップＳ３４では、ラベル面積が検出最小面積以上、かつピンクと認識した、その他のラベル面積以上か否かを判定する。ピンクの不明物体と認識したラベルが複数あったときの処理である。今認識処理したラベルの面積の方が大きければ、ステップＳ３５にてラベルをピンクの不明物体であると認識し、ステップＳ３６にてピンクの不明物体の面積、重心、円形度、画像上の傾き角を本ラベルの値に更新する。このステップＳ３４〜ステップＳ３７の処理は、単にピンクのものをトラッキングしなさいというような指示が出された場合のために有効となる。形状にはとらわれず、ただピンクという色のみに左右される。そして、ステップＳ３７にてラベルのインデックスをインクリメントし、ステップＳ２１の処理に戻る。
【００７８】
そして、図１１に戻り、ステップＳ１５以降の処理を行うことになる。先ず、ステップＳ１５では、時間ヒステリシスによるオン／オフ処理を行う。ある画像フレームで骨が見えたとしても、その時点ではアプリケーション側には骨であることを通知しない。時間ヒステリシスを持たせる。例えば、骨が見えていない状態から見えた場合には、見えたというフレームが連続して例えば３フレーム以上続いて始めて骨であることを通知する。逆に見えていたときから見えなくなったときにも、見えなくなって３フレーム以上続いたら見えなくなったと通知する。例えば、フレームレートは、速い場合で３０ｆｐｓ又はＣＰＵが他の処理を行っている場合には１５ｆｐｓであり、３フレーム分をヒステリシスとしている。
【００７９】
次に、ステップＳ１６にて面積を基に、スティックと側面の計算結果を骨に統合する。スティックと側面の面積が大きい方を使って骨と認識する処理である。ステップＳ１７にて骨、ボール、ピンクの不明物体をそれぞれカメラ座標系、及びロボット座標系に変換する。床にどのように置かれているか等を判定するのに都合のよいように高さ方向が判るように変換する。
【００８０】
次に、ステップＳ１８にて高さ情報を基に骨が縦置きになっているか否かを判定する。ステップＳ１７での変換処理を元にしているので縦置きであるか横置きであるかを判定できる。ここでいう縦置きとは上記図３における（ｂ）の状態であり、横置きとは図３の（ａ）、（ｃ）、（ｄ）の状態である。横置きの図３の（ａ）、（ｃ）、（ｄ）については、ロボット装置に対して斜めに置かれているか、正面に置かれているか、側面した見えないように置かれているかという状態を示す。したがって、ロボット装置は、骨が図３のいずれの状態にあるかによって、歩き続ける、トラッキングする、咥えるなどの行動を変えることができる。そして、ステップＳ１９にて骨、ボール、ピンクの不明物体の認識結果をアプリケーションに提供する。
【００８１】
アプリケーションとしては、近くまで歩いていく処理、トラッキングする処理、頭でつついたり、脚で倒したりする処理、そして咥えるという処理がある。本実施の形態では、これら一連の処理を骨を咥える制御アルゴリズムとしてまとめて説明する。この骨咥え制御アルゴリズムには、咥え検出アルゴリズムも含まれる。
【００８２】
次に、図２７及び図２８を用いてロボット装置が骨を見つけて、歩いて近づき、トラッキングし、頭でつついたり、脚で倒したり、あるいはそのまま咥え部分２０３を咥えたりするまでの骨咥え制御アルゴリズムを説明する。上述した画像認識処理プログラムにしたがって、骨、ボール、ピンクの不明物体を認識した結果を貰ってステップＳ４１以降を処理する。先ず、ステップＳ４１にて骨が見えているか否かを判定する。ここで、見えていないのであれば、ステップＳ５０に進んで、ピンクの不明物体が見えているのかを判定する。見えているのであれば、ステップＳ５１にてトラッキングを行う。見えているものを画像の中央で捉えるように追跡する制御である。そして、ピンクの不明物体に近づいていき（ステップＳ５２）、ステップＳ４１に戻る。
【００８３】
ステップＳ４１にて骨が見えていればステップＳ４２にて骨をトラッキングし、画像の中央にキープしながら近づいていく。ステップＳ４３では、骨の鉛直方向がロボットの接地平面に近いか否かを判定する。骨がロボットの歩行面と同じ位の高さの面に置いてあるか否かを検出する処理である。同じ位の高さの面に骨があればステップＳ４４に進み、骨までの距離が咥えられるほど近いか否かを判定する。ステップＳ４３にて骨がロボットの歩行面と同じ位の高さの面に置かれていないと判定すると、ステップＳ５４にて待機するか又はステップＳ５５にて「骨をくれ」とおねだりをする。ステップＳ５４とステップＳ５５の処理は、確率選択によって分岐する。過去に行った処理を基に確率を計算し、その確率にしたがって選択する。
【００８４】
ステップＳ４４にて骨までの距離が咥えられるほど近いと判定すれば、ステップＳ４５に進み、骨の水平方向がほぼ正面になるか否かを判定する。骨の水平方向がほぼ正面であると判定すれば、図２８のステップＳ４６に進む。ステップＳ４５にて骨の水平方向がほぼ正面ではないと判定すると、ステップＳ５７にてロボットは胴体のヨー軸をひねって向きを変えたり、又はステップＳ５８にて真横に移動し向きを変えてステップＳ４１に戻る。ステップＳ５７とステップＳ５８の処理は、確率選択によって分岐する。
【００８５】
次に、図２８のステップＳ４６では、骨が縦に置かれているか否かを判定する。骨が縦に置かれ、図３の（ｂ）の状態になっていると判定すると、ステップＳ５９にて縦置きの骨を咥えたり、又はステップＳ６０にて頭や足で骨を倒す。ステップＳ５９にて縦置きの骨を咥えた後は、後述のステップＳ４９に進む。また、ステップＳ６０にて頭や足で骨を倒したらステップＳ４１に戻る。ステップＳ５９とステップＳ６０の処理も確率選択によって分岐する。
【００８６】
ステップＳ４６にて骨が縦に置かれていないと判定すればステップＳ４７に進み、骨の咥え部分の傾きが画面上でほぼ水平か否かを判定する。図３の（ｃ）の状態であるか否かである。咥え部分が画面上でほぼ水平であると判定すれば、ステップＳ４８に進み、横置きの骨を咥える。ステップＳ４７にて咥え部分が画面上でほぼ水平でないと判定すれば、ステップＳ６１にて頭や脚で傾きを整える。または、ステップＳ６２にて骨に対して回り込み、ステップＳ４１に戻る。ステップＳ６１とステップＳ６２の処理も確率選択によって分岐する。
【００８７】
ステップＳ４８にて横置きの骨を咥えるか、又はステップＳ５９にて縦置きの骨を咥えた後、ステップＳ４９では咥え検出処理にて骨を咥えたと認識したか否かを判定する。この咥え検出処理については詳細を後述する。
【００８８】
次に、以上に説明した制御アルゴリズムによって行われるロボットのインタラクションの具体例について図２９、図３０及び図３１を参照して説明する。
【００８９】
先ず、横置き骨を咥えにいき（図２９の（ａ））、身をかがめて咥え（図２９の（ｂ））、横置き骨を咥えることに成功（図２９の（ｃ））したという具体例である。上記図２７及び図２８のフローチャートに沿って説明すれば、ステップＳ４５にて骨の水平方向がほぼ正面にあると判定し、ステップＳ４６にて骨が縦に置かれていないと判定し、ステップＳ４７にて骨の咥え部分の傾きが画面上でほぼ水平であると判定し、ステップＳ４８にて身をかがめて横置きの骨を咥える。そして、ステップＳ４９の咥え検出処理で骨を咥えたと認識し終了している。
【００９０】
また、骨が縦置きに床面に置かれている場合には、ロボットは身体をひねり（図３０の（ａ））、縦置きの骨に身体を寄せて（図３０の（ｂ））、縦置き骨を横から咥え（図３０の（ｃ））、骨を咥えたら身体を戻し（図３０の（ｄ））、縦置き骨を咥えることに成功（図３０の（ｅ））したという具体例である。上記図２７及び図２８のフローチャートに沿って説明すれば、ステップＳ４５にて骨の水平方向がほぼ正面にあると判定し、ステップＳ４６にて骨が縦に置かれていると判定し、ステップＳ５９にて縦置きの骨を咥えにいき、ステップＳ４９にて咥え検出処理で骨を咥えたと認識し終了している。
【００９１】
さらに、インタラクションの具体例としては、図３１に示すように、咥えた後に、脚で骨を整え（図３１の（ａ））、骨の側面を足先でこすり（図３１の（ｂ））、骨を回転し（図３１の（ｃ）、タイミングを合わせて回す（図３１（ｄ））という動作を行うようにしてもよい。
【００９２】
また、咥えた後に、人に近寄って、咥えている骨を渡すという動作を行うこともできる。音声認識で「もってこい」、「とってこい」、「ちょうだい」等の単語を認識し、音源方向に近づいたり、画像処理で顔を検出して、顔の方に近づき、「よしよし」等の音声単語や、撫でられ（接触）、適切な距離に到達、等を検知して、骨を渡すという一連の処理を行う。
【００９３】
また、咥えた骨を歩行面に立てたり、骨を身体の反動や手を使って投げたりすることも可能である。また、咥えた骨でボールを打ったり、咥えた骨を転がしたり、骨を口から外し、両手（或いは片手）で空中に保持することも可能である。
【００９４】
次に、ロボット装置１の頭部ユニット４における口（顎）の構造について説明する。ロボット装置１は、骨２００の咥え部分２０３を咥えて持ち上げるという動作を行ので、口の構造にも技術的な特徴を有する。図３２〜図３４に示すように、ロボット装置は、頭部ユニット４の前方の下端部に、上下に回動する下顎部１５１を備えている。この下顎部１５１には、骨の咥え部分２０３を保持するのに適する窪み１５２を設けている。この窪み１５２には、ゴム材料を設けているので摩擦係数が高く、保持した骨を落としにくくしている。また、上顎部１５４には、上記骨を載せた下顎部１５１が閉じられた場合に骨の咥え部分２０３をしっかりと押さえられるように、やはりゴム材料からなる押さえ部１５３，１５３が付いている。図３５に示すように、骨の咥え部分２０３を窪み１５２に入れ、下顎部１５１を閉じれば、上記押さえ部１５３，１５３と窪み１５２とで、確実に骨を保持することができる。また、図３６に示すように、骨の咥え部２０３が下顎部１５１の上部に行きすぎても、それを戻し、窪み１５２の中に落とし込めば容易には骨を床面等に落下させることはない。
【００９５】
次に、上記図２８のステップＳ４９における咥え検出処理に用いる咥え検出アルゴリズムについて説明する。ロボット装置の上記図２に示したＣＰＵ１０は、ＰＷＭと口関節角速度、角加速度から、口の関節に加わっている外部トルクの大きさと方向を計算し、骨を咥えた方向に、ある大きさ以上のトルクが加わった場合に何かを咥えたと判断する。何かを咥えたと判断した場合、即座にゲインを緩め、人間の指などを怪我から守る。また、そのときの関節角度から、骨を咥えたのか、その他のものを咥えたのかを判断し、その他のものを咥えた場合は、やはり怪我の発生を防ぐためにゲインをオフする。骨を咥えたと判断した場合には、モータを保護するために、骨を咥え続けるのに適したゲインに変更する。
【００９６】
このため、ロボット装置１は、図３７に示すような構成の咥え検出及び制御部を備える。この咥え検出及び制御部は、指令装置１６０と、制御装置１６１と、把持検出装置１６２とからなる。ＣＰＵ１０が咥え検出アルゴリズムを実行したときの機能として示すことのできる構成である。指令装置１６０により出された関節指令値を制御装置１６１及び把持検出装置１６２に送り、把持検出装置１６２からの検出結果に基づいて指令装置１６０が上記関節指令値を変化させる。
【００９７】
制御装置１６１は、関節指令値に基づいて駆動装置１６３及び把持検出装置１６２に制御信号を供給する。駆動装置１６３は、上記制御信号に応じて駆動力を発生し、動作部１６４を動かす。
【００９８】
把持検出装置１６２は、口部が何かを把持したことを検出すると検出結果を指令装置１６０に送る。指令装置１６０は、上記検出結果に基づいて関節指令値を生成し、制御装置１６１に送る。
【００９９】
制御装置１６１は、ＰＷＭ duty比と口関節角速度、角加速度から口の関節に加わっている外部トルクの大きさと方向を計算する。そして、骨を咥えた方向に、ある大きさ以上のトルクが加わった場合に何かを咥えたと判断する。制御装置１６１は、何かを咥えたと判断した場合、即座にゲインを緩める制御信号を駆動装置１６３に送る。人間の指などを怪我から守るためである。また、そのときの関節角度から、骨を咥えたのか、その他のものを咥えたのかを判断し、その他のものを咥えた場合は、やはり怪我の発生を防ぐためにゲインをオフする。骨を咥えたと判断した場合には、モータを保護するために、骨を咥え続けるのに適したゲインに変更する。
【０１００】
図３８には、咥え検出及び制御部の処理の手順を示す。咥える機構は、上記図３２〜図３６に示した口の構造である。つまり、上顎部１５４に対して下顎部１５１を閉じる方向に回動することにより物体を把持する。関節は、上顎部１５４と下顎部１５１との角度であり、モーターは下顎部１５１を回動する駆動力を生む。
【０１０１】
先ず、制御装置１６１は、関節指令値、ＰＷＭ信号（duty比）を受け取っている（ステップＳ７０）。ステップＳ７１にて上記関節指令値からリンク質量の影響、関節摩擦の影響を算出する。次に、ステップＳ７２にてモーターモデルから理論的なＰＷＭ Duty比を算出する。この算出は、上記ステップＳ７１において算出したリンク質量の影響、関節摩擦の影響と、ゲインを基にして行われる。
【０１０２】
制御装置１６１は、ステップＳ７３にて理論的なＰＷＭ Duty比と制御信号の差を算出する。この算出は、ステップＳ７２にて求めた理論的なＰＷＭ Duty比と予め受け取っていた制御信号の上記ＰＷＭ信号（duty比）とを用いて行う。ステップＳ７４では、ステップＳ７３で求めたＰＷＭ信号の差の大きさ、符号、継続時間から関節への負担を推定する。
【０１０３】
次に、制御装置１６１は、ステップＳ７５にて上記ステップＳ７４で推定した負担を基に、物体を把持する方向に負荷があるか否かを判定する。もし、把持する方向に負荷があれば、ステップＳ７６に進んで駆動装置１６３のモータゲインが所定の値よりも大きいか否かを判定する。この所定の値は、人間に害を与えないために設けられる閾値であり、痛みを与えない位の力を発生するほどの値である。モータゲインが大きいと判定すればステップＳ７７にて人間に危害を加えないようにモーターのゲインを弱める制御信号を駆動装置１６３に供給する。また、モーターゲインが大きくはないと判定すれば、ステップＳ７８に進み、上顎部１５４と下顎部１５１との関節角から目的の物体、骨を把持したかどうかを判断する。
【０１０４】
ステップＳ７９にて目的の物体を把持したと判断すれば、ステップＳ８０に進み、把持しつづけてもモーターが故障しないモーターゲインに設定する。また、目的の物体を把持したと判断しなければステップＳ８１に進んで、人間に危害を加えないようにモーターのゲインをゼロにする。ステップＳ８２にて結果を通知して終了する。
【０１０５】
以上に説明したように、本実施の形態のロボット装置１は、画像認識処理プログラム、骨咥え検出プログラム、咥え検出プログラムを実行することにより、専用の遊具を認識し、遊具の置かれた場所に歩いて近づき、咥えたり、咥えたまま運んだり、咥えたまま転がったりして、より豊かな生き生きとした動作を行うことができる。
【０１０６】
次に、ロボット装置１が実行する上記各プログラムを含めたソフトウェア構成について説明する。ロボット装置１におけるソフトウェア構成は、図３９に示すようになる。この図３９において、デバイス・ドライバ・レイヤ３０は、プログラムの最下位層に位置し、複数のデバイス・ドライバからなるデバイス・ドライバ・セット３１から構成されている。この場合、各デバイス・ドライバは、ＣＣＤカメラ２０（図１及び図２）やタイマ等の通常のコンピュータで用いられるハードウェアに直接アクセスすることを許されたオブジェクトであり、対応するハードウェアからの割り込みを受けて処理を行う。
【０１０７】
また、ロボティック・サーバ・オブジェクト３２は、デバイス・ドライバ・レイヤ３０の上位に位置し、例えば上述の各種センサやアクチュエータ２５１〜２５ｎ等のハードウェアにアクセスするためのインターフェースを提供するソフトウェア群でなるバーチャル・ロボット３３と、電源の切換えなどを管理するソフトウェア群でなるバワーマネージャ３４と、他の種々のデバイス・ドライバを管理するソフトウェア群でなるデバイス・ドライバ・マネージャ３５と、ロボット装置１の機構を管理するソフトウェア群でなるデザインド・ロボット３６とから構成されている。
【０１０８】
マネージャ・オブジェクト３７は、オブジェクト・マネージャ３８及びサービス・マネージャ３９から構成されている。オブジェクト・マネージャ３８は、ロボティック・サーバ・オブジェクト３２、ミドル・ウェア・レイヤ４０、及びアプリケーション・レイヤ４１に含まれる各ソフトウェア群の起動や終了を管理するソフトウェア群であり、サービス・マネージャ３９は、メモリカード２９（図２）に格納されたコネクションファイルに記述されている各オブジェクト間の接続情報に基づいて各オブジェクトの接続を管理するソフトウェア群である。
【０１０９】
ミドル・ウェア・レイヤ４０は、ロボティック・サーバ・オブジェクト３２の上位層に位置し、画像処理や音声処理などのこのロボット装置１の基本的な機能を提供するソフトウェア群から構成されている。
【０１１０】
また、アプリケーション・レイヤ４１は、ミドル・ウェア・レイヤ４０の上位層に位置し、当該ミドル・ウェア・レイヤ４０を構成する各ソフトウェア群によって処理された処理結果に基づいてロボット装置１の行動を決定するためのソフトウェア群から構成されている。
【０１１１】
なお、ミドル・ウェア・レイヤ４０及びアプリケーション・レイヤ４１の具体なソフトウェア構成をそれぞれ図４０、図４１に示す。
【０１１２】
ミドル・ウェア・レイヤ４０は、図４０に示すように、騒音検出用、温度検出用、明るさ検出用、音階認識用、距離検出用、姿勢検出用、咥え検出用、動き検出用及び色認識用の各信号処理モジュール５０〜５８並びに入力セマンティクスコンバータモジュール５９などを有する認識系６０と、出力セマンティクスコンバータモジュール６８並びに姿勢管理用、トラッキング用、モーション再生用、歩行用、転倒復帰用、ライト点灯用及び音再生用の各信号処理モジュール６１〜６７などを有する出力系６９とから構成されている。
【０１１３】
認識系６０の各信号処理モジュール５０〜５８は、ロボティック・サーバ・オブジェクト３２のバーチャル・ロボット３３によりＤＲＡＭ１１（図２）から読み出される各センサデータや画像データ及び音声データのうちの対応するデータを取り込み、当該データに基づいて所定の処理を施して、処理結果を入力セマンティクスコンバータモジュール５９に与える。ここで、例えば、バーチャル・ロボット３３は、所定の通信規約によって、信号の授受或いは変換をする部分として構成されている。
【０１１４】
特に、咥え検出用モジュール５６は、上記図３７を参照して説明したように、何かを咥えたと判断した場合、即座にゲインを緩める。人間の指などを怪我から守るためである。また、そのときの関節角度から、骨を咥えたのか、その他のものを咥えたのかを判断し、その他のものを咥えた場合は、やはり怪我の発生を防ぐためにゲインをオフする。骨を咥えたと判断した場合には、モータを保護するために、骨を咥え続けるのに適したゲインに変更する。
【０１１５】
入力セマンティクスコンバータモジュール５９は、これら各信号処理モジュール５０〜５８から与えられる処理結果に基づいて、「うるさい」、「暑い」、「明るい」、「ボールを検出した」、「転倒を検出した」、「撫でられた」、「叩かれた」、「ドミソの音階が聞こえた」、「動く物体を検出した」、「障害物を検出した」又は「物体を咥えた」などの自己及び周囲の状況（内部状況及び外部状況）や、使用者からの指令及び働きかけを認識し、認識結果をアプリケーション・レイヤ４１（図４０）に出力する。
【０１１６】
アプリケーション・レイヤ４ｌは、図４１に示すように、行動モデルライブラリ７０、行動切換モジュール７１、学習モジュール７２、感情モデル７３及び本能モデル７４の５つのモジュールから構成されている。
【０１１７】
行動モデルライブラリ７０には、図４２に示すように、「バッテリ残量が少なくなった場合」、「転倒復帰する」、「障害物を回避する場合」、「感情を表現する場合」、「ボールを検出した場合」、「横置きの骨を咥える」、「縦置きの骨を咥える」、「縦置きの骨を頭で倒す」などの予め選択されたいくつかの条件項目にそれぞれ対応させて、それぞれ独立した行動モデル７０１〜７０ｎが設けられている。
【０１１８】
そして、これら行動モデル７０１〜７０ｎは、それぞれ入力セマンティクスコンバータモジュール５９から認識結果が与えられたときや、最後の認識結果が与えられてから一定時間が経過したときなどに、必要に応じて後述のように感情モデル７３に保持されている対応する情動のパラメータ値や、本能モデル７４に保持されている対応する欲求のパラメータ値を参照しながら続く行動をそれぞれ決定し、決定結果を行動切換モジュール７１に出力する。
【０１１９】
なお、この実施の形態の場合、各行動モデル７０１〜７０ｎは、次の行動を決定する手法として、図４３に示すような１つのノード（状態）ＮＯＤＥ０〜ＮＯＤＥｎから他のどのノードＮＯＤＥ０〜ＮＯＤＥｎに遷移するかを各ノードＮＯＤＥ０〜ＮＯＤＥｎに間を接続するアークＡＲＣ１〜ＡＲＣｎに対してそれぞれ設定された遷移確率Ｐ１〜Ｐｎに基づいて確率的に決定する有限確率オートマトンと呼ばれるアルゴリズムを用いる。
【０１２０】
具体的に、各行動モデル７０１〜７０ｎは、それぞれ自己の行動モデル７０１〜７０ｎを形成するノードＮＯＤＥ０〜ＮＯＤＥｎにそれぞれ対応させて、これらノードＮＯＤＥ０〜ＮＯＤＥｎごとに図４４に示すような状態遷移表８０を有している。
【０１２１】
この状態遷移表８０では、そのノードＮＯＤＥ０〜ＮＯＤＥｎにおいて遷移条件とする入力イベント（認識結果）が「入力イベント名」の列に優先順に列記され、その遷移条件についてのさらなる条件が「データ名」及び「データ範囲」の列における対応する行に記述されている。
【０１２２】
したがって、図４４の状態遷移表８０で表されるノードＮＯＤＥ１００では、「ボールを検出（ＢＡＬＬ）」という認識結果が与えられた場合に、当該認識結果と共に与えられるそのボールの「大きさ（ＳＩＺＥ）」が「0から1000」の範囲であることや、「障害物を検出（ＯＢＳＴＡＣＬＥ）」という認識結果が与えられた場合に、当該認識結果と共に与えられるその障害物までの「距離（ＤＩＳＴＡＮＣＥ）」が「0から100」の範囲であることが他のノードに遷移するための条件となっている。もちろん、「骨を検出」、「ピンクを検出」、或いは「物体を咥えたことを検出」という認識結果が与えられた場合に、当該認識結果と共に与えられる「距離」、「面積」、「ゲイン」が所定範囲であることが他のノードに遷移するための条件となっている。
【０１２３】
また、このノードＮＯＤＥ１００では、認識結果の入力がない場合においても、行動モデル７０１〜７０ｎが周期的に参照する感情モデル７３及び本能モデル７４にそれぞれ保持された各情動及び各欲求のパラメータ値のうち、感情モデル７３に保持された「喜び（ＪＯＹ）」、「驚き（ＳＵＲＰＲＩＳＥ）」若しくは「悲しみ（ＳＵＤＮＥＳＳ）」のいずれかのパラメータ値が「50から100」の範囲であるときには他のノードに遷移することができるようになっている。
【０１２４】
また、状態遷移表８０では、「他のノードヘの遷移確率」の欄における「遷移先ノード」の行にそのノードＮＯＤＥ０〜 ＮＯＤＥｎから遷移できるノード名が列記されていると共に、「入力イベント名」、「データ値」及び「データの範囲」の列に記述された全ての条件が揃ったときに遷移できる他の各ノードＮＯＤＥ０〜ＮＯＤＥｎへの遷移確率が「他のノードヘの遷移確率」の欄内の対応する箇所にそれぞれ記述され、そのノードＮＯＤＥ０〜ＮＯＤＥｎに遷移する際に出力すべき行動が「他のノードヘの遷移確率」の欄における「出力行動」の行に記述されている。なお、「他のノードヘの遷移確率」の欄における各行の確率の和は１００［％］となっている。
【０１２５】
したがって、図４４の状態遷移表８０で表されるノードＮＯＤＥ１００では、例えば「ボールを検出（ＢＡＬＬ）」し、そのボールの「ＳＩＺＥ（大きさ）」が「0から1000」の範囲であるという認識結果が与えられた場合には、「30［％］」の確率で「ノードＮＯＤＥ１２０（node 120）」に遷移でき、そのとき「ＡＣＴＩＯＮ１」の行動が出力されることとなる。
【０１２６】
各行動モデル７０１〜７０ｎは、それぞれこのような状態遷移表８０として記述されたノードＮＯＤＥ０〜 ＮＯＤＥｎがいくつも繋がるようにして構成されており、入力セマンティクスコンバータモジュール５９から認識結果が与えられたときなどに、対応するノードＮＯＤＥ０〜ＮＯＤＥｎの状態遷移表を利用して確率的に次の行動を決定し、決定結果を行動切換モジュール７１に出力するようになされている。
【０１２７】
図４２に示す行動切換モジュール７１は、行動モデルライブラリ７０の各行動モデル７０１〜７０ｎからそれぞれ出力される行動のうち、予め定められた優先順位の高い行動モデル７０１〜７０ｎから出力された行動を選択し、当該行動を実行すべき旨のコマンド（以下、これを行動コマンドという。）をミドル・ウェア・レイヤ４０の出力セマンティクスコンバータモジュール６８に送出する。なお、この実施の形態においては、図４２において下側に表記された行動モデル７０１〜７０ｎほど優先順位が高く設定されている。
【０１２８】
また、行動切換モジュール７１は、行動完了後に出力セマンティクスコンバータモジュール６８から与えられる行動完了情報に基づいて、その行動が完了したことを学習モジュール７２、感情モデル７３及び本能モデル７４に通知する。
【０１２９】
一方、学習モジュール７２は、入力セマンティクスコンバータモジュール５９から与えられる認識結果のうち、「叩かれた」や「撫でられた」など、使用者からの働きかけとして受けた教示の認識結果を入力する。
【０１３０】
そして、学習モジュール７２は、この認識結果及び行動切換モジュール７１からの通知に基づいて、「叩かれた（叱られた）」ときにはその行動の発現確率を低下させ、「撫でられた（誉められた）」ときにはその行動の発現確率を上昇させるように、行動モデルライブラリ７０における対応する行動モデル７０１〜７０ｎの対応する遷移確率を変更する。
【０１３１】
他方、感情モデル７３は、「喜び（joy）」、「悲しみ（sadness）」、「怒り（anger）」、「驚き（surprise）」、「嫌悪（disgust）」及び「恐れ（fear）」の合計６つの情動について、各情動ごとにその情動の強さを表すパラメータを保持している。そして、感情モデル７３は、これら各情動のパラメータ値を、それぞれ入力セマンティクスコンバータモジュール５９から与えられる「叩かれた」及び「撫でられた」などの特定の認識結果と、経過時間及び行動切換モジュール７１からの通知などに基づいて周期的に更新する。
【０１３２】
具体的には、感情モデル７３は、入力セマンティクスコンバータモジュール５９から与えられる認識結果と、そのときのロボット装置１の行動と、前回更新してからの経過時間などに基づいて所定の演算式により算出されるそのときのその情動の変動量を△Ｅ［ｔ］、現在のその情動のパラメータ値をＥ［ｔ］、その情動の感度を表す係数をｋｅとして、下記（２）式によって次の周期におけるその情動のパラメータ値Ｅ［ｔ＋１］を算出し、これを現在のその情動のパラメータ値Ｅ［ｔ］と置き換えるようにしてその情動のパラメータ値を更新する。また、感情モデル７３は、これと同様にして全ての情動のパラメータ値を更新する。
Ｅ［ｔ＋１］＝Ｅ［ｔ］＋ｋｅ×ΔＥ［ｔ］    ・・・（２）
なお、各認識結果や出力セマンティクスコンバータモジュール６８からの通知が各情動のパラメータ値の変動量△Ｅ［ｔ］にどの程度の影響を与えるかは予め決められており、例えば「叩かれた」といった認識結果は「怒り」の情動のパラメータ値の変動量△Ｅ［ｔ］に大きな影響を与え、「撫でられた」といった認識結果は「喜び」の情動のパラメータ値の変動量△Ｅ［ｔ］に大きな影響を与えるようになっている。
【０１３３】
ここで、出力セマンティクスコンバータモジュール６８からの通知とは、いわゆる行動のフィードバック情報（行動完了情報）であり、行動の出現結果の情報であり、感情モデル７３は、このような情報によっても感情を変化させる。これは、例えば、「吠える」といった行動により怒りの感情レベルが下がるといったようなことである。なお、出力セマンティクスコンバータモジュール６８からの通知は、上述した学習モジュール７２にも入力されており、学習モジュール７２は、その通知に基づいて行動モデル７０１〜７０ｎの対応する遷移確率を変更する。
【０１３４】
なお、行動結果のフィードバックは、行動切換モジュレータ７１の出力（感情が付加された行動）によりなされるものであってもよい。
【０１３５】
一方、本能モデル７４は、「運動欲（exercise）」、「愛情欲（affection）」、「食欲（appetite）」及び「好奇心（curiosity）」の互いに独立した４つの欲求について、これら欲求ごとにその欲求の強さを表すパラメータを保持している。そして、本能モデル７４は、これらの欲求のパラメータ値を、それぞれ入力セマンティクスコンバータモジュール５９から与えられる認識結果や、経過時間及び行動切換モジュール７１からの通知などに基づいて周期的に更新する。
【０１３６】
具体的には、本能モデル７４は、「運動欲」、「愛情欲」及び「好奇心」については、認識結果、経過時間及び出力セマンティクスコンバータモジュール６８からの通知などに基づいて所定の演算式により算出されるそのときのその欲求の変動量をΔＩ［ｋ］、現在のその欲求のパラメータ値をＩ［ｋ］、その欲求の感度を表す係数ｋｉとして、所定周期で（３）式を用いて次の周期におけるその欲求のパラメータ値Ｉ［ｋ＋１］を算出し、この演算結果を現在のその欲求のパラメータ値Ｉ［ｋ］と置き換えるようにしてその欲求のパラメータ値を更新する。また、本能モデル７４は、これと同様にして「食欲」を除く各欲求のパラメータ値を更新する。
Ｉ［ｋ＋１］＝Ｉ［ｋ］＋ｋｉ×ΔＩ［ｋ］      ・・・（３）
なお、認識結果及び出力セマンティクスコンバータモジュール６８からの通知などが各欲求のパラメータ値の変動量△Ｉ［ｋ］にどの程度の影響を与えるかは予め決められており、例えば出力セマンティクスコンバータモジュール６８からの通知は、「疲れ」のパラメータ値の変動量△Ｉ［ｋ］に大きな影響を与えるようになっている。
【０１３７】
なお、このロボット装置１においては、各情動及び各欲求（本能）のパラメータ値がそれぞれ0から100までの範囲で変動するように規制されており、また係数ｋｅ、ｋｉの値も各情動及び各欲求ごとに個別に設定されている。
【０１３８】
一方、ミドル・ウェア・レイヤ４０の出力セマンティクスコンバータモジュール６８は、図４０に示すように、上述のようにしてアプリケーション・レイヤ４１の行動切換モジュール７１から与えられる「前進」、「喜ぶ」、「鳴く」又は「トラッキング（ボールを追いかける）」といった抽象的な行動コマンドを出力系６９の対応する信号処理モジュール６１〜６７に与える。
【０１３９】
そしてこれら信号処理モジュール６１〜６７は、行動コマンドが与えられると当該行動コマンドに基づいて、その行動を行うために対応するアクチュエータ２５１〜２５ｎ（図２）に与えるべきサーボ指令値や、スピーカ２４（図２）から出力する音の音声データ及び又は「目」のＬＥＤに与える駆動データを生成し、これらのデータをロボティック・サーバ・オブジェクト３２のバーチャル・ロボット３３及び信号処理回路１４（図２）を順次介して対応するアクチュエータ２５１〜２５ｎ又はスピーカ２４又はＬＥＤに順次送出する。
【０１４０】
以上に説明した、ミドル・ウェア・レイヤ４０と、アプリケーション・レイヤ４１と、バーチャルロボット３３により、本発明で用いた画像認識処理、制御処理、咥え検出処理が構築される。
【０１４１】
ミドル・ウェア・レイヤ４０内の認識系６０の騒音検出用、温度検出用、明るさ検出用、音階認識用、距離検出用、姿勢検出用、咥え検出用、動き検出用及び色認識用の各信号処理モジュール５０〜５８は、処理結果を入力セマンティクスコンバータモジュール５９に与える。
【０１４２】
入力セマンティクスコンバータモジュール５９は、これら各信号処理モジュール５０〜５８から与えられる処理結果に基づいて、「うるさい」、「暑い」、「明るい」、「ボールを検出した」、「転倒を検出した」、「撫でられた」、「叩かれた」、「ドミソの音階が聞こえた」、「動く物体を検出した」、「障害物を検出した」又は「物体を咥えた」などの自己及び周囲の状況（内部状況及び外部状況）や、使用者からの指令及び働きかけを認識し、認識結果をアプリケーション・レイヤ４１（図４０）に出力する。
【０１４３】
アプリケーション・レイヤ４１の行動モデルライブラリ７０、行動切換モジュール７１、学習モジュール７２、感情モデル７３及び本能モデル７４の５つのモジュールは、行動制御システム１００の行動選択部１０１に相当する。
【０１４４】
特に、行動モデルライブラリ７０は、入力セマンティクスコンバータモジュール５９から認識結果が与えられたときに、必要に応じて感情モデル７３に保持されている対応する情動のパラメータ値や、本能モデル７４に保持されている対応する欲求のパラメータ値を参照しながら続く行動をそれぞれ決定し、決定結果を行動切換モジュール７１に出力する。具体的に、各行動モデル７０１〜７０ｎは、入力セマンティクスコンバータモジュール５９から認識結果が与えられたときなどに、対応するノードＮＯＤＥ０〜ＮＯＤＥｎの状態遷移表を利用して確率的に次の行動を決定し、決定結果を行動切換モジュール７１に出力する。
【０１４５】
例えば、上記画像認識処理によって骨を識別した後には、骨の配置された場所まで歩いていくが、その際に喜びを表現したり、歩く速さを変えたりする。また、上記骨咥え制御アルゴリズムと、咥え検出アルゴリズムに基づいて骨を咥えた後に、上記図３１に示したように、転がったり万歳をしたり、咥えた骨を足で触ったりする行動を決定する。
【図面の簡単な説明】
【０１４６】
【図１】ロボット装置の外観斜視図である。
【図２】ロボット装置の回路構成を示すブロック図である。
【図３】遊具（骨）の外観図である。
【図４】円形度を説明するための図である。
【図５】遊具（骨）の実画像とピンクカラーテーブル領域演算結果を示す図である。
【図６】円形度による識別を説明するための図である。
【図７】ボールの実画像とピンクカラーテーブル領域演算結果を示す図である。
【図８】遊具（骨）の側面部と咥え部分の実画像とピンクカラーテーブル領域演算結果を示す図である。
【図９】補填処理と膨張処理を説明するための図である。
【図１０】骨、ボール、ピンクの画像認識処理手順の全体を示すフローチャートの一部のフローチャートである。
【図１１】骨、ボール、ピンクの画像認識処理手順の全体を示すフローチャートの残部のフローチャートである。
【図１２】骨、ボール、ピンクの各ラベル処理手順の一部を示すフローチャートである。
【図１３】骨、ボール、ピンクの各ラベル処理手順の残部を示すフローチャートである。
【図１４】骨スティック詳細処理手順を示すフローチャートである。
【図１５】無所属地帯１詳細処理手順の一部を示すフローチャートである。
【図１６】無所属地帯１詳細処理手順の残部を示すフローチャートである。
【図１７】骨側面詳細処理手順を示すフローチャートである。
【図１８】無所属地帯２詳細処理手順の一部を示すフローチャートである。
【図１９】無所属地帯２詳細処理手順の残部を示すフローチャートである。
【図２０】ボール詳細処理手順を示すフローチャートである。
【図２１】例外詳細処理手順を示すフローチャートである。
【図２２】骨の全体の実画像と画像処理結果を示す図である。
【図２３】骨の咥え部分の実画像と画像処理結果を示す図である。
【図２４】縦置きの骨の実画像と画像処理結果を示す図である。
【図２５】ボールの実画像と画像処理結果を示す図である。
【図２６】骨とボールの実画像と画像処理結果を示す図である。
【図２７】骨咥え制御アルゴリズムの処理手順の一部を示すフローチャートである。
【図２８】骨咥え制御アルゴリズムの処理手順の残部を示すフローチャートである。
【図２９】横置きの骨を咥えるロボット装置のインタラクション例を示す図である。
【図３０】縦置きの骨を咥えるロボット装置のインタラクション例を示す図である。
【図３１】ロボット装置の他のインタラクション例を示す図である。
【図３２】ロボット装置の骨を咥えるための口（顎）の構造を説明するための側面図である。
【図３３】ロボット装置の骨を咥えるための口（顎）の構造を説明するための正面図である。
【図３４】ロボット装置の骨を咥えるための口（顎）の構造を説明するための斜視図である。
【図３５】ロボット装置の骨を咥えるための口（顎）の要部を説明するための側面図である。
【図３６】ロボット装置の骨を咥えるための口（顎）の要部を説明するための側面図である。
【図３７】咥え検出及び制御部のブロック構成図である。
【図３８】咥え検出及び制御部の処理の手順を示すフローチャートである。
【図３９】ロボット装置のソフトウェア構成を示すブロック図である。
【図４０】ロボット装置のソフトウェア構成におけるミドル・ウェア・レイヤの構成を示すブロック図である。
【図４１】ロボット装置のソフトウェア構成におけるアプリケーション・レイヤの構成を示すブロック図である。
【図４２】アプリケーション・レイヤの行動モデルライブラリの構成を示すブロック図である。
【図４３】ロボット装置の行動決定のための情報となる有限確率オートマトンを説明するために使用した図である。
【図４４】有限確率オートマトンの各ノードに用意された状態遷移表を示す図である。
【符号の説明】
【０１４７】
１  ロボット装置、２  胴体部、４  頭部、１０  ＣＰＵ、１４  信号処理回路、２０  ＣＣＤカメラ、２００  遊具、２０１  側面部、２０３  咥え部分
【図１】
2005074538.tif 000003
【図２】
2005074538.tif 000004
【図３】
2005074538.tif 000005
【図４】
2005074538.tif 000006
【図５】
2005074538.tif 000007
【図６】
2005074538.tif 000008
【図７】
2005074538.tif 000009
【図８】
2005074538.tif 000010
【図９】
2005074538.tif 000011
【図１０】
2005074538.tif 000012
【図１１】
2005074538.tif 000013
【図１２】
2005074538.tif 000014
【図１３】
2005074538.tif 000015
【図１４】
2005074538.tif 000016
【図１５】
2005074538.tif 000017
【図１６】
2005074538.tif 000018
【図１７】
2005074538.tif 000019
【図１８】
2005074538.tif 000020
【図１９】
2005074538.tif 000021
【図２０】
2005074538.tif 000022
【図２１】
2005074538.tif 000023
【図２２】
2005074538.tif 000024
【図２３】
2005074538.tif 000025
【図２４】
2005074538.tif 000026
【図２５】
2005074538.tif 000027
【図２６】
2005074538.tif 000028
【図２７】
2005074538.tif 000029
【図２８】
2005074538.tif 000030
【図２９】
2005074538.tif 000031
【図３０】
2005074538.tif 000032
【図３１】
2005074538.tif 000033
【図３２】
2005074538.tif 000034
【図３３】
2005074538.tif 000035
【図３４】
2005074538.tif 000036
【図３５】
2005074538.tif 000037
【図３６】
2005074538.tif 000038
【図３７】
2005074538.tif 000039
【図３８】
2005074538.tif 000040
【図３９】
2005074538.tif 000041
【図４０】
2005074538.tif 000042
【図４１】
2005074538.tif 000043
【図４２】
2005074538.tif 000044
【図４３】
2005074538.tif 000045
【図４４】
2005074538.tif 000046