本発明の一実施形態を図1〜図11を参照して説明する。なお、本実施形態は、本発明の射影変換収束演算処理を、脚式移動ロボットを移動させる床の床面形状を推定する処理に適用した場合の実施形態である。従って、その床が、本発明における物体に相当するものである。
まず、図1および図2を参照して本実施形態における脚式移動ロボットの概要構成を説明する。図1は、本実施形態における脚式移動ロボットとしての2足歩行ロボットの外観斜視図、図2は該ロボットの制御システムの概要を示すブロック図である。
この2足歩行ロボット1は、人型ロボットであり、上体(基体)3、左右一対の脚体5L,5R、左右一対の腕体7L,7R、および頭部9を備える。なお、本実施形態の説明では、符号「L」、「R」は、それぞれロボット1の前方に向かって左側の要素、右側の要素を表す符号として使用する。ただし、左右を特に区別する必要が無いときには、符号「L」、「R」を省略する。
脚体5L,5Rは、互いに同じ構造のものであり、それぞれ上体3の下端部の左寄りの部分、右寄りの部分から股関節11を介して延設されている。そして、各脚体5は、その長手方向の中間部に膝関節13を有する。また、各脚体5の先端部(下端部)には、足首関節15を介して接地部としての足平17が装着されている。本実施形態では、各脚体5の股関節11、膝関節13、および足首関節15は、それぞれ3自由度、1自由度、2自由度を有する。従って、足平17は、上体3に対して6自由度を有する。
腕体7L,7Rは、互いに同じ構造のものであり、それぞれ上体3の上部の左側部、右側部から肩関節19を介して延設されている。そして、各腕体7は、その長手方向の中間部に肘関節21を有する。また、各腕体7の先端部には、手首関節23を介してハンド(手先部)25が装着されている。本実施形態では、肩関節19、肘関節21および手首関節23はそれぞれ3自由度、1自由度、2自由度を有する。従って、ハンド25は、上体3に対して6自由度を有する。
頭部9は、上体3の上端部に搭載されている。この頭部9には、左右一対のカメラ27L,27Rが内蔵されている。これらのカメラ27L,27Rは例えばCCDカメラにより構成されている。これらのカメラ27L,27Rは、頭部9の正面(概ねロボット1の前方)の外界の映像を撮像するものである。そして、カメラ27L,27Rは、それらの光軸が頭部9の正面に向かってほぼ同方向に向くように頭部9に固定されている。また、頭部9には、上体3に対して該頭部9を可動とする関節機構(図示省略)が内蔵されている。その関節機構によって、頭部9は、カメラ27L,27Rと一体に、上体3に対して可動とされている。例えば、頭部9は、上体3の体幹軸(概ね上下方向の軸)まわりの回転動作と、左右方向の軸まわりの回転動作とが可能とされている。なお、頭部9は、上体3に固定されていてもよい。
また、上体3の背面部には、ボックス29が装着されており、このボックス29には、後述する制御装置33等が収容されている。
ロボット1には、その動作(歩行など)を制御するために図2に示す制御システムが備えられている。この制御システムは、各脚体5、各腕体7および頭部9の上記した各関節をそれぞれ駆動する関節アクチュエータ31と、この関節アクチュエータ31を介してロボット1の動作(運動)を制御する制御装置33と、ロボット1の各種の内部状態量を検出するセンサ35とを有する。なお、図2では、関節アクチュエータ31を1つだけ記載しているが、該関節アクチュエータ31は、各脚体5、各腕体7および頭部9の上記した各関節毎に備えられている。また、各関節アクチュエータ31は電動モータ等により構成される。
センサ35は、詳細な図示は省略するが、ロボット1の所定の部位、例えば上体3の3軸方向の加速度を検出する加速度センサ、該上体3の3軸まわりの角速度を検出するレートセンサ、該上体3の傾斜角度(鉛直方向に対する傾斜角度)を検出する傾斜計、ロボット1の各足平17に床側から作用する床反力(3軸方向の並進力および3軸まわりのモーメント)を検出する力センサ(6軸力センサ)などから構成される。
制御装置33は、CPU、RAM、ROM、インターフェース回路、関節アクチュエータ31の駆動回路などを含む電子回路ユニットである。この制御装置33には、前記カメラ27L,27Rのそれぞれの撮像画像が入力されると共に、前記センサ35の検出信号が入力される。さらに、制御装置33には、ロボット1の遠隔操縦装置(図示省略)などからロボット1の移動速度および移動方向(進行方向)を規定する指令(以下、速度・方向指令という)が入力される。そして、制御装置33は、これらの入力されたデータを使用して、所要の演算処理を実行し、ロボット1の目標歩容を生成する。さらに、制御装置33は、生成した目標歩容に応じて各脚体5の股関節11、膝関節13、足首関節15など、ロボット1に備えた各関節の目標動作を決定する。そして、制御装置33は、その目標動作に従って、各関節アクチュエータ31を制御し、ロボット1を移動させる。
また、本実施形態では、制御装置33は、ロボット1を移動させようとする床に対して固定されたグローバル座標系(ワールド座標系)での該ロボット1の自己位置を、前記センサ35(例えば加速度センサおよびレートセンサ)の検出信号などに基づいて逐次認識するようにしている。なお、ロボット1の自己位置は、適宜の外界センサを使用して認識するようにしてもよい。例えば、ロボット1を移動させようとする床などにランドマークを付設しておき、カメラ27L,27Rの撮像画像中のランドマークに基づいてロボット1の自己位置を認識するようにしてもよい。
また、本実施形態では、制御装置33は、カメラ27L,27Rの撮像画像を使用して、ロボット1を移動させようとする床面の形状を推定する処理も実行する。
なお、本実施形態では、ロボット1の速度・方向指令を遠隔操縦装置から制御装置33に入力するようにしているが、該速度・方向指令、あるいはこれを規定するロボット1の移動計画を制御装置33にあらかじめティーチングしておいてもよい。
次に、ロボット1の制御装置33が実行する制御処理のうち、本発明に関連した制御処理を図3〜図11を参照して詳説する。制御装置33は、ロボット1を前記速度・方向指令に応じて移動させる制御処理(ロボット1の動作制御処理)を実行しながら、カメラ27L,27Rの撮像画像を基に、ロボット1の進行方向前方における床面の形状を逐次推定する。
図3は、この床面の形状の推定処理(以下、床面形状推定処理という)を示すフローチャートである。この床面形状推定処理は、ロボット1の動作制御と並行して、所定の演算処理周期で逐次実行される処理である。
ここで、以降の説明で用いる用語に関して補足しておく。床面形状推定処理における各演算処理周期をフレーム、現在の演算処理周期を今回フレーム、その1つ前の演算処理周期を前回フレームという。また、制御装置33がロボット1の動作制御のために現時点で想定している床面(ロボット1の現在位置をその領域内に含む床面)を現状想定床面、実際の床面を実床面、床面形状推定処理で推定された床面を推定床面という。
現状想定床面は、ロボット1の動作制御のために必要な床面形状の情報により規定される床面である。その床面形状の情報は、グローバル座標系における斜面や水平面の位置、斜面の傾斜度合いなどであり、ロボット1の移動開始前に、制御装置33に入力される。制御装置33は、基本的には、ロボット1を移動させようとする床面が、現状想定床面に一致していると見なして該ロボット1の動作制御を行なう。この場合、本実施形態では、ロボット1の進行方向前方における現状想定床面は、推定床面との差異(例えば、それらの床面の傾斜角度の差)がある程度大きい場合に、推定床面に応じて更新される。なお、ロボット1の移動開始時におけるロボット1の接地箇所の近辺における現状想定床面は水平面であり、実床面にほぼ一致しているものとする。
また、ロボット1の両足平17,17のうち、ロボット1の移動時に、空中に持ち上げる(離床させる)足平17を遊脚足平17、他方の足平17(ロボット1の自重を床に支える脚体5の足平17)を支持脚足平17という。ロボット1を連続的に移動させるとき、遊脚足平17および支持脚足平17は交互に切り換わる。
また、本実施形態では、カメラ27L,27Rのうちの一方のカメラの撮像画像をステレオ画像における基準画像とし、他方のカメラの撮像画像をステレオ画像における参照画像とする。以降の説明では、便宜上、例えばカメラ27Lの撮像画像を基準画像とし、該カメラ27Lを基準カメラ27Lということがある。
以上を前提として、床面形状推定処理を説明する。図3を参照して、この床面形状推定処理では、まず、STEP1において、制御装置33は、カメラ27L,27Rから左右の各撮像画像(基準画像および参照画像)を取得する。
次いで、STEP2において、制御装置33は、入力された前記速度・方向指令と、現状想定床面の形状と、ロボット1の目標歩容を生成するために該制御装置33が使用している歩容パラメータとに基づいて、ロボット1の遊脚足平17の将来の着地予定位置を1歩目からN歩目まで複数歩分、決定する。1歩目の着地予定位置は、ロボット1の現在の遊脚足平17の着地予定位置である。
本実施形態では、STEP2で決定する着地予定位置は、例えば1歩目から7歩目までの7歩分の着地予定位置である(N=7である)。それらの着地予定位置は、前記グローバル座標系での位置である。また、それらの着地予定位置は、足平17の代表点の位置を意味する。
ここで、本実施形態では、制御装置33がロボット1の目標歩容を生成するために使用する歩容パラメータには、1歩目の歩容(以下、今回歩容ということがある)における遊脚足平17の着地予定位置(現在の遊脚足平17の着地予定位置)と、その次の歩容である2歩目の歩容(以下、次回歩容ということがある)における遊脚足平17の着地予定位置(現在の遊脚足平17の次の遊脚足平17の着地予定位置)と、今回歩容に続く仮想的な周期的歩容(2歩分の歩容を1周期分の歩容とする周期的な歩容)である定常歩容における1歩毎の足平14の着地位置とを規定する歩容パラメータを含む。これらの歩容パラメータにより規定される今回歩容および次回歩容の遊脚足平17の着地予定位置並びに定常歩容における着地位置は、ロボット1に対して固定された座標系(例えばロボット1の現在の支持脚足平17の接地面内の所定の代表点を原点とする座標系)での位置である。
これらの歩容パラメータにより規定される今回歩容および次回歩容の遊脚足平17の着地予定位置は、制御装置33に入力された前記速度・方向指令と、現状想定床面(ロボット1の現在の接地箇所の近辺の現状想定床面)の形状情報とから、あらかじめ定められた所定の規則に従って決定される。この場合、今回歩容および次回歩容の遊脚足平17の着地予定位置は、それらの位置で該遊脚足平17を現状想定床面に接地させるように設定される。また、今回歩容に続く仮想的な周期的歩容である定常歩容に関しては、その各周期(2歩分の期間)の1歩目の歩容における支持脚足平17の着地位置と遊脚足平17の着地位置とは、それらの間の相対的な位置関係が、次回歩容の支持脚足平11の着地位置(すなわち、今回歩容の遊脚足平17の着地予定位置)と次回歩容の遊脚足平17の着地予定位置との間の相対的位置関係に合致するように決定される。また、定常歩容の各周期の2歩目の歩容における支持脚足平17の着地位置(すなわち、定常歩容の1歩目の歩容における遊脚足平17の着地予定位置)と遊脚足平17の着地位置とは、それらの間の相対的な位置関係が、今回歩容の支持脚足平17の着地位置と今回歩容の遊脚足平17の着地予定位置との間の相対的な位置関係に合致するように決定される。
なお、定常歩容は、今回歩容の生成条件(ロボット1の移動を安定化させる上で好ましい条件)を決定するために生成される仮想的な歩容であり、ロボット1の現実の動作制御に使用される歩容ではない。また、定常歩容の1周期分の歩数は、2歩分である必要はなく、3歩以上の歩数を1周期分の歩数としてもよい。このような定常歩容に関しては、例えば本願出願によるPCT国際公開公報WO/02/40224などに詳細に説明されているので、本明細書での詳細な説明は省略する。
そして、STEP2では、制御装置33は、3歩目までの着地予定位置を、該制御装置33がロボット1の目標歩容(今回歩容)の生成のために使用している上記歩容パラメータに基づいて決定する。具体的には、該歩容パラメータにより規定される1歩目の着地予定位置(今回歩容の遊脚足平17の着地予定位置)および2歩目の着地予定位置(次回歩容の遊脚足平17の着地予定位置)をグローバル座標系に変換したものを、そのまま、2歩目までの足平14の着地予定位置として決定する。また、上記歩容パラメータにより規定される定常歩容の1周期目の2歩目の着地位置をグローバル座標系に変換したものを3歩目の着地予定位置として決定する。
さらに、制御装置33は、4歩目からN歩目(本実施形態ではN=7)までの着地予定位置については、入力された前記速度・方向指令と、現状想定床面の形状情報とから、所定の規則に従って決定する。その規則は、1歩目および2歩目の着地予定位置を決定するための規則と同じである。なお、これらの着地予定位置を決定するに際しては、現在の速度・方向指令と、現状想定床面とが、そのまま一定に保持されると仮定される。
STEP2の処理による1歩目からN歩目までの着地予定位置の設定例を図5、図6(a),(b)、図7、図8(a),(b)を参照して説明する。図5は、ロボット1および実床面などをロボット1の矢状面(側面視)で示した説明図、図6(a),(b)は、図5に示す実床面などを鉛直方向上方から見た図、図7は、ロボット1および実床面などをロボット1の矢状面(側面視)で示した説明図、図8(a),(b)は、図7に示す実床面などを鉛直方向上方から見た図である。この場合、図5では、ロボット1が現時点で接地している実床面が水平面であると共に、ロボット1の進行方向前方のある位置P1から遠方側の実床面が水平面から斜面(図では昇り斜面)に変化している例を示している。また、図7では、ロボット1が現時点で接地している実床面が斜面(図では昇り斜面)であると共に、ロボット1の進行方向前方のある位置P2から遠方側の実床面が斜面から水平面に変化している例を示している。なお、「斜面」は、水平面に対して傾斜した床面を意味する。また、本実施形態の説明では、ロボット1の進行経路上のある区間における床面(実床面または現状認識床面または推定床面)が、その区間内で実質的に一定の傾斜角度(水平面に対する傾斜角度)を有する斜面となっている場合において、ロボット1の進行経路上での該斜面の両端を斜面エッジという。そして、それらの斜面エッジのうち、ロボット1の移動開始地点により近い側の斜面エッジを斜面開始エッジ、他方の斜面エッジを斜面終了エッジという。例えば、図5に示す実床面では、該実床面が水平面から斜面に変化する位置P1における該水平面と斜面との交線が斜面開始エッジとなる。また、図7に示す実床面では、該実床面が斜面から水平面に変化する位置P2における該斜面と水平面との交線が斜面終了エッジとなる。
実床面が図5に示すような床面である場合において、現状想定床面が水平面(ロボット1が現時点で接地している実床面(水平面)に連続する水平面)であるとする。この状況では、例えば、図5および図6(a)で破線で示すように、1歩目からN歩目(N=7)までの遊脚足平17(1)〜17(N)の着地予定位置が設定される。この場合、ロボット1の1歩毎の歩幅は、ほぼ一定である。なお、本実施形態の説明では、添え字(i)(i=1,2,……,N)は、i歩目の着地予定位置に対応するものであることを意味する。
また、実床面が図5に示すような床面である場合において、現状想定床面が実床面にほぼ一致しているものとする。この場合には、例えば図6(b)に破線で示すように、各歩数目の着地予定位置におけるロボット1の遊脚足平17(1)〜17(N)(N=7)が斜面開始エッジに載らず、且つ、該斜面開始エッジに近づき過ぎないように、1歩目からN歩目までの着地予定位置が設定される。
また、実床面が図7に示すような床面である場合において、現状認識床面が斜面(ロボット1が現時点で接地している実床面(斜面)に連続する斜面)であるとする。この状況では、例えば、図7および図8(a)で破線で示すように、1歩目からN歩目(N=7)までの遊脚足平17(1)〜17(N)の着地予定位置が設定される。この場合、ロボット1の1歩毎の歩幅は、ほぼ一定である。ただし、その歩幅は、図5および図6(a)の場合(現状認識床面が水平面である場合)よりも小さな歩幅とされる。
また、実床面が図7に示すような床面である場合において、現状認識床面が実床面にほぼ一致しているものとする。この場合には、例えば図8(b)に破線で示すように、各歩数目の着地予定位置におけるロボット1の遊脚足平17(1)〜17(N)(N=7)が斜面終了エッジに載らず、且つ、該斜面終了エッジに近づき過ぎないように、1歩目からN歩目までの着地予定位置が設定される。
以上のようにN歩目までの各着地予定位置は、遊脚足平17が斜面開始エッジあるいは斜面終了エッジに載るのを避けるように設定される。
補足すると、本実施形態では、3歩目の着地予定位置を定常歩容の歩容パラメータに対応させて決定したが、4歩目以降の着地予定位置の決定の仕方と同様に3歩目の着地予定位置を決定してもよい。N歩目までの各着地予定位置は、基本的には、速度・方向指令および現状想定床面が将来も現状に維持されると仮定して、N歩目までのロボット1の平均的な移動速度と移動方向とが速度・方向指令に合致し、また、両脚体5,5どうしの干渉等に関する幾何学的な制約条件を満足しつつ、現状想定床面上でロボット1を安定に移動させ得るように設定すればよい。
なお、ロボット1の現在の遊脚足平17が着地するまでは、速度・方向指令と、現状想定床面とが一定に保持されている限り、いずれのフレームにおいても、STEP2で設定される1歩目からN歩目までの各着地予定位置は同じになる。一方、現在の遊脚足平17が着地するまでに、速度・方向指令が変化し、あるいは、現状想定床面が更新された場合には、STEP2で設定される1歩目からN歩目までの各着地予定位置で設定される各着地予定位置は、経時的に変化する。また、現在の遊脚足平17が着地した後には、少なくともN歩目の着地予定位置は、新規に設定されることとなる。
上記のようにSTEP2の処理を実行した後、制御装置33は、次にSTEP3の処理を実行する。このSTEP3の処理においては、制御装置33は、STEP2で決定した1歩目からN歩目(N=7)までの各着地予定位置の近辺に画像投影領域A(i)(i=1,2,……,N)を設定する。各画像投影領域A(i)は、後述するようにカメラ27L,27Rの各撮像画像に投影される領域である。そして、該画像投影領域A(i)は、現状想定床面上に設定される平面領域である。
図9は、各画像投影領域A(i)の設定例を示す図である。この図9には、現状想定床面に垂直な方向で見た画像投影領域A(i)(i=1,2,……,N)と、i歩目の着地予定位置で現状想定床面に接地させた足平17(i)とを図示している。図示の如く、画像投影領域A(i)は、それに対応する着地予定位置で現状想定床面に足平17(i)(図示例では右側足平17R)の底面の平坦面の全体を接地させたときの該足平17(i)の接地面の近辺で該接地面を包含するように設定される。
より具体的には、本実施形態では、画像投影領域A(i)は、例えば長方形状に設定される。この場合、ロボット1の進行方向における画像投影領域A(i)の長さL1は、該進行方向における足平17(i)の接地面の長さL3よりも若干大きいものとされている。また、ロボット1の進行方向と直交する方向における画像投影領域A(i)の長さL2は、現状想定床面に対する足平17(i)の接地状態を維持したまま、他方の足平17(図9に示す例では、二点鎖線で示す左側足平17L)を足平17(i)と左右方向に並列させて現状想定床面に接地させたとした場合に、両足平17,17の接地面が両者とも、画像投影領域A(i)に包含されるような長さ(ロボット1の進行方向で見た左側足平17Lの左側縁と、右側足平17Rの右側縁との間隔L4よりも若干大きい長さ)に設定される。
なお、図9に示す例では、説明の便宜上、足平17の底面の全体が接地面(平坦面)であるように記載しているが、足平17の底面の全体が平坦面である必要はない。例えば、足平17の底面のうちの前端部および後端部が上向きに湾曲しており、該前端部および後端部を除く底面が平坦面になっていてもよい。あるいは、足平17の底面に複数の面一の平坦面が形成されていてもよい。これらの場合には、足平17の接地面は、該足平17の底面の一部分となる。そして、その場合には、i歩目の画像投影領域は、足平17(i)の全体を現状想定床面に投影した領域のうち、該足平17(i)の接地面以外の領域がはみ出すように設定されていてもよい。
また、画像投影領域A(i)は、必ずしも長方形状に設定する必要はない。また、例えば、図9に仮想線で示すA(i)’のように、足平17(i)の接地面を包含し、且つ、該接地面よりも若干大きな面積を有する領域(その領域内に1つの足平17(i)の接地面だけを包含するような領域)をi歩目の画像投影領域として設定するようにしてもよい。
上記のように画像投影領域A(i)を設定したとき、例えば、図5に示す状況で、現状想定床面が水平面である場合には、図5および図6(a)に示す如く、1歩目からN歩目(N=7)までの画像投影領域A(1)〜A(N)が設定される。また、現状想定床面が、図5の実床面にほぼ一致している場合には、図6(b)に示す如く、1歩目からN歩目までの画像投影領域A(1)〜A(N)が設定される。
また、例えば図7に示す状況で、現状想定床面が斜面である場合には、図7および図8(a)に示す如く、1歩目からN歩目(N=7)までの画像投影領域A(1)〜A(N)が設定される。また、現状想定床面が、図7の実床面にほぼ一致する場合には、図8(b)に示す如く、1歩目からN歩目までの画像投影領域A(1)〜A(N)が設定される。
次いで、制御装置33は、STEP4の処理を実行する。このSTEP4の処理では、制御装置33は、STEP2で設定した各画像投影領域A(i)(i=1,2,……,N)をカメラ27L,27Rの各撮像画像に投影する。なお、この場合、各画像投影領域A(i)を各カメラ27の撮像画像に投影するために、制御装置33は、グローバル座標系でのカメラ27L,27Rの位置および姿勢、あるいは、カメラ27Lまたは27Rに対して固定された座標系での各画像投影領域A(i)の位置および姿勢を、グローバル座標系でのロボット1の現在位置と、該ロボット1の各関節の変位量(検出値または目標値)とに基づいて認識する。なお、「姿勢」は、空間的な向きを意味する。
STEP4の処理により、例えば図10に例示する如く、各撮像画像中に、各画像投影領域A(i)を該撮像画像に投影してなる部分画像領域Ac(i)が得られる。なお、図10は、右カメラ27Rの撮像画像を示している。
各部分画像領域Ac(i)内の画像は、ロボット1の進行方向前方に存在する実床面の部分領域の画像である。以降、各画像測定領域Ac(i)内に画像として捉えられている実床面の部分領域を実床面部分領域Ar(i)という。この実床面部分領域Ar(i)は、本発明における物体(本実施形態では床)の平坦部に相当するものである。
補足すると、画像投影領域A(i)における現状想定床面が実床面に一致している場合には、該画像投影領域A(i)に対応する実床面部分領域Ar(i)は、画像投影領域A(i)に一致する。一方、画像投影領域A(i)内の現状想定床面が実床面に一致していない場合には、該画像投影領域A(i)に対応する部分画像領域Ac(i)内の画像、すなわち、実床面部分領域Ar(i)の画像は、実床面のうちの、画像投影領域A(i)内の各点と各カメラ27の光学中心とを結ぶ直線上に位置する部分領域の画像となる。例えば、図5に示す状況で、現状想定床面が水平面である場合には、6歩目および7歩目の画像投影領域A(6),A(7)にそれぞれ対応する実床面部分領域Ar(6),Ar(7)は、それぞれ図5に示す如く、実床面のうちの斜面内の部分領域となる。そして、これらの実床面部分領域Ar(6),Ar(7)の画像がそれぞれ部分画像領域Ac(6),Ac(7)内の画像となる。同様に、図7に示す状況で、現状想定床面が斜面である場合には、6歩目および7歩目の画像投影領域A(6),A(7)にそれぞれ対応する実床面部分領域Ar(6),Ar(7)は、それぞれ図7に示す如く、実床面のうちの水平面内の部分領域となる。
なお、1歩目からN歩目(N=7)までの全ての画像投影領域A(i)に対応する部分画像領域Ac(i)が、各カメラ27の実際の撮像画像内に含まれるとは限らない。
次いで、制御装置33は、STEP5の処理を実行する。この処理は、各画像投影領域A(i)に対応する部分画像領域Ac(i)内に捉えられている実床面、すなわち、実床面部分領域Ar(i)の形状を表す形状パラメータを推定する処理である。
ここで、この推定処理の概要を説明しておく。本実施形態では、各画像投影領域A(i)に対応する実床面部分領域Ar(i)が、ある1つの平面に包含される領域であると見なし、該実床面部分領域Ar(i)の空間的(3次元的)な姿勢を表す床面姿勢パラメータと、該実床面部分領域Ar(i)の法線方向における該実床面部分領域Ar(i)の空間的な位置を表す床面位置パラメータとの組を該実床面部分領域Ar(i)の形状パラメータとして用いる。
一般に、空間内の任意の平面は、その法線方向と、その法線方向における該平面の位置とから一義的に特定される。そこで、本実施形態では、実床面部分領域Ar(i)の床面姿勢パラメータとして、該実床面部分領域Ar(i)を包含する平面の法線ベクトル(単位ベクトル)n(i)を使用する。また、本実施形態では、ロボット1のある代表点と実床面部分領域Ar(i)を包含する平面との距離d(i)(以下、平面距離d(i)という)を床面位置パラメータとして使用する。この場合、平面距離d(i)に関するロボット1の代表点として、例えば、カメラ27R,27Lのうちの基準カメラ27Lの光学中心を使用する。
従って、STEP5の処理は、各実床面部分領域Ar(i)毎に、それを包含する平面の法線ベクトルn(i)と平面距離d(i)との組(n(i),d(i))を実床面部分領域Ar(i)の形状パラメータとして推定する処理である。なお、本実施形態では、STEP5で推定される法線ベクトルn(i)は、各フレームにおいて、例えばカメラ27L,27Rに対して固定された3次元座標系(以下、カメラ座標系という)における各座標軸成分の組として記述される。そのカメラ座標系は、例えば、基準カメラ27Lの光学中心を原点とする3次元直交座標系である。この場合、平面距離d(i)は、カメラ座標系の原点から実床面部分領域Ar(i)を包含する平面までの距離となる。
前記図5および図7には、上記の如く定義される形状パラメータの例を図示している。図5中のn(2)、d(2)は、2歩目の画像投影領域A(2)に対応する実床面部分領域Ar(2)(図示例では、Ar(2)はA(2)にほぼ一致している)の形状パラメータとしての法線ベクトルn(2)と、平面距離d(2)とを例示している。同様に、図5中のn(6)、d(6)は、6歩目の画像投影領域A(6)に対応する実床面部分領域Ar(6)の形状パラメータとしての法線ベクトルn(6)と、平面距離d(6)とを例示している。また、図7中のn(3)、d(3)は、3歩目の画像投影領域A(3)に対応する実床面部分領域Ar(3)(図示例では、Ar(3)はA(3)にほぼ一致している)の形状パラメータとしての法線ベクトルn(3)と、平面距離d(3)とを例示している。同様に、図7中のn(6)、d(6)は、6歩目の画像投影領域A(6)に対応する実床面部分領域Ar(6)の形状パラメータとしての法線ベクトルn(6)と、平面距離d(6)とを例示している。
さらに、STEP5の処理では、各実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))を、カメラ27L,27Rのそれぞれの撮像画像間の射影変換を利用した収束演算処理により推定する。その収束演算処理では、参照画像(カメラ27Rの撮像画像)中の部分画像領域Ac(i)内の画像を、形状パラメータ(n(i),d(i))の値に応じて定まる射影変換行列によって変換してなる画像を、基準画像(カメラ27Lの撮像画像)中の部分画像領域Ac(i)内の画像と比較しつつ、それらの画像がほぼ一致するように、(n(i),d(i))の値をある初期値から徐々に更新していく。換言すれば、(n(i),d(i))を変数パラメータとし、その変数パラメータの値により規定される平面を、実床面部分領域Ar(i)を包含する平面に収束させるように、該変数パラメータの値をある初期値から更新していく(ひいては、該変数パラメータの値により定まる射影変換行列を更新していく)。この収束演算処理による変数パラメータの最終的な収束値が、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値として得られる。なお、その変数パラメータの収束値より定まる射影変換行列は、参照画像中の部分画像領域Ac(i)内の画像を、基準画像中の部分画像領域Ac(i)内の画像に一致する画像に変換し得る射影変換行列としての意味を持つ。
図4は、このSTEP5の処理の詳細を示すフローチャートである。この処理は、STEP3で設定された各画像投影領域A(i)毎に実行される処理である。以降、このSTEP5の処理の説明では、着地予定位置の歩数目を示す参照符号iは、1〜N(N=7)のうちの任意の1つの値を意味するものとして使用する。また、前回フレームで設定された各画像投影領域A(1)〜A(N)を前回画像投影領域A_p(1)〜A_p(N)と称する。添え字「_p」は前回フレームに関するものであるという意味で使用する。
STEP5の処理では、制御装置33は、まず、STEP501において、N個の前回画像投影領域A_p(1)〜A_p(N)の中から、今回フレームにおけるi歩目の着地予定位置に対応する画像投影領域A(i)に最も近い前回画像投影領域A_px(A_pxはA_p(1)〜A_p(N)のうちの1つ)を探索する。ここで、「最も近い」というのは空間的な位置が最も近いことを意味する。より具体的には、制御装置33は、画像投影領域A(i)の中心点と、N個の前回画像投影領域A_p(1)〜A_p(N)のそれぞれの中心点との間の距離を、それらの中心点のグローバル座標系での位置に基づいて算出し、その距離が最小となる1つの前回画像投影領域を、A(i)に最も近い前回画像投影領域A_pxとする。以降、この前回画像投影領域A_pxを近接前回画像投影領域Ap_xという。
次いで、STEP502に進んで、制御装置33は、画像投影領域A(i)と、近接前回画像投影領域A_pxとの位置差が所定の閾値以上であるか否かを判断する。なお、A(i)とA_pxとの位置差は、STEP501で算出した、A(i)の中心点とA_pxの中心点との距離である。そして、制御装置33は、この判断結果が否定的である場合には、STEP503、504の処理を実行し、肯定的である場合には、STEP505〜510の処理を実行する。
補足すると、STEP501〜510の処理は、後述する収束演算処理における(n(i),d(i))の初期値を設定するための処理である。
ここで、STEP502の判断結果が否定的となる状況は、画像投影領域A(i)と近接前回画像投影領域A_pxとが重なる部分を有し、A(i)に対応する実床面部分領域Ar(i)を包含する平面と、A_pxに対応する実床面部分領域Ar_pxを包含する平面とが一致、もしくはほぼ一致することが高い確度で予測される状況である。逆に、STEP502の判断結果が肯定的となる状況は、画像投影領域A(i)と近接前回画像投影領域A_pxとが重なる部分とが重なる部分を持たず(換言すれば前回フレームにおいて既に形状パラメータの推定がなされた実床面画像領域Ar_pxとの関連性が無く)、A(i)に対応する実床面部分領域Ar(i)を包含する平面の空間的な姿勢および位置を現時点では高い確度で予測することが困難な状況を意味する。なお、STEP502の判断結果が肯定的となる状況は、今回フレームで新たな歩数目(前回フレームでのN歩目の次の歩数目)の着地予定位置に対応する画像投影領域が設定された場合や、前回フレームと今回フレームとの間でロボット1の進行方向前方の現状想定床面が更新された場合等に発生する。
STEP502の判断結果が否定的である場合のSTEP503、504の処理では、画像投影領域A(i)に対応する実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))を収束演算処理により推定するために、その初期値(n0(i),d0(i))が設定される。より具体的には、STEP503では、制御装置33は、近接前回画像投影領域A_pxに対応して、前回フレームで推定された形状パラメータ(n_px,d_px)(これは、前回フレームにおけるカメラ座標系で記述される)を今回フレームにおけるカメラ座標系に変換し、その変換後の形状パラメータを(n_px',d_px')とする。なお、前回フレームのカメラ座標系と今回フレームのカメラ座標系との間の関係は、前回フレームと今回フレームとの間の期間におけるロボット1の各関節の変位量に基づいて認識される。
次いで、STEP504において、制御装置33は、上記の如く求めた(n_px',d_px')を、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の初期値(n0(i),d0(i))として設定する。このように、(n0(i),d0(i))を設定するということは、実床面部分領域Ar(i)を包含する平面の初期値を、近接前回画像投影領域A_pxに対応する実床面部分領域Ar_pxを包含する平面に一致させるということを意味する。
一方、STEP502の判断結果が肯定的である場合のSTEP505〜510の処理では、(n(i),d(i))の初期値(n0(i),d0(i))が次のように設定される。すなわち、STEP505において、制御装置33は、近接前回画像投影領域A_pxに対応して、前回フレームで推定された形状パラメータ(n_px,d_px)により規定される平面πxをグローバル座標系で求める(グローバル座標系での平面πxの位置および姿勢を求める)。より具体的には、例えば、前回フレームのカメラ座標系で記述された形状パラメータ(n_px,d_px)を、前記STEP503と同じ処理によって、今回フレームにおけるカメラ座標系に変換する。そして、その変換後の形状パラメータ(n_px’,d_px’)と、今回フレームにおけるカメラ座標系とグローバル座標系との間の関係とに基づいて、平面πxをグローバル座標系で記述する。あるいは、前回フレームのカメラ座標系で記述された形状パラメータ(n_px,d_px)と、前回フレームにおけるカメラ座標系とグローバル座標系との間の関係とに基づいて、平面πxをグローバル座標系で記述する。なお、各フレームにおけるカメラ座標系とグローバル座標系との間の関係は、各フレームにおけるロボット1のグローバル座標系上の位置と、該フレームにおける該ロボット1の各関節の変位量とに基づいて認識できる。
次いで、STEP506に進んで、制御装置33は、画像投影領域A(i)の中心点と、基準カメラ27Lの光学中心とを通る直線L(i)をグローバル座標系で求める。すなわち、該直線L(i)をグローバル座標系で記述する。
次いで、STEP507に進んで、制御装置33は、平面πxと直線L(i)との交点P(i)を求める。すなわち、交点P(i)のグローバル座標系での位置を求める。なお、例えば、今回フレームにおけるカメラ座標系での交点P(i)の位置を求めておき、それをグローバル座標系に変換するようにしてもよい。
次いで、STEP508に進んで、上記の如く求めた交点P(i)を通って、水平面から所定角度θだけ傾いた平面πa(i)をグローバル座標系で求める。該所定角度θは、本実施形態では、例えば45度である。この場合、交点P(i)を通って、所定角度θだけ傾いた平面は無数に存在するが、そのいずれの平面をπa(i)として求めてもよい。一例として、本実施形態では、交点P(i)を通ってグローバル座標系のY軸方向あるいはロボット1の左右方向に平行な水平直線を含んで、水平面から所定角度θだけ傾いた平面(ロボット1から見て昇り斜面または降り斜面となる平面)をπa(i)として求めるようにした。なお、平面πa(i)が通る(平面πa(i)上に存在する)点P(i)は、必ずしも上記のように設定せずともよく、例えば画像投影領域A(i)内の任意の点をP(i)として設定してもよい。また、例えば、近接前回画像投影領域A_pxに対応して前回フレームで推定された形状パラメータ(n_px,d_px)を今回フレームにおけるカメラ座標系に変換してなる(n_px’,d_px’)のd_px'を、と同じ値にd0(i)を設定するようにしてもよい。この場合には、平面πa(i)が通る点P(i)を決定する必要はない。
次いで、S509に進んで、今回フレームにおけるカメラ座標系で平面πa(i)を表す形状パラメータ(na(i),da(i))を求める。na(i)は、πa(i)のカメラ座標系での法線ベクトル(単位ベクトル)であり、da(i)は、今回フレームにおける基準カメラ27Lの光学中心と平面πa(i)との距離である。
次いで、STEP510に進んで、(na(i),da(i))を実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の初期値(n0(i),d0(i))として設定する。
このように、STEP502の判断結果が肯定的となると場合、すなわち、A(i)に対応する実床面部分領域Ar(i)を包含する平面の空間的な姿勢および位置を現時点では高い確度で予測することが困難な状況である場合には、形状パラメータ(n(i),d(i))の初期値(n0(i),d0(i))は、それにより規定される平面が水平面に対して所定角度θだけ傾いた平面になるように設定される。
この場合の初期値(n0(i),d0(i))の設定例を図11を参照して説明する。図11はその説明図であり、ロボット1や実床面などを矢状面(側面視)で示している。この例では、今回フレームにおける6歩目の画像投影領域A(6)に最も近い近接前回画像投影領域A_pxが前回フレームにおける5歩目の画像投影領域A_p(5)であるとする。また、この例では、前回フレームにおける5歩目の着地予定位置の近辺での実床面と現状想定床面とがほぼ一致しており、ひいては、近接前回画像投影領域A_px(=A_p(5))に対応する実床面部分領域Ar_p(5)がA_pxにほぼ一致しているものとしている。
この場合には、今回フレームにおける6歩目の画像投影領域A(5)に関して、図中に示す平面πx(実床面部分領域Ar_p(5)を包含する平面)が、STEP505において求められる。そして、図中に示す直線L(6)がSTEP506において求められる。さらに、図中に示す点P(6)が、STEP507において求められる。なお、この例では、点P(6)は、6歩目の画像投影領域A(6)の中心点に一致している。そして、図中に示す平面πa(6)が、STEP508で求められる。この平面πa(6)は、点P(6)を通り、水平面に対して所定角度θ(例えば45度)だけ傾いている。さらに、この平面πa(6)を表す形状パラメータ(na(6),da(6))、すなわち、平面πa(6)の法線ベクトルna(6)と、今回フレームにおける基準カメラ27Lの光学中心から平面πa(6)までの平面距離da(6)との組がSTEP509で求められる。そして、この形状パラメータ(na(6),da(6))が、6歩目の画像投影領域A(6)に対応する実床面部分領域Ar(6)の形状パラメータ(n(6),d(6))の初期値(n0(6),d0(6))として設定される。
なお、STEP502の判断結果が肯定的となると場合に実行するSTEP505〜510の処理は、本発明の要部技術に相当する処理である。この処理により形状パラメータ(n(i),d(i))の初期値(n0(i),d0(i))を上記のように設定する理由については、後述する。
以上説明したSTEP501〜510の処理が、(n(i),d(i))の初期値(n0(i),d0(i))を設定するための処理である。
以上のように初期値(n0(i),d0(i))を設定した後、STEP512に進んで、制御装置33は、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の仮値として、初期値(n0(i),d0(i))を設定する。なお、このSTEP512からの処理が、形状パラメータ(n(i),d(i))を推定するための収束演算処理である。この収束演算処理は、本実施形態では、ガウスニュートン法の収束演算処理である。
次いで、STEP513に進んで、更新前誤差量e(k-1)を初期化する。ここで初期化される更新前誤差量e(k-1)は、後述するループ処理における最初のSTEP516の処理で求められる誤差量e(k)と比較するものであり、その誤差量e(k)よりも確実に大きな誤差量となるような過大な誤差量に設定される。
次いで、STEP514からSTEP522までの処理を所要の条件が満たされるまで繰り返すループ処理が実行される。このループ処理では、形状パラメータ(n(i),d(i))は、変数パラメータとしての意味を持ち、適宜、その値が更新される。すなわち、(n(i),d(i))は、本発明におけるパラメータに相当する。以降、そのループ処理における各回のSTEP514〜522の処理をループ内演算処理、現在実行中のループ内演算処理を今回ループ内演算処理、その1回前のループ内演算処理を前回ループ内演算処理という。また、今回ループ内演算処理で求められる値と、前回ループ内演算処理で求められる値とを区別するために、必要に応じて前者の値に(k)を付し、後者の値に(k-1)を付する。また、(n(i),d(i))は、その値が確定されるまでは、変数パラメータ(n(i),d(i))という。
STEP514において、制御装置33は、変数パラメータ(n(i),d(i))の現在値から、カメラ27L,27R間の射影変換行列H(i)を算出する。該射影変換行列H(i)は、次式(1)により与えられる行列である。なお、ここでは、H(i)は、正規化されたカメラ座標系で表現されている。
H(i)=R+t・m(i)T ……(1)
但し、m(i)≡n(i)/d(i)
ここで、Rは、カメラ27L,27R間の回転行列、tはカメラ27L,27Rのそれぞれの光学中心間の並進ベクトル(ここでは縦ベクトル)である。これらは、カメラ27L,27Rの相対的な位置および姿勢関係などの内部パラメータに依存するものであり、あらかじめキャリブレーションによって特定されている。また、m(i)は式(1)の但し書きで定義される如く、法線ベクトルn(i)を平面距離d(i)により除算したベクトル(ここでは縦ベクトル)である。なお式(1)中の「T」は転置を意味する。
式(1)から明らかなように、射影変換行列H(i)は、変数パラメータ(n(i),d(i))の値によって規定される。
次いで、S515に進んで、制御装置33は、カメラ27L,27Rの撮像画像のうちの参照画像(カメラ27Rの撮像画像)における画像投影領域A(i)の投影画像、すなわち該参照画像における部分画像領域Ac(i)内の画像を、上記の如く求めた射影変換行列H(i)により変換し、その変換により得られた画像を変換画像として得る。
次いで、STEP516に進んで、制御装置33は、基準画像(カメラ27Lの撮像画像)における画像投影領域A(i)の投影画像、すなわち該基準画像における部分画像領域Ac(i)内の画像と、上記STEP515で求めた変換画像との間の誤差量e(k)を求める。誤差量e(k)は、基準画像における部分画像領域Ac(i)内の画像と、上記STEP515で求めた変換画像との輝度分布の差や形状の差に応じた量である。
ここで、変数パラメータ(n(i),d(i))の現在値により規定される平面が、実床面部分領域Ar(i)を包含する平面と精度よく合致している場合には、STEP515で求めた変換画像は、基準画像における部分画像領域Ac(i)内の画像に一致またはほぼ一致する。この場合には、誤差量e(k)は、0もしくは微小なものとなる。従って、誤差量e(k)は、(n(i),d(i))の現在値により規定される平面(換言すれば、(n(i),d(i))の現在値により定まる射影変換行列H(i)によって規定される平面)と、実床面部分領域Ar(i)を包含する平面との間の相違の度合いを表す指標である。換言すれば、誤差量e(k)は、(n(i),d(i))現在値の、真値に対する誤差を表す指標である。
次いで、STEP517に進んで、制御装置33は、現在の誤差量e(k)が前回ループ内演算処理におけるSTEP516で求めた誤差量である更新前誤差量e(k-1)よりも小さいか否かを判断する。なお、今回ループ内演算処理が、1回目である場合には、誤差量e(k)と比較する更新前誤差量e(k-1)は、前記STEP513で初期化された値である。従って、この場合には、STEP517の判断結果は常に肯定的となる。
補足すると、今回ループ内演算処理が、1回目である場合には、STEP517の判断処理を省略し、STEP518からの処理を実行するようにしてもよい。その場合には、STEP513の処理は不要である。
STEP517の判断結果が肯定的である場合には、STEP518に進んで、制御装置33は、n(i),d(i)のそれぞれの修正量Δn(i)、Δd(i)を求める。なお、これらの修正量Δn(i)、Δd(i)は、誤差量e(k)などに応じて決定される。
次いで、STEP519に進んで、現在のe(k)が所定量よりも小さいか否か、すなわち、e(k)が十分に小さいか否かを判断する。
そして、この判断結果が否定的である場合には、STEP520に進んで、制御装置33は、STEP518で求めた修正量Δn(i)、Δd(i)がそれぞれ所定量よりも小さいか否かを判断する。
この判断結果が否定的である場合には、STEP521に進んで、制御装置33は、変数パラメータ(n(i),d(i))の現在値を(ns(i),ds(i))の値として設定する(記憶保持する)と共に、更新前誤差量e(k-1)に現在の誤差量e(k)を代入する(現在の誤差量e(k)を次回のループ内演算処理に関する更新前誤差量として設定する)。
さらに、STEP522に進んで、制御装置33は、変数パラメータ(n(i),d(i))の現在値をSTEP518で求めた修正量Δn(i)、Δd(i)により更新する。これにより、今回ループ内演算処理が終了する。そして、制御装置33は、STEP514からのループ内演算処理を再開する。
一方、STEP517の判断結果が否定的であるとき、または、STEP519の判断結果が肯定的であるとき、またはSTEP520の判断結果が肯定的であるときには、ループ内演算処理は終了し(STEP514〜522のループ処理から抜け出す)、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値が確定される。換言すれば、参照画像における実床面部分領域Ar(i)の画像(部分画像領域Ac(i)内の画像)を射影変換行列H(i)により変換してなる変換画像を、基準画像における実床面部分領域Ar(i)の画像(部分画像領域Ac(i)内の画像)に合致させ得るような射影変換行列H(i)を規定する変数パラメータ(n(i),d(i))の値が確定される。
具体的には、今回ループ内演算処理におけるSTEP520の判断結果が肯定的となる状況は、変数パラメータ(n(i),d(i))がほぼ、ある値に収束しており、(n(i),d(i))の更新をさらに繰り返しても、(n(i),d(i))の値がほとんど変化しない考えられる状況である。この場合には、STEP523に進んで、制御装置33は、変数パラメータ(n(i),d(i))の現在値を今回ループ内演算処理のSTEP518で求めた修正量Δn(i)、Δd(i)により更新する。そして、制御装置33は、STEP524において、この更新後の変数パラメータ(n(i),d(i))の値を、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値として確定する。なお、この場合、STEP523の処理を省略し、今回ループ内演算処理のSTEP514で使用した変数パラメータ(n(i),d(i))の値をそのまま、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値としてもよい。
また、今回ループ内演算処理におけるSTEP519の判断結果が肯定的となる状況は、今回ループ内演算処理におけるSTEP514で使用した変数パラメータ(n(i),d(i))により規定される平面が、実床面部分領域Ar(i)を包含する平面に十分に一致していると考えられる状況である。この場合には、前記STEP524に進んで、制御装置33は、変数パラメータ(n(i),d(i))の現在値、すなわち、今回ループ内演算処理のSTEP514で使用した(n(i),d(i))を、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値として確定する。
また、今回ループ内演算処理におけるSTEP517の判断結果が否定的である場合には、ループ内演算処理をさらに繰り返しても、変数パラメータ(n(i),d(i))が発散する可能性がある。そこで、この場合には、STEP525に進んで、制御装置33は、前回ループ内演算処理におけるSTEP521で設定した(ns(i),ds(i))、すなわち前回ループ内演算処理におけるSTEP514で使用した変数パラメータ(n(i),d(i))の値を実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値とする。
以上が、STEP5の処理の詳細である。このSTEP5の処理により、各画像投影領域A(i)に対応する部分画像領域Ac(i)内に画像として捉えれている実床面、すなわち、実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値が得られることとなる。
ここで、前記STEP502の判断結果が肯定的である場合に、(n(i),d(i))の初期値(n0(i),d0(i))に対応する平面πa(i)を前記した如く設定した理由を以下に説明する。
本願発明者は、次のような実験を行なった。すなわち、形状パラメータ(n(i),d(i))が既知である実床面部分領域Ar(i)(ロボット1の前方のある位置における領域)に対して、初期値(n0(i),d0(i))のうちの、n0(i)を実床面部分領域Ar(i)の実際の法線ベクトルn(i)に一致させた場合(平面πa(i)を実床面部分領域Ar(i)の平面と平行にした場合)と、n0(i)を実床面部分領域Ar(i)の実際の法線ベクトルn(i)に対して傾けた場合(平面πa(i)を実床面部分領域Ar(i)の平面に対して傾けた場合)とで、d0(i)の値を複数の値に設定し、前記STEP512〜524の収束演算処理を実行した。そして、それぞれの場合において、収束演算処理が完了するまでの前記ループ内演算処理の実行回数を計測した。
その計測結果の一例を図12(a),(b)に示す。図12(a)は、初期値(n0(i),d0(i))に対応する平面πa(i)を実床面部分領域Ar(i)の平面と平行にした場合における、d0(i)の設定値の誤差(実際のd(i)に対する誤差)と、ループ内演算処理の実行回数との関係を示すグラフ、図12(b)は、初期値(n0(i),d0(i))に対応する平面πa(i)を実床面部分領域Ar(i)に対して45度だけ傾けた場合における、d0(i)の設定値の誤差(実際のd(i)に対する誤差)と、ループ内演算処理の実行回数との関係を示すグラフである。なお、これらの例では、実床面部分領域Ar(i)は水平面である。また、いずれの図でも、横軸は、d0(i)の設定値の誤差、縦軸はループ内演算処理の実行回数である。
図12(a)に示すように、平面πa(i)を実床面部分領域Ar(i)の平面と平行にした場合には、d0(i)の設定値の誤差が大きくなるに伴い、ループ内演算処理の回数が急激に増加する。また、d0(i)の設定値の誤差がある程度大きくなると、変数パラメータ(n(i),d(i))をある値に収束させることができなくなる。これに対して、図12(b)に示すように、平面πa(i)を実床面部分領域Ar(i)の平面に対して傾けた場合には、d0(i)の設定値の誤差が大きくなっても、ループ内演算処理の回数はさほど増加せず、しかも、変数パラメータ(n(i),d(i))をある値に収束させることができる。このことから、ループ内演算処理の実行回数をできるだけ少なくしつつ、効率よく実際の(n(i),d(i))を推定するためには、初期値(n0(i),d0(i))に対応する平面πa(i)は、実床面部分領域Ar(i)の平面に対して傾けておくことが望ましいと考えられる。そして、このようにした場合には、d0(i)の設定値は、実際のd(i)の値に十分に近い値である必要がなく、比較的大雑把な値でよい。
一方、本実施形態におけるロボット1のような脚式移動ロボットでは、一般に、該ロボットを移動させようとする床面の傾斜角度(水平面に対する傾斜角度)は、該ロボットの関節などの機構的な制約や仕様上の制約によって、ある許容範囲内の傾斜角度に制限される。また、ロボットの動作環境があらかじめ決められた環境に制限されている場合には、その環境内の床面の傾斜角度の範囲はあらかじめ決まっている。このように、ロボットを移動させようとする床面の傾斜角度が採り得る値は、ある範囲内の値であり、その範囲は、一般に既知である。そして、ロボットを移動させようとする床面の傾斜角度は、一般的には、高々、10度程度である。
従って、初期値(n0(i),d0(i))に対応する平面πa(i)を、ロボットを移動させようとする床面の傾斜角度が採り得る値の範囲を逸脱するような角度で傾けるようにすれば、平面πa(i)を、事実上、常に実床面部分領域Ar(i)の平面に対して傾けることができる。例えば、平面πa(i)を水平面に対して45度傾けるようにすれば、平面πa(i)を、事実上、常に実床面部分領域Ar(i)の平面に対して傾けることができる。
このようなことから、本実施形態では、STEP502の判断結果が肯定的である場合に、初期値(n0(i),d0(i))に対応する平面πa(i)が、実床面部分領域Ar(i)の平面に対して傾斜することを初期値(n0(i),d0(i))が満たすべき制約条件とし、その制約条件を満たすように、平面πa(i)を水平面に対して所定角度θだけ傾けることとした。そして、その所定角度θの例として45度を採用した。
なお、θは、前記したように床面の傾斜角度が採り得る値の範囲を逸脱していればよいが、好ましくは、該範囲内の任意の傾斜角度との角度差の絶対値が、ある所定値以上となる傾斜角度であることが望ましい。本実施形態では、θ=45度としたので、実床面の傾斜角度が高々、10度であるとした場合、平面πa(i)の傾斜角度と実床面部分領域Ar(i)の平面の傾斜角度との差は、35度以上になる。但し、平面πa(i)の傾斜角度と実床面部分領域Ar(i)の平面の傾斜角度との差は、必ずしも、35度以上である必要はなく、例えば、20度以上であってもよい。
以上説明したSTEP5の処理を各実床面部分領域Ar(i)毎に実行することで、各実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))を効率よく短時間で推定することができる。
なお、本実施形態では、STEP502の判断結果が肯定的である場合にのみ、STEP505〜STEP510の処理により初期値(n0(i),d0(i))を設定する(πa(i)を設定する)ようにしたが、STEP502の判断結果が否定的となる場合にも、STEP505〜STEP510と同様の処理を実行して、初期値(n0(i),d0(i))を設定するようにしてもよい。換言すれば、STEP502〜STEP504の処理を省略してもよい。
図3の説明に戻って、制御装置33は次に、STEP6の処理を実行する。このSTEP6では、制御装置33は、各実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))の推定値にフィルタリング(1次遅れフィルタなど)を施し、ノイズ成分を除去する。これにより、形状パラメータ(n(i),d(i))の値がノイズなどの影響で過剰に変動するのを防止する。なお、以降の説明では、各実床面部分領域Ar(i)毎の形状パラメータ(n(i),d(i))は、このSTEP6のフィルタリング処理を施した推定値を意味するものとする。
次いで、制御装置33は、STEP7〜16の処理を実行し、今回フレームの処理を終了する。このSTEP7〜16の処理では、ロボット1の進行方向前方の実床面の斜面エッジ(斜面開始エッジまたは斜面終了エッジ)の特定などが行なわれる。
具体的には、まず、STEP7において、制御装置33は、各実床面部分領域Ar(i)(i=1,2,……,N)を、以下に説明する評価関数が最小となるように、手前側グループと奥側グループとの2つのグループに分類する。手前側グループは、ロボット1により近い側のグループを意味し、奥側グループは、手前側グループよりもロボット1から遠い側のグループを意味する。STEP7の処理は、別の言い方をすれば、STEP2で着地予定位置を決定した1歩目からN歩目までの中から、ある歩数目(K歩目)を以下に説明する評価関数が最小となるように決定し、実床面部分領域Ar(i)(i=1,2,……,N)を、1歩目からK歩目までの着地予定位置に対応する実床面部分領域Ar(1)〜Ar(K)からなる手前側グループと、K+1歩目からN歩目までの着地予定位置に対応する実床面部分領域Ar(K+1)〜Ar(N)からなる奥側グループとに分類する処理である。
その分類のために使用する評価関数として、本実施形態では、次式(2)により表される評価関数を使用する。
なお、式(2)中のmavfは、より正確には、1歩目からK歩目までの実床面部分領域の形状パラメータ(n(i),d(i))(i=1〜K)の法線ベクトルn(1)〜n(K)から、球面線形補間(slerp)によって求められる中心ベクトル(法線ベクトルn(1)〜n(K)の平均の向きを持つ単位ベクトル)を、平面距離d(1)〜d(K)の加重平均値により除算してなるベクトルである。同様に、mavbは、K歩目からN歩目までの実床面部分領域の形状パラメータ(n(i),d(i))(i=K〜N)の法線ベクトルn(K+1)〜n(N)から、球面線形補間(slerp)によって求められる中心ベクトル(法線ベクトルn(K+1)〜n(N)の平均の向きを持つ単位ベクトル)を、平面距離d(K+1)〜d(N)の加重平均値により除算してなるベクトルである。
この式(2)における右辺の第1項は、Ar(1)〜Ar(K)のそれぞれ形状パラメータの分散(ばらつき度合い)としての意味を持ち、右辺の第2項は、Ar(K+1)〜Ar(N)のそれぞれの形状パラメータの分散(ばらつき度合い)としての意味を持つ。そして、STEP7の処理では、この評価関数の値が最小になるようにKの値を定め、上記の如く実床面部分領域Ar(i)(i=1,2,……,N)を手前側グループと奥側グループとの2つのグループに分類する。このように、Ar(1)〜Ar(N)を手前側グループと、奥側グループとに分類することにより、それぞれのグループにおける形状パラメータの分散が最小になるように、換言すれば、それぞれのグループにおける形状パラメータの相互の近似度合いが最も高くなるように、Ar(1)〜Ar(N)が分類されることとなる。
このように実床面部分領域Ar(i)(i=1,2,……,N)を手前側グループと奥側グループとに分類したとき、例えば図5に示す状況では、式(2)の評価関数が最小となるKの値は、「5」となり、1歩目から5歩目までの実床面部分領域Ar(1)〜Ar(5)が手前側グループ、6歩目から7歩目までの実床面部分領域Ar(6),Ar(7)が奥側グループとして、実床面部分領域が分類されることとなる。また、例えば図7に示す状況では、5歩目の画像投影領域A(5)に対応する実床面部分領域Ar(5)内に斜面エッジ(斜面終了エッジ)が存在することから、式(2)の評価関数が最小となるKの値は、「4」または「5」となる。この場合には、5歩目の実床面部分領域Ar(5)は、手前側グループに属する場合と、奥側グループに属する場合とがある。ただし、1歩目から4歩目までの実床面部分領域Ar(1)〜Ar(4)が手前側グループに属し、6歩目から7歩目までの実床面部分領域Ar(6),Ar(7)は奥側グループに属する。
次いで、STEP8に進み、制御装置33は、上記の如く分類した各グループに属する実床面部分領域の形状パラメータの代表値を求め、その代表値から、手前側グループに対応する平面(以下、手前側代表平面という)と奥側グループに対応する平面(以下、奥側代表平面という)との角度差を算出する。なお、手前側代表平面は、Ar(1)〜Ar(K)のそれぞれを包含する平面を代表的に近似する平面としての意味を持ち、奥側代表平面は、Ar(K+1)〜Ar(N)のそれぞれを包含する平明を代表的に近似する平面としての意味を持つ。
具体的には、STEP8では、手前側グループに属するAr(1)〜Ar(K)のそれぞれの形状パラメータにおける法線ベクトルn(1)〜n(K)の中心ベクトルnavfと、平面距離d(1)〜d(K)の加重平均値davfとの組(navf,davf)が手前側グループの形状パラメータの代表値として求められる。なお、この場合、navf/davfは、式(2)におけるmavfと同じである。
同様に、奥側グループに属するAr(K+1)〜Ar(N)のそれぞれの形状パラメータにおける法線ベクトルn(K+1)〜n(N)の中心ベクトルnavbと、平面距離d(K+1)〜d(N)の加重平均値davbとの組(navb,davb)が奥側グループの形状パラメータの代表値として求められる。なお、この場合、navb/davbは、式(2)におけるmavbと同じである。
そして、制御装置33は、上記の如く求めた(navf,davf)、(navb,davb)によりそれぞれ規定される平面を手前側代表平面、奥側代表平面とし、これらの平面の角度差を算出する。
補足すると、STEP8で求める角度差は、手前側代表平面と奥側代表平面との相違の度合いを表す指標としての意味を持つ。その指標としては、両平面の角度差以外に、上記加重平均値davf,davbの差や、前記式(2)に関して説明したmavfとmavbとのベクトル空間における距離などを使用してもよい。
次いで、STEP9に進み、制御装置33は、STEP8で求めた角度差が所定の閾値以上であるか否かを判断する。この判断結果が肯定的である場合には、STEP10に進み、制御装置33は、手前側代表平面と奥側代表平面との交差箇所に斜面エッジが存在しているものとして、仮の斜面エッジを算出する。具体的には、制御装置33は、手前側代表平面を規定する形状パラメータの代表値(navf,davf)と、奥側代表平面を規定する形状パラメータの代表値(navb,davb)とから、それらの平面の交線を算出し、それを仮の斜面エッジとする。
なお、この仮の斜面エッジは、本発明における仮傾斜変化部に相当するものである。
次いで、STEP11に進み、制御装置33は、手前側代表平面と奥側代表平面とに関する形状パラメータの代表値と、斜面エッジとを再計算する。具体的には、制御装置33は、手前側グループに属する実床面部分領域Ar(1)〜Ar(K)から、仮の斜面エッジとの距離が所定距離よりも短い実床面部分領域(仮の斜面エッジに近接している実床面部分領域)を除いたものを改めて手前側グループとする。同様に、奥側グループに属するAr(K+1)〜Ar(N)から、仮の斜面エッジとの距離が所定距離よりも短い実床面部分領域を除いたものを改めて奥側グループとする。このようにするのは、仮の斜面エッジに近接している実床面部分領域は、実床面のうちの傾斜が異なる2つの平面に跨っている可能性があるからである。そして、このように改めて定めた手前側グループの各実床面部分領域の形状パラメータから、前記STEP8と同じ手法でそれらの形状パラメータの代表値(navf,davf)を求め、それを改めて、手前側代表平面の形状パラメータの代表値とする。同様に、改めて定めた奥側側グループの各実床面部分領域の形状パラメータから、前記STEP8と同じ手法でそれらの形状パラメータの代表値(navb,davb)を求め、それを改めて、奥側代表平面の形状パラメータの代表値とする。そして、制御装置33は、改めて求めた(navf,davf),(navb,davb)によりそれぞれ規定される手前側代表平面と奥側代表平面との交線を斜面エッジとして求める。
なお、このようにして求められる手前側代表平面と、奥側代表平面とは、推定床面としての意味を持つ。より詳しくは、ロボット1から見て、斜面エッジよりも手前側の推定床面が手前側代表平面により表され、斜面エッジよりも奥側の推定床面が奥側代表平面により表される。この場合、STEP8の処理で、仮の斜面エッジに近接した実床面部分領域を除外して、手前側代表平面と奥側代表平面とを規定する形状パラメータ(navf,davf),(navb,davb)を改めて求めるので、斜面エッジの手前側および奥側の推定床面の精度を高めることができると共に、該斜面エッジを精度よく特定することができる。
次いで、STEP12に進んで、制御装置33は斜面パラメータを更新する。この斜面パラメータは、ロボット1の進行経路に沿った推定床面の巨視的な形状を表すパラメータである。STEP12では、より具体的には、STEP11で求められた斜面エッジに応じて、ロボット1の現在位置における推定床面(ロボット1の現在の接地箇所の近辺の推定床面で平面状の床面。以下、現在接地推定床面という)の終了位置(ロボット1の進行方向前方の終了位置)を表す斜面パラメータが更新される。
また、ロボット1から見て、現在接地推定床面の終了位置より奥側の推定床面(現在接地推定床面と傾斜度合いが異なる床面)の開始位置およびその傾斜度合いを表す斜面パラメータが、STEP11で求められた奥側代表平面を規定する形状パラメータ(navb,davb)に応じて更新される。
一方、STEP9の判断結果が否定的である場合には、STEP13〜STEP16の処理が実行される。ここで、STEP9の判断結果が否定的となる状況は、主に、各実床面部分領域Ar(i)(i=1,2,……,N)が、ほぼ同一平面上に存在しているような状況である。ただし、ロボット1の進行方向前方の実床面の傾斜度合いが徐々に変化しているような場合には、STEP9に判断結果が否定的となるような場合もある。このような状況に対応するために、STEP9に判断結果が否定的である場合には、制御装置33は、以下に説明するような処理を実行する。
すなわち、まず、STEP13において、制御装置33は、各実床面部分領域Ar(i)(i=1,2,……,N)を所定の位置で手前側グループと奥側グループとに分類する。具体的には、制御装置33は、例えば、1歩目からあらかじめ定めた歩数目(Kx歩目。例えば3歩目)までの実床面部分領域Ar(1)〜Ar(Kx)を手前側グループ、Kx+1歩目からN歩目までの実床面部分領域Ar(Kx+1)〜Ar(N)を奥側グループとする。なお、歩数で分類する代わりに、例えば、ロボット1の進行方向で、該ロボット1の現在位置からの距離が所定距離以下となる画像投影領域A(1)〜A(Kx)に対応する実床面部分領域を手前側グループ、他の実床面部分領域Ar(Kx+1)〜Ar(N)を奥側グループとするようにしてもよい。
次いで、STEP14に進んで、制御装置33は、ロボット1の現在の動作制御のために使用している該ロボット1の現在の接地箇所の近辺の現状想定床面(以下、現在接地想定床面という)と、STEP13で決定された奥側グループに対応する平面(奥側代表平面)との角度差を算出する。具体的には、STEP14では、奥側グループに属するAr(Kx+1)〜Ar(N)のそれぞれの形状パラメータにおける法線ベクトルn(Kx+1)〜n(N)の中心ベクトルnavbと、平面距離d(Kx+1)〜d(N)の加重平均値davbとの組(navb,davb)により規定される平面を奥側代表平面として求める。そして、この奥側代表平面と、現在接地想定床面との角度差を算出する。
補足すると、STEP14で求める角度差は、現在接地想定床面と、奥側グループ代表平面との相違の度合いを表す指標としての意味を持つ。その指標はSTEP8の場合と同様に、角度差以外の指標を用いてもよい。
また、例えば本願出願人が特開2001−322076号公報に提案したように、ロボットの接地箇所の近辺の床面形状を、床反力の検出値などを基に推定するようにした場合には、その推定された床面形状により表される床面をSTEP14の処理で現在接地想定床面として用いるようにしてもよい。
次いで、STEP15に進んで、制御装置33は、STEP14で求めた角度差の絶対値が所定の閾値以上であるか否かをSTEP9と同様に判断する。
そして、この判断結果が否定的である場合には、奥側代表平面は、現在接地想定床面とほぼ同等の傾斜度合いを有し、該現在接地想定床面に連続した平面であると考えられる。そして、この場合には、制御装置33は、推定床面に関する斜面パラメータを更新することなく、今回フレームの処理を終了する。
また、STEP15の判断結果が肯定的である場合には、制御装置33は、奥側代表平面が現在接地想定床面に対して傾斜した平面であると見なし、斜面エッジを算出する。この場合、例えば、Kx歩目の着地予定位置における足平17の踵の位置と、Kx+1歩目の着地予定位置における足平17の踵の位置との中点を通ってロボット1の進行方向に直交する線を斜面エッジとする。
次いで、STEP12に進んで、推定床面に関する斜面パラメータを更新する。より具体的には、STEP16で求められた斜面エッジに応じて、現在接地推定床面の終了位置(ロボット1の進行方向前方の終了位置)を表す斜面パラメータが更新される。また、ロボット1から見て、現在接地推定床面の終了位置より奥側の推定床面(現在接地推定床面と傾斜度合いが異なる床面)の開始位置および傾斜度合いを表す斜面パラメータが、STEP14で求められた奥側代表平面を規定する形状パラメータ(navb,davb)に応じて更新される。この場合、奥側代表平面は、ロボット1から見て、斜面エッジよりも奥側の推定床面としての意味を持つ。
以上が本実施形態における床面形状推定処理の詳細である。
本実施形態では、ロボット1の動作制御に使用する現状想定床面は、上記のように決定される推定床面の斜面パラメータに応じて適宜更新される。この場合、本実施形態では、ロボット1の動作制御の安定性を高めるために、現在接地想定床面の傾斜度合いに関するパラメータは、現状に維持される。そして、現在接地想定床面よりも奥側(現在接地推定床面の終了位置よりも奥側)の現状想定床面については、該現状想定床面と推定床面との傾斜度合いの差が所定値以上(例えば1.5度以上)である場合に、当該奥側の現状想定床面の斜面エッジの位置や傾斜度合いに関するパラメータが、推定床面に合致するように更新される。なお、現在接地想定床面の傾斜度合いに関する斜面パラメータを、現状に維持することは必須ではなく、現在接地推定床面の傾斜度合いに合わせて更新するようにしてもよい。
以上説明した本実施形態のロボット1では、ロボット1の複数歩分の着地予定位置に対応する実床面部分領域Ar(i)毎に、カメラ27L,27Rの撮像画像を使用して、各実床面部分領域Ar(i)の形状パラメータ(n(i),d(i))を推定する。すなわち、カメラ27L,27Rの撮像画像内の実床面のうちの、ロボット1の移動動作に必要な部分領域に限定して、実床面の形状の推定が行なわれる。このため、カメラ27L,27Rの撮像画像による床面の形状を認識するための演算処理を軽減しつつ、ロボット1の適切な移動制御を行なうことができる。
なお、以上説明した実施形態では、2足歩行ロボット1を例に採って説明したが、3つ以上の脚体を有する脚式移動ロボットについても本発明を適用できることはもちろんである。
また、前記実施形態では、物体が、カメラを搭載したロボットを移動させる床である場合を例に採って説明したが、本発明の適用対象はこれに限られるものではない。例えば、カメラを搭載した車両が走行する道路を物体とし、その道路の路面形状を推定するような場合にも、本発明を適用することができる。