【実施例1】
【0015】
図1は、実施例に係る移動体の位置推定装置1の構成図である。位置推定装置1は、自動車またはロボットなどの移動体100に搭載されている。位置推定装置1は、一台以上の撮像装置12a、撮像装置12b、・・・撮像装置12nと、情報処理装置13を有する。撮像装置12a、撮像装置12b、・・・撮像装置12nは、例えばスチルカメラまたはビデオカメラである。また、撮像装置12a、撮像装置12b、・・・撮像装置12nは単眼カメラまたは複眼カメラでもよい。
【0016】
情報処理装置13は、撮像装置12a、撮像装置12b、・・・撮像装置12nで撮像された画像を処理して移動体100の位置または移動量を算出する。情報処理装置13は、算出された位置または移動量に応じた表示を行ってもよく、または移動体100の制御に関する信号を出力してもよい。
【0017】
情報処理装置13は、例えば一般的なコンピュータであって、撮像装置12a、撮像装置12b、・・・撮像装置12nによって撮像された画像を処理する画像処理部14と、画像処理部の結果に基づき制御を行う制御部15(CPU)と、メモリ16と、ディスプレイなどの表示部17と、これら構成要素を相互に接続するバス18とを有する。情報処理装置13は、画像処理部14及び制御部15が所定のコンピュータプログラムを実行することにより、以下の処理を行う。
【0018】
撮像装置12aは、例えば、移動体100の前方に設置されている。撮像装置12aのレンズは移動体100の前方に向けられている。撮像装置12aは、例えば、移動体100の前方の遠景を撮像する。他の撮像装置12b、・・・撮像装置12nは、撮像装置12aと異なる位置に設置され、撮像装置12aと異なる撮像方向または領域を撮像する。撮像装置12bは、例えば、移動体100の後方で下方に向けて設置されていてもよい。撮像装置12bは、移動体100後方の近景を撮像するものでよい。
【0019】
撮像装置12aが単眼カメラの場合、路面が平らであれば、画像上のピクセル位置と実際の地上位置関係(x、y)が一定になるため、撮像装置12aから特徴点までの距離を幾何学的に計算できる。撮像装置12aがステレオカメラの場合、画像上の特徴点までの距離をより正確に計測できる。以下の説明では、単眼の標準レンズを有するカメラを採用した事例について説明するが、これ以外のカメラ(広角レンズを有するカメラまたはステレオカメラなど)でもよい。また、撮像装置12a、撮像装置12b・・・撮像装置12nが、ある時刻で撮像する対象物は、それぞれ互いに異なるものでよい。例えば、撮像装置12aは、移動体100の前方の遠景を撮像するものでよい。この場合、遠景を撮像した画像からは、立体物、または位置推定のためのランドマークなどの特徴点が抽出されるようにしてもよい。撮像装置12bは、移動体100周辺の路面などの近景を撮像するようにしてもよい。この場合、近景を撮像した画像からは、移動体100の周囲の白線、または路面ペイントなどが検出されるようにしてもよい。
【0020】
また、撮像装置12a、撮像装置12b、・・・撮像装置12nは、同時に雨や日差しなどの環境外乱の影響を受けないような条件で移動体100に設置されてもよい。例えば、撮像装置12aは移動体100の前方で前向きに設置されるのに対して、撮像装置12bは移動体100の後方で後ろ向きまたは下向きに設置されてもよい。これにより、例えば、降雨時に撮像装置12aのレンズに雨滴が付着した場合でも、進行方向の逆向きまたは下向きの撮像装置12bのレンズには雨滴が付着しにくい。このため、撮像装置12aが撮像した画像が雨滴の影響で不鮮明であっても、撮像装置12bが撮像した画像は雨滴の影響を受けにくい。あるいは、日差しの影響で撮像装置12aの画像が不鮮明であっても、撮像装置12bが撮像した画像は鮮明である場合がある。
【0021】
また、撮像装置12a、撮像装置12b、・・・撮像装置12nは、互いに異なる撮像条件(絞り値、ホワイトバランス、等)で撮影してもよい。例えば、明るい場所用にパラメータを調整した撮像装置と、暗い場所用にパラメータを調整した撮像装置とを搭載することで、環境の明暗によらず撮像可能としてもよい。
【0022】
撮像装置12a、撮像装置12b、・・・撮像装置12nは、制御部15から撮影開始の指令を受けたとき、または一定の時間間隔で画像を撮像してもよい。撮像された画像のデータ及び撮像時刻は、メモリ16に格納される。なお、メモリ16は、情報処理装置13の主記憶装置(メインメモリ)およびストレージなどの補助記憶装置を含む。
【0023】
画像処理部14がメモリ16に格納された画像データ及び撮像時刻に基づいて、様々な画像処理を行う。この画像処理では、例えば、中間画像が作成されてメモリ16に保存される。中間画像は、画像処理部14による処理の他、制御部15などの判断や処理に利用されてもよい。
【0024】
バス18は、IEBUS(Inter Equipment Bus)やLIN(Local Interconnect Network)やCAN(Contロールer Area Network)などで構成できる。
【0025】
画像処理部14は、撮像装置12で撮像された画像に基づいて複数の移動体の位置候補を特定し、その複数の位置候補と移動体100の移動速度とに基づいて移動体100の位置を推定する。
【0026】
その他、画像処理部14は、例えば、移動体100の走行中に撮像装置12が撮像した画像を処理して、移動体100の位置を推定したり、撮像装置12が撮像したビデオ画像で移動体100の移動量を算出し、スタート地点に移動量を加算して現在位置を推定してもよい。
【0027】
画像処理部14は、ビデオ画像の各フレーム画像で特徴点を抽出してもよい。画像処理部14は、さらに、次以降のフレーム画像で同じ特徴点を抽出する。そして、画像処理部14は、特徴点のトラッキングにより移動体100の移動量を算出してもよい。
【0028】
制御部15は、画像処理部14の画像処理の結果に基づいて、移動体100に対して移動速度に関する指令を出力してもよい。例えば、制御部15は、画像内の立体物の画素数、画像内の特徴点のうちの外れ値の数または画像処理の種類等に応じて、移動体100の移動速度を増加させる指令、減少させる指令または維持させる指令を出力してもよい。
【0029】
図2は、画像処理部14が行う画像処理手順を示すフローチャートである。
【0030】
画像処理部14は、メモリ16から撮像装置12a、撮像装置12b、・・・撮像装置12nが撮像した画像データを取得する(S21)。ステップS21で取得する画像データは撮像装置12a、撮像装置12b、・・・撮像装置12nが撮像した画像のうち1枚のみ、または、複数の画像データでよい。また、スッテプS21は、撮像装置12a、撮像装置12b、・・・撮像装置12nがそれぞれ撮像した最新の画像のみならず、過去撮像した画像でもよい。
【0031】
次に、画像処理部14は、取得した各フレーム画像内の移動点を抽出する(S22)。移動点は、例えば、画像内のエッジやコーナーやピクセル強度の最大値や最小値などのような特徴点でよい。特徴点の抽出には、Canny、Sobel、FAST、Hessian、Gaussianなどの技術を用いればよい。具体的なアルゴリズムは、画像の特徴に応じて適宜選択される。また、移動点は、認識されたランドマークの代表点(ランドマークの中心、コーナーなど)でよい。ランドマーク認識と代表点抽出はDeep learning、template matchingなどの従来の画像認識技術を用いればよい。移動点の詳細は後述する。
【0032】
画像処理部14は、フレーム画像の時系列に従って、各フレーム画像でそれぞれ抽出された移動点をトラッキングする(S23)。トラッキングにはLucas−Kanade法やShi−Tomasi法やDirect Matching法などの技術を用いればよい。また、ステップS23のトラッキングは、直前や直後に取得したフレームの移動点に限らず、数フレーム間隔でもよい。具体的なアルゴリズムは、画像の移動点に応じて適宜選択される。
【0033】
次に、スッテプS23でそれぞれトラッキングした移動点を実世界上での移動量に換算する計算を実施する(S24)。ステップS23のトラッキングで得られた画像上でのピクセル位置とそれ以前の前フレームのピクセル位置の差分を算出し、その差分をメートル単位に変換する。
【0034】
スッテプS25では、撮像装置か搭載されている移動体の移動量を推定する。このステップでは、撮像装置12a、撮像装置12b、・・・撮像装置12nが今回撮像した画像と前回撮像した画像の間の移動体100の実際の移動量を推定する。移動体100の実際の移動量推定には、GPS情報、オドメトリ、画像オドメトリ、SLAM法などの技術を適応すればよい。また、過去の移動量に基づいて今回の移動量を推定する時系列フィルタを用いてもよい。また、前述のセンサ情報とフィルタを組み合わせて、移動体100の移動量も推定してもよい。最終的に、移動体100の前フレームと今回のフレームの間の移動量を推定できる手法であれば、どのセンサや組み合わせでもよい。スッテプS25を実施するタイミングは、ステップS24の直後でもよいが、スッテプS21からステップS24と平行に実施してもよい。ステップS26の処理が始まる前であれば、ステップS25をいつでも実施してもよい。
【0035】
ステップS26では、ステップS24で得られた移動点の移動量情報とステップS25で得られた移動体100の移動量情報を用いて、ステップS23でトラッキングした移動点の精度を推定する。ステップS26の詳細は後述する。
【0036】
ステップS26で推定した精度に基づいて、必要に応じて、撮像装置12a、撮像装置12b、・・・撮像装置12nのキャリブレーションを実施する(S27)。ステップS27の実施は任意であり、詳細は後述する。
【0037】
図3は、画像上での移動点を説明する図である。画像210は、撮像装置12a、撮像装置12b、・・・撮像装置12nによってスッテプS21で取得した画像である。(u、v)で示される座標211は、画像210における座標系である。道路212は、移動体100が走行中で画像210に写る道路である。
【0038】
移動体100が道路212を走行し、ある時に道路212の路面上のランドマーク213が画像210に写るとする。この時、ステップS22で移動点を抽出する場合、ランドマーク213から特徴点214を抽出したとする。なお、この特徴点は画像内のエッジやコーナーに限らず、ピクセル強度の最大値や最小値でもよい。また、ランドマークをマップとマッチングする場合、簡単のため、認識したランドマークを代表点(ランドマークの中心、コーナーなど)で表す場合があり、ランドマーク214の代表として代表点216として表す。ここで、画像210上でステップS22で抽出した特徴点214と特徴点215と代表点216は実世界での静止点であるが、移動体100に固定された撮像装置12a、撮像装置12b、・・・撮像装置12nに対して、特徴点214と特徴点215と代表点216が移動するため、特徴点214と特徴点215と代表点216を全て「移動点」と定義つける。
【0039】
図4から
図6を用いて撮像装置による検出した移動点の距離推定を説明する。
図4から
図6は撮像装置による移動点の距離推定を説明する図である。
【0040】
図4の設置角度α
N30aは移動体100が走行中の路面に対する撮像装置12a、撮像装置12b、・・・撮像装置12nの設置角度である。高さH
N31aは移動体100が走行中の路面に対する撮像装置12a、撮像装置12b、・・・撮像装置12nの設置高さである。簡単のため、撮像装置12a、撮像装置12b、・・・撮像装置12nを1台の撮像装置12を代表として説明する。座標32aは、移動体100に固定したメートル単位の座標であり、点33aは路面上の一点である。この時、画像34a上で点33aはステップS22で移動点として抽出され、ピクセル35aとして表される。この場合、撮像装置のキャリブレーションができているとし、設置角度α
N30aと設置高さH
N31aを用いて、点33aの実際の位置(メートル)と画像上での移動点35a(ピクセル)の関係が求められる。従って、撮像装置12の設置角度α
N30aと設置高さH
N31aが一定の場合、座標32a(メートル)と画像(ピクセル)の関係が一定であり、メートルからピクセルへ簡単に変換できる。また、撮像装置12の設置角度α
N30aと設置高さH
N31aが一定であれば、画像34aを俯瞰画像などに変換しても、変換パラメータが既知であれば、前述の座標32a(メートル)と画像(ピクセル)の関係が変わらない。
【0041】
一方、
図5は
図4の状態で撮像装置のキャリブレーションを実施した時と異なる場合を説明する。振動や乗車人数の違いで撮像装置12の設置角度α
N30aが設置角度α’
N30bとなり、高さH
N31aが高さH’
N31bとなったとする。この状態で点33aは、画像34b上で移動点35bとして抽出されるが、座標32aに基づいてキャリブレーションが行われたため、座標32aに対する仮想点33bへの距離が算出されてしまう。しかし、この場合は、座標32bに対する点33aへの距離が正確のため、座標32aに対する距離を算出する際誤差が生じる。簡単のため、移動体100のピッチ角が変換した場合を、
図5にて説明したが、移動体100のロール角やヨー角が変化した場合でも前述の原理は変わらない。
【0042】
図6は
図4と同じ設置角度α
N30a、高さH
N31a、座標32aと点33aを示す。撮像装置12でスッテプS21で取得する画像34cは、キャリブレーションを行っても歪みの修正ができなかった画像を表す。歪みの修正ができていない画像34cで点33aはピクセル35cとして写り、歪みの修正ができた画像34aのピクセル35aとは違う位置に写る。従って、歪みの修正ができていない画像34cで移動点33aを抽出しても、ピクセル35cからメートルに変換し、実際の位置を推定する場合、誤差が大きい。
【0043】
次に、
図7から
図9を用いて本実施例の原理を説明する。
図7から
図9は位置推定に関する原理を説明する図である。
【0044】
図7は、移動体100がキャリブレーションした時と同じ設置角度α
N30aと高さH
N31aで走行している状態である。撮像装置12a、撮像装置12b、・・・撮像装置12nの歪みの修正ができているとする。点40は、移動体100が走行中の路面上の特徴点である。簡単のため、撮像装置12a、撮像装置12b、・・・撮像装置12nを1台の撮像装置12と代表して、説明する。画像41aは撮像装置12の撮像した俯瞰画像であり、座標を(u’、v’)とする。原理の説明を簡単にするため、画像41aを俯瞰画像としたが、ピクセルとメートルの関係が既知であれば、どんな画像でもよい。ステップS22で各点40を移動点42aとして画像41a上で抽出する。移動体100が移動量D
N43を走行した後、抽出した各移動点42aをステップS23でトラッキングし、ステップS24で移動量を算出すると、俯瞰画像41a上での各移動量44aは全て一定である。また、俯瞰画像41a上でのそれぞれの移動量44aをピクセルからメートルに変換すると、それぞれの移動量は移動体100の移動量D
N43と同じ移動量となる。
【0045】
一方、
図8は、移動体100がキャリブレーションした時と異なる設置角度α’
N30bと高さH’
N31bで走行している状態である。撮像装置12の歪みの修正ができているとする。移動体100が移動量D
N43を走行した後、抽出した各移動点42bをステップS23でトラッキングし、ステップS24で移動量を算出すると、俯瞰画像41b上での各移動点42bの移動量44bは画像の位置によって異なり、撮像装置に近い点の移動量は画像装置から遠い点の移動量より大きくみえる。この状態の設置角度α’
N30bと高さH’
N31bで移動点40を写す時、平面45と間違えて画像41b上の移動量44bを算出するため、移動体100に近い移動点42bの移動量は大きく、移動体100から遠い移動点42bの移動量44bは小さく見える。従って、俯瞰画像41b上でのそれぞれの移動量44bをピクセルからメートルに変換すると、それぞれの移動量44bは移動体100の移動量D
N43とは異なった移動量となる。従って、スッテプS21とステップS22で抽出した移動点の移動量が一定でない場合、キャリブレーションができていなく、この状態で路面上の点へ距離を算出する場合、距離誤差が大きい。
【0046】
図9は、
図7と同じ設置角度α
N30a、高さH
N31a、点40、移動点42aと移動体100の移動量D
N43を表す。俯瞰画像41cの歪みの修正ができていないとする。この状態で移動体100が移動量D
N43を走行する場合、各移動点42aの俯瞰画像41c上での移動量は移動量44cとなる。歪みのため、移動点42aの俯瞰画像41cの領域によって、移動量44cが異なり、その領域内の移動点への距離を算出すると、距離誤差が大きい。
【0047】
図10を用いて本実施例での適用例を説明する。
図10は、適用例を説明する図である。走行環境50は、移動体100が走行する環境である。簡単のため、走行環境50を駐車場とする。地図情報51は、走行環境50の地図である。走行環境50は、走行環境の車線、駐車枠、標識などの静止ランドマークで構成し、それぞれの正確な位置情報を有する。地図情報51の座標系は、世界の絶対位置かある領域の相対位置を表してもよい。最終的に、移動体100の現在位置を正確に表示できれば、どんな座標でもよい。
【0048】
撮像範囲52は撮像装置12a、撮像装置12b、・・・撮像装置12nの撮像範囲である。簡単のため、撮像装置12a、撮像装置12b、・・・撮像装置12nを2台とし、移動体100の右側と左側に設置され、移動体100の右側と左側を向いているとする。この適用例では、上述の精度推定を用いて、2台の撮像装置で認識したランドマークの位置を地図情報51と比較しながら、移動体100の自己位置推定を行う。
【0049】
移動点53は、移動体100が走行環境50に入った時の点である。簡単のため、本適用例での移動点は全て駐車枠の角とする。移動体100が移動量54を走行した後の撮像装置で取得した画像を俯瞰画像55aと俯瞰画像55bとする。移動体100が移動量54を走行した後の画像55aと55b上での移動点53の移動量を移動量56aとする。ここで、移動量56aは、撮像装置を用いてステップS22で抽出した移動点と、その抽出した移動点をステップS23で追跡した際の移動点の移動量である。
【0050】
移動量56aは、スッテプS25で求めた移動体100の実際の移動量54と同じ移動量になったため、移動量56aの周りの画像上での領域が高精度(認識誤差が少ない)と判定する。従って、算出した移動点53の位置に基づいて、地図情報51から移動体100の自己位置を推定する場合、高精度に推定できる。
【0051】
移動点57bと移動点57cは、移動体100が開始位置を出た後の移動点である。移動体100が移動量d
N58を走行した後の撮像装置で取得した画像を俯瞰画像55cとする。移動体100が移動量d
N58を走行した後の画像55c上での移動点57bの移動量を移動量56bとし、移動点57cの移動量を移動量56cとする。ここで、移動量56b、56cは、撮像装置を用いてスッテプS22で移動点57bと移動点57cから移動点を抽出し、その抽出した移動点をスッテプS23で追跡した時の移動点の移動量である。撮像装置の設置高さと角度に基づいて、移動量56bをメートルに変換した時に、移動体100の移動量d
N58と同じ移動量になったとする。従って、移動体100が移動量d
N58を走行した時、移動量56bの画像55c上での周りの領域は高精度であるため、検知された移動点57bの精度が高いと判定し、検出された移動点57bの位置を地図情報51とマッチングし、位置推定を行う。一方、移動量56cは移動量d
N58と異なったため、移動量56cの周りの画像上での領域の精度が低いと判定するため、地図情報51とマッチングせず、撮像装置の数フレームをかけて、精度がよくなるまでスッテプS23で追跡する。精度の低い領域を高くする方法は、例えば、Kalman Filterのような時系列フィルタをかける。詳細は後述する。
【0052】
従って、算出した移動点57bと移動点57cの位置と判定した精度に基づいて、地図情報51から移動体100の自己位置を高精度に推定できる。
【0053】
前述判定した精度は、例えば、重みw
N、pにして位置推定に活用する。式(1)に示すように、移動体100の実際の移動量d
N58と移動点の移動量I
N、p(p=1、2、・・、移動点数)の差error
N、pとする。
1/w
N、p = error
N、p = |d
N − I
N、p| ・・・式(1)
また、式(1)の誤差をメートルでなく、式(2)に示すように、移動体100の移動量d
N58の割合で算出してもよい。
1/w
N、p = error
N、p = |d
N − I
N、p|/d
N×100 ・・・式(2)
式(1)と式(2)の重みを、例えば、Kalman Filterのような時系列フィルタのパラメータに代入してもよい。Kalman Filterを用いる場合、センサやシステムの誤差を偏差σ
Nとして設定する必要があり、式(3)に示すように、前述誤差error
N、pを偏差σ
Nに代入する。
【0054】
図10の場合、前述の偏差σ
Nを偏差59bと偏差59cで示す。移動量56bの重みは高いので、偏差59bが小さくなり、移動量56cの重みは低いため、偏差59cが大きくなる。
σ
N = error
N、p ・・・式(3)
また、撮像装置の設置高さと角度に基づいて、幾何学的にピクセルからメートルに変換するため、撮像装置からランドマークが遠ければ移動体100の振動などに影響されやすいため、誤差が大きくなる可能性が高い。従って、前述の誤差error
N、pを算出せず、距離・ピクセルの位置に対する偏差σ
Nを設定してもよい。例えば、撮像装置が撮像する俯瞰画像55aと俯瞰画像55bの幅(u’方向)をWとし、高さ(v’方向)をVとすると、(u’、v’)=(W/2、V)が移動体100に最も近いピクセル位置のため、誤差が最も小さい領域となる。一方、(u’、v’)=(0、0)か(u’、v’)=(W、0)が移動体100に最も遠いピクセル位置のため、誤差が最も大きい領域となる。従って、u’方向の最大偏差をσ
u、maxとすれば、ピクセルuに対する偏差σを式(4)から求められる。
σ
u = σ
u、max|W/2 − u’|/(W/2) ・・・式(4)
u方向と同じく、v’方向の最大偏差をσ
v、maxとすれば、ピクセルv’に対する偏差σ
vを式(5)から求められる。
σ
v = σ
v、max|V − v'|/(V) ・・・式(5)
σ
uとσ
vを組み合わせて、偏差σ
Nを例えば、式(6)から得られる。
σ
N = σ
u + σ
v ・・・式(6)
また、σ
uとσ
vを組み合わせて、偏差σ
Nを式(7)から算出してもよい。
σ
N = σ
uσ
v ・・・式(7)
また、σ
uとσ
vに重みm(1、2、・・・、m)をつけて、偏差σ
Nを式(8)から算出してもよい。
σ
N = (σ
um + σ
vm)
1/m ・・・式(8)
また、前述のerror
N、pを算出した場合、error
N、pをσ
uとσ
vを組み合わせて、偏差σ
Nを式(9)に示すように算出してもよい。
σ
N = error
N、p(σ
um + σ
vm)
1/m ・・・式(9)
偏差σNの算出は、d
NとI
N、pとerror
N、pとσ
uとσ
vとuとvの組み合わせであれば、式(1)から式(9)の何でもよい。また、前述のσ
u、maxとσ
v、maxの設定は、固定値か経験的に設定してもよい。また、σ
u、maxとσ
v、maxは、必ずしもσ
u、max=σ
v、maxでないため、それぞれ異なったパラメータを設定してもよい。
【0055】
撮像装置内に移動点が1点のみの場合(p=1)、移動体100の自己位置(X、Y)
Nと方位(θ)
Nを式(10)が示すように、移動点の位置(X、Y、θ)p=1に基づいて算出する。
(X、Y、θ)
N = w
N、p=1(X、Y、θ)
p=1 ・・・式(10)
また、撮像装置内に移動点が複数の場合、移動体100の自己位置(X、Y、θ)
Nを式(11)から求められる。
(X、Y、θ)
N = [w
N、1(X、Y、θ)1+...+w
N、p(X、Y、θ)p ]/(w
N、1+...+w
N、p) ・・・式(11)
移動体100の自己位置を推定する場合、前述の式(10)と式(11)以外、移動点の算出した位置(X、Y、θ)1、...、(X、Y、θ)pと重みw
N、1、...、w
N、pの組み合わせであれば、なんでもよい。
【0056】
また、本実施例では、移動点を駐車枠の角とし、問題なく画像処理技術を用いて撮像装置12で移動点の認識ができるとした。一方、実際の駐車所や道路では、歩行者や他車のような移動物が存在するため、駐車枠の角の認識が困難な場合がある。ただし、このような障害物は路面より高いため、ステップS21からステップS24で移動点の移動量を算出しても、移動量I
N、pが大きくなり、誤差error
N、pも大きくなる。従って、誤って障害物を移動点として認識しても、重みw
N、pが低くなるため、位置推定結果に影響しない。
【0057】
図11及び
図12を用いて、本実施例によるキャリブレーションの説明をする。
図11は、本実施例におけるキャリブレーションの説明図、
図12はキャリブレーションのフローチャートである。
【0058】
図11の画像60a、画像60b、・・・画像60Nは、スッテプS21で撮像装置12a、撮像装置12b、・・・撮像装置12nで時間t0、t1・・・tNに時系列に撮像した画像である。移動点61a、移動点61b、・・・移動点61Nは、ステップS22で画像60a、画像60b、・・・画像60Nから抽出した移動点である。移動量62a、移動量62b、・・・移動量62Nは、スッテプS23とスッテプS24で移動点61a、移動点61b、・・・移動点61Nの算出した移動量である。ここで、キャリブレーションできていないとし、移動量62a、移動量62b、・・・移動量62Nは必ずしも一定ではない。
【0059】
画像63はキャリブレーションS27を実施した後の画像である。移動量64は、スッテプS21からスッテプS24で算出したキャリブレーションスッテプS27を実施した後の画像63上での移動点の移動量である。画像63はキャリブレーションを実施した後の画像のため、スッテプS21からスッテプS24で算出した移動点の移動量64は一定である。
【0060】
図12のスッテプS65からスッテプS68はキャリブレーションS27の中の処理である。ステップS65は、ステップS21からステップS25で算出した情報を保存するステップである。画像60a、画像60b、・・・画像60N、移動点61a、移動点61b、・・・移動点61N、移動量62a、移動量62b、・・・移動量62N、移動体100の移動量などをメモリ16に保存する。
【0061】
ステップS66は、画像60a、画像60b、・・・画像60NとステップS23でトラッキングした移動点61a、移動点61b、・・・移動点61Nを画像変換するステップである。S66の画像変換は、例えば、アフィン変換や透視変換などであり、画像60a、画像60b、・・・画像60NとステップS23でトラッキングした移動点61a、移動点61b、・・・移動点61Nの回転と並進を変換する。ステップS66の詳細は後述する。
【0062】
ステップS67は、ステップS66で変換された画像60a、画像60b、・・・画像60NとステップS23でトラッキングした移動点61a、移動点61b、・・・移動点61Nから、移動点61a、移動点61b、・・・移動点61Nのそれぞれの新たな移動量I
N、p、i(i=1、...、キャリブレーション回数)を算出する。式(12)に示すように、改めて算出したI
N、p、iとステップS65で時系列に保存した移動体100の移動量d
0、・・・、d
Nの誤差E
N、p、iを算出する。
E
N、p、i = |d
N − I
N、p、i| ・・・式(12)
ステップS68は、ステップS67で算出した誤差E
N、p、iを予めに設定された閾値min
errorと比較するステップである。ステップS67で算出した誤差E
N、p、iがmin
errorより小さければステップS27が終了し、ステップS67で算出した誤差E
N、p、iがmin
errorより大きければステップS66に戻る。
【0063】
フレーム数Nは、少なくても2枚が必須であるが、Nの最大値は、例えば、ステップS21からステップS24で時系列に得られた移動点数によって設定してもよい。基本的に、移動点数が多ければキャリブレーション誤差が小さいが、処理負荷が大きい。従って、例えば、ステップS21からステップS24で時系列に得られた移動点数が予めに設定された閾値より大きくなれば、その時間までのステップS21からステップS24で時系列に得られたフレーム数と移動点を全て用いてキャリブレーションを行う。また、移動体100の走行速度によって前回行ったキャリブレーションパラメータとは違うパラメータになる可能性が高いため、Nを移動体100の速度に応じて設定してもよい。例えば、移動体100の速度が遅ければ、キャリブレーションパラメータが大きく変わらないため、Nを高く設定し、移動体100の速度が速ければ、キャリブレーションパラメータが大きく変わるためNを低く設定し、高い頻度でキャリブレーションを実施する。また、走行時間に基づいて、Nを設定してもよい。例えば、処理負荷に余裕があれば数msや数十msごとにキャリブレーションを実施し、処理負荷に余裕がなければ数百msや数秒ごとにキャリブレーションを実施する。
【0064】
図13を用いて、ステップS66の詳細を説明する。
図13は画像変換ステップの詳細を説明する図である。
【0065】
俯瞰画像70aは、撮像装置で撮像した画像で、俯瞰画像に変換されたものである。ステップS22で抽出した移動点を移動点71とし、ステップS21からステップS24で得られた移動点71のそれぞれの移動量は移動量72aとする。ステップS21からステップS24で移動点71の移動量72aが得られた時、撮像装置のキャリブレーションができていたとし、ステップS21からステップS24で得られた移動点71のそれぞれの移動量72aは一定となった。ステップS21からステップS24で算出した移動点71の移動量72aは全て一定のため、撮像装置のロール、ピッチ、ヨーはキャリブレーションした時と変わっていない。一方、ステップS21からステップS24で算出した移動点71の移動量72aは全て一定であっても、撮像装置の高さがキャリブレーションを行った時と異なる場合がある。ここで、撮像装置の高さが変わる場合、画像70aの移動量72aが全て変わるため、移動体100の実際の移動量と比較し、撮像装置の高さのキャリブレーションを行う。撮像装置の高さのキャリブレーションができている場合、移動量72aは全て移動体100の実際の移動量と同じになるため、式(1)のerror
N、pが0に近くなるまで撮像装置の高さを修正する。修正は、例えば、試行錯誤で新たな高さを設定し、error
N、pを改めて算出し、error
N、pが0に近くなるまで修正を繰り返す。また、移動量72aは移動体100の実際の移動量d
Nより大きくなった場合、撮像装置の実際の高さはキャリブレーションした時より低いという意味を持っているため、error
N、pが0に近くなるまで撮像装置の高さパラメータを低く設定する。ステップS25で推定する移動体の移動量は必ずしも正確でなく、ステップS23で移動点の追跡に誤差があるため、error
N、pが0にならないが、0に近くなれば画像の全体の領域のキャリブレーションができている。
【0066】
一方、俯瞰画像70bは、撮像装置のロール角がキャリブレーションを行った時と違うロール角となっている場合を示す。この場合、ステップS21からステップS24で得られた移動点71の移動量72bは俯瞰画像70bの領域によって異なる。例えば、俯瞰画像70bの左側の移動点71の移動量72bは俯瞰画像70bの右側の移動量72bより大きい。また、俯瞰画像70b中心の移動点71の移動量72bは俯瞰画像70aの移動量72aとは変わらない。従って、この移動量72bのパターンがある際、ロール角に誤りがあるという原因で、俯瞰画像70bの移動点71の移動量72bのerror
N、pが0になるまでロール角を修正する。
【0067】
俯瞰画像70cは、撮像装置のピッチ角がキャリブレーションを行った時と違うピッチ角となっている場合を示す。この場合、ステップS21からステップS24で得られた移動点71の移動量72cは俯瞰画像70cの領域によって異なる。例えば、俯瞰画像70cの上の移動点71の移動量72cは俯瞰画像70cの下の移動量72cより大きい。v=0に近ければ近いほど移動量72cが大きくなり、v=0から離れると移動量72cが小さくなる。従って、この移動量72cのパターンがある際、ピッチ角に誤りがある原因であり、俯瞰画像70cの移動点71の移動量72cのerror
N、pが0になるまでピッチ角を修正する。
【0068】
俯瞰画像70dは、撮像装置12のヨー角がキャリブレーションを行った時とは違うヨー角となっている場合を示す。この場合、ステップS21からステップS24で得られた移動点71の移動量72dは一定であるが、v’方向とは違う方向に移動する。従って、この移動量72cのパターンがある際、ヨー角に誤りがある原因で、俯瞰画像70dの移動点71の移動量72dのv’方向と同じ方向に移動するまでヨー角を修正する。
【0069】
俯瞰画像70eは、撮像装置12a、撮像装置12b、・・・撮像装置12nの歪みの修正ができていない場合を示す。この場合、ステップS21からステップS24で得られた移動点71の移動量72eの方向は一定でない。従って、俯瞰画像70eの移動点71の移動量72eの方向が一定になるまで歪みを修正する。
【0070】
以上、本発明によれば、走行中やキャリブレーション実施時の誤差があっても、移動体の位置推定精度を改善することができる。
【0071】
なお、本発明は上記した実施例に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施例は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施例の構成の一部を他の実施例の構成に置き換えることが可能であり、また、ある実施例の構成に他の実施例の構成を加えることも可能である。また、各実施例の構成の一部について、他の構成の追加・削除・置換をすることが可能である。また、上記の各構成、機能、処理部、処理手段等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。