(57)【特許請求の範囲】
【請求項１】
車輪の回転に伴い移動する車両に搭載され、当該車両の現在位置を算出する現在位置算出装置であって、
道路地図を表す地図データを記憶する手段と、
車両の進行方位を検出する手段と、
車輪の回転速度を検出する手段と、
検出された車輪の回転速度と、設定された距離係数に応じて車両の走行距離を算出する走行距離算出手段と、
検出された車両の走行距離と検出された車両の進行方位に応じて、車両が存在する前記地図データの表す道路地図上の位置を算出する手段と、
補正量を求めて、当該補正量を用いて前記走行距離算出手段に設定された距離係数を補正する距離係数補正手段とを有し、
前記距離係数補正手段は、
前記距離係数に施された前記補正量に応じて定まる値の大きさの合計である累積補正量を求め、求めた当該累積補正量が小さいほど、前記距離係数に施す補正の補正量を小さく修正する
ことを特徴とする現在位置算出装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、車両等の移動体に搭載され、走行距離や進行方位等を測定して、これらより当該車両の現在位置を算出する現在位置算出装置に関するものであり、特に、走行距離の測定誤差を補正する技術に関するものである。
【０００２】
【従来の技術】
従来、車両の現在位置は、ジャイロ等の方位センサにより測定した車両の進行方向と、車速センサまたは距離センサにより測定した車両の走行距離に基づいて算出することが行われている。
【０００３】
また、車両の走行距離は、一般的には、トランスミッションの出力軸、または、タイヤの回転数を計測して、その回転数に、タイヤ１回転あたりに車両が進む距離である距離係数を乗ずることにより求められている。
【０００４】
また、このように車両の進行方向と走行距離から求めた現在位置の誤差を補正するために、特公平６−１３９７２号記載の技術のように、道路データに整合するように、求められた車両の現在位置を修正する、いわゆる、マップマッチングの技術が知られている。このマップマッチングの技術によれば、位置算出の精度を高めることができる。
【０００５】
ところで、走行時には、タイヤの磨耗や、温度変化による膨張等により、タイヤの直径、すなわち、距離係数が時事刻々と変化する。このため、走行距離の算出において誤差が発生し、現在位置の算出が高精度に行えなくなる。たとえば、タイヤ１回転あたりの走行距離係数に、１％の誤差が存在すると、１００ｋｍ走行した場合、１ｋｍの誤差が発生してしまう。
【０００６】
このような走行距離の測定誤差は、通常の道路を走行している場合は、前述したマップマッチングの技術により、ある程度修正できる。しかし、高速道路等の道路を走行する際には、マップマッチングで利用できるカーブや交差点等の特徴が道路にないため、充分に誤差を修正することができなくなる。
【０００７】
さらに、一旦、測定した現在位置と真の現在位置との間に１ｋｍ程度の誤差が発生してしまうと、マップマッチングの技術によっては、正しい位置に補正することが困難になる。
【０００８】
そこで、走行距離の測定の誤差を無くすために、従来は、（１）交差点を曲がった時（始点）から、次の交差点を曲がる（終点）までの道路データと、計測した回転数より得られる走行距離とを比較することにより、タイヤ１回転あたりの距離係数を補正することが行われていた。また、（２）特公平６−２７６５２号公報に記載のように、２つのビーコンの間の地図上の距離と、走行して計測した距離を比較することにより、前述した距離係数を補正する技術も知られている。
【０００９】
【発明が解決しようとする課題】
しかし、前述した各技術では、距離係数が真の値に近い値を有している場合でも、道路地図の一部に誤りがあった場合や、一時的に各センサが誤った値を出力してしまった場合等には、距離係数が真の値から、はずれる方向に大きく補正されてしまうことがある。
【００１０】
そこで、本発明は、距離係数が真の値に近い値を有している場合に、距離係数が真の値から大きくはずれる方向に補正されてしまうことを防ぐことができる現在位置算出装置を提供することを目的とする。
【００１１】
【課題を解決するための手段】
前記目的達成のために、本発明は、車輪の回転に伴い移動する車両に搭載され、当該車両の現在位置を算出する現在位置算出装置であって、道路地図を表す地図データを記憶する手段と、車両の進行方位を検出する手段と、車輪の回転速度を検出する手段と、検出された車輪の回転速度と、設定された距離係数に応じて車両の走行距離を算出する走行距離算出手段と、検出された車両の走行距離と検出された車両の進行方位に応じて、車両が存在する前記地図データの表す道路地図上の位置を算出する手段と、補正量を求めて、当該補正量を用いて前記走行距離算出手段に設定された距離係数を補正する距離係数補正手段とを有し、前記距離係数補正手段は、現在地点までの一定距離を車両が走行した間、若しくは現在までの一定期間における、前記距離係数に施された前記補正量に応じて定まる値の大きさの累積である累積補正量を求め、求めた当該累積補正量の大きさに応じて、前記距離係数に施す補正の補正量を修正することを特徴とする現在位置算出装置を提供する。
【００１２】
【作用】
本発明の現在位置算出装置によれば、現在地点までの一定距離を車両が走行した間、もしくは、現在までの一定期間の、前記距離係数に施した補正の補正量の推移状況、または、前記ずれ量に応じて求まった補正量の推移状況に応じて、前記距離係数に施す補正の補正量を修正する。
【００１３】
したがい、たとえば、前記補正量の推移状況が、補正量が値零周辺で安定して推移している推移状況である場合に、より小さい値になるように前記補正量を修正すれば、距離係数が真の値に近い値を有している場合に、ノイズ等によって距離係数が真の値から大きくはずれる方向に補正されてしまうことを防ぐことができる。なぜならば、補正量が値零周辺で安定して推移している場合には、距離係数が真の値に近い値を有していると推定することができるからである。
【００１４】
【実施例】
以下、本発明に係る現在位置算出装置の一実施例について説明する。
【００１５】
図１に本実施例に係る現在位置算出装置の構成について説明する。
【００１６】
すなわち、本実施例に係る現在位置算出装置は、車両のヨーレイトを検出することで進行方位変化を検出する角速度センサ２０１と、地磁気を検出することで車両の進行方位を検出する地磁気センサ等の方位センサ２０２と、車両のトランスミッションの出力軸の回転速度に比例した時間間隔でパルスを出力する車速センサ２０３を備えている。
【００１７】
また、現在位置周辺の地図や現在位置を示すマーク等を表示するディスプレイ２０７と、ディスプレイ２０７に表示する地図の縮尺切り替えの指令をユーザに（運転者）から受け付けるスイッチ２０４と、デジタル地図データを記憶しておくＣＤ−ＲＯＭ２０５と、そのＣＤ−ＲＯＭ２０５から地図データを読みだすためのドライバ２０６とを備えている。また、以上に示した各周辺装置の動作の制御を行うコントローラ２０８を備えている。
【００１８】
次に、コントローラ２０８は、角速度センサ２０１の信号（アナログ）をデジタル信号に変換するＡ／Ｄ変換器２０９と、方位センサ２０２の信号（アナログ）をデジタル信号に変換するＡ／Ｄ変換器２１０と、車速センサ２０３から出力されるパルス数を０．１秒毎にカウントするカウンタ２１６と、スイッチ２０４の押圧の有無を入力するパラレルＩ／Ｏ２１１と、ＣＤ−ＲＯＭ２０５から読みだされた地図データを転送するＤＭＡ（Direct Memory Access）コントローラ２１２と、ディスプレイ２０７に地図画像を表示する表示プロセッサ２１３とを有する。
【００１９】
また、コントローラ２０８は、さらに、マイクロプロセッサ２１４と、メモリ２１５とを有する。マイクロプロセッサ２１４は、Ａ／Ｄ変換器２０９を介して得た角速度センサ２０１の信号、Ａ／Ｄ変換器２１０を介して得た方位センサ２０２の信号、カウンタ２１６がカウントした車速センサ２０３の出力パルス数、パラレルＩ／Ｏ２１１を介して入力するスイッチ２０４の押圧の有無、ＤＭＡコントロ−ラ２１２を介して得たＣＤ−ＲＯＭ２０５からの地図データを受け入れて、それら信号に基づいて処理を行い、車両の現在位置を算出して、それを表示プロセッサ２１３を介してディスプレイ２０７に表示させる。この車両位置の表示は、図２に示すように、すでにディスプレイ２０７に表示している地図上に矢印マ−ク等を重畳して表示することにより行う。これにより、ユーザは、地図上で車両の現在位置を知ることができる。メモリ２１５は、このような動作を実現するための処理（後述）の内容を規定するプログラムや、後述する各種テ−ブル等を格納したＲＯＭと、マイクロプロセッサ２１４が処理を行う場合にワ−クエリアとして使用するＲＡＭとを含んでいる。
【００２０】
以下、本実施例に係る現在位置算出装置の動作について説明する。
【００２１】
まず、車両の進行方位及び走行距離を算出する処理、算出された進行方位及び距離から車両の現在位置を決定する処理、得られた車両位置および方位を表示する処理の三つの処理について説明する。
【００２２】
図３に、車両の進行方位及び走行距離を算出する処理の流れを説明する。
【００２３】
この処理は、一定周期、たとえば１００ｍＳ毎に起動され実行されるマイクロプロセッサ２１４のルーチンである。
【００２４】
このルーチンでは、最初、Ａ／Ｄ変換器２０９から角速度センサ２０１の出力値を読み込む（ステップ４０１）。この角速度センサ２０１の出力値には、方位変化が出力されるので、車両の進行方向の相対的な値しか検出できない。このため、次に、Ａ／Ｄ変換器２１０から方位センサ２０２の出力値を読み込み（ステップ４０２）、この方位センサ２０２の出力値により算出された絶対方位と角速度センサ２０１から出力される方位変化（角速度出力）とを用いて、車両の推定方位を決定する（ステップ４０３）。
【００２５】
この方位の決定は、たとえば、長い時間、車速が低い時には、角速度センサ２０１の誤差が大きいので、一定時間以上車速が低い場合には、方位センサ２０２の出力する方位のみを利用するという方法により行う。
【００２６】
次に、車速センサ２０３の出力するパルス数を、０．１秒毎に、カウンタ２１６で計数して、その計数値を読み込む（ステップ４０４）。この読み込んだ値に、距離係数Ｒを乗算することで、０．１秒間に進んだ距離を求める（ステップ４０５）。この距離係数Ｒの求め方については後述する。
【００２７】
次に、このようにして求められた０．１秒間あたりの走行距離値を、前回得られた値に積算して、車両の走行距離が２０ｍとなったかどうかを調べ（ステップ４０６）、２０ｍに満たない場合（ステップ４０６でＮｏ）、今回の処理を終了して、新たな処理を開始する。
【００２８】
走行距離算出処理の結果、積算された走行距離が一定距離、例えば２０ｍとなった場合（ステップ４０６でＹｅｓ）、その時点での進行方向と走行距離（２０ｍ）とを出力する（ステップ４０７）。ステップ４０７では、さらに、積算距離を初期化して、新たに走行距離の積算を開始する。
【００２９】
次に、算出された進行方位および走行距離に基づいて、車両の現在位置を求める処理について説明する。
【００３０】
図４に、この処理の流れを示す。
【００３１】
本処理は、図３からの進行方位および走行距離が出力されるのを受けて起動され、実行されるマイクロプロセッサ２１４のルーチンである。すなわち、本処理は、車両が２０ｍ進む毎に起動される。
【００３２】
さて、この処理では、まず、ステップ４０７で出力された進行方位と走行距離とを読み込む（ステップ５０１）。次に、それらの値に基づいて、車両の移動量を緯度経度方向、別々に、それぞれ求める。さらに、これらの各方向における移動量を、前回の処理で求められた車両の現在位置に加算して、現在位置（Ａ）を求める（ステップ５０２）。
【００３３】
もし、装置の始動直後など、前回求められた位置がない場合には、別途設定された位置を前回求められた位置として用いて現在位置（Ａ）を求める。
【００３４】
次に、求めた現在位置（Ａ）の周辺の地図を、ＣＤ−ＲＯＭ２０５から、ドライバ２０６およびＤＭＡコントローラ２１３を介して、読み出し、現在位置（Ａ）を中心とする予め設定された距離Ｄ内にある道路データ（線分）を抜き出す（ステップ５０３）。
【００３５】
なお、道路データとしては、たとえば、図６に示すように、２点間を結ぶ複数の線分８１〜８５で近似し、それら線分を、その始点と終点の座標によって表したもの等を用いることができる。たとえば、線分８３は、その始点（ｘ３、ｙ３）と終点（ｘ４、ｙ４）によって表現するようにする。
【００３６】
次に、ステップ５０３で抜き出された線分の中から、その線分の方位が、求められている進行方向と、所定値以内にある線分だけを抜き出す（ステップ５０４）。さらに、抜き出されたすべての線分に対し、現在位置（Ａ）から垂線をおろし、その垂線の長さを求める（ステップ５０５）。
【００３７】
次に、それら垂線の長さを用いて、ステップ５０４で抜き出されたすべての線分に対して、以下に定義されるエラーコスト値を算出する。
【００３８】
エラーコスト＝α×｜進行方向−線分方位｜＋β｜垂線の長さ｜
ここで、α、βは、重み係数である。これら係数の値は、進行方向と道路の方位のずれと現在位置と道路のずれのどちらを、現在位置が、その上にある道路を選択する上で重視するかによって変化させてよい。たとえば、進行方向と方位が近い道路を重視する場合は、αを大きくするようにする。
【００３９】
そして、各線分のエラーコストが算出されたならば、エラーコストが算出された線分のうち、エラーコスト値が最も小さい線分を選び（ステップ５０６）、その選択された線分と垂線との交差する点（線分の垂線のあし）を、修正された現在位置（Ｂ）とする（ステップ５０７）。
【００４０】
ところで、前述したステップ５０３では、現在位置（Ａ）を中心とする予め設定された距離Ｄ内にある道路データ（線分）を抜き出したが、この距離Ｄは、前回行ったステップ５０６で選択した道路のエラーコストの値に基づいて決定する値でもよい。
【００４１】
ここで、エラーコストに基づいて、検索範囲を求める理由は、エラーコストのが大きい場合は、前回求めた現在位置（Ｂ）の精度に対する信憑性が低いと考えられるので、より広い範囲を検索して道路を探す方が、正しい現在位置を求める上で適当であるからである。
【００４２】
次に、得られた車両位置および方位を表示する処理について説明する。
【００４３】
図５に、この処理の流れを示す。
【００４４】
本処理は、１秒毎に起動され実行されるマイクロプロセッサ２１４のルーチンである。
【００４５】
最初、スイッチ２０４が押圧により地図の縮尺の変更を指示されているかを、パラレルＩ／Ｏ２１１の内容を見て判断する（ステップ６０１）。もし、押されていれば（ステップ６０１でＹｅｓ）、それに対応して、所定の縮尺フラグを設定する（ステップ６０２）。
【００４６】
次に、図４の処理で求められた現在位置（Ｂ）を読み出し（ステップ６０３）、ステップ６０２で切り替えられた縮尺フラグの内容に応じた縮尺の地図をディスプレイ２０７に、例えば、図２に示すような状態で表示する（ステップ６０４）。
【００４７】
そして、地図に重畳して、車両の現在位置（Ｂ）と車両の進行方位を、たとえば、先に示した図２のように、矢印記号“↑”を用いて表示する（ステップ６０５）。そして最後に、これらに重畳して、北を示す北マークと、縮尺に対応した距離マークとを、図２のように表示する（ステップ６０６）。
【００４８】
なお、本実施例においては、上記のように矢印記号を用いて車両位置および方向を示したが、車両位置および方向の表示形態は、位置および進行方向が、表示状態が明確に示されるものであれば、その形態は任意でよい。また、北マーク等も同様である。
【００４９】
次に、図３の処理ステップ４０５において距離の算出に用いた距離係数Ｒの求め方について説明する。
【００５０】
さて、前述したように車両の走行距離は、車速センサ２０３の出力するパルス数に距離係数Ｒを乗じて求める。しかし、タイヤの摩耗等によりタイヤ１回転あたりの車両の進行距離は変化するので、距離係数Ｒを固定値とすると、走行に伴い距離が正確に求まらなくなってくる。そこで、本実施例では、逐次、図４の処理で得られた現在位置（Ｂ）（ステップ５０８）と、ＣＤ−ＲＯＭ２０５からドライバ２０６を介して読みだした地図データから求まる道路方位と、図３の処理で得られた車両方位（ステップ４０３）とを比較することにより、現在位置（Ｂ）が、実際の位置に対して進んでいるか遅れているかを判断し、距離係数Ｒを動的に修正する。
【００５１】
このような距離係数Ｒの修正は、たとえば、次のようにして行うことができる。
【００５２】
すなわち、補正変数Ｒｓｈを導入する。そして、距離係数Ｒ＝Ｒ０×（１＋Ｒｓｈ）に従い、動的に距離係数Ｒを修正する。なお、ここでＲ０は、予め定めた距離係数Ｒの初期値を示している。
【００５３】
さて、補正変数Ｒｓｈは、マイクロプロセッサ２１４が、次に示す処理を実行することにより逐次変更する。
【００５４】
まず、補正変数Ｒｓｈの求め方の概要を説明する。
【００５５】
補正変数Ｒｓｈは、道路のカ−ブの個所の車両の実際の曲がり方に応じて決定する。
【００５６】
たとえば、図４のステップ５０８で出力された現在位置（Ｂ）が、図７の道路Ａを進行するものであったとする。一方、たとえば、逐次出力される現在位置（Ｂ）のうちの、走行上カ−ブ開始点ｏより所定距離だけ前のａ点を基準に、車両の進行方位の走行距離から求めた車両の現在位置の軌跡が、図中に破線で示したようにｏ点をオ−バした地点から曲がり始めた軌跡であったとする。
【００５７】
この場合には、距離係数Ｒが真の値より大きかったものと推定することができる。なぜならば、車両がカ−ブに達したと距離係数Ｒを用いて推定された時点では、車両は曲がり始めていないので実際には車両はカ−ブに達していないと考えられるからである。また、距離係数Ｒが真の値より大きい度合いは、車両が実際に曲がり始めた地点とカ−ブ開始点ｏとの距離を表す図中の距離ｄより推定することができる。
【００５８】
また、逆に、車両の進行方位の走行距離から求めた車両の現在位置の軌跡が、交叉点ｏに到る前に曲がり始めた軌跡である場合には、距離係数Ｒが真の値より小さかったものと推定することができる。なぜならば、車両がカ−ブｏに達したと距離係数Ｒを用いて推定される前に、車両は曲がり始めているので実際には車両は既にカ−ブｏに達していると考えられるからである。また、この場合も、距離係数Ｒが真の値より小さい度合いは、車両が実際に曲がり始めた地点とカ−ブｏとの距離を表す図中の距離誤差ｄより推定することができる。
【００５９】
したがい、図中のｄより距離係数が真値よりのずれの方向と、その度合いを判定し、これを打ち消すために、必要な補正変数Ｒｓｈの変化量を定めることができる。
【００６０】
または、車両方位と道路の方位差から、車両がカ−ブｏに達したと距離係数Ｒを用いて推定されるより前に、車両が曲がり始めたか、車両がカ−ブｏに達したと距離係数Ｒを用いて推定された時点より後に車両が曲がり始めたかを判定するようにしてもよい。この場合には、車両方位と道路の方位差の積分値より、距離係数Ｒが真の値よりずれている度合いを求めることができる。
【００６１】
本実施例では、このようにして、距離誤差ｄが検出された場合に距離誤差ｄの値に応じて、補正変数Ｒｓｈの変化量を求め、これによって補正変数Ｒｓｈを補正することにより距離係数Ｒを補正する。
【００６２】
この、補正変数Ｒｓｈの補正は、具体的には、次のように行う。
【００６３】
すなわち、まず、３００ｍ走行する間は、Ｒｓｈの絶対値を正しいＲを得るための値より大きくすることにより、この３００ｍ走行する間に、現在位置（Ｂ）として漸次正しい値が求まるようにする。これは、距離誤差ｄが求まった時点では、それまでの距離係数が誤差によって、誤った現在位置（Ｂ）が求まっていると推定される。しかし、ここで、現在位置（Ｂ）を一時に正しい位置に修正すると、前述した現在位置の表示マ−クは、走行方向と逆方向に移動したり、一気に離れた位置に移動してしまい、運転者に混乱を与えることになる。そこで、３００ｍ走行する間に、Ｒｓｈの変化量の絶対値を正しいＲを得るための値より大きし、この３００ｍ走行する間に、現在位置（Ｂ）のマ−クの表示位置が少しづつ正しい位置に修正されていくようにするのである。具体的には、距離誤差ｄが求まったならば、それまでのＲｓｈを変数Ｒｓｈ０として記憶し、このＲｓｈ０に、距離誤差ｄに正の係数を乗じて定めたＲｓｈの変化量Ｒｓｈ３００を加算することにより、Ｒｓｈを、その絶対値が正しいＲを得るための値より大きくなるように補正する。
【００６４】
そして、この３００ｍ走行した後は、再度Ｒｓｈの絶対値を正しいＲを得るための値に修正し、その後は正しい距離係数Ｒで、現在位置（Ｂ）が求まるようにするのである。この処理は、具体的には、変化量Ｒｓｈ３００を加算する前のＲｓｈであるＲｓｈ０に、変化量Ｒｓｈ３００に１より小さな正の係数を乗じた値を加算することにより、正しいＲを得るための値に修正する。
【００６５】
結果、距離誤差ｄが検出されてから３００ｍは、より大きな変化量Ｒｓｈ３００によって補正されたＲｓｈが用いられ、その後は、Ｒｓｈ３００を一定の割合で小さくした値によってＲｓｈが用いられることになる。
【００６６】
ところで、このような補正を行う場合、一般的にいって、誤った値を有する距離係数Ｒは、図８ｂに示すように、誤った値から、時間と共に真の値に近づいてくることが期待できる。また、この場合の、補正変数Ｒｓｈの変化量Ｒｓｈ３００は図８ｂに示すように０に時間と共に近づき、その後値０を中心に安定することが期待できる。
【００６７】
したがい、補正変数Ｒｓｈ３００が、しばらくの間、０周辺で安定して推移していれば、距離係数Ｒは真の値に近い値となっていると考えることができる。そこで、本実施例では、補正変数Ｒｓｈ３００が、しばらくの間、０周辺で安定して推移している場合には、距離誤差ｄとして大きな大きな値が求まった場合でも、Ｒｓｈ３００の値を小さくすることにより、距離係数が真の値に近い値を有している場合に、Ｒｓｈが大きく変化し、これにより距離係数が真の値から大きくはずれる方向に補正されてしまうことを防ぐ。
【００６８】
以下、マイクロプロセッサ２１４によって実行される補正変数Ｒｓｈを求めていく処理の詳細について説明する。
【００６９】
まず、本装置が起動されると、まず、図９に示すように、以降の処理で使用する各種パラメ−タを初期化する。すなわち、距離誤差ｄを０に、補正変数Ｒｓｈを０に、修正量ｋを１に、ポインタｐｔを０に、補正レベルｌｖ（ｉ）の全てを０に、変数ｌを０に、ｆｌａｇを０に、補正レベル有効距離ｌｖ＿ｌ（ｉ）の全てを０にセットする。ここで、ｌｖ（ｉ）、ｌｖ＿ｌ（ｉ）はｉｍａｘ個の要素を持つ一次元の配列データである。
【００７０】
これ以降は、図１０に示す処理が、車両が２０ｍ走行する度に実行される。
【００７１】
この処理では、各センサ２０１、２０２、２０３を用いて算出した走行距離や進行方位をセンサデータとして読み込む（ステップ８０１）。そして次に、ＣＤ−ＲＯＭ２０５からドライバ２０６に読み出された地図データを読み込む（ステップ８０２）。
【００７２】
次に、補正レベルｌｖ（ｉ）、補正レベル有効距離ｌｖ＿ｌ（ｉ）の更新処理を行う（ステップ８０３）。
【００７３】
次に、ｆｌａｇが０か否かを判定する（ステップ８０４）。ｆｌａｇは、距離誤差ｄが求められＲｓｈ３００が算出されてから３００ｍ走行する間のみ値１となるフラグである。
【００７４】
そして、フラグが０であれば、前述した距離誤差ｄを求める。一方、ｆｌａｇが１である場合には、Ｒｓｈ３００が有効である期間、すなわち、距離誤差ｄが求められＲｓｈ３００が算出されてから３００ｍ走行していない期間であるので、距離誤差ｄｎｏの算出（ステップ８０５）は行わない。
【００７５】
次に、ステップ８０５で求めた距離誤差ｄが０か否かを判定する（ステップ８０７）。今回ステップ８０５で求めた距離誤差ｄが０でない場合、および、Ｒｓｈ３００が算出されてから３００ｍ走行していない期間は、距離誤差ｄが０ではないので、ステップ８０８のＲｓｈ算出処理を行う。なお、Ｒｓｈ３００が算出されてから３００ｍ走行していない期間は、このＲｓｈ３００を求めるために用いた距離誤差ｄが維持されつづけるので距離誤差ｄは０とならない。Ｒｓｈ算出処理（ステップ８０８）では、前述したような、距離誤差ｄが求められたときのＲｓｈ３００の算出とＲｓｈの変更と、Ｒｓｈ３００が算出されてから３００ｍ走行した後のＲｓｈの変更の処理等を行う。
【００７６】
以下、各処理の詳細について説明する。
【００７７】
まず、ステップ８０５の距離誤差ｄの算出処理について説明する。
【００７８】
図１１に、この処理の手順を示す。
【００７９】
図示するように、この処理では、まず、車両が右左折したか否かを判定し（ステップ１１０１）、距離誤差が存在するか否かを判定し（ステップ１１０２）、距離誤差があれば、先に説明した距離誤差ｄを算出する（ステップ１１０３）。ただし、このとき、車両がカ−ブを内回りしたときに距離誤差ｄの符号は負とし、車両がカ−ブを外回りしたときに距離誤差ｄの符号は正とする。
【００８０】
一方、車両が右左折していない場合、または、距離誤差が存在しない場合には、そのまま処理を終了する。
【００８１】
次に、図１０のステップ８０８の補正変数Ｒｓｈの算出処理について説明する。
【００８２】
図１２に、この補正変数Ｒｓｈの算出処理の処理手順を示す。
【００８３】
この処理では、まず、ｆｌａｇが０か否かを判定する（ステップ１２００）。ｆｌａｇが０であるときは、Ｒｓｈ３００が算出されてから既に３００ｍ以上走行し、かつ、０でない距離誤差ｄが求められたときであるので（図１０参照）、まず、修正量ｋを求め（ステップ１２０１）、距離誤差ｄに応じたＲｓｈ３００を求める。
【００８４】
この補正変数Ｒｓｈ３００は、距離誤差ｄより次のようにして求める。すなわち、Ｒｓｈ３００’の正負を図１３に示す対応によって定め、Ｒｓｈ３００の絶対値を距離誤差ｄの絶対値に、予め定めた係数ｊを乗じて求める。
【００８５】
そして、その後、Ｒｓｈ３００＝ｋ×Ｒｓｈ３００’に従って、Ｒｓｈ３００’を修正し、Ｒｓｈ＝Ｒｓｈ０＋Ｒｓｈ３００に従い，Ｒｓｈを補正する（ステップ１２０３）。ただし、Ｒｓｈが変更される前に、その時点のＲｓｈをＲｓｈ０として記憶しておく（ステップ１２０２）。
【００８６】
そして、次に、算出したＲｓｈ３００の大きさの応じた値を、ｌｖ（ｉ）として登録するｌｖ（ｉ）登録処理を行い（ステップ１２０４）、前述したｆｌａｇを１に、Ｒｓｈ３００が算出されてからの走行距離を表す変数ｌを０に設定し（ステップ１２０５）、処理を終了する。変数ｌは、Ｒｓｈ３００が算出されてから３００ｍ走行したか否かを判定するために用いる。
【００８７】
さて、図１２に戻り、ステップ１２００でｆｌａｇが０でないと判定された場合には、まだ、Ｒｓｈ３００が有効な期間であるので、Ｒｓｈ３００が算出されてからの走行距離を表すｌが３００ｍを超えているかを判定し（ステップ１２０６）、超えていなければｌは、Ｒｓｈ３００が算出されてから現在までの走行距離を表すよう更新し（ステップ１２０７）、処理を終了する。
【００８８】
一方、ｌが３００ｍを超えていれば、距離誤差ｄ、ｌ，ｆｌａｇを０にリセットし（ステップ１２０９）、Ｒｓｈを更新する。Ｒｓｈは、Ｒｓｈ３００に１より小さな正の定数を乗じた値を、記憶しておいたＲｓｈ０（前回求めたＲｓｈ３００算出前のＲｓｈ）に加算することにより求める（ステップ１２１０）。この処理により、Ｒｓｈは、より絶対値の小さな値に変更されることになる。
【００８９】
なお、Ｒｓｈ３００として、Ｒｓｈ３００が算出されたから３００の間以外に用いられるＲｓｈを無視できる程度に大きな値を用いることとし、Ｒｓｈ３００を求めてから３００ｍ間は、Ｒ＝Ｒ０＋Ｒｓｈ３００とするようにしてもよい。
【００９０】
さて、このような処理において、補正変数Ｒｓｈ３００が、しばらくの間、０周辺で推移している場合には、距離誤差ｄとして大きな値が求まった場合でも、Ｒｓｈが大きく変化しないようにするための処理が、図１２における、ステップ１２０１の修正量ｋ算出処理と、ステップ１２０４の補正レベルｌｖ（ｉ）の登録処理と、図１０のステップ８０３の補正レベルｌｖ（ｉ）、補正レベル有効距離ｌｖ＿ｌ（ｉ）の更新処理である。これらの処理では、補正変数Ｒｓｈ３００が、しばらくの間、０周辺で推移している場合には、補正変数Ｒｓｈが大きく変化しないようにするため、ステップ１２０１の修正量ｋ算出処理で算出される修正量ｋの値が小さくなるようにする。
【００９１】
以下、これらの処理の詳細について説明する。
【００９２】
図１４に、補正レベルｌｖ（ｉ）の登録処理（図１２のステップ１２０４）の処理手順を示す。
【００９３】
この処理は、図１２のステップ１２０４においてＲｓｈ３００が求められた後に、必ず実行される。
【００９４】
図示するように、この処理は、まず、現在のポインタｐｔの値をｉとし（ステップ１０００）、Ｒｓｈ３００に所定の定数ａを乗じた値を、配列データである補正レベルｌｖのｉ番目の要素データｌｖ（ｉ）とする（ステップ１００１）。また、配列データである補正レベル有効距離ｌｖのｉ番目の要素データｌｖ＿ｌ（ｉ）に距離定数ｂを設定し（ステップ１００２）、その後、ｌｖ（ｉ）、ｌｖ＿ｌ（ｉ）をメモリ２１５に登録する（ステップ）。ただし、図１２ステップ１２０３で修正量ｋを乗じる前のＲｓｈ３００に所定の定数ａを乗じた値を、配列データである補正レベルｌｖのｉ番目の要素データｌｖ（ｉ）としてもよい。
【００９５】
そして、次回の処理のためにポインタｐｔを１増加させておく（ステップ１００５）。ただし、１増加させた値が、補正レベルｌｖ、補正レベル有効距離ｌｖ＿ｌの要素数より大きくなってしまったら（ステップ１００５）、ポインタｐｔを０とする（ステップ１００６）。
【００９６】
以上の処理によって、順次求められたＲｓｈ３００に比例した値が、それぞれ、順次、補正レベルｌｖ（０）、ｌｖ（１）、ｌｖ（２）、．．．ｌｖ（ｉｍａｘ）、ｌｖ（０）、ｌｖ（１）、．．．の順に格納されることになる。したがい、配列データである補正レベルｌｖには、最近求められた、最大ｉｍａｘ個のＲｓｈ３００の値に各々比例した、最大ｉｍａｘ個の補正レベルが格納されることになる。
【００９７】
ここで、ある補正レベル有効距離ｌｖ＿ｌ（ｎ）は、対応する補正レベルｌｖ（ｎ）が求められてから、現在まで、距離ｂ以上走行したか否かを管理するために用いられる。すなわち、補正レベル有効距離ｌｖ＿ｌ（ｉ）は、次に述べる補正レベルｌｖ（ｉ）、補正レベル有効距離ｌｖ＿ｌ（ｉ）の更新処理によって、現在より後、どのくらい走行すると補正レベルｌｖ（ｉ）が求められてから、距離ｂ走行したことになるかを表すように更新される。また、この処理では、ある補正レベルｌｖ（ｎ）が求められてから、距離ｂ以上走行したことを、対応する補正レベル有効距離ｌｖ＿ｌ（ｎ）が表すようになったら、補正レベルｌｖ（ｎ）を削除する。
【００９８】
以下、この補正レベルｌｖ（ｉ）、補正レベル有効距離ｌｖ＿ｌ（ｉ）の更新処理（図１０ステップ７０７）について説明する。
【００９９】
図１５に、この処理の処理手順を示す。
【０１００】
この処理は、図１０に示すように２０ｍ走行する毎に必ず実行される。
【０１０１】
さて、この処理では、まず、ｉを０に設定し（ステップ１６０１）、補正レベル有効距離ｌｖ＿ｌ（ｉ）の値を更新する。すなわち、補正レベル有効距離ｌｖ＿ｌ（ｉ）の値を２０ｍ分減ずる（ステップ１６０２）。したがい、補正レベル有効距離ｌｖ＿ｌ（ｉ）の値は、ｂより順次２０ｍ分減っていき、補正レベルｌｖ（ｉ）が求められた後に距離ｂ以上走行した時点で０以下の値となる。図１６は、補正レベルｌｖ、補正レベル有効距離ｌｖ＿ｌの具体例について示したものである。この例は、補正レベルｌｖ（０）が求められてから現在までに距離Ｌ０走行しており、補正レベルｌｖ（１）が求められてから現在までに距離（Ｌ１）走行している場合の例である。この例では、補正レベルｌｖ（３）は今求められたばかりのものである。
【０１０２】
そして、次に、補正レベル有効距離ｌｖ＿ｌ（ｉ）の値が０以下となったか否かを判定し（ステップ１６０３）、０以下となっていれば、補正レベルｌｖ（ｉ）、補正レベル有効距離ｌｖ＿ｌ（ｉ）を共に０に設定する。一方、０以下となっていなければこの処理は行わない。
【０１０３】
そして、次に、ｉがｉｍａｘと等しくなったかを判定し、等しければ配列データである補正レベルｌｖの全ての要素データ、配列データである補正レベル有効距離ｌｖの全ての要素データについての処理を終了したことになるので処理を終了する。ｉがｉｍａｘと等しくなければ、ｉを１増加させ（ステップ１６０６）、以上の処理を繰り返す。
【０１０４】
この処理の結果、配列データである補正レベルｌｖには、常に現在地点より距離ｂ走行する前の地点から、現在地点までの間に求められた各補正変数数Ｒｓｈ３００に各々比例した補正レベルのみが格納されることになる。
【０１０５】
ただし、近似的には、常に現在までの一定期間中に求められた各補正変数数Ｒｓｈに各々比例した補正レベルのみが格納されるようにしてもよい。
【０１０６】
したがい、補正レベルｌｖより、補正変数Ｒｓｈ３００が、最近、どのような値をとっていたかを判定することができ、その判定結果に応じて修正量ｋを定めれば、しばらくの間、０周辺で推移している場合には、Ｒｓｈ３００を小さくすることによりＲｓｈが大きく変化しないようにすることができる。
【０１０７】
このように修正量ｋを求めるのが、図１２ステップ１２０１の修正量ｋ算出処理である。以下、この修正量ｋ算出処理について説明する。
【０１０８】
図１７に、この修正量ｋ算出処理の処理手順を示す。
【０１０９】
図１２に示すように、この処理は、Ｒｓｈ３００を求める場合に、補正変数Ｒｓｈ３００を求める直前に必ず実行される。
【０１１０】
図示するように、この処理では、まず、配列データである補正レベルｌｖの各要素データの値の合計ａｄｄを求める（ステップ１８０１）。次に、配列データである補正レベルｌｖの各要素データの値の絶対値の合計ａｄｄ＿ａｂｓを求める（ステップ１８０２）。
【０１１１】
そして、これらの値より修正量ｋを算出する（ステップ１８０３）。すなわち、合計ａｄｄの絶対値に応じて図１８に示すように値ｎを求め、ｍ＝ａｄｄ＿ａｂｓ−ｎに従い値ｍを求め、このｍの値より図１９に示すように修正量ｋを求める。ここで、値ｎは合計ａｄｄの絶対値が、しきい値（図１９では５）より小さい場合、すなわちＲｓｈ３００が値０を中心として上下に均等に変動しているとき（Ｒｓｈ３００が安定しているとき）に、より大きな値をとるように定めている。また、ａｄｄ＿ａｂｓは、Ｒｓｈ３００が０周辺で推移しているときに小さい値となる。したがい、ｍはＲｓｈ３００が値０周辺で安定して推移しているときに、より小さな値となる。また、ｋはｍが小さいほうが小さい値ととるように定めている。したがい、修正量ｋは、Ｒｓｈ３００が値０周辺で安定して推移しているときに小さな値となる。
【０１１２】
したがい、前述したように修正量ｋによって、距離誤差ｄより求まるＲｓｈ３００’を補正し、補正したＲｓｈ３００によって補正変数Ｒｓｈを求めれば、Ｒｓｈ３００が、しばらくの間、０周辺で安定して推移している場合、すなわちＲが安定して推移している場合には、Ｒｓｈが大きく変化することないようににすることができ、距離係数Ｒが真の値に近い値を有している場合に、距離係数が真の値から大きくはずれる方向に補正されてしまうことを防ぐことができる。
【０１１３】
【発明の効果】
以上のように、本発明によれば、距離係数が真の値に近い値を有している場合に、距離係数が真の値から大きくはずれる方向に補正されてしまうことを防ぐことができる現在位置算出装置を提供することができる。
【図面の簡単な説明】
【図１】本発明の一実施例に係る現在位置算出装置の構成を示すブロック図である。
【図２】本発明の一実施例において行う地図および現在位置の表示例を示す図である。
【図３】本発明の一実施例において行う進行方位および距離の算出処理の手順を示すフローチャートである。
【図４】本発明の一実施例において行う現在位置の算出処理の手順を示すフローチャートである。
【図５】本発明の一実施例において行う現在位置表示処理の手順を示すフローチャートである。
【図６】本発明の一実施例において用いる地図データにおける道路の表現形式を示す図である。
【図７】本発明の一実施例において用いる距離誤差ｄを示す図である。
【図８】本発明の一実施例において用いる距離係数と補正変数の変動のようすを示す図である。
【図９】本発明の一実施例において行う補正変数を補正する処理の手順を示す第１のフロチャ−トである。
【図１０】本発明の一実施例において行う補正変数を補正する処理の手順を示す第２のフロチャ−トである。
【図１１】本発明の一実施例において行う補正変数を補正する処理の手順を示す第３のフロチャ−トである。
【図１２】本発明の一実施例において行う補正変数を補正する処理の手順を示す第４のフロチャ−トである。
【図１３】本発明の一実施例において用いる距離誤差ｄと補正変数Ｒｓｈの正負の関係を示す図である。
【図１４】本発明の一実施例において行う補正変数を補正する処理の手順を示す第５のフロチャ−トである。
【図１５】本発明の一実施例において行う補正変数を補正する処理の手順を示す第６のフロチャ−トである。
【図１６】本発明の一実施例用いる補正レベルｌｖ（ｉ）とほせいレベル有効距離ｌｖ＿ｌ（ｉ）の例を示す図である。
【図１７】本発明の一実施例において行う補正変数を補正する処理の手順を示す第７のフロチャ−トである。
【図１８】本発明の一実施例において用いる変数ｎと変数ａｄｄの絶対値との対応を示す図である。
【図１９】本発明の一実施例において用いる変数ｍと修正量ｋとの対応を示す図である。
【符号の説明】
２０１    角速度センサ
２０２    方位センサ
２０３    車速センサ
２０４    スイッチ
２０５    ＣＤ−ＲＯＭ
２０６    ＣＤ−ＲＯＭドライバ
２０７    ディスプレイ
２０８    ＤＭＡコントローラ
２１４    マイクロプロセッサ
２１５    メモリ
【図１】
0003679451.tif 000002
【図２】
0003679451.tif 000003
【図３】
0003679451.tif 000004
【図４】
0003679451.tif 000005
【図５】
0003679451.tif 000006
【図６】
0003679451.tif 000007
【図７】
0003679451.tif 000008
【図８】
0003679451.tif 000009
【図９】
0003679451.tif 000010
【図１０】
0003679451.tif 000011
【図１１】
0003679451.tif 000012
【図１２】
0003679451.tif 000013
【図１３】
0003679451.tif 000014
【図１４】
0003679451.tif 000015
【図１５】
0003679451.tif 000016
【図１６】
0003679451.tif 000017
【図１７】
0003679451.tif 000018
【図１８】
0003679451.tif 000019
【図１９】
0003679451.tif 000020