【文献】
田淵 信吾 Shingo TABUCHI,知的環境における自律走行型ロボットの動的障害物の回避走行支援 Robot's action support for moving obstacle avoidance in a smart space,第24回日本ロボット学会学術講演会予稿集CD−ROM 2006年 The 24th Annual Conference of the Robotics Society of Japan 第24回日本ロボット学会学術講演会予稿集,社団法人日本ロボット学会
【文献】
山本 健次郎 Kenjiro YAMAMOTO,人間共生ロボット“EMIEW”の衝突回避ナビゲーション Collision-Avoidance Navigation of a Human-Symbiotic Robot"EMIEW",第24回日本ロボット学会学術講演会予稿集CD−ROM 2006年 The 24th Annual Conference of the Robotics Society of Japan 第24回日本ロボット学会学術講演会予稿集,社団法人日本ロボット学会
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
以下、本発明の好ましい実施形態について、添付図面を参照して説明する。まず、
図1を参照して、本実施形態における移動体1の構成について説明する。
図1は、移動体1およびユーザ2の外観図である。移動体1は、ユーザ2の前方にて、ユーザ2に対し適切な位置に移動して、ユーザ2に追従できる装置として機能する。なお、移動体1の移動範囲である「ユーザ2の前方」とは、例えばユーザ2の前方であって、ユーザ2を中心とする180度の範囲である。或いは、ユーザ2の視界の範囲内としてもよい。
【0017】
図1に示すように、移動体1は、本体部11と、制御部12と、ユーザ認識センサ13と、周辺認識センサ14と、車輪15と、表示部16とを有して構成されている。本体部11は、略直方体状に形成され、本体部11内には制御部12が格納される。
【0018】
制御部12は、移動体1の各部を制御するための装置であり、ユーザ認識センサ13と、周辺認識センサ14とから取得した情報をもとに、移動体1の移動速度および移動方向を決定し、それに基づく移動指示を駆動部25(
図2参照)を介して、各車輪15に対して行うものである。
【0019】
ユーザ認識センサ13は、ユーザ2の画像を取得するカメラで構成され、本体部11の側面に設けられる。
図1における2点鎖線で描いた三角形のエリアが、ユーザ認識センサ13の検出範囲である。なお、ユーザ認識センサ13の上下位置は、必ずしも固定ではなく、例えば、表示部16と本体部11との間で変更可能に構成して、ユーザ2の身長によらず、ユーザ2全体の画像が適切に取得できるようにしてもよい。
【0020】
ユーザ認識センサ13は、ユーザ2の画像を取得すると、これを制御部12へ送信する。制御部12は、ユーザ認識センサ13で取得された画像を解析し、ユーザ2の位置とユーザ2が向いている方向とを算出する。このユーザ2の位置およびユーザ2が向いている方向は、移動体1の中心Cを原点(0,0)とした座標系で示す値とされる(以下「移動体座標系」と称す)。なお、ユーザ認識センサ13の水平方向の位置は、移動体1の中心Cからズレているので、制御部12は、その距離差を補正した上でユーザ2の位置を算出する。また、制御部12は、ユーザ認識センサ13で取得された画像を解析してユーザ2の両肩を検出し、その両肩間の距離、即ち肩幅を算出する。
【0021】
周辺認識センサ14は、移動体1の周辺画像を取得するものであり、複数のカメラで構成され(本実施形態では16個のカメラ)、本体部11の周囲に等間隔に設置される。制御部12は、周辺認識センサ14により取得された移動体1の周辺画像から、ユーザ2の進行経路up(
図4参照)上に存在する障害物を検出し、その位置を算出する。
【0022】
車輪15は、全方位への移動が可能な全方位車輪で構成され、移動体1の下部に設置される。これにより、移動体1は、全方位への移動をスムーズに行うことができる。車輪15は、駆動部25のモータ(図示せず)によって回転し、移動体1を移動させる。本実施形態では、3つの車輪15が設けられるが、車輪15の数は、必ずしも3つに限られず、適宜の数を採用できる。
【0023】
表示部16は、LCDなどのディスプレイを有し、ディスプレイへの表示によって情報をユーザ2に伝達する装置であり、移動体1の上部に設けられる。
図1に示す通り、表示部16のディスプレイは、ユーザ2に対向する面に設けられる。即ち、表示部16のディスプレイは、ユーザ認識センサ13と同方向に向けて配設される。また表示部16のディスプレイは、タッチパネルとして構成され、ユーザ2による操作を入力可能に構成される。表示部16は、HMI部26(
図2参照)を介して、ユーザ2からの指示を移動体1に入力し、また移動体1の状態や移動経路などをディスプレイに表示する。
【0024】
図2を参照して、移動体1の電気的構成について説明する。
図2は、移動体1の電気的構成を示すブロック図である。制御部12は、移動体1の各部を制御するための装置であり、
図2に示す通り、CPU20、ROM21及びRAM22を備え、これらがバスライン23を介して入出力ポート24にそれぞれ接続されている。また、入出力ポート24には、ユーザ認識センサ13、周辺認識センサ14、駆動部25、HMI部26がそれぞれ接続されている。
【0025】
CPU20は、バスライン23により接続された各部を制御する演算装置である。ROM21は、CPU20により実行される制御プログラム(例えば、
図3のメイン処理)や固定値データ等を格納した書き換え不能な不揮発性メモリである。
【0026】
RAM22は、CPU20が制御プログラム実行時に各種のワークデータやフラグ等を書き換え可能に記憶するためのメモリであり、ユーザ位置情報メモリ22aと、移動体位置情報メモリ22bと、障害物位置情報メモリ22cと、ユーザ幅メモリ22dと、ユーザ進行経路メモリ22eと、回避経路半径メモリ22fと、制御モードメモリ22gと、周辺環境情報メモリ22hとがそれぞれ設けられる。
【0027】
ユーザ位置情報メモリ22aは、移動体1の移動制御で用いられるユーザ2の位置を記憶するメモリであり、X座標メモリ22a1とY座標メモリ22a2と方向メモリ22a3とを有する。X座標メモリ22a1、Y座標メモリ22a2、方向メモリ22a3の座標系は、いずれも前述した移動体座標系である。制御部12の電源投入時には、X座標メモリ22a1、Y座標メモリ22a2、方向メモリ22a3の値は、それぞれ「0」クリアされる。
【0028】
ユーザ認識センサ13によってユーザ2の画像の取得が行われると、制御部12によってその画像が解析され、ユーザ2の位置およびユーザの向いている向きが算出される。X座標メモリ22a1にはユーザ2の位置のX座標が格納され、Y座標メモリ22a2にはユーザ2の位置のY座標が格納される。方向メモリ22a3には、ユーザ2が向いている方向(単位:ラジアン)が格納される。その後、X座標メモリ22a1、Y座標メモリ22a2及び方向メモリ22a3の各値は、必要に応じてユーザ2の位置を原点(0,0)とした座標系(以下「ユーザ座標系」と称す)に変換され(
図3のS10)、移動体1の移動制御に用いられる。
【0029】
移動体位置情報メモリ22bは、移動体1の移動制御で用いられる移動体1の位置を記憶するメモリであり、X座標メモリ22b1とY座標メモリ22b2とを有する。X座標メモリ22b1、Y座標メモリ22b2の座標系は、いずれも前述した移動体座標系である。制御部12の電源投入時には、X座標メモリ22b1、Y座標メモリ22b2の値は、それぞれ「0」クリアされる。また、後述する
図3のメイン処理の開始時(S1)に、X座標メモリ22b1とY座標メモリ22b2の値とに、それぞれ「0」が格納される。その後、X座標メモリ22b1及びY座標メモリ22b2の値は、必要に応じてユーザ2の位置を原点(0,0)としたユーザ座標系に変換され(
図3のS10)、移動体1の移動制御に用いられる。
【0030】
障害物位置情報メモリ22cは、ユーザ進行経路メモリ22eに記憶される4つの頂点で示される帯状の領域(進行経路up(
図4参照))に存在する、障害物の位置を記憶するメモリであり、X座標メモリ22c1とY座標メモリ22c2とを有する。X座標メモリ22c1、Y座標メモリ22c2の座標系は、いずれも前述した移動体座標系である。制御部12の電源投入時には、X座標メモリ22c1、Y座標メモリ22c2の値は、それぞれ「0」クリアされる。
【0031】
周辺認識センサ14により移動体1の周辺画像の取得が行われると、制御部12はその移動体1の周辺画像から、ユーザ進行経路メモリ22eに記憶される4つの頂点で示される帯状の領域(進行経路up)に存在する障害物の位置を算出する。障害物が複数検出された場合は、それら障害物の位置と、ユーザ位置情報メモリ22aの値との距離が最も小さな障害物を選択する。X座標メモリ22c1には、その障害物の位置のX座標が格納され、Y座標メモリ22c2には、その障害物の位置のY座標が格納される。
【0032】
本実施形態においては、障害物の検出を行う前にX座標メモリ22c1、Y座標メモリ22c2の値に、それぞれ「0」が設定される(メイン処理(
図3)のS2)。これにより障害物位置情報メモリ22cの各値は、移動体1の位置を記憶する移動体位置情報メモリ22bの各値と同じ値となる。よって、障害物の検出が行われた後に、X座標メモリ22c1、Y座標メモリ22c2の値が共に「0」である場合は、制御部12は、障害物が検出されていないと判断する。なお、X座標メモリ22c1及びY座標メモリ22c2の値は、その後、必要に応じてユーザ2の位置を原点(0,0)としたユーザ座標系に変換され(
図3のS10)、移動体1の移動制御に用いられる。
【0033】
ユーザ幅メモリ22dは、ユーザ2の肩幅を記憶するメモリである。制御部12の電源投入時には、ユーザ幅メモリ22dの値は「0」クリアされる。ユーザ認識センサ13によってユーザ2の画像が取得されると、制御部12によって、その画像が解析され、ユーザ2の両肩が検出される。そして、両肩間の長さが算出され、その値がユーザ幅メモリ22dに格納される。ユーザ幅メモリ22dの値は、ユーザ2の進行経路upや回避経路apの幅wpとして使用される(
図4参照)。
【0034】
ユーザ進行経路メモリ22eは、ユーザ2の進行経路upの帯状の領域を示す4つの頂点(Uplu,Upru,Upfl,Upfr)の座標(
図4参照)を記憶するメモリである。制御部12の電源投入時に、ユーザ進行経路メモリ22eの4つの頂点の座標には「0」が設定され、ユーザ2の進行経路upの領域が未だ算出されていないことを示す。ユーザ認識センサ13より、ユーザ2の位置がユーザ位置情報メモリ22aに格納され、ユーザ2の肩幅がユーザ幅メモリ22dに格納された後、制御部12によって、ユーザ位置情報メモリ22aの値とユーザ幅メモリ22dの値とから、ユーザ2の進行経路upの領域が算出される。その算出されたユーザ2の進行経路upの帯状の領域を示す4つの頂点の座標(Uplu,Upru,Upfl,Upfr)が、ユーザ進行経路メモリ22eに格納される。
【0035】
回避経路半径メモリ22fは、ユーザ2の進行経路up上に存在する、障害物を回避するための回避経路apの半径を記憶するメモリである。本実施形態では、回避経路apは円弧状の経路して算出される。制御部12の電源投入時には、回避経路半径メモリ22fの値は「0」クリアされる。障害物位置情報メモリ22cの値から、ユーザ2の進行経路up上に障害物が存在すると判断された場合、制御部12は、その障害物位置情報メモリ22cの値と、ユーザ位置情報メモリ22aの値と、ユーザ幅メモリ22dの値とから、円弧状の回避経路apを算出する。その円弧の半径が回避経路半径メモリ22fへ格納される。なお、回避経路apの半径は、回避経路apが右回転の円弧状の場合に正の値として記憶され、左回転の円弧状の場合に負の値として記憶される。
【0036】
制御モードメモリ22gは、移動体1の制御モードを記憶するためのメモリである。移動体1の制御モードには「前方追従モード」、「ターンモード」、「被補助モード」が設けられている。制御部12の電源投入時には、制御モードメモリ22gの値に「被補助モード」が設定される。
【0037】
「前方追従モード」は、移動体1がユーザ2の前方にて、ユーザ2に対して適切な位置に移動して、ユーザ2に追従するモードである。ユーザ2の進行経路up上に障害物が存在しない場合や、回避経路半径メモリ22fの値が第2所定値より大きい場合は、制御モードメモリ22gに「前方追従モード」が設定される。
【0038】
「ターンモード」は、移動体1とユーザ2との相対角度を保ったまま、移動体1をその場で回転移動させて、ユーザ2に追従させるモードである。回避経路半径メモリ22fの値が第2所定値以下で、かつ移動体位置情報メモリ22bの値と、障害物位置情報メモリ22cとの距離の値が第3所定値以上の場合、制御モードメモリ22gに「ターンモード」が設定される。
【0039】
「被補助モード」は、移動体1を停止させた後に、ユーザ2の手動操作などによって、移動体1を移動させるモードである。移動体位置情報メモリ22bの値と、障害物位置情報メモリ22cの値との距離が第3所定値未満である場合、即ち、移動体1と障害物とが余りに接近した状態である場合に、制御モードメモリ22gに「被補助モード」が設定される。
【0040】
なお、第2所定値および第3所定値としては、例えばいずれも1.0mを例示できる。かかる場合、回避経路apの半径(回避経路半径メモリ22fの値)が、1.0mより大きければ「前方追従モード」とされ、回避経路apの半径が1.0mであれば「ターンモード」とされ、更に回避経路apの半径が1.0m未満であれば「被補助モード」とされる。
【0041】
また、これら第2所定値、第3所定値の各値は、必ずしもこれに限られるものではなく、例えばユーザ2の肩幅(ユーザ幅メモリ22dの値)に応じて変化する値としても良い。具体的には、ユーザ2の肩幅に、ある程度のマージン(例えば40〜50cm)を加えたものを第2所定値とし、ユーザ2の肩幅に小さめのマージン(例えば20〜50cm)を加えたものを第3所定値とするようにしても良い。更に、第2所定値と第3所定値とは、「第2所定値≧第3所定値」の関係を維持していれば、本実施例のように同じ値であっても良いし、異なる値であっても良い。第2所定値と第3所定値とが異なる値で構成されれば、「ターンモード」へ移行する範囲が大きくなる。
【0042】
周辺環境情報メモリ22hは、周辺認識センサ14によって取得された、移動体1の周辺画像を記憶するメモリ領域である。制御部12の電源投入時には、周辺環境情報メモリ22hの全領域に「無効画像(具体的には「0」)」が設定される。周辺認識センサ14によって移動体1の周辺画像が取得されると、その周辺画像が周辺環境情報メモリ22hに記憶される。
【0043】
駆動部25は、移動体1を移動させるための装置であり、車輪15および車輪15の駆動源となるモータ(図示せず)などから構成される。制御部12から移動信号が駆動部25へ入力されると、入力された信号に基づいてモータが回転し、当該モータの回転が動力となって車輪15が駆動し、移動体1を動作させる。
【0044】
HMI部26は、ユーザ2へ情報を出力すると共に、ユーザ2による移動体1への指示を入力するためのインタフェイスである。前述した通り、ディスプレイとタッチパネルとを有した表示部16で構成される。HMI部26は、制御部12から入力された制御信号に応じて表示部16のディスプレイに情報を出力して表示する。一方、ユーザ2から表示部16のタッチパネルを経由してHMI部26に指示が入力されると、HMI部26は、当該入力に応じた制御信号を制御部12に出力する。移動体1が「被補助モード」にある場合に、ユーザ2はタッチパネルを介して移動体1を所望の位置に移動させる。
【0045】
なお、ディスプレイ及びタッチパネルと共に、或いはこれらに代えて、音声を出力するスピーカや音声を入力するマイクをHMI部26に設けるようにしてもよい。この場合には、ディスプレイへの表示と共に或いはディスプレイへの表示に代えて、スピーカから出力される音声によって移動体1の情報がユーザ2に出力され、またタッチパネルへの入力と共に或いはタッチパネルへの入力に代えて、ユーザ2が発する音声をマイクから入力することによって移動体1への指示を行うことができる。
【0046】
次に、
図3から
図7を参照して、制御部12のCPU20で実行される処理について説明する。
図3は、メイン処理のフローチャートである。メイン処理により、移動体1は、ユーザ2の進行経路upや、移動体1と障害物との距離、ユーザ2の回避経路apなどを算出し、それらに基づいて制御モードを設定する。制御モードが設定されると、移動体1は、その設定された制御モードに基づいて、移動体1の移動制御を行う。なお、メイン処理は100ms毎のインターバル割り込み処理により繰り返し実行される。
【0047】
メイン処理では、まず移動体位置情報メモリ22bのX座標メモリ22b1と、Y座標メモリ22b2とにそれぞれ「0」を設定し(S1)、障害物位置情報メモリ22cのX座標メモリ22c1と、Y座標メモリ22c2とにそれぞれ「0」を設定する(S2)。
【0048】
次に、ユーザ認識センサ13からユーザ2の位置を取得し、そのX座標をユーザ位置情報メモリ22aのX座標メモリ22a1に、Y座標をY座標メモリ22a2に、ユーザ2が向いている方向を方向メモリ22a3に、それぞれ保存する(S3)。具体的には、ユーザ認識センサ13から、ユーザ2を含む画像を取得する。制御部12は、その画像をエッジ抽出およびパターン認識によってユーザ2を認識し、その位置と、ユーザ2が向いている方向とを取得する。このように取得されたユーザ2の位置をユーザ位置情報メモリ22aのX座標メモリ22a1、Y座標メモリ22a2に、ユーザ2が向いている方向を方向メモリ22a3にそれぞれ保存する。
【0049】
次に、ユーザ認識センサ13からユーザ2の肩幅を取得し、ユーザ幅メモリ22dへ保存する(S4)。具体的には、ユーザ認識センサ13から、ユーザ2を含む画像を取得する。制御部12は、その画像をエッジ抽出およびパターン認識によって、ユーザ2の両肩を認識し、その両肩間の距離、即ちユーザ2の肩幅を算出する。算出された肩幅をユーザ幅メモリ22dへ保存する。なお、肩幅は、ユーザ位置情報メモリ22aの方向メモリ22a3の値に応じて、適宜補正した上で、ユーザ幅メモリ22dへ保存するようにしてもよい。
【0050】
その後、周辺認識センサ14から移動体1の周辺画像を取得し、周辺環境情報メモリ22hへ保存する(S5)。また、ユーザ位置情報メモリ22aの値とユーザ幅メモリ22dの値とから、ユーザ2の進行経路upを算出し、ユーザ進行経路メモリ22eへ保存する(S6)。
【0051】
ここで、
図4(a)を参照して、ユーザ2の進行経路upの算出およびユーザ進行経路メモリ22eへの値の保存(4座標の保存)について説明する。
図4(a)は、ユーザ2の進行経路upと回避経路apとを示す図である。
図4(a)において、ユーザ2の位置をPu(Xu,Yu)と表し、移動体1の位置をPm(Xm,Ym)と表す。
図4(a)は、移動体1と、ユーザ2とが、三方を壁に囲まれた領域を移動している状態である。
【0052】
進行経路upは、経路の始点が位置Puで、幅wp、長さlpの矩形の領域として算出される。進行経路upの幅wpは、ユーザ幅メモリ22dに記憶されるユーザ2の肩幅とされる。この幅は、位置Puを中心に左右それぞれwp/2ずつ設けられる。進行経路upの方向は、ユーザ2が向いている方向、即ちユーザ位置情報メモリ22aの方向メモリ22a3の値の方向とされる。更に、進行経路upの長さlpとしては第4所定値が設定される。
【0053】
なお、本実施形態において、第4所定値としては例えば2.0mを例示できる。しかし、必ずしもこれに限られるものではなく、第4所定値をユーザ2の歩行速度に応じて変化する値としても良い。具体的には、ユーザ2の歩行速度が速い場合には第4所定値を大きく、歩行速度が遅い場合には第4所定値を小さくしても良い。また、ユーザ2の歩行速度にある係数を乗じた値を第4所定値としても良い。更に、HMI部26を介して任意に設定した値を、第4所定値としてもよい。
【0054】
このように進行経路upは、位置Pu(ユーザ位置情報メモリ22aのX座標メモリ22a1、Y座標メモリ22a2の値)と、幅wp(ユーザ幅メモリ22dの値)と、ユーザ2が向いている方向(ユーザ位置情報メモリ22aの方向メモリ22a3)とによって算出される。これは、ユーザ2が、現在のユーザ2の向いている方向のまま移動した場合の、ユーザ2の進行経路upである。このように算出された、進行経路upの帯状の領域の4つの頂点(Uplu,Upru,Upfl,Upfr)の座標(4座標)が、ユーザ進行経路メモリ22eに保存される。
【0055】
図3に戻る。S6の処理後、ユーザ位置情報メモリ22aの値とユーザ進行経路メモリ22eの値と周辺環境情報メモリ22hの値とから、ユーザ2の進行経路up上に存在する、ユーザ2に最も近い障害物を検索し、その障害物の位置を障害物位置情報メモリ22cへ保存する(S7)。
【0056】
ここで、
図4(a)を参照して、障害物の位置の取得について説明する。
図4(a)においては、ユーザ2の進行方向に壁が存在する。この壁の一部は、ユーザ2の進行経路upの領域内に存在している。そのため、ユーザ2が、現在のユーザ2の向いている方向のまま歩行すると、やがてこの壁に衝突する。即ち、この壁がユーザ2の歩行に対する障害物となる。従って、この場合、進行経路upの領域内に含まれている、壁の面に存在する全ての座標が障害物の位置の候補となる。
【0057】
このように障害物の位置の候補が複数存在する場合は、障害物の位置とユーザ2の位置Puとの距離が最も小さいものが、障害物の位置とされる。即ち、現在のユーザ2の向いている方向のまま歩行して、最も早くユーザ2と接触する位置の座標が、障害物の位置とされる。
図4(a)においては、進行経路upの領域内に存在する壁の面のうち、右端の位置Po(Xo,Yo)が障害物の位置となる。この障害物の位置のX座標が障害物位置情報メモリ22cのX座標メモリ22c1に、Y座標が障害物位置情報メモリ22cのY座標メモリ22c2にそれぞれ保存される。
【0058】
一方、進行経路upの領域内に障害物が存在しない場合は、障害物位置情報メモリ22cのX座標メモリ22c1及びY座標メモリ22c2には座標が保存されないため、X座標メモリ22c1、Y座標メモリ22c2の値はそれぞれ、
図3のS2の処理で設定された「0」のままとなる。
【0059】
このように本実施形態では、ユーザ2の進行経路upの領域内でのみ、障害物の検索を行う。よって、ユーザ2の移動に対して、不要な領域への障害物の検索を行うことがないので、障害物検索の制御部12の処理負荷を小さくできる。
【0060】
図3に戻る。S7の処理後、障害物位置情報メモリ22cの値が有効かを確認する(S8)。本実施形態において、制御部12は、障害物位置情報メモリ22cのX座標メモリ22c1、Y座標メモリ22c2のいずれかの値が「0」以外である場合、即ち障害物の位置が取得された場合には、有効であると判断する。
【0061】
S8において、障害物位置情報メモリ22cの値が無効であると判断された場合(S8:No)、即ち障害物位置情報メモリ22cのX座標メモリ22c1、Y座標メモリ22c2の双方の値が「0」である場合には、ユーザ2の進行経路up上には何ら障害物が無いので、ユーザ2および移動体1の移動に支障はない。よって、かかる場合には、制御モードメモリ22gに「前方追従モード」を設定する(S9)。
【0062】
一方、障害物位置情報メモリ22cの値が有効と判断された場合は(S8:Yes)、ユーザ位置情報メモリ22a、移動体位置情報メモリ22b、障害物位置情報メモリ22c、ユーザ進行経路メモリ22eの各値をそれぞれユーザ座標系に変換する(S10)。ユーザ座標系は、前述した通り、ユーザ2の位置Pu(Xu,Yu)を原点(0,0)とした座標系である。ユーザ座標系に変換するのは、後のS12の処理で行うユーザ2の回避経路apの算出を、ユーザ2の位置を中心として行うためである。
【0063】
S10の処理後、移動体位置情報メモリ22bの値と、障害物位置情報メモリ22cの値との距離が、前述した第3所定値以上か確認する(S11)。かかる距離が第3所定値以上の場合は(S11:Yes)、ユーザ位置情報メモリ22aの値と、障害物位置情報メモリ22cの値と、ユーザ幅メモリ22dの値とから、円弧状のユーザ2の回避経路apを複数算出する。そして、算出された円弧の半径が最も大きな回避経路apの半径を、回避経路半径メモリ22fへ保存する(S12)。
【0064】
ここで、
図4を参照して、S12の処理における、ユーザ2の回避経路apの算出について説明する。
図4(a)の回避経路apは、ユーザ2が進行経路upに存在する障害物Poを回避して移動するための経路である。回避経路apは、経路の始点が位置Puで、幅wp、経路の中心部の円弧の長さがlp、円弧の中心が位置Oap、半径Rの円弧状に形成される。幅wpの大きさは、進行経路upと同じく、ユーザ幅メモリ22dの値、即ちユーザ2の肩幅である。この幅wpは、位置Puを中心に左右それぞれwp/2ずつ設けられる。また、長さlpの大きさも、進行経路upと同じく、前述の第4所定値とされる。制御部12は、回避経路apの半径Rを、障害物位置情報メモリ22cの値と、ユーザ位置情報メモリ22aの値と、ユーザ幅メモリ22dの値とから算出し、回避経路半径メモリ22fへ保存する。
【0065】
回避経路apの半径Rの算出方法について説明する。まず、回避経路apの円弧の中心位置Oapを、位置Puから経路の中心部の円弧の長さがlp、かつ幅がwpの回避経路apが作成できる位置まで、ユーザ座標系のX軸上を正の方向(
図4(a)では右方向)へ移動させ、その位置で回避経路apの領域を暫定的に作成する。
【0066】
暫定的に作成された回避経路apの中心部の円弧と、障害物の位置Poとの最短距離dpを算出する。算出された最短距離dpが、ユーザ幅メモリ22dの値の1/2以上、即ちユーザ2の肩幅の1/2以上である場合は、その暫定的な回避経路apは障害物から十分に離れているので、もっと障害物に近づけた回避経路apを作成できる。即ち、かかる場合には、もっと半径の大きな、もっと進行方向の変化が緩やかな回避経路apを作成できる。回避経路apの半径が大きいほど、ユーザ2の進行方向の変化を小さくできるので、ユーザ2の移動負担を軽減できる。よって、かかる場合には、円弧の中心位置Oapをユーザ座標系のX軸上に更に正方向に移動させた上で、再び回避経路apの領域を暫定的に作成する。
【0067】
再度、暫定的に作成された回避経路apの中心部の円弧と、障害物の位置Poとの最短距離dpを算出し、その最短距離dpがユーザ2の肩幅の1/2以上である場合は、更に円弧の中心位置Oapをユーザ座標系のX軸上に正方向に移動させる。以下、この処理を繰り返す。
【0068】
最短距離dpがユーザ2の肩幅の1/2となった場合は、それを正規の回避経路apとする。よって、その時点の円弧の中心位置Oapと位置Puとの距離を、回避経路apの半径Rとして、回避経路半径メモリ22fへ保存する。
図4(a)の回避経路apは、円弧の中心位置Oapがユーザ座標系のX軸上の正方向にあり、回避経路apが右回転の円弧状に形成されるので、その半径Rは、回避経路半径メモリ22fへ正の値として保存される。
【0069】
一方、再度、暫定的に作成された回避経路apの最短距離dpがユーザ2の肩幅の1/2以下となった場合は、一つ前の処理で求めた回避経路apを、正規の回避経路apとする。よって、その場合には、一つ前の処理で求めた円弧の中心位置Oapと位置Puとの距離を、半径Rとして、回避経路半径メモリ22fへ保存する。これにより、円弧状の回避経路apのうち、最も大きな半径の回避経路apを算出できる。
【0070】
図4(a)では、ユーザ2の右側の回避経路apを算出する例を挙げたが、ユーザ2の左側に対しても同様に回避経路apの半径Rを算出する。これについて、
図4(b)を参照して説明する。
図4(b)は、ユーザ2の進行経路upと左右の回避経路apl,aprとを示す図である。ユーザ2の前方の障害物の位置Poに対して、ユーザ2の右側の回避経路aprは、円弧の中心位置Oapr、半径Rrであり、回避経路aprの中心部の円弧と位置Poとの最短距離がdprである。同様に、ユーザ2の左側の回避経路aplは、円弧の中心位置Oapl、半径Rlであり、回避経路aplの中心部の円弧と位置Poとの最短距離がdplである。
【0071】
半径Rr,Rlの算出方法は、前述した通りであるが、右側の回避経路aprを再計算する場合には、円弧の中心位置Oaprをユーザ座標系のX軸上の正方向(
図4(b)の右方向)に移動していく。一方、左側の回避経路aplを再計算する場合には、円弧の中心位置Oaplをユーザ座標系のX軸上の負方向(
図4(b)の左方向)に移動していく。なお、左側の回避経路aplは、円弧の中心位置Oaplがユーザ座標系のX軸上の負方向にあり、左回転の円弧状に形成されるので、その半径Rlは、回避経路半径メモリ22fへ負の値として保存される。また半径Rrの算出処理と、半径Rlの算出処理とは、同時に行ってもよいし、どちらか一方を先に行い、他方を後に行ってもよい。
【0072】
最終的に算出された、半径Rrと、半径Rlとの大きさを比較し、大きい方を半径Rとし、回避経路半径メモリ22fへ保存する。即ち、算出され得る半径Rのうち、最も大きな半径が回避経路半径メモリ22fへ保存される。半径Rrと、半径Rlとの大きさが同じであった場合は、右側または左側の回避経路apのうち、どちらを選択するかを、制御部12にあらかじめ設定しておいてもよい。また、その回避経路apに至るまでの進行状況から、右側または左側の回避経路apのいずれかを選択するようにしても良い。
【0073】
このように回避経路apの算出に当たっては、回避経路apの円弧の中心位置Oapを、ユーザ2の位置Puから遠ざけながら、回避経路apの領域を暫定的に作成していく。よって、最終的に算出された、回避経路apにおける中心部の半径Rは、回避経路apの中で最も大きな半径となる。これにより、ユーザ2にとって移動方向の変化が最も緩やかな経路を回避経路apとできるので、その分、ユーザ2による障害物の回避動作に伴う動作負担を軽減できる。
【0074】
図3に戻る。S12の処理後、回避経路半径メモリ22fの値が第2所定値以下か確認する(S13)。回避経路半径メモリ22fの値が第2所定値以下の場合には(S13:Yes)、移動体1と障害物との距離が狭く「前方追従モード」を維持できないので、制御モードメモリ22gに「ターンモード」を設定する(S14)。一方、回避経路半径メモリ22fの値が第2所定値より大きい場合には(S13:No)、回避経路apを算出したものの、移動体1と障害物との間の距離は十分に確保されており、「前方追従モード」を維持できる。よって、かかる場合には制御モードメモリ22gに「前方追従モード」を設定する(S9)。
【0075】
また、S11の処理において、移動体位置情報メモリ22bの値と、障害物位置情報メモリ22cの値との距離が、第3所定値未満の場合は(S11:No)、移動体1と障害物との距離は極めて狭く、移動体1の追従移動(自律移動)を継続していては、移動体1が障害物やユーザ2に接触したり衝突しかねない。よって、かかる場合には、制御モードメモリ22gに「被補助モード」を設定して(S15)、移動体1の追従移動(自律移動)を停止する。S9、S14及びS15の処理後、制御モードメモリ22gの値に応じた移動体1に移動制御を行う(S16)。
【0076】
なお、S15の処理で、移動体1の制御モードとして「被補助モード」を設定する場合には、移動体1をその位置で停止させて「被補助モード」とするものの他、移動体1を障害物から十分に離れた位置まで移動させた後に停止させて「被補助モード」とするようにしても良い。なお、障害物から十分に離れた位置としては、移動体1と障害物との間をユーザ2が余裕をもって通過できる位置(距離)であり、ユーザ2の肩幅または胴体の厚さに若干のマージン(例えば50cm)を加えた距離を例示できる。
【0077】
次に、
図5から
図7を参照して、制御モードメモリ22gの値に応じた移動体1の移動制御について説明する。
図5(a)は、移動体1の制御モードが「前方追従モード」における、ユーザ2の回避経路apと移動体1の動きとを示す図であり、
図5(b)は、移動体1の制御モードが「ターンモード」における、ユーザ2の回避経路apと移動体1の動きとを示す図である。
【0078】
図5(a)において、回避経路apは、半径R1、中心位置Oap1の円弧で形成され、障害物の位置Poと移動体1との距離はdomである。ここで、距離domは前述した第3所定値以上で、半径R1は前述した第2所定値よりも大きい。即ち、移動体1と障害物との距離がユーザ2の通過に十分なだけ確保され(第3所定値以上)、回避経路apの半径が大きい(第2所定値以上)と判断される場合は(
図3中、S11:Yes、S13:No)、制御部12は制御モードメモリ22gに「前方追従モード」を設定する(
図3中、S9)。制御モードメモリ22gの値が「前方追従モード」の場合は、移動体1はユーザ2の前方にて、ユーザ2に対し適切な位置に移動して、ユーザ2の追従移動を行う(
図3中、S16)。
【0079】
勿論、ユーザ2の進行経路up上に障害物が存在しない場合、即ち、
図3のS8において障害物位置情報メモリ22cの値が有効でない場合も(
図3中、S8:No)、制御部12は制御モードメモリ22gに「前方追従モード」を設定し(
図3中、S9)、ユーザ2の前方において、ユーザ2の追従移動を行う。
【0080】
図5(b)において、回避経路apは、半径R2、中心位置Oap2の円弧で形成される。ここで、距離domは第3所定値以上で、半径R2は第2所定値以下である。即ち、移動体1と障害物との距離はユーザ2の通過に十分なだけ確保される一方、回避経路apの半径R2が小さいと判断される。よって、その場合は(
図3中、S11:Yes、S13:Yes)、制御部12は制御モードメモリ22gに「ターンモード」を設定する(
図3中、S14)。
【0081】
制御モードメモリ22gの値が「ターンモード」の場合は、移動体1は、その位置で回転移動を行う(
図3中、S16)。即ち、移動体の位置Pmと、円弧の中心位置Oap2とが同じ位置になる。これにより、制御モードが「ターンモード」に設定された移動体1は、ユーザ2の回避経路apの移動に伴って、その場で回転しつつ、ユーザ2に対する追従移動を行う。
【0082】
図6を参照して、移動体1の制御モードが「ターンモード」に設定された場合の、移動体1の回転移動について説明する。
図6(a)は、移動体1の制御モードが「ターンモード」に設定された直後における、移動体1とユーザ2との位置関係を示す図であり、
図6(b)は、移動体1の制御モードが「ターンモード」で、ユーザ2が移動体1の周囲を歩行している場合における、移動体1とユーザ2との位置関係を示す図である。制御モードが「ターンモード」の移動体1は、移動体1とユーザ2との相対角度を保つように、回転移動を行う。
図6(a)において、移動体1とユーザ2との相対角度は、θumである。ここで、θumは、前述のユーザ座標系で算出された値である。
【0083】
図6(b)において、位置Pu’は、
図6(a)の時点におけるユーザ2の位置であり、位置Puは、位置Pu’から移動したある時点のユーザ2の位置である。ユーザ2の位置Pu’から位置Puへの移動に合わせて、移動体1は回転移動を行う。その結果、位置Puとユーザ2との相対角度は、
図6(a)の時点と同じθumを維持する。つまり、制御モードが「ターンモード」に設定された場合、移動体1は、ユーザ2との相対角度θumを保ったまま、回転移動を行う。これにより、ユーザ2に対し移動体1の一部が常に対面するように回転移動することとなり、移動体1がX,Y座標に移動しなくても、ユーザ2は、移動体1が自身に対し追従移動していることを確認できる。
【0084】
次に、
図7を参照して、制御モードメモリ22gの値が「被補助モード」に設定された場合の移動体1の移動制御について説明する。
図7は、移動体1の制御モードが「被補助モード」における、移動体1とユーザ2との位置関係を示す図である。
【0085】
図7においては、移動体1と障害物との距離domは第3所定値未満である。即ち、移動体1と障害物との間隔が極めて狭く、ユーザ2がその間を通過できないと判断される。かかる場合は(
図3中、S11:No)、制御部12は制御モードメモリ22gに「被補助モード」を設定する(
図3中、S15)。すると、移動体1はユーザ2との追従移動(回転移動を含む)を停止し(
図3中、S16)、ユーザ2による手動操作を受け付ける状態となる。かかる状態において、ユーザ2からHMI部26を介して、移動体1の移動指示が行われると、移動体1はその指示に応じて動作(移動)する。移動体1が障害物と極めて近い位置にある場合などは、かかるユーザ2による手動操作によって、移動体1を周囲に障害物のない、ユーザ2に対する追従制御が可能な位置まで移動することにより、再度、移動体1の追従移動(自律移動)が可能となる。
【0086】
以上説明した通り、本実施形態の移動体1によれば、ユーザ認識センサ13により取得した、移動中のユーザ2の位置およびユーザ2が向いている方向から、ユーザ2の進行経路upを算出する。そして、周辺認識センサ14により取得した移動体1の周辺画像から、ユーザ2の進行経路up上に存在する障害物を検知した場合は、ユーザ2の位置を始点とした円弧状の、障害物を回避した回避経路apを算出する。回避経路apを円弧状に形成することにより、ユーザ2にとって自然で且つスムーズな移動経路となるので、回避経路apを進行するユーザ2の負担を軽減できる。また、回避経路apは円弧状に形成されるので、その円弧の中央部の半径を求めることで回避経路apを算出できる。よって、回避経路apを複雑な曲線や直線の組合せで構成する場合に比べ、容易に算出でき、制御部12の処理負荷を低くすることができる。
【0087】
回避経路apの中央部の円弧と、ユーザ2の進行経路up上の障害物との最短距離は、ユーザ2の肩幅の1/2以上とされる。これにより、ユーザ2が回避経路apを移動する際、ユーザ2は障害物に接触することがない。
【0088】
移動体と障害物との距離が、第3所定値未満の場合(即ちユーザ2の歩行スペースがない場合)は、移動体1によるユーザ2の追従移動を停止し、ユーザ2が移動体1の移動を指示する「被補助モード」に移行する。「被補助モード」において、ユーザ2が移動体1を障害物から離れた位置へ移動させることにより、移動体1と障害物との狭い間をユーザ2が移動する必要がなくなる。また「被補助モード」に移行することによって、移動体1による無理なユーザ追従を防止できる。よって、ユーザ2が移動体1や障害物に近づくことで起きうる、接触あるいは転倒を防ぐことができる。
【0089】
以上、実施形態に基づき本発明を説明したが、本発明は上述した実施形態に何ら限定されるものではなく、本発明の趣旨を逸脱しない範囲内で種々の改良変更が可能であることは容易に推察できるものである。
【0090】
本実施形態におけるユーザ2の幅は肩幅とした。しかし、必ずしもこれに限られるものではなく、例えば、ユーザ2の胴体の厚さや、そのほかの値を用いても良い。また、これを、どんなユーザ2に対しても適応される固定値(例えば120cm)としてもよい。固定値とした場合には、制御部12の制御負担を大幅に軽減できる。
【0091】
ユーザ2の進行経路upの帯状の領域を示す値(ユーザ進行経路メモリ22eに記憶される値)としては、帯状の領域の4つの頂点座標とした。しかし、必ずしもこれに限られるものではなく、例えば、ユーザ2の進行経路upの領域の境界線を表す関数のパラメータを格納してもよい。
【0092】
また移動体1と障害物との間隔が狭い場合に、必ずしも「被補助モード」や「ターンモード」とする必要は無く、かかる場合に、移動体1を障害物から十分に離れた位置まで移動させるように構成しても良い。なお、障害物から十分に離れた位置(距離)としては、移動体1と障害物との間をユーザ2が余裕をもって通過できる距離であり、ユーザ2の肩幅または胴体の厚さに若干のマージン(例えば50cm)を加えた距離を例示できる。