以下、発明の実施の形態を通じて本発明を説明するが、特許請求の範囲に係る発明を以下の実施形態に限定するものではない。また、実施形態で説明する構成の全てが課題を解決するための手段として必須であるとは限らない。
図1は、本実施形態にかかる移動ロボット100の外観斜視図である。移動ロボット100は、主な構造体として、移動機構が取り付けられた台車ベース110と、センサ類が取り付けられた上体ベース120と、搬送物等を把持するためのアーム部150とを備える。
台車ベース110は、移動機構として2つの駆動輪112と1つのキャスター113を備える。2つの駆動輪112は、台車ベース110の対向する側方のそれぞれに、回転軸芯が一致するように配設されている。それぞれの駆動輪112は、不図示のモータによって独立して回転駆動される。キャスター113は、従動輪であり、台車ベース110から鉛直方向に延びる旋回軸が車輪の回転軸から離れて車輪を軸支するように設けられており、台車ベース110の移動方向に倣うように追従する。移動ロボット100は、例えば、2つの駆動輪112が同じ方向に同じ回転速度で回転されれば直進し、逆方向に同じ回転速度で回転されれば重心を通る鉛直軸周りに旋回する。
台車ベース110には、コントロールユニット190が設けられている。コントロールユニット190は、後述の制御部とメモリ等を含む。
上体ベース120は、台車ベース110に対して鉛直軸周りに旋回可能なように、台車ベース110に支持されている。上体ベース120は、不図示のモータによって旋回され、台車ベース110の進行方向に対して所定の方向を向くことができる。
上体ベース120には、障害物検知や周辺環境認識のための各種センサが設けられている。3Dライダー130は、そのセンサ類の一つであり、上体ベース120の前方に配置されている。3Dライダー130は、周辺に存在する物体までの距離を計測する障害物検出センサである。具体的には、3Dライダー130は、例えばマイクロミラーを駆動して上体ベース120の前方方向に水平120度、垂直60度の範囲でレーザー光を走査する。そして、走査した投射光に対する反射光を検出することにより、反射点までの距離を算出する。
また、距離画像センサ140も、上体ベース120の前方に配置されている。距離画像センサ140と3Dライダー130が一つの筐体に収められ、筐体ごと上体ベース120の前方に配置されていても良い。距離画像センサ140は、例えばアーム部150のハンドが搬送物を把持する場合に、搬送物の距離、形状、方向等を認識するために用いられる。距離画像センサ140は、対象空間から入射する光学像を光電変換するピクセルが二次元状に配列された撮像素子を含む。距離画像センサ140は、ピクセルごとに被写体までの距離を出力する。具体的には、距離画像センサ140は、パターン光を対象空間に照射する照射ユニットを含み、その反射光を撮像素子で受光して、画像におけるパターンの歪みや大きさから各ピクセルが捉えた被写体までの距離を出力する。
なお、対象空間を撮像して、ピクセルごとに被写体までの距離を出力する距離センサであれば、距離画像センサ140として採用し得る。例えば、対象空間に向けて均一光を照射し、反射光を撮像素子で受光して、その位相差から各ピクセルが捉えた被写体までの距離を出力する距離センサであっても構わない。ただし、本実施形態で対象とする距離画像センサは、後述する較正を行うことにより、精度の高い距離情報を取得できるものとする。
アーム部150は、主に、複数のアームとハンドから構成される。アームの一端は、上体ベース120に軸支されている。アームの他端は、ハンドを軸支している。アーム部150は、不図示のアクチュエータによって駆動されると、搬送物を把持するなど、与えられたタスクに応じた把持動作を実行する。
図2は、移動ロボット100の制御ブロック図である。制御部200は、例えばCPUであり、駆動輪ユニット210、アームユニット220、旋回ユニット230、メモリ240、3Dライダー130、距離画像センサ140等との間で指令やサンプリングデータ等の情報を授受することにより、移動ロボット100の制御に関わる様々な演算を実行する。
駆動輪ユニット210は、台車ベース110に設けられており、駆動輪112を駆動するための駆動回路とモータ、モータの回転量を検出するエンコーダ等を含む。駆動輪ユニット210は、自律移動するための移動機構として機能する。制御部200は、駆動輪ユニット210へ駆動信号を送ることにより、モータの回転制御を実行する。また、エンコーダの検出信号を受け取ることにより、移動ロボット100の移動速度、移動距離、旋回角等を演算する。
アームユニット220は、アーム部150に設けられており、アームおよびハンドを駆動するための駆動回路とアクチュエータ、アクチュエータの動作量を検出するエンコーダ等を含む。制御部200は、アームユニット220へ駆動信号を送ることにより、アクチュエータを動作させ、アーム部150の姿勢制御や把持制御を実行する。また、エンコーダの検出信号を受け取ることにより、アーム部150の稼働速度、稼働距離、姿勢等を演算する。
旋回ユニット230は、台車ベース110と上体ベース120に跨いで設けられており、上体ベース120を旋回させるための駆動回路とモータ、モータの回転量を検出するエンコーダ等を含む。制御部200は、旋回ユニット230へ駆動信号を送ることにより、モータを動作させ、例えば3Dライダー130と距離画像センサ140を特定の方向へ向けることができる。
メモリ240は、不揮発性の記憶媒体であり、例えばソリッドステートドライブが用いられる。メモリ240は、移動ロボット100を制御するための制御プログラム、制御に用いられる様々なパラメータ値、関数、ルックアップテーブル等を記憶している。特に、距離画像センサ140に対して後述する較正データ241を記憶している。
3Dライダー130は、制御部200から制御信号を受け取ると、マイクロミラーを駆動してレーザー光を走査し、反射光を連続的に検出してそれぞれの反射点までの距離を算出して制御部200に返す。また、距離画像センサ140は、制御部200から制御信号を受け取ると、照射ユニットからパターン光を照射し、撮像素子を駆動して画像データを取得し、画像データの画像からパターンの歪みや大きさを解析して各ピクセルに対応する距離情報を制御部に返す。
制御部200は、制御に関わる様々な演算や制御を実行する機能実行部としての役割も担う。較正部201は、後に詳述するように、3Dライダー130を利用して、距離画像センサ140の較正を行い、較正データ241を作成する制御プログラムを実行する。移動計画部202は、メモリ240に記憶されている地図情報やセンサ出力から得られる障害物情報等を用いて、移動ロボット100が移動する経路を計画する。
図3は、一定距離の平面に対する距離画像センサ140の出力特性を示す図である。左側の矩形は、距離センサ115が有する撮像素子の有効領域を示す。有効領域には、上述のように、光電変換部としてのピクセルがマトリックス状に配列されている。このうち、上方に位置する横一列のラインをaライン、中央に位置する横一列のラインをbライン、下方に位置する横一列のラインをcラインと称して、有効領域の代表ラインとして説明する。また、各ラインにおいて、それぞれ左側、中央、右側の代表位置をL,C、Rとする。
図3の右側の表は、撮像素子がターゲットする平面に0.5mの距離で正対した場合、1.0mの距離で正対した場合、1.5mの距離で正対した場合、2.0mの距離で正対した場合における、aライン、bライン、cラインの出力を示す。なお、ここで撮像素子が平面と正対するとは、撮像素子の有効領域の全体で平面を捉えており、かつ当該平面が撮像素子の受光面と平行であることをいう。
図3の右側の表における各グラフは、横軸に各ラインにおけるピクセルの横方向の相対位置を表し、縦軸にそれぞれのピクセルから出力された出力距離(m)を表す。例えば、撮像素子がターゲットである平面に対して0.5mの距離で正対した場合のaラインの出力を見ると、位置Lおよび位置Rでは、ほぼ正しい0.5mを出力しているものの、位置Cでは0.5より小さな距離を出力している。aライン全体の出力として見ると、点線で示す0.5mのラインに対して、中央位置である位置Cを底とする下凸の湾曲ライン(太い実線)を呈している。また、撮像素子がターゲットである平面に対して2.0mの距離で正対した場合のbラインの出力を見ると、位置Lと位置Cの中間付近および位置Cと位置Rの中間付近に存在するピクセルがそれぞれほぼ正しい2.0mを出力しているものの、他のピクセルは全体的に2.0mよりも大きな距離を出力している。
すなわち、距離画像センサ140の出力は、ピクセルごとに、かつ、同一のピクセルであっても検出対象までの距離ごとに、それぞれ異なるオフセット値を含む。したがって、距離画像センサ140の出力からより正確な距離情報を取得するためには、距離画像センサ140の較正を行う必要がある。具体的には、制御部200の機能実行部である較正部201が、ピクセルごとに出力値を較正するための較正データ241を作成する。
図3の表に示すように、ターゲットとする平面までの距離が事前に把握できているのであれば、それぞれのピクセルが出力する距離を正しい距離に換算する換算式あるいは換算テーブルを作成すれば良い。例えば、撮像素子が0.5mの平面と正対する場合にaライン位置Cのピクセルが0.4mと出力するのであれば、このピクセルの較正データとして、0.4mを出力した場合は5/4倍するという換算式を作成することができる。
図3の例では、3つのラインを代表として示したが、有効領域の全ラインで較正データを作成しても良いし、一定間隔のラインごとに較正データを作成し、間引かれたラインでは作成された較正データを補間して利用するようにしても良い。また、較正データを作成する各ラインにおいても、全ピクセルで較正データを作成しても良いし、一定間隔のピクセルごとに較正データを作成し、間引かれたピクセルでは作成された較正データを補間して利用するようにしても良い。
図3の例では、ターゲットとしてそれぞれ0.5m、1.0m、1.5m、2.0mの平面を撮像した例を示したが、もちろんこの範囲および間隔に限らない。距離画像センサ140の利用目的に応じて範囲を変更しても良いし、要求される精度に応じて、例えば10mmといった細かい間隔であっても良い。
また、較正を行うときに撮像する平面は、撮像素子に正対する平面でなくても構わない。図4は、撮像素子に対して傾いた平面を撮像したときの距離画像センサ140の出力特性の例である。具体的には、撮像素子のあるラインにおいて平面までの距離が、位置Lのピクセルからは0.4m、位置Cのピクセルからは0.6m、位置Rのピクセルからは0.8mであることがわかっている。このような平面を撮像して得られた出力(太い実線)を、ピクセルごとに正しい距離(点線)に一致させる換算式あるいは換算テーブルを作成すれば良い。すなわち、撮像素子が撮像する対象平面の向きと、当該対象平面に含まれる少なくとも一点までの距離が事前に正しく取得されているのであれば、各ピクセルからの対象平面までの距離は計算できるので、各ピクセルの較正データを作成することができる。
図5は、ある特定のピクセルの較正データの一例を示す図である。横軸は対象ピクセルの出力距離を表し、縦軸は較正距離を表す。
対象ピクセルにおいて、図3の例のように正しい距離がそれぞれ0.5m、1.0m、1.5m、2.0mの平面に対して出力距離d1m、d2m、d3m、d4mを得た場合には、黒点で表されるプロットデータを得る。これらのプロットデータを多項式関数を用いて滑らかに接続すると太線で示すような曲線が得られる。すなわち、曲線を表す多項式関数が較正データとしての変換式となる。なお、あてはめ関数は多項式関数でなく他の関数であっても良い。また、各プロットデータが必ずしもあてはめ関数上の値でなくても構わない。なお、較正データを変換式ではなく変換テーブルとして作成する場合には、例えば、対応する出力距離と較正距離の組を数値で表すルックアップテーブルを採用することができる。
次に、本実施形態における距離画像センサ140の較正を行う手順について説明する。図6は、距離画像センサ140の較正の様子を示す図である。ここでは、移動ロボット100が自律移動する環境空間内に、壁面Wが存在する場合を想定している。
制御部200は、3Dライダー130が壁面Wを走査して得た計測結果から、壁面Wが平面であること、その大きさ、およびその向きを認識する。そして、距離画像センサ140の撮像素子で壁面Wを撮像したときに、撮像素子の有効領域の全体が壁面Wを捉えることができるか否かを判断する。すなわち、撮像素子の有効領域内に、壁面W以外の対象物が写り込まないかを判断する。写り込まないと判断できたら、壁面Wを用いた較正作業を開始する。
3Dライダー130と距離画像センサ140は、互いに相対的な位置および姿勢が厳密に定められて上体ベース120に配置されている。したがって、制御部200は、3Dライダー130がある対象物を計測して得た距離を、配置による幾何条件を用いて、距離画像センサ140から当該対象物までの距離に変換することができる。すなわち、3Dライダー130により壁面Wまでの距離が計測されれば、距離画像センサ140の計測結果として得られるべき距離、別言すれば較正された距離を算出することができる。
上述のように壁面Wと撮像素子の受光面が平行でなくても較正作業を行うことはできるが、演算の高速化を図るべく、ここでは3Dライダー130の出力から得られた壁面Wの向きを参照して上体ベース120を旋回させ、壁面Wと撮像素子の受光面を正対させる。そして、駆動輪112を駆動して壁面に対して垂直に近づきつつ、3Dライダー130の出力を用いて距離画像センサ140と壁面Wとの正確な距離を算出し、一定の距離ごとに撮像を実行する。
このように壁面Wまでの距離を変えて、その正確な距離とそのときの各ピクセルの出力距離とを繰り返し取得すれば、対象とするピクセルごとに図5を用いて説明したような較正データ241を作成することができる。完成した較正データ241は、メモリ240に記憶される。メモリ240に記憶された較正データ241は、距離画像センサ140の使用時において参照され、距離画像センサ140から出力された距離がより正確な値に変換される。
以上のように、移動ロボット100の移動機構を利用して距離画像センサ140の較正を行えば、距離画像センサ140を移動ロボット100から取り外す手間が省くことができる。また、校正作業を適当な頻度で繰り返すことも容易であり、オフセットの経時変化に対応して較正データを適切に更新することができる。すなわち、本実施形態によれば、移動ロボット100は、距離画像センサ140の出力を用いて、対象物までの距離や方向を、定常的に精度良く検出することができる。
以上においては、移動ロボット100が他のタスクを行うことなく較正作業のみを行う例を説明したが、他のタスクの実行中に断続的に較正作業を行って較正データを完成させるようにしても良い。図7は、他のタスクの実行中に較正に係る処理を実行する場合の処理フローを説明するフロー図である。図のフローは、移動ロボット100が他のタスクの実行中に並行して実行する、較正作業に関する主な処理を記したものである。
制御部200は、ステップS101において、移動計画部202が計画した経路に沿って移動するように、駆動輪ユニット210へ制御信号を送る。制御部200は、移動中に周囲を走査しながら継続的に距離計測を実行する3Dライダー130の出力を取得する(ステップS102)。
制御部200は、3Dライダー130の出力から周囲に所定の広さを有する平面がないかを確認する(ステップS103)。ここで、所定の広さとは、距離画像センサ140の撮像素子の有効領域に当該平面以外の対象物が写り込まない広さである。したがって、当該平面の広さは、撮像素子から平面までの距離や結像光学系の画角などにも依存する。制御部200は、そのような平面を見つけることができなければ、ステップS101へ戻る。見つけることができれば、ステップS104へ進む。
制御部200の較正部201は、ステップS104で、距離画像センサ140から当該平面までの距離に対応する較正データが取得済みであるか否かを確認する。取得済みであればステップS101へ戻る。まだ取得していなければ、ステップS105へ進む。
較正部201は、ステップS105で、距離画像センサ140に当該平面の画像データを取得させる。そしてステップS106で、撮像素子の各ピクセルから出力された距離を正しい距離に変換するための較正値を演算する。続いてステップS107へ進み、予め定められた距離の範囲および間隔で較正値の取得が完了したか否かを判断する。すなわち、較正データが完成したか否かを判断する。完成していなければステップS101へ戻り、完成していれば一連の較正作業を終了して、タスクの実行に専念する。なお、ステップS106における較正値の演算は、予め定められた距離の範囲および間隔の全てで各ピクセルの出力値を取得した後にまとめて実行しても良い。
以上説明した本実施形態においては、対象空間に含まれる平面の向きと平面の少なくとも一点までの距離を検出できる平面検出センサとして3Dライダー130を採用したが、他のセンサを平面検出センサとして採用しても良い。例えば、カラー画像を撮像するための撮像素子を2つ備えたステレオカメラユニットであっても良い。また、平面側に特定の二次元コードが貼着されているなどすれば、当該二次元コードを撮像してその大きさや傾きから平面までの距離や向きを検出できるコードリーダの類であっても良い。