以下、本発明の実施形態に係る運転支援装置(以下、「本実施装置」と称呼される場合がある。)について添付図面を参照しながら説明する。
<構成>
本実施装置は、車両(自動車)に適用される。本実施装置は、図1に示したように、運転支援ECU10、エンジンECU20、ブレーキECU30、ステアリングECU40、及び、ナビゲーションECU50を備えている。
これらのECUは、マイクロコンピュータを主要部として備える電気制御装置(Electric Control Unit)であり、図示しないCAN(Controller Area Network)を介して相互に情報を送信可能及び受信可能に接続されている。本明細書において、マイクロコンピュータは、CPU、RAM、ROM及びインターフェース(I/F)等を含む。例えば、運転支援ECU10は、CPU10v、RAM10w、ROM10x及びインターフェース(I/F)10y等を含むマイクロコンピュータを備える。CPU10vはROM10xに格納されたインストラクション(プログラム、ルーチン)を実行することにより各種機能を実現するようになっている。
運転支援ECU10は、以下に列挙するセンサ(スイッチを含む。)と接続されていて、それらのセンサの検出信号又は出力信号を受信するようになっている。なお、各センサは、運転支援ECU10以外のECUに接続されていてもよい。その場合、運転支援ECU10は、センサが接続されたECUからCANを介してそのセンサの検出信号又は出力信号を受信する。
アクセルペダル操作量センサ11は、自車両のアクセルペダル11aの操作量(アクセル開度)を検出し、アクセルペダル操作量APを表す信号を出力するようになっている。ブレーキペダル操作量センサ12は、自車両のブレーキペダル12aの操作量を検出し、ブレーキペダル操作量BPを表す信号を出力するようになっている。
操舵角センサ13は、自車両の操舵角を検出し、操舵角θを表す信号を出力するようになっている。操舵トルクセンサ14は、操舵ハンドルSWの操作により自車両のステアリングシャフトUSに加わる操舵トルクを検出し、操舵トルクTraを表す信号を出力するようになっている。車速センサ15は、自車両の走行速度(車速)を検出し、車速SPDを表す信号を出力するようになっている。
周囲センサ16は、少なくとも自車両の前方の道路、及び、その道路に存在する立体物に関する情報を取得するようになっている。立体物は、移動物(歩行者及び自動車等)及び固定物(電柱及びガードレール等)を表す。以下、これらの立体物は「物標」と称呼される場合がある。周囲センサ16は、レーダセンサ16a及びカメラセンサ16bを備えている。
レーダセンサ16aは、例えば、ミリ波帯の電波(以下、「ミリ波」と称呼する。)を少なくとも自車両の前方領域を含む自車両の周辺領域に放射し、放射範囲内に存在する物標によって反射されたミリ波(即ち、反射波)を受信する。更に、レーダセンサ16aは、物標の有無及び自車両と物標との相対関係を示すパラメータ(即ち、自車両に対する物標の位置、自車両と物標との距離、及び、自車両と物標との相対速度等)を演算して出力するようになっている。
より具体的に述べると、レーダセンサ16aはミリ波送受信部及び処理部を備えている。その処理部は、ミリ波送受信部から送信したミリ波とミリ波送受信部が受信した反射波との位相差、反射波の減衰レベル及びミリ波を送信してから反射波を受信するまでの時間等に基いて、自車両と物標との相対関係を示すパラメータを所定時間の経過毎に取得する。このパラメータは、検出した各物標(n)に対する、車間距離(縦距離)Dfx(n)、相対速度Vfx(n)、横距離Dfy(n)及び相対横速度Vfy(n)等を含む。
車間距離Dfx(n)は、自車両と物標(n)(例えば、先行車)との間の自車両の中心軸(前後方向に延びる中心軸、即ち、後述するx軸)に沿った距離である。
相対速度Vfx(n)は、物標(n)(例えば、先行車)の速度Vsと自車両の速度Vjとの差(=Vs-Vj)である。物標(n)の速度Vsは自車両の進行方向(即ち、後述するx軸の方向)における物標(n)の速度である。
横距離Dfy(n)は、「物標(n)の中心位置(例えば、先行車の車幅中心位置)」の、自車両の中心軸と直交する方向(即ち、後述するy軸方向)における同中心軸からの距離である。横距離Dfy(n)は「横位置」とも称呼される。
相対横速度Vfy(n)は、物標(n)の中心位置(例えば、先行車の車幅中心位置)の、自車両の中心軸と直交する方向(即ち、後述するy軸方向)における速度である。
カメラセンサ16bは、ステレオカメラ及び画像処理部を備え、車両前方の左側領域及び右側領域の風景を撮影して左右一対の画像データを取得する。カメラセンサ16bは、その撮影した左右一対の画像データに基いて、物標の有無及び自車両と物標との相対関係を示すパラメータなどを演算して出力するようになっている。この場合、運転支援ECU10は、レーダセンサ16aによって得られた自車両と物標との相対関係を示すパラメータと、カメラセンサ16bによって得られた自車両と物標との相対関係を示すパラメータと、を合成することにより、自車両と物標との相対関係を示すパラメータを決定する。
更に、カメラセンサ16bは、その撮影した左右一対の画像データに基いて、道路の左及び右の区画線を認識し、道路の形状、及び、道路と車両との位置関係(例えば、走行しているレーンの左端又は右端から自車両の車幅方向の中心位置までの距離)を演算して出力するようになっている。なお、区画線は、白線及び黄色線等を含むが、以下では、一例として白線の例を説明する。
周囲センサ16によって取得された物標に関する情報(自車両と物標との相対関係を示すパラメータを含む。)は「物標情報」と称呼される。周囲センサ16は、所定の時間が経過するたびに、物標情報を運転支援ECU10に繰り返し送信する。なお、周囲センサ16は、必ずしも、レーダセンサ及びカメラセンサの両方を備える必要はなく、例えば、レーダセンサのみ、又は、カメラセンサのみ、を含んでいてもよい。
操作スイッチ17は、運転者により操作されるスイッチである。運転者は、操作スイッチ17を操作することにより、後述する追従車間距離制御を実行するか否かを選択することができる。更に、運転者は、操作スイッチ17を操作することにより、後述する車線維持制御を実行するか否かを選択することができる。
ヨーレートセンサ18は、自車両のヨーレートを検出し、実ヨーレートYRtを出力するようになっている。
エンジンECU20は、エンジンアクチュエータ21に接続されている。エンジンアクチュエータ21は、ガソリン燃料噴射・火花点火式・内燃機関22のスロットル弁の開度を変更するスロットル弁アクチュエータを含む。エンジンECU20は、エンジンアクチュエータ21を駆動することによって、内燃機関22が発生するトルクを変更することができる。内燃機関22が発生するトルクは、図示しない変速機を介して図示しない駆動輪に伝達されるようになっている。従って、エンジンECU20は、エンジンアクチュエータ21を制御することによって、自車両の駆動力を制御し加速状態(加速度)を変更することができる。なお、内燃機関22に代えて又は加えて、車両駆動源として電動機が使用されてもよい。
ブレーキECU30は、ブレーキアクチュエータ31に接続されている。ブレーキアクチュエータ31は、ブレーキペダル12aの踏力によって作動油を加圧する図示しないマスタシリンダと、左右前後輪に設けられる摩擦ブレーキ機構32との間の油圧回路に設けられている。ブレーキアクチュエータ31は、ブレーキECU30からの指示に応じて、摩擦ブレーキ機構32のブレーキキャリパ32bに内蔵されたホイールシリンダに供給する油圧を調整する。その油圧によりホイールシリンダが作動することによりブレーキパッドがブレーキディスク32aに押し付けられて摩擦制動力が発生する。従って、ブレーキECU30は、ブレーキアクチュエータ31を制御することによって、自車両の制動力を制御し加速状態(減速度、即ち、負の加速度)を変更することができる。
ステアリングECU40は、周知の電動パワーステアリングシステムの制御装置であって、モータドライバ41に接続されている。モータドライバ41は、転舵用モータ42に接続されている。転舵用モータ42は、「操舵ハンドルSW、操舵ハンドルSWに連結されたステアリングシャフトUS及び操舵用ギア機構等を含む、図示しないステアリング機構」に組み込まれている。転舵用モータ42は、モータドライバ41から供給される電力によってトルクを発生し、このトルクによって操舵アシストトルクを加えたり、左右の操舵輪を転舵したりすることができる。即ち、転舵用モータ42は、自車両の舵角(操舵角)を変更することができる。
ナビゲーションECU50は、自車両の位置を検出するためのGPS信号を受信するGPS受信機51、地図情報等を記憶した地図データベース52、及び、タッチパネル式ディスプレイ53等と接続されている。ナビゲーションECU50は、自車両の位置と地図情報とに基いて自車両の経路誘導を行うようになっている。地図データベース52に記憶されている地図情報は、道路情報を含む。例えば、道路情報上では、道路の区間のそれぞれに対して、道路の車線数、道路の幅員及び勾配等が対応付けられている。ナビゲーションECU50は、所定の時間が経過するたびに、道路情報(車線数を含む)を運転支援ECU10に繰り返し送信する。運転支援ECU10は、道路情報に基いて隣接レーンが存在しているか否かを判定できる。
<前提となる制御>
次に、本実施装置が実施する制御の概要について説明する。運転支援ECU10は、「追従車間距離制御」及び「車線維持制御」を実行できるようになっている。
・追従車間距離制御(ACC:Adaptive Cruise Control)
追従車間距離制御は、物標情報に基いて、自車両の前方領域であって自車両の直前を走行している先行車(後述するACC追従対象車)と自車両との車間距離を所定の距離に維持しながら、自車両を先行車に追従させる制御である。追従車間距離制御自体は周知である(例えば、特開2014-148293号公報、特開2006-315491号公報及び特許第4172434号明細書等を参照。)。従って、以下、簡単に説明する。
運転支援ECU10は、操作スイッチ17の操作によって追従車間距離制御が要求されている場合、追従車間距離制御を実行する。
より具体的に述べると、運転支援ECU10は、追従車間距離制御が要求されている場合、周囲センサ16により取得した物標情報に基いてACC追従対象車を選択する。例えば、運転支援ECU10は、検出した物標(n)の横距離Dfy(n)と車間距離Dfx(n)とから特定される物標(n)の相対位置が、自車両の車速及び自車両のヨーレートに基いて推定される自車両の進行方向における距離が長くなるほど、その進行方向に対する横方向の距離の絶対値が小さくなるように予め定められた追従対象車両エリア内に存在するか否かを判定する。そして、運転支援ECU10は、物標(n)の相対位置が追従対象車両エリア内に所定時間以上に渡って存在する場合、その物標(n)をACC追従対象車として選択する。なお、相対位置が追従対象車両エリア内に所定時間以上に渡って存在する物標が複数存在する場合、運転支援ECU10は、それらの物標の中から車間距離Dfx(n)が最小の物標をACC追従対象車として選択する。
更に、運転支援ECU10は、目標加速度Gtgtを下記(1)式及び(2)式の何れかに従って算出する。(1)式及び(2)式において、Vfx(a)はACC追従対象車(a)の相対速度であり、k1及びk2は所定の正のゲイン(係数)であり、ΔD1は「ACC追従対象車(a)の車間距離Dfx(a)」から「目標車間距離Dtgt」を減じることにより得られる車間偏差(=Dfx(a)-Dtgt)である。なお、目標車間距離Dtgtは、運転者により操作スイッチ17を用いて設定される目標車間時間Ttgtに自車両100の車速SPDを乗じることにより算出される(即ち、Dtgt=Ttgt・SPD)。
運転支援ECU10は、値(k1・ΔD1+k2・Vfx(a))が正又は「0」の場合に下記(1)式を使用して目標加速度Gtgtを決定する。ka1は、加速用の正のゲイン(係数)であり、「1」以下の値に設定されている。
運転支援ECU10は、値(k1・ΔD1+k2・Vfx(a))が負の場合に下記(2)式を使用して目標加速度Gtgtを決定する。kd1は、減速用の正のゲイン(係数)であり、本例においては「1」に設定されている。
Gtgt(加速用)=ka1・(k1・ΔD1+k2・Vfx(a)) …(1)
Gtgt(減速用)=kd1・(k1・ΔD1+k2・Vfx(a)) …(2)
なお、追従対象車両エリアに物標が存在しない場合、運転支援ECU10は、自車両の車速SPDが「目標車間時間Ttgtに応じて設定される目標速度」に一致するように、目標速度と車速SPDに基いて目標加速度Gtgtを決定する。
運転支援ECU10は、車両の加速度が目標加速度Gtgtに一致するように、エンジンECU20を用いてエンジンアクチュエータ21を制御するとともに、必要に応じてブレーキECU30を用いてブレーキアクチュエータ31を制御する。このように、運転支援ECU10は、機能上、CPUにより実現される「追従車間距離制御(ACC)を実行するACC制御部10a」を有している。
・車線維持制御
運転支援ECU10は、追従車間距離制御の実行中に、操作スイッチ17の操作によって車線維持制御が要求されている場合、車線維持制御を実行する。
LTC(Lane Trace Control)と称呼される車線維持制御では、運転支援ECU10が先行車軌跡又は白線、若しくは、これらの両方を活用して、目標走行ライン(目標走行路)を設定する。運転支援ECU10は、自車両の横位置(即ち、道路に対する車幅方向の自車両の位置)が「その自車両が走行している走行レーン(自車両走行レーン)」内の目標走行ライン付近に維持されるように、操舵トルクをステアリング機構に付与して自車両の操舵角を変更し、以て、運転者の操舵操作を支援する(例えば、特開2008-195402号公報、特開2009-190464号公報、及び、特開2010-6279号公報等を参照。)。なお、車線維持制御は、「TJA(Traffic Jam Assis)」とも称呼される場合がある。
以下、先行車軌跡に基いて決定される目標走行ラインを用いた車線維持制御について説明を加える。なお、目標走行ラインを決定するためにその先行車軌跡が用いられる先行車は、「操舵追従先行車」と称呼される場合がある。運転支援ECU10は、目標走行ラインを決定するための先行車軌跡L0の作成対象となる物標である先行車(即ち、操舵追従先行車)110をACC追従対象車と同様に特定する。
次に、図2に示したように、運転支援ECU10は、自車両100の位置に対する所定時間毎の操舵追従先行車の位置情報を含む物標情報に基いて先行車軌跡L0を作成する。なお、図2に示したx-y座標は、自車両100の前後方向に延びる中心軸をx軸、これに直交する軸をy軸とし、自車両100の現在位置を原点(x=0、y=0)とする座標である。
図2に示す各記号は以下の通りである。
dv:現在位置(x=0、y=0)の自車両100の車幅方向の中央位置と先行車軌跡L0との間のy軸方向(実質的には道路幅方向)の距離dv
θv:自車両100の現在位置(x=0、y=0)に対応する先行車軌跡L0の方向(接線方向)と自車両100の進行方向(x軸の+の方向)とのずれ角(ヨー角)。
Cv:自車両100の現在位置(x=0、y=0)に対応する位置(x=0、y=dv)の先行車軌跡L0の曲率
Cv’:曲率変化率(先行車軌跡L0の任意の位置(x=x’、x’は任意の値)での単位距離(Δx)当たりの曲率変化量)
例えば、運転支援ECU10は、所定時間が経過するごとに、先行車110の位置を表す位置座標データ(位置情報)をRAMに保存(バッファリング)する。運転支援ECU10は、RAMに保存した先行車110の位置座標データを、それぞれの位置座標データを取得した時点における自車両100の位置及び進行方向と、現時点における自車両の位置及び進行方向と、の差に基いて、現在位置を原点(x=0、y=0)とする上述したx-y座標の位置座標データに変換する。例えば、図2の(x1,y1)、(x2,y2)、(x3,y3)及び(x4,y4)は、このように変換された先行車110の位置座標データ(以下、「変換後位置座標」と称呼する場合がある。)の例である。
運転支援ECU10は、それらの先行車110の変換後位置座標を用いた曲線フィッティング処理を実行することにより、先行車110の先行車軌跡L0を作成する。例えば、フィッティング処理に用いられる曲線は3次関数f(x)である。フィッティング処理は、例えば、最小二乗法により実行される。このように、運転支援ECU10は、機能上、CPUにより実現される「先行車の先行車軌跡L0を作成する走行軌跡作成部(走行軌跡作成手段)10b」を有している。
図3(A)に示したように、先行車軌跡L0を、3次関数:f(x)=ax3+bx2+cx+dによって定義する。図3(B)に示した関係式及び条件を用いると、図3(C)に示した「3次関数f(x)の係数(a、b、c及びd)と、曲率Cv及びヨー角θv等と、の関係」が導出される。よって、先行車軌跡L0は下記(3)式に示すように表すことができる。このように、3次関数f(x)の係数a、b、c及びdを求めることにより、先行車軌跡L0の曲率変化率Cv’、自車両100の現在位置に対応する位置の先行車軌跡L0の曲率Cv、ヨー角θv、及び、距離dvを求めることができる。
f(x)=(1/6)Cv’・x3+(1/2)Cv・x2+θv・x+dv …(3)
運転支援ECU10は、先行車軌跡L0を目標走行ラインに設定する場合、作成された3次関数f(x)の係数a、b、c及びdと、図3(C)に示した関係とから、車線維持制御に必要な目標走路情報(即ち、目標走行ラインの曲率Cv(及び曲率変化率Cv’)、目標走行ラインに対するヨー角θv、並びに、目標走行ラインに対する道路幅方向の距離dv)を取得する。
運転支援ECU10は、所定時間が経過するごとに、曲率Cvとヨー角θvと距離dvとを下記の(4)式に適用することにより目標操舵角θ*を演算する。更に、運転支援ECU10は、実際の操舵角θが目標操舵角θ*に一致するようにステアリングECU40を用いて転舵用モータ42を制御する。(4)式において、Klta1,Klta2及びKlta3は予め定められた制御ゲインである。
θ*=Klta1・Cv+Klta2・θv+Klta3・dv …(4)
次に、白線に基いて決定される目標走行ラインを用いた車線維持制御について説明を加える。図4に示したように、運転支援ECU10は、周囲センサ16から送信された情報(カメラセンサ16bが認識できている情報)に基いて、自車両100が走行している走行レーンの「左白線LL及び右白線LR」についての情報を取得する。運転支援ECU10は、取得した左白線LLと右白線LRとの道路幅方向における中央位置を結ぶラインを「走行レーンの中央ライン」LM0として推定する。このように、運転支援ECU10は、機能上、CPUにより実現される「白線LL及びLRの間の中央位置を結んだラインである中央ラインLM0を推定する区画線認識部10c」を有している。
更に、運転支援ECU10は、走行レーンの中央ラインLM0のカーブ半径R及び曲率CL(=1/R)と、左白線LLと右白線LRとで区画される走行レーンにおける自車両100の位置及び向きと、を演算する。より具体的に述べると、運転支援ECU10は、図4に示したように、自車両100の車幅方向の中央位置と走行レーンの中央ラインLM0との間の道路幅方向の距離dLと、中央ラインLM0の方向(接線方向)と自車両100の進行方向とのずれ角θL(ヨー角θL)と、を演算する。これらのパラメータは、走行レーンの中央ラインLM0を目標走行ラインに設定した場合の車線維持制御に必要な目標走路情報(目標走行ラインの曲率CL(及び曲率変化率)、目標走行ラインに対するヨー角θL、並びに、目標走行ラインに対する道路幅方向の距離dL)である。
走行レーンの中央ラインLM0を目標走行ラインに設定する場合、運転支援ECU10は、式(4)において、dvをdLに置換し、θvをθLに置換し、CvをCLに置換することにより、目標操舵角θ*を演算し、実際の操舵角θが目標操舵角θ*に一致するように転舵用モータ42を制御する。
なお、運転支援ECU10は、先行車軌跡L0と走行レーンの中央ラインLM0との組み合わせによって目標走行ラインを作成してもよい。より具体的に述べると、例えば、図5に示すように、運転支援ECU10は、先行車軌跡L0が「先行車軌跡L0の形状(曲率)を維持した軌跡であって且つ自車両100の近傍における中央ラインLM0の位置及び当該中央ラインLM0の方向(接線方向)と一致した軌跡」となるように、先行車軌跡L0を補正する。これにより、先行車軌跡のL0の形状が維持された軌跡であって、車線幅方向の誤差が小さい「補正した先行車軌跡(「補正先行車軌跡」と称呼される場合がある。)L0*」を目標走行ラインとして得ることができる。そして、運転支援ECU10は、補正先行車軌跡L0*を目標走行ラインに設定した場合の目標走路情報を取得し、その目標走路情報と上記(4)式とから目標操舵角θ*を演算し、実際の操舵角θが目標操舵角θ*に一致するように転舵用モータ42を制御する。
本実施装置の運転支援ECU10は、以下に述べる(a)乃至(d)のように、先行車の有無及び白線の認識状況に応じて目標走行ラインを設定して車線維持制御を実行する。
(a)左右の白線が遠方まで認識できている場合、運転支援ECU10は、走行レーンの中央ラインLM0に基いて目標走行ラインを設定して車線維持制御を実行する。
(b)自車両の前方に操舵追従先行車が存在し且つ左右の白線が認識できていない場合、運転支援ECU10は、操舵追従先行車の先行車軌跡L0に基いて目標走行ラインを設定して車線維持制御を実行する。
(c)自車両の前方に操舵追従先行車が存在し且つ自車両の近傍の左右の白線が認識できている場合、運転支援ECU10は、操舵追従先行車の先行車軌跡L0を白線により補正した補正先行車軌跡L0*を目標走行ラインとして設定して車線維持制御を実行する。
(d)自車両の前方に操舵追従先行車が存在せず且つ道路の白線が遠方まで認識できていない場合、運転支援ECU10は、車線維持制御をキャンセルする。
更に、上記の(b)及び(c)の状況において、隣接レーンが存在し且つ当該隣接レーンに隣接車が存在している場合、運転支援ECU10は、後述するように、先行車軌跡L0及び隣接車の走行軌跡(即ち、隣接車軌跡)の両方、又は、先行車軌跡L0に基いて車線維持制御を実行する。以上のように、運転支援ECU10は、機能上、CPUにより実現される「車線維持制御を実行するLTC制御部(車線維持制御手段)10d」を有している。
<作動の概要>
上記の(b)及び(c)の何れかの状況において、自車両が走行している走行レーンに隣接する隣接レーンであって自車両の前方領域を走行する他車両(隣接車)が存在する場合、その隣接車の走行軌跡をも利用して目標走行レーン(換言すると、目標走路情報)を設定する方が、自車両を走行レーンの中央付近により安定して走行させることができる場合がある。これは、例えば、操舵追従先行車が車線変更を企てているなどの理由により、走行レーンに沿って安定して走行していない場合があるからである。
一方、隣接車が隣接レーンに沿って走行していない場合に、この隣接車の隣接車軌跡を活用して目標走行ラインが設定された場合、隣接車の道路幅方向における走行挙動が目標走行ラインに反映されてしまう。この場合、自車両が走行レーンに沿って安定して走行できない状況が却って生じる。そこで、運転支援ECU10は、隣接レーンを走行する隣接車を特定し、その特定した隣接車が隣接レーンに沿って安定して走行しているか否かを判定する。更に、運転支援ECU10は、隣接車が隣接レーンに沿って安定して走行していると判定した場合、その隣接車の隣接車軌跡を目標走路情報に反映させた上で車線維持制御を実行する。
<処理の内容>
以下、隣接車軌跡を目標走路情報に反映させるための制御内容について図6乃至図8を参照しながら説明する。図6乃至図8の例においては、運転支援ECU10は、追従車間距離制御(ACC)を実行している。更に、以下の条件1及び条件2の両方が成立している状況下で、運転支援ECU10が車線維持制御(LTC)を実行することを前提としている。
(条件1)自車両の前方領域に操舵追従先行車が存在しており、運転支援ECU10が当該操舵追従先行車の先行車軌跡L0に基いて目標走行ラインを設定して車線維持制御を実行している(即ち、上記の状況(b)が生じている。)。
(条件2)自車両が走行している走行レーンに隣接する隣接レーンが存在しており、且つ、隣接レーンに自車両の前方領域を走行する隣接車が存在している。
図6に示した例では、自車両100が走行レーン610を走行しており、操舵追従先行車110が自車両100の前方領域を走行している。第1隣接車111が、走行レーン610に対して右側に隣接する第1隣接レーン620を走行しており、第2隣接車112が、走行レーン610に対して左側に隣接する第2隣接レーン630を走行している。
(隣接車の選択)
このような状況が生じると、運転支援ECU10は、先ず、第1隣接レーン620及び第2隣接レーン630の各々から1つ以上の隣接車を選択する。運転支援ECU10は、上記の追従対象車両エリアの右側に隣接するエリアであって、追従対象車両エリアと同じ幅(道路幅方向の長さ)を有する第1隣接車両エリア内に物標が所定時間にわたって存在する場合、その物標を第1隣接車として選択する。なお、第1隣接車両エリアは追従対象車両エリアを走行レーンの幅(幅員)だけ第1隣接レーン620側に平行移動したエリアである。同様に、運転支援ECU10は、上記の追従対象車両エリアの左側に隣接するエリアであって、追従対象車両エリアと同じ幅(道路幅方向の長さ)を有する第2隣接車両エリア内に物標が所定時間にわたって存在する場合、その物標を第2隣接車として選択する。なお、第2隣接車両エリアは追従対象車両エリアを走行レーンの幅(幅員)だけ第2隣接レーン630側に平行移動したエリアである。
図6に示した例では、運転支援ECU10は、第1隣接レーン620から第1隣接車111を選択し、第2隣接レーン630から第2隣接車112を選択する。なお、1つの隣接レーンに複数の隣接車が存在している場合、運転支援ECU10は、自車両100に対してより遠い位置を走行している隣接車を選択することが好ましい。より遠い位置を走行している隣接車を選択することにより、運転支援ECU10は、自車両100に対して遠い位置の隣接車軌跡、即ち、隣接レーンの形状(曲率)を目標走路情報に反映させることができる。
第1隣接レーン620から選択される隣接車の数と第2隣接レーン630から選択される隣接車の数は同じであることが好ましい。図7に示すように、第2隣接レーン630が他のレーン610及び620から分岐してカーブしている場合、第2隣接レーン630から選択される隣接車の数が第1隣接レーン620から選択される隣接車の数よりも多いと、第2隣接レーン630を走行している隣接車の隣接車軌跡が目標走路情報に与える影響が大きくなり、自車両100が走行レーン610に沿って安定して走行することができなくなる可能性がある。2つの隣接レーン620及び630の各々から同じ数の隣接車を選択することによって、2つの隣接レーンのうちの1つが分岐してカーブしている場合でも、当該カーブしている隣接レーンを走行している隣接車の隣接車軌跡の影響をできるだけ小さくすることができる。
一方、第1隣接レーン620に複数の隣接車が存在し、第2隣接レーン630に隣接車が存在していないと仮定する。この場合、運転支援ECU10は、第2隣接レーン630から隣接車を選択できない。このとき、運転支援ECU10は、第1隣接レーン620から1台の隣接車を選択してもよいし、第1隣接レーン620から複数の隣接車を選択してもよい。なお、第2隣接レーン630に複数の隣接車が存在し、第1隣接レーン620に隣接車が存在していない場合についても同様である。以上のように、運転支援ECU10は、機能上、CPUにより実現される「隣接レーンを走行している隣接車を選択する隣接車選択部10e」を有している。
(隣接車軌跡の作成)
運転支援ECU10は、所定時間が経過するごとに、隣接車111及び112の各々の位置を表す位置座標データをRAMに保存している。運転支援ECU10は、上述した先行車軌跡L0を作成する手順と同様に、第1隣接車111の変換後位置座標に対して曲線フィッティング処理を実行することにより、第1隣接車111の走行軌跡である第1隣接車軌跡L1を作成する。同様に、運転支援ECU10は、第2隣接車112の位置座標データの変換後位置座標に対して曲線フィッティング処理を実行することにより、第2隣接車112の走行軌跡である第2隣接車軌跡L2を作成する。なお、隣接車軌跡L1及びL2を作成する機能は、上記の走行軌跡作成部10bに含まれる。
(白線位置及び中央ラインの推定)
上述したように、運転支援ECU10は、隣接車が隣接レーンに沿って安定して走行しているか否かを判定する。この判定は、走行レーン及び隣接レーンの白線位置及び/又はそれらのレーンの中央ラインを基準として行われる。そこで、運転支援ECU10は、先ず、白線位置及び中央ラインを次のようにして推定する。
図8に示すように、運転支援ECU10は、走行レーン610を区画する第1白線810及び第2白線820、第1隣接レーン620の右端を区画する第3白線830、並びに、第2隣接レーン630の左端を区画する第4白線840の認識状況に応じて、白線位置の推定処理と、走行レーン610及び隣接レーン620、630の中央ラインの推定処理と、を実行する。白線位置の推定処理とは、第1乃至第4白線(810-840)のうち、運転支援ECU10がその位置(自車両近傍の白線位置)を認識できていない白線の位置を推定するための処理である。
白線の認識状況は、以下の状況1乃至状況3を含む。
(状況1):運転支援ECU10は、自車両100の近傍において、第1白線810乃至第4白線の総てを認識できている。
(状況2):運転支援ECU10は、自車両100の近傍において、第1白線810及び第2白線820のみを認識できている。
(状況3):運転支援ECU10は、自車両100の近傍において、第1白線810乃至第4白線840の何れも認識できていない。
・状況1
図8(A)に示した「状況1」の場合、運転支援ECU10は白線位置の推定処理を実行する必要がなく、それ故、白線位置の推定処理を実行しない。運転支援ECU10は、認識できている白線810乃至840の位置に基いて、走行レーン610の中央ラインLM0、第1隣接レーン620の中央ラインLM1及び第2隣接レーン630の中央ラインLM2を推定する。
・状況2
図8(B)に示した「状況2」の場合、運転支援ECU10は、以下に述べるように、認識できている「第1白線810及び第2白線820」の位置に基いて、第3白線830及び第4白線840の位置を推定する処理(白線位置の推定処理)を実行する。更に、運転支援ECU10は、以下に述べるように、認識できている「第1白線810及び第2白線820」の位置に基いて、走行レーン610の中央ラインLM0、第1隣接レーン620の中央ラインLM1及び第2隣接レーン630の中央ラインLM2を推定する処理(中央ラインの推定処理)を実行する。
より具体的に述べると、まず、運転支援ECU10は、認識できている第1白線810と認識できている第2白線820との間の道路幅方向における中央位置(中心位置)を結ぶ線を中央ラインLM0として推定する。中央ラインLM0の位置を表す関数を「y=g(x)」と表記する。
更に、運転支援ECU10は、第1白線810と第2白線820との間の道路幅W1を「第1白線810及び第2白線820」の位置に基いて演算する。ここで、第1隣接レーン620の中央ラインLM1の位置を表す関数を「y=ha(x)」と表記し、第3白線830の位置を表す関数を「y=ka(x)」と表記する。運転支援ECU10は、第1隣接レーン620が走行レーン610と同じ道路幅W1を有すると仮定している。この仮定によれば、ha(x)及びka(x)の各々は、下記(5)式及び(6)式のように、g(x)を道路幅方向(この例では、y軸方向)に平行移動させた関数として表すことができる。
ha(x)=g(x)-W1 …(5)
ka(x)=g(x)-(1.5×W1) …(6)
更に、第2隣接レーン630の中央ラインLM2の位置を表す関数を「y=hb(x)」と表記し、第4白線840の位置を表す関数を「y=kb(x)」と表記する。運転支援ECU10は、第2隣接レーン630が走行レーン610と同じ道路幅W1を有すると仮定している。この仮定によれば、hb(x)及びkb(x)の各々は、下記(7)式及び(8)式のように、g(x)を道路幅方向に平行移動させた関数として表すことができる。
hb(x)=g(x)+W1 …(7)
kb(x)=g(x)+(1.5×W1) …(8)
以上のように、運転支援ECU10は、第3白線830(y=ka(x))、第4白線840(y=kb(x))、第1隣接レーン620の中央ラインLM1(y=ha(x))、及び、第2隣接レーン630の中央ラインLM2(y=hb(x))を推定する。
・状況3
図8(C)に示した「状況3」の場合、運転支援ECU10は、以下に述べるように、操舵追従先行車110の先行車軌跡L0に基いて、第1白線810乃至第4白線840の位置を推定する処理(白線位置の推定処理)と、走行レーン610の中央ラインLM0、第1隣接レーン620の中央ラインLM1及び第2隣接レーン630の中央ラインLM2を推定する処理(中央ラインの推定処理)と、を実行する。
ところで、運転支援ECU10は、走行中に少なくとも「第1白線810及び第2白線820」を認識した場合、第1白線810及び第2白線820の位置に基いて走行レーン610の道路幅Weを算出し、その算出した道路幅WeをRAMに記憶している。運転支援ECU10は、現時点で第1白線810及び第2白線820を認識できない場合、RAMに記憶した道路幅Weを用いて白線位置及び中央ラインの推定を行う。なお、道路幅Weは、運転支援ECU10に予め記憶されている所定値でもよく、地図データベース52に記憶されている道路情報に含まれている値であってもよい。
先行車軌跡L0を表す3次関数を「f0(x)」と表記し、第1白線810の位置を表す関数を「y=m(x)」と表記する。運転支援ECU10は、操舵追従先行車110が走行レーン610の略中央位置を走行しており、且つ、走行レーン610及び第1隣接レーン620が道路幅Weを有すると仮定している。この仮定によれば、関数m(x)、ha(x)及びka(x)の各々は、下記(9)式乃至(11)式のように、関数f0(x)を道路幅方向に平行移動させた関数として表すことができる。
m(x)=f0(x)-(0.5×We) …(9)
ha(x)=f0(x)-We …(10)
ka(x)=f0(x)-(1.5×We) …(11)
更に、第2白線820の位置を表す関数を「y=n(x)」と表記する。運転支援ECU10は、操舵追従先行車110が走行レーン610の略中央位置を走行しており、且つ、第2隣接レーン630が道路幅Weを有すると仮定している。この仮定によれば、関数n(x)、hb(x)及びkb(x)の各々は、下記(12)式乃至(14)式のように、関数f0(x)を道路幅方向に平行移動させた関数として表すことができる。
n(x)=f0(x)+(0.5×We) …(12)
hb(x)=f0(x)+We …(13)
kb(x)=f0(x)+(1.5×We) …(14)
以上のように、運転支援ECU10は、第1白線810(y=m(x))、第2白線820(y=n(x))、第3白線830(y=ka(x))、第4白線840(y=kb(x))、走行レーン610の中央ラインLM0、第1隣接レーン620の中央ラインLM1(y=ha(x))、及び、第2隣接レーン630の中央ラインLM2(y=hb(x))を推定する。
なお、第1白線810及び第2白線820の一方のみが認識できている状況においては、第1白線810及び第2白線820のうちの認識できている白線の位置と、記憶している道路幅Weと、から第1白線810及び第2白線820のうちの認識できていない白線と、第3白線830及び第4白線840と、中央ラインLM0、LM1及びLM2と、を推定すればよい。以上のように、運転支援ECU10は、機能上、CPUにより実現される「走行レーン610及び隣接レーン620、630のそれぞれを区画する区画線、並びに、走行レーン610及び隣接レーン620、630のそれぞれの中央ラインを推定する推定処理部10f」を有している。
(隣接車の走行位置の演算)
運転支援ECU10は、白線に対する第1隣接車111の走行位置を特定するためのパラメータとして、図8に示した「第1距離da1及び第2距離da2」を演算する。第1距離da1及び第2距離da2は、第1隣接車111が第1隣接レーン620に沿って安定して走行しているか否かの判定に使用される。
第1距離da1は、第1隣接車111の車幅方向の中心位置(X1,Y1)と第1白線810との間の道路幅方向における距離である。
第2距離da2は、第1隣接車111の車幅方向の中心位置(X1,Y1)と第3白線830との間の道路幅方向における距離である。
更に、運転支援ECU10は、白線に対する第2隣接車112の走行位置を特定するためのパラメータとして、図8に示した「第3距離db1及び第4距離db2」を演算する。第3距離db1及び第4距離db2は、第2隣接車112が第2隣接レーン630に沿って安定して走行しているか否かの判定に使用される。
第3距離db1は、第2隣接車112の車幅方向の中心位置(X2,Y2)と第2白線820との間の道路幅方向における距離である。
第4距離db2は、第2隣接車112の車幅方向の中心位置(X2,Y2)と第4白線840との間の道路幅方向における距離である。
図8(A)に示した「状況1」の場合、運転支援ECU10は、認識できている第1白線810及び第3白線830と、第1隣接車111の位置(X1,Y1)とに基いて、第1距離da1及び第2距離da2を演算する。更に、運転支援ECU10は、認識できている第2白線820及び第4白線840と、第2隣接車112の位置(X2,Y2)とに基いて、第3距離db1及び第4距離db2を演算する。
図8(B)に示した「状況2」の場合、運転支援ECU10は、認識できている第1白線810及び第1隣接車111の位置(X1,Y1)に基いて第1距離da1を演算し、認識できている第2白線820及び第2隣接車112の位置(X2,Y2)に基いて第3距離db1を演算する。更に、運転支援ECU10は、下記(15)式に基いて第2距離da2を演算し、下記(16)式に基いて第4距離db2を演算する。ここで、「f1(x)」は第1隣接車軌跡L1を表す3次関数であり、「f2(x)」は、第2隣接車軌跡L2を表す3次関数である。
da2=|f1(X1)-ka(X1)| …(15)
db2=|f2(X2)-kb(X2)| …(16)
図8(C)に示した「状況3」の場合、運転支援ECU10は、下記式(17)乃至式(20)に基づき、第1距離da1、第2距離da2、第3距離db1及び第4距離db2を演算する。
da1=|f1(X1)-m(X1)| …(17)
da2=|f1(X1)-ka(X1)| …(18)
db1=|f2(X2)-n(X2)| …(19)
db2=|f2(X2)-kb(X2)| …(20)
なお、(15)式乃至(20)式において、f1(X1)の代わりに、第1隣接車111の実際のY座標であるY1が用いられてもよく、f2(X2)の代わりに、第2隣接車112の実際のY座標であるY2が用いられてもよい。
(隣接車の横速度の演算)
運転支援ECU10は、第1隣接車111及び第2隣接車112の各々の横速度を演算する。この横速度も、隣接車が隣接レーンに沿って安定して走行しているか否かの判定に使用される。
「状況1」の場合、運転支援ECU10は、第1隣接車111の現在の位置における「第1隣接車軌跡L1と第1隣接レーン620の中央ラインLM1とがなす角度θ1」を演算する。そして、運転支援ECU10は、下記(21)式に基いて第1隣接車111の横速度V1を演算する。「Vs1」は、自車両100の進行方向における第1隣接車111の車速である。第1隣接車111の車速Vs1は、第1隣接車111の相対速度Vfx(111)に自車両100の車速SPDを加えることにより算出される。
第1隣接レーン620の中央ラインLM1と第1白線810とは、上述した関数m(x)及び関数ha(x)の式から明らかなように、互いに平行であるから、横速度V1は、走行レーン610と第1隣接レーン620との区画線(即ち、第1白線810)に対する第1隣接車111のレーン幅方向の速度である。
V1=Vs1×sinθ1 …(21)
更に、運転支援ECU10は、第2隣接車112の現在の位置における「第2隣接車軌跡L2と第2隣接レーン630の中央ラインLM2とがなす角度θ2」を演算する。そして、運転支援ECU10は、下記(22)式に従って第2隣接車112の横速度V2を演算する。「Vs2」は、自車両100の進行方向における第2隣接車112の車速である。第2隣接車112の車速は、第2隣接車112の相対速度Vfx(112)に自車両100の車速SPDを加えることにより算出される。
第2隣接レーン630の中央ラインLM2と第2白線820とは、上述した関数n(x)及び関数hb(x)の式から明らかなように、互いに平行であるから、横速度V2は、走行レーン610と第2隣接レーン630との区画線(即ち、第2白線820)に対する第2隣接車112のレーン幅方向の速度である。
V2=Vs2×sinθ2 …(22)
「状況2」及び「状況3」の何れかの場合、運転支援ECU10は、下記(23)式及び(24)式に基いて、角度θ1及び角度θ2を演算する。ここで、「f1’(X1)」はf1(x)を微分した関数に対してX1を代入して得られた値であり、「ha’(X1)」はha(x)を微分した関数に対してX1を代入して得られた値である。「f2’(X2)」はf2(x)を微分した関数に対してX2を代入して得られた値であり、「hb’(X2)」はhb(x)を微分した関数に対してX2を代入して得られた値である。
θ1=arctan(f1’(X1)-ha’(X1)) …(23)
θ2=arctan(f2’(X2)-hb’(X2)) …(24)
以下、上記の第1距離da1乃至第4距離db2、並びに、横速度V1及びV2等の隣接車の走行状態を表す情報を「走行状態情報」と称呼する場合がある。以上のように、運転支援ECU10は、機能上、CPUにより実現される「隣接車の各々の走行状態情報を演算する走行状態演算部10g」を有している。
(隣接車に対する走行条件の判定)
運転支援ECU10は、第1隣接車111及び第2隣接車112の各々の走行状態情報に基いて、それら隣接車の各々が所定の走行条件を満たしているかを判定する。走行条件は、隣接車が隣接レーンに沿って走行しているか否かを判定するための条件である。走行条件は、隣接車が隣接レーンの中央ライン付近を走行しており、且つ、隣接車の道路幅方向の挙動(即ち、横速度)が所定の閾値以下であるときに成立する。
具体的には、第1隣接車111についての走行条件は、下記条件A及び条件Bの両方が成立したときに成立する。なお、第1隣接車111についての走行条件は、条件Bのみが成立したときに成立する条件であってもよい。
(条件A):|da1-da2|≦Th1(以下、「第1閾値」と称呼する。)
(条件B):|V1|≦Th2(以下、「第2閾値」と称呼する。)
第1隣接車111が上記の走行条件を満たしている場合、運転支援ECU10は、第1隣接車111の第1隣接車軌跡L1の情報を目標走路情報へ反映させる。第1隣接車111が上記の走行条件を満たしていない場合、運転支援ECU10は、第1隣接車111の第1隣接車軌跡L1の情報を目標走路情報へ反映させない。
第2隣接車112についての走行条件は、下記条件C及び条件Dの両方が成立したときに成立する。なお、第2隣接車112についての走行条件は、条件Dのみが成立したときに成立する条件であってもよい。
(条件C):|db1-db2|≦Th1
(条件D):|V2|≦Th2
第2隣接車112が上記の走行条件を満たしている場合、運転支援ECU10は、第2隣接車112の第2隣接車軌跡L2の情報を目標走路情報へ反映させる。第2隣接車112が上記の走行条件を満たしていない場合、運転支援ECU10は、第2隣接車112の第2隣接車軌跡L2の情報を目標走路情報へ反映させない。
以上のように、運転支援ECU10は、機能上、CPUにより実現される「走行状態情報に基いて隣接車の各々が所定の走行条件を満たしているか(即ち、隣接車の各々が隣接レーンに沿って安定して走行しているか否か)を判定する走行条件判定部(判定手段)10h」を有している。
(目標走路情報の演算)
選択された隣接車(111、112)の中の少なくとも1つが走行条件を満たしている場合、運転支援ECU10は、走行条件を満たしている隣接車の隣接車軌跡及び先行車軌跡に基いて、以下に述べるように目標走路情報を演算する。
自車両100の現在位置に対応する位置(x=0)の先行車軌跡L0の曲率を「Cv_0」と表記し、自車両100の現在位置に対応する位置の第1隣接車軌跡L1の曲率を「Cv_1」と表記し、自車両100の現在位置に対応する位置の第2隣接車軌跡L2の曲率を「Cv_2」と表記する。更に、「Cv_0」に対する重みを「w0」と表記し、「Cv_1」に対する重みを「w1」と表記し、「Cv_2」に対する重みを「w2」と表記する。運転支援ECU10は、以下の式(25)のように、加重平均に基いて、目標走路情報の一つである修正後曲率F_Cvを演算する。なお、式(25)は、隣接レーンのそれぞれから1台のみの隣接車が選択される場合に適用される式である。
いま、第1隣接車111は走行条件を満たしているが、第2隣接車112は走行条件を満たしていないと仮定する。この場合、運転支援ECU10は、重みw2を「0」に設定する。その結果、第2隣接車112の第2隣接車軌跡L2の曲率Cv_2は修正後曲率F_Cvに反映されない。これに対し、運転支援ECU10は、重みw0及び重みw1を予め定められた「正の所定値」に設定する。この結果、第1隣接車軌跡L1の曲率Cv_1が修正後曲率F_Cvに反映される。なお、この場合、重みw1と重みw0とは互いに異なる値に設定されてもよく、互いに同じ値であってもよい。
これに対し、第2隣接車112は走行条件を満たしているが、第1隣接車111は走行条件を満たしていないと仮定する。この場合、運転支援ECU10は、重みw1を「0」に設定し、重みw0及び重みw2を予め定められた「正の所定値」に設定する。この結果、曲率Cv_1は修正後曲率F_Cvに反映されず、曲率Cv_2が修正後曲率F_Cvに反映される。なお、この場合、重みw2と重みw0とは互いに異なる値に設定されてもよく、互いに同じ値であってもよい。更に、第2隣接車112及び第1隣接車111の何れもが走行条件を満たしている場合、運転支援ECU10は、重みw0、重みw1及び重みw2を予め定められた「正の所定値」に設定する。この結果、曲率Cv_1及び曲率Cv_2の何れもが修正後曲率F_Cvに反映される。この場合、これらの重みは互いに異なる値に設定されてもよく、互いに同じ値であってもよい。
運転支援ECU10は、(4)式の「Cv」を「F_Cv」に置き換えて、目標操舵角θ*を演算する。運転支援ECU10は、実際の操舵角θが目標操舵角θ*に一致するようにステアリングECU40を用いて転舵用モータ42を制御する。
なお、仮に隣接車111、112の総てが走行条件を満たしていない場合、(25)式において、重みw1及びw2が「0」に設定される。この場合、運転支援ECU10は、先行車軌跡L0の曲率Cv_0のみに基いて最終的な修正後曲率F_Cvを演算する。以上説明した「目標走路情報の一つである修正後曲率F_Cvを演算する機能」は、LTC制御部10dに含まれる。
<具体的作動>
次に、運転支援ECU10のCPU(単に「CPU」と称呼する場合がある。)の具体的作動について説明する。CPUは、車線維持制御(LTC)の中の1つのルーチンとして、所定時間が経過する毎に、図9により示したルーチンを実行するようになっている。なお、CPUは、追従車間距離制御(ACC)が実行されていて、且つ、操作スイッチ17の操作によって車線維持制御(LTC)が要求されている場合に図9に示したルーチンを実行する。なお、説明の便宜上、CPUは上記の状況(c)に記載したような補正先行車軌跡L0*を目標走行ラインとして設定した車線維持制御は実行しないが、補正先行車軌跡L0*を目標走行ラインとして設定した車線維持制御を実行してもよい。
従って、追従車間距離制御(ACC)が実行されていて、且つ、操作スイッチ17の操作によって車線維持制御(LTC)が要求されている場合に所定のタイミングになると、CPUは、ステップ900から図9のルーチンを開始してステップ905に進み、所定の実行条件が成立しているか否かを判定する。所定の実行条件は、次の2つの条件が何れも成立したときに成立する。
・自車両の前方に操舵追従先行車が存在している。
・隣接レーンが存在しており、且つ、隣接レーンに他車両が存在している。
所定の実行条件が成立していない場合、CPUはステップ905にて「No」と判定し、ステップ995に進んで本ルーチンを一旦終了する。この場合、左右の白線が遠方まで認識できていれば、CPUは、図示しないルーチンを実行することにより、その左右の白線に基いて走行レーンの中央ラインLM0を決定し、決定した中央ラインLM0を目標走行ラインとして設定する車線維持制御を実行する。
これに対して、所定の実行条件が成立している場合、CPUはステップ905にて「Yes」と判定し、以下に述べるステップ910乃至ステップ925の処理を順に行い、ステップ930に進む。
ステップ910:CPUは、周囲センサ16から送られてくる物標情報に基いて追従対象車両エリア内に所定時間以上存在する物標の中で自車両に最も近い物標を操舵追従先行車として選択する。
ステップ915:CPUは、上述したように、ステップ910にて選択された操舵追従先行車の先行車軌跡L0を作成する。
ステップ920:CPUは、上述したように、隣接レーンの各々から1つ以上(本例では1つ)の隣接車を選択する。
ステップ925:CPUは、上述したように、ステップ920にて選択された隣接車の隣接車軌跡を作成する。
CPUは、ステップ930にて、走行レーン及び隣接レーンを区画する総ての白線が認識できているか否かを判定する。「総ての白線が認識できている」とは、図8(A)を参照して説明した「状況1」を意味する。CPUは、総ての白線が認識できている場合、ステップ930にて「Yes」と判定してステップ935に進み、上述したように、認識されている白線に基いて、走行レーン及び隣接レーンの各々の中央ラインを推定する。その後、CPUは以下に述べるステップ945乃至ステップ960の処理を順に行い、ステップ995に進んで本ルーチンを一旦終了する。
一方、走行レーン及び隣接レーンを区画する総ての白線の何れか又は全部が認識できていない場合(例えば、上述した「状況2(図8(B))」又は「状況3(図8(C))」の場合)、CPUは、ステップ940に進み、上述したように、認識できていない白線、並びに、走行レーン及び隣接レーンの各々の中央ラインを推定する。その後、CPUは以下に述べるステップ945乃至ステップ960の処理を順に行い、ステップ995に進んで本ルーチンを一旦終了する。
ステップ945:CPUは、上述したように隣接車の各々の走行状態情報を演算する。走行状態情報は、白線に対する隣接車の位置の情報(例えば、da1、da2、db1及びdb2)、及び、隣接車の横速度(V1及びV2)を含む。
ステップ950:CPUは、ステップ920にて選択した隣接車の各々が上記の走行条件を満たしているか否かを判定する。即ち、CPUは、ステップ920にて選択した隣接車の各々が、各隣接レーンの中央ライン付近を走行しており(条件A又は条件Cを参照。)、且つ、道路幅方向の挙動(即ち、横速度)が所定の閾値以下である(条件B又は条件Dを参照。)か否かを判定する。
ステップ955:CPUは、上述したように、修正後曲率F_Cvを目標走路情報として演算する。具体的には、CPUは、式(25)において、走行条件を満たしていない隣接車の隣接車軌跡の曲率に対する重みを「0」に設定するとともに、走行条件を満たしている隣接車の隣接車軌跡の曲率に対する重みを予め定められた「正の所定値」に設定することにより、修正後曲率F_Cvを演算する。更に、CPUは、先行車軌跡L0に対するヨー角θv及び先行車軌跡L0に対する道路幅方向の距離dvを、目標走路情報として演算する。
ステップ960:CPUは、ステップ955にて算出した目標走路情報に基いて目標走行ラインを設定し、当該目標走行ラインに沿って車線維持制御を実行する。
以上説明したように、本実施装置は、所定の走行条件を用いて、隣接レーン620、630を走行している隣接車(111、112)の中から、その走行軌跡を自車両100の操舵制御に用いることが適切な隣接車を選択する。即ち、本実施装置は、隣接レーンに沿って走行している隣接車を選択する。そして、本実施装置は、所定の走行条件を満たしている隣接車の隣接車軌跡の曲率及び先行車軌跡の曲率に基いて、目標走路情報の一つである修正後曲率F_Cvを演算し、当該目標走路情報を用いて(即ち、当該目標走路情報に基いて目標走行ラインを設定した上で)車線維持制御を実行する。従って、隣接レーンに沿って走行していない隣接車の隣接車軌跡の曲率が目標走路情報(或いは、目標走行レーン)に反映されないので、自車両100は走行レーンを安定して走行することができる。
なお、本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。
例えば、ステップ915にて、CPUは、カルマンフィルタを用いて先行車軌跡L0を生成してもよい。運転支援ECU10が備えるカルマンフィルタに自車両の位置情報及びRAMに格納しておいた先行車の位置情報を入力すると、カルマンフィルタから、自車両100の現在位置の先行車軌跡L0の曲率、先行車軌跡L0の曲率変化率、先行車軌跡L0に対する自車両100のヨー角、先行車軌跡L0と自車両100の現在位置との間の距離が出力される。CPUは、図3(C)に示した3次関数の係数と曲率及びヨー角等との関係を用いることにより、3次関数f(x)の係数a、b、c及びdを求めることができる。同様に、ステップ925にて、CPUは、カルマンフィルタを用いて隣接車軌跡L1、L2を生成してもよい。
CPUは、ステップ920にて、隣接レーンにおいて検出された総ての隣接車を選択し、その後、ステップ955にて、修正後曲率F_Cvに反映させる隣接車を選択してもよい。例えば、第1隣接レーン620に3台の隣接車が存在していると仮定する。CPUは、ステップ920にて、総ての隣接車を選択する。その後、CPUは、総ての隣接車に対して、ステップ925、945及び950の処理を実行する。そして、CPUは、ステップ955にて、第1隣接レーン620の3台の隣接車のうち走行条件を満たしている隣接車の中から1つの隣接車を選択し、その選択した隣接車の隣接車軌跡の曲率を式(25)のCv_1として採用し、そのCv_1に対する重みw1を予め定められた「正の所定値」に設定する。このような構成によれば、以下の効果がある。例えば、第1隣接レーン620の3台の隣接車の中に、走行条件を満たしている隣接車と走行条件を満たしていない隣接車とが含まれていると仮定する。CPUが、ステップ920にて、3台の隣接車の中から、その後の判定により走行条件を満たしていないと判定される1台の隣接車を選択してしまう場合がある。この場合、ステップ955にて、その選択された隣接車の隣接車軌跡の曲率は修正後曲率F_Cvに反映されない。このように、走行条件を満たしている隣接車が存在しているにも関わらず、その隣接車の隣接車軌跡を活用して車線維持制御を実行することができない場合がある。一方、本変形例に係るCPUは、ステップ955にて、3台の隣接車の中から、走行条件を満たしている隣接車の隣接車軌跡の曲率を採用するので、走行条件を満たしている隣接車の隣接車軌跡の曲率を修正後曲率F_Cvに確実に反映させることができる。なお、第2隣接レーン630に複数の隣接車が存在している場合にも、CPUは、上述した内容と同様の処理を実行することができる。
第1隣接車111の横速度V1は、第1距離da1又は第2距離da2の単位時間当たりの変化量によって求められてもよい。更に、第2隣接車112の横速度V2は、第3距離db1又は第4距離db2の単位時間当たりの変化量によって求められてもよい。
第1隣接車111が自車両100の位置から所定距離以上離れている場合、式(15)、式(17)及び式(18)で使用されるxの値は、実際の値(X1)よりも小さい値であってもよい。これは、自車両100により近い位置で第1隣接車111が所定の走行条件を満たしているかを判定するためである。例えば、式(15)、式(17)及び式(18)で使用されるxの値は、操舵追従先行車110の現在の位置のx座標の値(即ち、X0。図8(C)参照。)であってもよい。別の例として、自車両100の近傍において第1白線810及び第3白線830の何れかが認識されている場合、式(15)、式(17)及び式(18)で使用されるxの値は、認識できている白線の認識最遠点のxの値(即ち、認識できている白線の位置を表す座標のうち、自車両100から最も遠い座標のxの値)であってもよい。なお、第2隣接車112が自車両100の位置から所定距離以上離れている場合、式(16)、式(19)及び式(20)で使用されるxの値についても、上述した内容と同様の値を採用することができる。
本発明装置は、補正先行車軌跡L0*を用いた車線維持制御を実行する場合にも適用できる。即ち、本発明装置は、補正先行車軌跡L0*の曲率を(25)式の「Cv_0」としてもよい。
走行レーン610、第1隣接レーン620及び第2隣接レーン630がカーブしている場合、走行レーン610の曲率と、第1隣接レーン620及び第2隣接レーン630の各々の曲率との間の相対的な差が大きくなる。このような場合に隣接車軌跡の曲率を用いて修正後曲率F_Cvを演算すると、自車両100が走行レーン610に沿って走行できない可能性がある。このような場合、CPUは、ステップ955にて、(25)式における隣接車軌跡L1、L2の曲率の各々に対する重みw1、w2を「0」に設定してもよい。
図6乃至図8では、片道3車線の道路を図示したが、本実施装置の適用範囲は、この形式の道路に限定されない。本実施装置は、片道2車線の道路、又は、片道4車線以上の道路に適用されてもよい。
本実施装置では、車線維持制御を追従車間距離制御(ACC)の実行中にのみ実行するようになっているが、追従車間距離制御の実行中でなくても車線維持制御を実行してもよい。