(58)【調査した分野】(Int.Cl.,DB名)
前記汎用プロセッサは複数の処理装置とタスク分配器を備え、前記タスク分配器は前記タスクアービトレータから前記サブシステムタスクを受け取り、前記サブシステムタスクをそれぞれ、選択された処理装置に送ることを特徴とする請求項4に記載の制御システム。
前記制御システムは、前記汎用プロセッサがアクセス可能なメモリを備え、前記ソフトウエアアプリケーションは異なるメモリパーティションに保持されることを特徴とする請求項1に記載の制御システム。
前記タスクアービトレータは、各サブシステムタスクに割り当てられた安全レベルに基づいて、多数のサブシステムタスクの実行の順序に優先順位を付けることを特徴とする請求項10に記載の方法。
前記汎用プロセッサは複数の処理装置とタスク分配器を備え、前記タスク分配器は前記タスクアービトレータから前記複数のサブシステムタスクを受け取り、前記複数のサブシステムタスクをそれぞれ選択された処理装置に送ることを特徴とする請求項12に記載の方法。
前記方法は、前記汎用プロセッサがアクセス可能なメモリを備え、前記ソフトウエアアプリケーションが異なるメモリパーティションに保持されることを特徴とする請求項9に記載の方法。
【発明を実施するための形態】
【0009】
以下、図面を用いて、本発明の実施形態による制御システム等の構成及び動作について説明する。なお、各図において、同一符号は同一部分を示す。
【0010】
図1には、電気自動車等の車両20のための複数の車両サブシステムが示されている。種々のサブシステムが、例としてのみ示されており、例えば、レーダセンササブシステム22、電動モータ制御サブシステム24、ブレーキアクチュエータサブシステム26、アクティブサスペンションサブシステム28、ステレオカメラサブシステム30、バックアップカメラサブシステム32、インフォテインメントサブシステム34、バッテリサブシステム35を含む。更に、電動モータ制御サブシステム24、ブレーキアクチュエータサブシステム26、アクティブサスペンションサブシステム28などの一部のサブシステムは、四つの車輪36のそれぞれに対して設けられる(繰り返される)。
【0011】
車両には汎用プロセッサ40が含まれる。汎用プロセッサ40は、好ましくは、非同期通信を用いて、バス42(電子バス)を介して種々のサブシステム22〜35と通信する。
【0012】
種々の車両サブシステムはそれらの名前が意味するような機能を実施する。例えば、レーダセンササブシステム22は車両20の前方の障害物を検知して、その情報を汎用プロセッサ40に送信する。同様に、電動モータ制御サブシステム24は各車輪36と関連して、車両20を推進する電動モータの作動を制御する。同様に、ブレーキアクチュエータサブシステム26は車両を減速するためブレーキの作動を制御する。
【0013】
同様に、アクティブサスペンションサブシステム28は、各車輪36のサスペンションシステムの高さと剛性を制御する。各車輪36のサスペンションシステムの減衰は、減衰特性を動的に変化させるために用いられ、乗員の快適性、走行体験、或いは他の目的を最適化する。
【0014】
ステレオカメラサブシステム30は、車両前方の対象物のステレオ画像をリアルタイムで撮影し、これらの画像をバス42を介して汎用プロセッサ40に送信する。そのようなカメラの画像は、障害物を検知し、交通標識を読み取り、車線の逸脱を判定し、又は他の目的のため、汎用プロセッサ40による画像処理で利用されてもよい。同様に、バックアップカメラサブシステム32は車両のバックアップカメラの駆動を制御する。
【0015】
インフォテインメントサブシステム34は、ラジオ、MP3プレイヤー、A/Cコントロール、GPSナビゲーションシステム、CDプレイヤーなどを統合する。バッテリサブシステム35は、充電、メンテナンス、モニタリングなどの車両バッテリに関連するすべての機能を制御する。
【0016】
すべてのサブシステム22〜35(
図1)はバス42を介して汎用プロセッサ40と通信する。好ましくは、
図2に示すように、汎用プロセッサ40は複数の処理装置44、46、48を有しているが、代わりに、汎用プロセッサ40は、各コアが他のコアから独立してアルゴリズムを実施することができる多数のコアを有する一つ以上のプロセッサを含んでもよい。
【0017】
汎用プロセッサ40は、汎用プロセッサ40と種々のサブシステム間の通信を制御するI/Oコントローラ50を有している。このI/Oコントローラ50は汎用プロセッサ40の内部バス52に通じ、種々の処理装置44〜48と通信する。加えて、汎用プロセッサ40は永続記憶装置54(記憶装置)を有しており、この永続記憶装置54はバス52を介して処理装置44〜48と通信する。この永続記憶装置54は種々のアプリケーションソフトウェアを含んでおり、一つのアプリケーションソフトウェアはサブシステム22〜35(
図1)のそれぞれと関連し、サブシステム22〜35からセンサ信号若しくはタスクを受け取り、及び/又は、汎用プロセッサ40からバス42を介してサブシステムに戻す出力制御信号を生成する。
【0018】
図2と
図3に示すように、汎用プロセッサ40は、異なるメモリパーテッションに含まれる複数のアプリケーションを有する共有メモリ56を備え、一つのアプリケーションは、車両のサブシステム22〜35の一つと関連している。例えば、アプリケーション60は車両モニターアプリケーションを、アプリケーション62は適応クルーズ制御アプリケーションを、アプリケーション64はモータ制御アプリケーションを、アプリケーション66はブレーキ制御アプリケーションを、それぞれ対象としたものである。更に、四つのアプリケーション60〜66は、すべて、車両20の安全操作にとって極めて重要であり、そのため、すべて、共有メモリ56において同じ安全レベルに置かれている。ここで、安全レベルは、安全に関するサブシステムの重要度を示す。
【0019】
逆に、アプリケーション60〜66ほど安全重視ではないアプリケーションが、共有メモリ56の第二のレベル(安全レベル)に位置付けられている。この第二のレベルには、レーダーアプリケーション68、ステレオカメラアプリケーション70、安定制御アプリケーション72、バッテリ制御アプリケーション74などが含まれる。これらのアプリケーション68〜74のすべてが車両の操作にとって重要であるが、車両の安全操作にとって極めて重要であるというわけでない。
【0020】
最後に、車両の安全操作に殆どあるいは全く影響を与えないアプリケーションが、更に他のレイヤに位置付けられている。これらのアプリケーションにはリアビューカメラアプリケーション76とインフォテインメントアプリケーション78が含まれる。これらの両方のアプリケーションは、車両の安全操作に悪影響を与えることなく全く機能しないこともあり得る。
【0021】
次いで、サブシステム22〜35の一つから受信したタスク信号に応じたアプリケーションの実行が、詳細に後述されるように、処理装置44〜48の一つに割り当てられる。そのプログラムの実行に続いて、特定のサブシステムと関連するアルゴリズムを実行する処理装置44〜48は、出力制御信号を生成する。この制御信号は、バス52、I/Oコントローラ50及びバス42を介して一つ以上の適切なサブシステム22〜35に戻るが、それは元のタスク信号を生成するサブシステム22〜35と同じであってもよく、或いは異なってもよい。いずれにしろ、汎用プロセッサ40によって一つ以上のサブシステム22〜35に送り戻された制御信号は、次いで、一般的には、アクチュエータを駆動して車両のある機能を実行する。この車両の機能は、車速がある閾値を越えた時に車のドアをロックするような単純なものでもよく、或いは、ブレーキアクチュエータサブシステム26でブレーキを駆動するような複雑なものでもよい。
【0022】
種々のサブシステム22〜35から受信したタスク信号は仮想バス80によってタスクアービトレータ82に結び付けられる。タスクアービトレータ82は、それらの安全レベルに応じて所定の時間内にサブシステムから受信したすべてのタスク信号に優先順位を付ける。タスクアービトレータ82の動作を示すフローチャートが
図4に示されている。ステップ90で開始した後、ステップ90はステップ92に進み、タスク信号を収集する時間が時間ΔTに等しい時間Tに設定される。一般的に、Tは数ミリ秒である。ステップ92は次いでステップ94に進む。
【0023】
ステップ94において、タスクアービトレータ82は、時間T−TΔとTの間に受信したすべてのタスク信号を収集する。すべてのタスク(タスク信号が示すタスク)は安全レベルに関係なく収集される。次いで、ステップ94はステップ96に進む。
【0024】
次いで、ステップ96では、タスクアービトレータ82は時間ΔTの間に受信したすべてのタスクに対する安全レベルを特定する。次いで、ステップ96はステップ98に進み、タスクアービトレータ82は安全レベルに応じて受信したタスクを並べる、即ち、優先順位を付ける。ステップ98は
図5により詳細に記載される。
【0025】
図5に示すように、アルゴリズムがステップ100で開始した後、ステップ100はステップ102に進む。ステップ102において、タスクが安全レベルごとにグループ化される。本実施形態では、0レベルは最高の安全レベルである。その結果、ステップ102の後、レベル0のすべてのタスク、レベル1のすべてのタスク、レベル2のすべてのタスクなどのように、それぞれグループ分けされる。ステップ102は次いでステップ104に進む。
【0026】
ステップ104において、安全レベルL_Sは0に、即ち最高安全レベルに設定される。ステップ104は次いでステップ106に進み、安全レベルL_Sが最大閾値L_S_MAXと比較される。安全レベルL_Sが最大安全レベルL_S_MAXより低い場合(ステップ106:YES)、これはステップ106の最初の実行の間に常に発生するのだが(処理すべきタスクが存在すると仮定して)、ステップ106はステップ108に進む。そうでない場合(ステップ106:NO)には、ステップ106はステップ110に分岐し、アルゴリズムを終了する。
【0027】
ステップ108において、アルゴリズムは同じ安全レベルL_Sのグループのタスクを並べる。ステップ108のアルゴリズムは
図6により詳細に示される。
【0028】
図6に示すように、ステップ112でアルゴリズムを開始した後、ステップ112はステップ114に進み、一つの安全レベル(同じ安全レベル)のすべてのタスクが集められる。次いで、ステップ114はステップ116に進み、現タスク優先度を記憶するために用いる変数L_Tがまず0に設定される。ステップ116は次いでステップ118に進む。ステップ118で、まず、変数L_Tはその変数の最大閾値L_T_MAXと比較される。最大閾値と等しい場合(ステップ118:NO)には、ステップ118はステップ120に分岐し、サブキューを、メインキュー122(
図3)に送る。ここで、各タスクは同じ安全レベルである。次いで、ステップ120はステップ124に進み、アルゴリズムを終了する。
【0029】
逆に、変数L_Tが最大閾値L_TMAXより小さい場合(ステップ118:YES)には、ステップ118はその代わりにステップ126に進み、タスク優先度L_Tを有するタスクがサブキューに加えられる。更に、ステップ126では、同じ安全レベルを有するすべてのタスクをサブキューに加え、次いで、ステップ128に進む。
【0030】
ステップ128において、安全レベルを示す変数L_Tがインクリメントされ、ステップ128はステップ118に戻る。上記プロセスは繰り返され、この時、すべての安全レベルが処理されるまで次に高い安全レベルが新規のサブキューを形成する。すべての安全レベルが処理されたとき、ステップ118はステップ120に分岐し、次いで、ステップ124に進み、すべての命令されたタスク、又は全ての優先付けされたタスクがタスクアービトレータ82からメインキュー122(
図3)に並べられる。
【0031】
もちろん、上記の全プロセスが各時間セグメントΔTで繰り返されることは理解されるであろう。一般的に容易に管理できる数のタスクがいつでもメインキュー122に形成されるように、ΔTは一般的に数ミリ秒に等しい。
【0032】
図5に戻り、同じ安全レベルのすべてのタスクが特定され、かつサブキューに形成された後、ステップ108はステップ130に進み、それらのタスクは次いでメインキュー122(
図3)にシフトされる。ステップ130は次いでステップ132に進み、安全レベルL_Sがインクリメントされる。ステップ132は次いでステップ106に戻り、上記プロセスは、すべての安全レベルがステップ106で決められたように処理されるまで、次の安全レベルに対して繰り返される。そこで、タスクアービトレータ82のアルゴリズムはステップ110においてその時間間隔ΔTで終了する。
【0033】
このようにして、タスクアービトレータ82は、最高安全レベル0のタスクがキューの始めで、最低安全レベル3がキュー122の後方になるように、タスクをメインキュー122に並べる、即ち優先順位に並べることが分かるであろう。従って、高位の優先順位のタスクが低位の優先順位の安全タスクの前に確実に実行される。
【0034】
図5に示されたアルゴリズムが完了した後、
図4に戻り、ステップ98はステップ134に進み、ここで、時間がΔTだけインクリメントされる。ステップ134は次いでステップ94に戻り、ここで、上記プロセスがタスクアービトレータ82によって繰り返される。
【0035】
図11はタスクアービトレータ82によって実施されるタスク140の優先順位づけを示している。特に、
図11(a)は、タスクID1〜6をタスクアービトレータ82が受け取った順番に示している。これらのタスクID1〜6は、最高レベルの0から最低レベルの3の範囲の異なる安全レベルを有している。各タスクIDはタスク優先度とアプリケーションIDも有している。すべてのタスクID1〜6は時間窓(T
N−ΔT)〜T
N内に受け取られる。
【0036】
図11(b)は、タスクアービトレータ82によって優先順位づけられた後のタスクを示している。明瞭に示されているように、最高安全レベル0のタスクが最初に配置され、次いで、安全レベル1、2、3が続く。
【0037】
図3に戻り、メインキュー122は、次いで、入力としてタスク分配器142と結合され、タスク分配器142は、複数の処理装置44、46、48のどれがメインキュー122から出た複数のタスク140を実行するかを決定する。タスク分配器142は共有モードあるいは分離モードで操作可能であるが、それぞれのモードについては別々に説明する。次いで、
図3と
図7に示すように、共有モードにおいて、タスク分配器142は、メインキュー122から受け取った複数のタスク140を最低CPU負荷の処理装置44〜48に割り当てる。共有モードのタスク分配器142のアルゴリズムが
図7に示されている。ここで、ステップ150で開始した後、ステップ150はステップ152に進む。ステップ152において、アルゴリズムはタスク分配器142(タスクマネージャー)を共有モードに設定する。次いで、ステップ152はステップ154に進む。
【0038】
ステップ154において、一つのタスク140をメインキュー122から受け取る。新規のタスクがある場合、ステップ154はステップ156に進み、タスク分配器142がそのタスク140を最低CPU負荷のCPU44〜48に割り当てる。タスク分配器142がすべてのタスク140を受け取り、処理するまで、ステップ156はステップ154に戻る。すべてのタスクが処理された後、少なくとも時間間隔ΔTの間、新規の複数のタスク140をメインキュー122から受け取るまでステップ154は単にそのステップ154に戻るように分岐する。
【0039】
ステップ156が
図8により詳細に示されている。ステップ160でアルゴリズムが開始後、ステップ160はステップ162に進み、ここで、メインキュー122から一つのタスク140を受け取る。ステップ162は次いでステップ164に進む。
【0040】
ステップ164で、現在のCPU識別子CRT_CPU_IDが0に設定される。次に利用可能なCPU識別子ASGD_CPU_IDが現在のCPU識別子CRT_CPU_IDに設定される。次いで、ステップ164はステップ166に進む。ステップ166で、アルゴリズムは、現在のCPU識別子CRT_CPU_IDが処理装置44〜48の最後かどうかを判定する。最後でなければ、ステップ166はステップ168に進む。ステップ168において、利用可能なCPUのCPU負荷ASGD_CPU_LOADが現在のCPUのCPU負荷CRT_CPU_LOADより大きいか判定される。もしそうならば(ステップ168:YES)、ステップ168はステップ170に進み、利用可能なCPU識別子ASGD_CPU_IDが現在のCPU識別子CRT_CPU_IDに設定され、利用可能なCPU負荷ASGD_CPU_LOADが現在のCPU負荷CRT_CPU_LOADに割り当てられる。ステップ170は次いでステップ172に進む。同様に、ステップ168で利用可能なCPU負荷が現在のCPU負荷より小さい場合(ステップ168:NO)、ステップ168は直接ステップ172に進む。その結果、ステップ168と170は共に、タスクを最低演算負荷の利用可能なCPU識別子ASGD_CPU_IDに対応する処理装置に確実に割り当てる。その割り当ては、最後の処理装置44〜48がステップ166で処理された後、ステップ174で発生する。次いで、アルゴリズムはステップ176で終了する。
【0041】
図12(a)は共有モードにおけるCPU識別子(CPU ID)0〜3毎の処理装置44〜48の割り当てを示している。タスク分配器142が共有モードで作動しているとき、タスクは、最も利用可能な演算負荷の処理装置44〜48に割り当てられる。
【0042】
タスク分配器142は分離モードで作動してもよい。分離モードにおいて、一つ以上の処理装置44〜48がそれぞれ特定の安全レベルに割り当てられる。分離モードの動作が
図9に最もよく示されている。
図9において、ステップ180でアルゴリズムの開始後、ステップ180はステップ182に進み、タスク分配器142は分離モードに設定される。ステップ182は、次いで、ステップ184に進む。
【0043】
ステップ184において、タスク分配器142は、メインキュー122からの新規のタスクがあるかどうか判定する。新規のタスクがない場合は、ステップ184は、単に同ステップに戻るように分岐する。しかしながら、一つのタスク140が利用できるときには、その代わりに、ステップ184はステップ186に分岐し、メインキュー122からの複数のタスク140が指定された処理装置44〜48に割り当てられる。ステップ186で実行されるアルゴリズムは
図10により詳細に示される。
【0044】
次いで
図10に示すように、ステップ188でアルゴリズムを開始後、ステップ188はステップ190に進み、タスク分配器142は一つのタスク140をメインキュー122から受け取る。ステップ190は次いでステップ192に進む。
【0045】
ステップ192において、タスク分配器142はタスク140の指定CPU情報を得る。ステップ192は次いでステップ194に進み、現在の指定CPU識別子CRT_DESIG_CPU_IDを0に割り当て、利用可能なCPU識別子ASGD_CPU_IDを現在の指定CPU識別子に割り当てる。ステップ194は次いでステップ196に進む。
【0046】
ステップ196において、アルゴリズムは、一つ以上のCPUが、タスクの特定の安全負荷(安全レベル)を取り扱うように指定されているかどうかを判定する。その特定安全レベルに割り当てられた一つの処理装置だけが存在する場合、ステップ196はステップ198に分岐し、次いで、ステップ200でアルゴリズムを終了する。
【0047】
逆に、多くの状況において、特に高位の安全レベルのタスクの場合、二つ以上の処理装置44〜48が特定安全レベルに割り当てられる。この場合、ステップ196はステップ202に進み、現在の指定CPU識別子CRT_DESIG_CPU_IDが最後の指定された処理装置44〜48であるか判定する。もしそうならば(ステップ202:YES)、ステップ202はステップ198に分岐し、タスクを処理装置に割り当て、次いで、ステップ200で終了する。そうでない場合(ステップ202:NO)、ステップ202はステップ204に進む。
【0048】
ステップ204において、利用可能な処理装置の負荷が現在の指定CPU負荷CRT_DSIG_CPU_LOADと比較され、大きい場合には(ステップ204:YES)、ステップ204はステップ206に分岐する。そうでない場合には(ステップ204:NO)、ステップ204はステップ208に進み、利用可能なCPU識別子ASGD_CPU_IDは、現在の指定CPU識別子CRT_DESIG_CPU_IDに設定される。同様に、利用可能なCPU負荷ASGD_CPU_LOADは現在のCPU負荷CRT_DSIG_CPU_LOADに設定される。ステップ208は、次いで、ステップ206に進む。ステップ206でステップ202に戻り、特定安全レベルのすべての処理装置が調査されるまで、次の利用可能な処理装置が調査され、特定安全レベルに対し現在の演算負荷が最低である利用可能な処理装置が決定される。
【0049】
図12(b)は分離モードにおけるタスク分配器142によるタスクの割り当てを示している。分離モードにおいて、CPU ID(CPU識別子)が0の処理装置44〜48は、安全レベル0のタスクだけを処理するように割り当てられる。一方、CPU IDが1の処理装置は安全レベル1〜2のタスクを処理するのに対し、CPU IDが2の処理装置は安全レベル3〜4のタスクを処理し、以下同様となる。
【0050】
上述のことから、本発明が提供する自動車用電子制御システムにおいて、タスクを分析するためだけでなく、適切な出力信号を種々の車両システムの種々のアクチュエータに提供するために必要な演算能力が、汎用プロセッサによって集中制御される、ということがわかるであろう。次に、これによって、個々のシステム(サブシステム)は中央処理装置としての汎用プロセッサのソフトウエアを単にアップデートすることによって容易にアップデートされることが可能となる。更に、中央処理装置としての汎用プロセッサによって、車両の個々のシステムによって使用されるプロセッサの数、及び/又は、電力が削減され、これによって、車両の制御システムのトータルコストが低減される。
【0051】
なお、本発明は上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上述した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることが可能であり、また、ある実施形態の構成に他の実施形態の構成を加えることも可能である。また、各実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【0052】
また、上記の各構成、機能等は、それらの一部又は全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリや、ハードディスク、SSD(Solid State Drive)等の記録装置、または、ICカード、SDカード、DVD等の記録媒体に置くことができる。
【0053】
上記実施形態では、制御システムを電気自動車に適用しているが、内燃機関で駆動される自動車に適用してもよい。この場合、センサは、例えば、エンジンの状態を検知する。
【0054】
なお、本発明の実施形態を要約すると以下の通りである。
【0055】
本発明は、既知の電子システムの不都合を解消する自動車用の制御システムを提供する。
【0056】
要するに、本発明の実施形態による制御システムは複数のサブシステムを有する自動車用に設計されている。更に、各サブシステムは、一つ以上のセンサ、及び/又は、アクチュエータを含み、作動時に、それらは状態を測定するか、又は車両の機能を実行する。サブシステムは、特に、レーダセンササブシステム、ブレーキアクチュエータサブシステム、アクティブサスペンションサブシステム、インフォテインメントサブシステム、バックアップカメラなどを含む。
【0057】
本発明の実施形態による制御システムは、汎用プロセッサを有し、好ましくは、多数の処理装置、又、代替的には、多数のコアを有する単一の処理装置から構成される。この汎用プロセッサは、複数のソフトウエアアプリケーションがプログラムされ、それぞれのソフトウエアアプリケーションは車両のサブシステムの一つの動作と関連づけられる。好ましくは、すべてのソフトウエアは汎用プロセッサにアクセス可能な異なるメモリパーティションに含まれる。
【0058】
バス(電子バス)は、汎用プロセッサと車両のサブシステムを電気的に接続する。このバスを介して、汎用プロセッサとサブシステムとの間で通信が行われる。
【0059】
各サブシステムは、汎用プロセッサから命令を受け取り、及び/又は、センサ信号若しくはタスクをバスを介して汎用プロセッサに送る通信インターフェースを有する。汎用プロセッサとサブシステム間の通信にCANバスを用いてもよい。
【0060】
バスと汎用プロセッサの間にタスクアービトレータが介在する。タスクアービトレータは、例えば、数ミリ秒間のような、予め設定された時間の間に、汎用プロセッサが受け取った多数のセンサ信号の実行順序に優先順位(優先度)を付ける。アービトレータによる多数のセンサ信号の優先順位付けは、センサ信号の安全レベルに応じて実施される。例えば、ブレーキアクチュエータ又はレーダセンサから受けたタスクにはインフォテインメントサブシステムから受けたタスクよりはるかに高い優先度が割り当てられる。
【0061】
汎用プロセッサは、次いで、タスクアービトレータから受けたセンサ信号のサブシステムと関連するソフトウエアアプリケーションの実行を開始する。その後、汎用プロセッサは、関連するソフトウエアアプリケーションの実行の結果として、制御信号をバスを介して一つ以上のサブシステムに伝送する。