【実施例1】
【0013】
<車両制御システムの構成>
図2は本実施例の車両制御システムおよび車両制御装置を有する車両システムの概要である。1は自動車など内部に車両制御システムを有する車両システム、2は例えば車載ネットワーク(CAN:Controller Area Network、CANFD:CAN with Flexible Data−rate、Ethernet(登録商標)、等)とコントローラ(ECU:Electronic Control Unit等)により構成される車両制御システム、3は、車両システム1の外部と無線通信(例えば携帯電話の通信、無線LAN、WAN、C2X(Car to X:車両対車両または車両対インフラ通信)等のプロトコルを使用した通信、またはGPS:Global Positioning Systemを用いた通信)を行い、外界(インフラ、他車、地図)の情報または自車に関する情報を取得・送信などの無線通信を実施、または診断端子(OBD)やEthernet端子、外部記録媒体(例えばUSBメモリ、SDカード、等)端子などを有し、車両制御システム2と通信を実施する通信装置、4は、例えば2と異なる、または同一のプロトコルを用いたネットワークにより構成される車両制御システム、5は、車両制御システム2の制御に従い、車両運動を制御する機械および電気装置(例えばエンジン、トランスミッション、ホイール、ブレーキ、操舵装置等)の駆動を行うアクチュエータ等の駆動装置、6は、外界から入力される情報を取得し、後述する外界認識情報を生成するための情報を出力する、カメラ、レーダ、LIDAR、超音波センサなどの外界センサ、および、車両システム1の状態(運動状態、位置情報、加速度、車輪速度等)を認識する力学系センサにより構成される認識装置、7は、ネットワークシステムに有線または無線で接続され、ネットワークシステムから送出されるデータを受信し、メッセージ情報(例えば映像、音)など必要な情報を表示または出力する、液晶ディスプレイ、警告灯、スピーカなどの出力装置、8は、ユーザが車両制御システム2に対して、操作の意図や指示を入力する入力信号を生成するための、例えばステアリング、ペダル、ボタン、レバー、タッチパネル、等の入力装置、9は、車両システム1が外界に対して、車両の状態等を通知するための、ランプ、LED、スピーカ等の通知装置、を示している。
【0014】
車両制御システム2は、その他の車両制御システム4、無線通信部3、駆動装置5、認識装置6、出力装置7、入力装置8、通知装置9などと接続され、それぞれ情報の送受信を行う。
【0015】
図3は、車両制御システム2のH/W(Hardware)構成例を示している。301は車載ネットワーク上のネットワーク装置を接続するネットワークリンクであり、例えばCANバスなどのネットワークリンク、302はネットワークリンク301および駆動装置5や認識装置6や301以外のネットワークリンク(専用線含む)に接続され、駆動装置5や認識装置6の制御および情報取得、ネットワークとのデータ送受信を行うECU(Electronic Control Unit:電子制御ユニット)、303は複数のネットワークリンク301を接続し、それぞれのネットワークリンクとデータの送受信を行うゲートウェイ(以下GW)、を示している。
【0016】
ネットワークトポロジの例は、
図3に示す2つのバスに複数のECUが接続されているバス型の例以外にも、複数のECUが直接GWに接続されるスター型や、ECUが一連のリンクにリング状に接続されているリンク型、それぞれの型が混在し複数のネットワークにより構成される混在型、等がある。GW303とECU302については、それぞれGW機能を有するECU、またはECUの機能を有するGWと、がある。
【0017】
ECU302はネットワークから受信したデータをもとに、駆動装置5への制御信号の出力、認識装置6からの情報の取得、ネットワークへの制御信号および情報の出力、内部状態の変更、などの制御処理を行う。
図4は、本発明にかかるネットワーク装置であるECU302またはGW303の内部構成の一例である。401はキャッシュやレジスタなどの記憶素子を持ち、制御を実行するCPU、GPU、FPGAなどのプロセッサ、402はネットワークリンク301またはネットワークや専用線で接続された駆動装置5または/および認識装置6に対してデータの送受信を行うI/O(Input/Output)、403は図示しないクロックなどを使用し、時間および時刻の管理を行うタイマ、404はプログラムおよび不揮発性のデータを保存するROM(Read Only Memory)、405はプログラムおよび揮発性のデータを保存するRAM(Random Access Memory)、406はECU内部での通信に用いられる内部バス、を示している。
【0018】
プロセッサはマルチコアと呼ばれる内部に1つ以上の複数の演算装置を持つものを含む。またタイマについては図に示す通りネットワーク経由でアクセスするものと、プロセッサ自身が有する場合の両方がある。
【0019】
次にプロセッサ401で動作するソフトウェアモジュールの構成について
図5に示す。501はソフトウェアモジュール全体の制御、特に後述するタスクを管理するタスク管理部、502は、通信I/F402の動作および状態を管理し、内部バス406を介し通信I/F402に指示を行う通信管理部、503は、タイマ403を管理し、時間に関する情報取得や制御を行う時間管理部、504は後述する動作ログを管理する動作ログ管理部、505は車両制御システム2を動作させるための演算や制御等を実行するためのタスク、506は車両制御に必要な情報を保持するデータテーブル、507は後述するスケジュールテーブル、508は後述する動作ログ、を表している。
【0020】
これら
図5の構成についてはプロセッサ401上の動作概念を示したものであり、動作時に必要な情報はROM404およびRAM405から適宜取得、またはROM404およびRAM405に適宜書き込み、を行い動作する。
【0021】
<タスク>
タスク505は、スレッド、アプリケーション、プロセス、ソフトウェアコンポーネント(SWC)とも呼ばれるソフトウェアモジュールの動作単位の一つであり、前述した通信管理部502および時間管理部503、動作ログ管理部504等もタスクである場合もある。
【0022】
タスクは後述する状態遷移により実行状態となった場合にプロセッサ401により実行され、各タスクに割り当てられた制御(プログラムの実行)を行う。例えば通信管理部503またはI/O402を介してネットワークおよび駆動装置または認識装置からデータを入手、データテーブル506のデータに対して必要な処理の実行、通信管理部503またはI/O402を介してネットワークまたはI/Oにデータを出力する、等の処理を行い、車両制御システムを動作させる。
【0023】
タスク間でデータを共有する場合には、データテーブル506の特定の領域に書き込み側タスクが書き込みを行い、また読み込み側タスクが前記特定の領域からデータを読み出すことによりデータの共有を行う。このデータに対するアクセスを行う場合に、後述する排他制御を実施する。
【0024】
<排他制御>
タスク間でのデータの共有や動作の調停を行うため、各タスクは共有リソース(例えばプロセッサ401やメモリ領域(RAM405、データテーブル506、等)、I/O402に対する排他制御を実施する。排他制御には、はセマフォ、ミューテックス、フラグ等を使用し、例えばあるタスクがセマフォを保有(減算)することにより、他のタスクは同じセマフォを保有できなくなる等の管理を行う。これにより、共有リソースへの排他制御を実現する。
【0025】
<タスクの状態遷移>
図6にタスクの状態遷移の例について示す。タスク管理部501は前記タスク505に対して、このような状態遷移に基づき管理を行う。
【0026】
まずタスク管理部501が新規に生成したタスクは、最初に休止状態に移行され、その後タスク管理部501が前記タスクを起動し、実行可能状態に遷移させる。
【0027】
実行可能状態においては、例えば時間駆動スケジューリングにおいて、該当タスク(例えばタスクT1)が実行可能な時間(スロット)になった場合には、タスク管理部501はタスクT1が実行権を獲得したとし、実行状態に遷移させる。実行状態になったタスクについてはプロセッサ401にて前記タスクの処理を実行する。
【0028】
その後、前記タスクが実行可能な時間が終了した場合、もしくは前記タスクの処理が終了し前記タスクが実行権を放棄する命令を発行した場合には、タスク管理部501はタスクT1を実行可能状態へと遷移させる。その際にタスク管理部501は次に実行すべきタスクが存在する場合には、次に実行すべきタスクを実行可能状態から実行状態へと遷移させる。
【0029】
一方、実行状態にあるタスクが例えばリソースの要求を行い、排他制御によりリソースが取得できなかった場合には、タスク管理部501は前記タスクを待機状態へと遷移させる。待機状態に遷移したタスクはリソースが取得できるまでは待機状態となる。その後、別のタスクがリソースを解放するなどにより、前記待機状態のタスクがリソースを取得可能な状態になった場合には、タスク管理部501は前記リソースを要求して待機状態となっていたタスクを実行可能状態に遷移させる。
【0030】
実行可能状態、実行状態、または待機状態であるタスクが、例えばタスク管理部501や他のタスク等から強制終了の命令を受けた場合には、前記命令を受けたタスクは休止状態となり、再びタスク管理部501から起動の命令を受けるまでは休止状態となる。タスク管理部501から起動の命令を受けた休止状態のタスクは、実行可能状態へと遷移する。
【0031】
このようにタスクについてはタスク管理部501からの命令を受け、または自ら実行権の放棄、リソースの要求等を行うことによりこれらの状態遷移を行う。
【0032】
ここでマルチコアなどの環境においては、前記実行状態のタスクが複数存在する場合もあるが、状態遷移としては同様に実施される。
【0033】
待機状態においては、タスクの管理情報(スタック、ヒープ、前記タスクが管理するデータテーブルの領域、保有しているリソース)等は次の実行可能状態まで引き継がれ、休止状態では上記管理情報の一部および全てが初期化される。そのため待機状態から実行可能状態および実行状態になるまでの時間は短いが、休止状態から実行状態になるまでには時間がかかり、また休止状態となる前の管理情報を引き継げないため、タスクの処理が不連続となる場合がある。
【0034】
また一方で、休止状態になり管理情報を初期化することにより、無限に同じ処理を繰り返す様な不正な状態から、初期状態などの不正で無い状態に戻すことも可能となる。
【0035】
<時分割制御>
タスクの実行について、時分割で制御した場合の例について
図7に示す。
図7(a)は横軸が時間を示しており、それぞれの時間がスロット(ウィンドウ)として区切られ、それぞれのスロットにID(ここではS1からS11)が割り振られている。ここで各スロットでは割り当てられたタスクのみが動作可能とすることで、時分割でのタスクの実行が可能となる。ある時刻で実行するタスクを選択する動作をスケジューリングと呼ぶ。
【0036】
スケジューリングに用いるスケジュールテーブル507の構成について
図8に示す。スケジュールテーブル507はスロットID、スロットの開始時刻、スロットの終了時刻、スロットに割り当てられたタスクのID、後述する跨り判定に使用する時間エラー判定フラグ、により構成されている。このようにして各スロットの時間と、その時間内で動作可能なタスクが予め割り振られている。
【0037】
タスクの動作例について
図7(b)に示す。ここでタスク管理部501は時刻0.0において例えば前記タイマ403を用いたアラームにより動作開始する様に設定しておき、そのタイミングでスケジューリングを実施する。前記アラームにより動作開始したタスク管理部501は、現在時刻が0.0であると確認し、スロットIDがS1であることから、タスクIDがT1のタスクの状態を確認し、実行状態にするように処理を行う。その後タスク管理部501は次のスロット開始時刻(この例では時刻0.2)にアラームを設定して動作を終了する。その後タスクT1は処理を行い、処理が終了した場合には自らリソース要求等により待機状態に移行する。このようにして決められた時刻でのスケジューリングによるタスク実行処理を行う。
【0038】
スケジュールテーブル507にはここでは開始時刻と終了時刻の両方を記載しているが、開始時刻のみでも良い。その場合には各スロットの終了時刻は次のスロットの開始時刻にて表現される。そのようにすることにより、スケジュールテーブル507のデータ量を削減可能である。
【0039】
スロットにタスクが割り当てられていない場合には、専用のタスクIDにて現在のスロットにはタスクが割り当てられていないことを記載する。(
図8のタスクID:NA)
【0040】
<跨り判定>
次に跨り判定の処理について
図1を用いて説明する。跨りとは、スロットの終端でタスクの処理が終了しない場合に強制終了するだけでなく、スロット内で処理が終了しないことが許可されるタスクを予め想定し、次の実行可能なスロットまでタスクの処理を一時停止させることである。
【0041】
タスク管理部501が前記時分割制御に記載のスロット開始時刻のアラームにて動作開始した場合に、タスク管理部501は前のスロットのタスクが実行状態か否かの判定を行う(S101)。判定は、現在実行中のタスクのID、または前のスロットのタスクが待機状態に移行する際のリソースを要求しているか否か、等により行う。前のスロットのタスクが実行状態で無い場合には(S101のno)、次のタスクの実行時刻をスケジュールテーブル507から取得してアラームを設定し(S102)、現在のスロットのタスクをスケジュールテーブル507から取得して実行状態にする処理を行う(S103)。
【0042】
前のスロットのタスクが実行状態である場合には(S101のyes)、前のスロットの時間エラー判定フラグの内容を判定する。前記時間エラー判定フラグが“する”の場合(S104のyes)、前のスロットのタスクを強制終了させる。その際には後述する方法でエラー情報を含む動作ログを作成し(S105)、現在実行状態のタスクを強制終了させて休止状態にする(S106)その後は通常時同様、次のタスクの実行時刻をスケジュールテーブルから判定してアラームを設定し(S102)、現在のスロットのタスクをスケジュールテーブルから判定して実行状態にする処理を行う(S103)。
【0043】
一方で、前記時間エラー判定フラグが“しない”の場合(S104のno)、前のスロットのタスクについては待機状態にする(S107)その後は通常時同様の処理を実行する(S102、S103)。
【0044】
このようにして時分割制御による跨り処理を実行することにより、タスクに設定された時間エラー判定フラグの状態に応じて、タスクを待機状態にすることや強制終了を行い、他のウィンドウを跨るタスクの処理について実行可能となる。
【0045】
S103において、現在スロットのタスクを実行する際には、実行するタスクの現在の状態に応じて処理を行う。例えば待機状態(自らリソースの取得要求による待機状態、またはタスク管理部により待機命令)であれば、それぞれの待機状態に応じたリソースの開放や実行可能状態への遷移命令により動作を再開する。また休止状態であれば、起動により実行可能状態と遷移させる。
【0046】
前のスロットのタスクが実行状態であった場合の処理として、タスク管理部501は、強制終了の代わりに一度待機状態にさせ、次のタスクを実行状態にした後等に休止状態にさせても良い。そのようにすることにより次のタスクを早く実行状態にすることが可能になる。
【0047】
<子タスクの管理>
前記跨り処理においては、それぞれのタスクが生成した子タスクについても同様に管理することが必要となる。例えばスロットIDS3にて、タスクT3が子タスク(例えばタスクT3A)を生成した場合、跨り処理においては子タスクも同様に待機状態にする必要がある。そのためタスク管理部501は、待機状態にする処理をタスクT3およびタスクT3Aの双方に実施する。また同様に待機状態からの再開も、タスクT3およびタスクT3Aの双方に実施する。これにより、タスクが子タスクを生成した場合にも、同様に跨り判定に基づく処理が可能となる。
【0048】
上記子タスクへの処理については、子タスクを生成したタスクが、前記子タスクのIDをタスク管理部501に通知する、または各タスクが待機状態に遷移する命令を受けた場合に、各タスクの管理の基で、子タスクを待機状態に移行する、といった方法により実現可能である。
【0049】
<動作ログ>
動作ログの作成方法について
図9を用いて説明する。ここでは各スロットでのタスクの開始時刻、終了時刻、タスクID、終了時の状態について記録する例を示している。これら状態を動作ログ管理部508はタスク管理部501からタスクの状態遷移のタイミング等で受信し、動作ログ508として記録する。特に終了時の状態について前記跨り判定処理においてエラーログおよび跨り時の動作を記録しておくことにより、異常が発生したため強制終了したか、終了しなかったが想定通りの跨り処理が発生したかを動作ログから確認することが可能となる。
【0050】
動作ログについては、前記通信管理部502およびネットワークリンク301および通信装置3等を介して外部に出力することにより、車両制御システムの状態を外部から監視可能となる。
【実施例3】
【0058】
本発明にかかる第3の実施例について説明する。本実施例においては、スケジュールテーブル507について設計情報や動作時に測定した情報から自動的に作成を行う。
【0059】
設計情報1101の例について
図11に示す。ここでは各タスクの設計情報について、タスクのID、制御周期、(最悪時)実行時間、跨り許可の有無、といった情報を与える。これら情報を基にスケジュールテーブル507を作成する。
【0060】
これにより、例えばタスクIDがT3のタスクは、跨り許可がOKとなっていることから、例えば
図8に示す様なスケジュールテーブルを作成し、跨りが発生するスロット(S3およびS5)について、時間エラー判定を“しない”とするフラグを付与する。このようにすることにより、設計情報1101から、スケジュールテーブル507を作成することが可能になる。
【0061】
この例において設計情報1101でタスクIDがT2のタスクは跨り許可をOKとしているが、跨りを発生させずに配置可能であるため、時間エラー判定を“しない”とするフラグを付与しない。
【0062】
またこの例において、タスクIDがT3のタスクの跨り許可がNGであった場合には、スケジュールテーブル507の自動作成時に、跨りNGのためスケジューリングテーブル作成が不可能である旨のエラーメッセージを通信管理部502を介してネットワークリンク301や通信装置3に出力する。
【0063】
ここで跨り許可NGとするタスクについては、例えば安全関連機能など、跨り等による処理の中断が好ましくないタスクについて跨り許可NGという指示を与えることにより、自動作成時でも安全関連機能は跨りを発生させず、処理の遅延が発生しない設計が可能になる。
【0064】
またスケジュールテーブルの作成については、上記設計情報1101からの作成だけでなく、ネットワークリンク301からの取得も可能である。これにより機能の更新時において、処理装置内部で計算するだけでなく、外部ネットワークからスケジュール情報を設定することも可能となる。
【0065】
上記スケジュールテーブル507の自動作成については、車両制御システムの設計時や初回の起動時だけでなく、例えば車両制御システム2の起動時(イグニッションのON等)に毎回計算することや、車両制御システム2の構成が変更になった場合に、前記設計情報1101の制御周期や実行時間の再計算および再取得も含めて実行することも可能である。これによりシステムの状態の変化に合わせて、スケジュールテーブル507を再計算し、システムの状態に合わせたスケジュールテーブルの構築が可能となる。
【実施例4】
【0066】
本発明の第4の実施例にかかるスケジューリング実行時の判定フローについて、時間エラー判定フラグを用いず、設計情報である予定実行時間による自動判定を行う例について
図12を用いて説明する。第1の実施例と異なる点は、
図1におけるS104の時間エラーフラグによる判定が、S1201の累積実行時間と想定実行時間による判定に置き換わっている点である。
【0067】
ここで動作例について、
図13に記載されたタスクごとの制御周期および予定実行時間を基に、
図14に示す開始および終了時刻で各タスクが動作している例について説明する。
【0068】
この場合で例えば時刻0.4において、タスクT2は、設計情報1101の示す予定実行時間(0.2)を超過しているため、S1201の判定のyesにより、前のスロットのタスク(T2)を強制終了させる。一方で時刻1.0において、タスクT3の累積実行時間(0.6ms)は
図13で示す設計情報の予定実行時間(2.2ms)を超過していないため、S1201の判定はnoとなり、跨り処理を行う。
【0069】
このようにしてスケジュールテーブルによる時間エラー判定フラグを用いない場合でも、タスクごとの設計情報の予定実行時間と累積実行時間を比較することにより跨り判定を行うことが可能となる。
【0070】
この場合、
図13に示す設計情報1301についてはスケジュールテーブル507、またはデータテーブル506などと同様にECU内部に保有する。
【0071】
以上説明した実施例によれば、時間駆動によるスケジューリングにおいて、他のタスクのスロットを跨る必要があるタスクが存在している場合に、タスクに跨り処理を許可する情報を付与し、跨り処理を許可されたタスクに対しスロットの終端で動作していた場合に一時停止する処理を行う。即ち、特定のタスクについては、タスクのウィンドウ時間を過ぎた場合でも強制終了させずにタスクの実行を一時中断する。これにより、時間駆動スケジューリングを実現する際に、実行時間の長いタスクを分割する再設計を不要にするなど、タスクの統合を容易化させつつかつ制御システムのタスクの動作時間に影響を与えないことが可能になる。これにより、時間駆動スケジューリングで動作する高信頼なシステムでタスクを統合することが容易となる。
【0072】
また、前記タスクが子タスクを生成する処理を行う場合でも同様に跨り処理を行うことが可能となる。また、これら処理について動作ログを記録することにより、タスクが跨り等を行った場合でも外部からその動作が確認可能となる。
【0073】
また別の実施例においては、タスク間で共有するデータがある場合に、前記データを予め別の領域に移すことにより、跨り処理時のタスクのリソース保持を防ぐことが可能となる。またそのタイミングを予めコピー時間を考慮したタイミングで実施することにより、タスクの実行開始を遅らせることなく実行状態に移行することが可能となる。
【0074】
また別の実施例においては、スケジュールテーブルについて設計情報や測定した動作の情報から自動的に跨り処理を含むテーブルを作成することが可能となる。
【0075】
さらに別の実施例では、跨り処理を実施するフラグを有しない場合でも、タスクの予定実行時間と累積実行時間から跨り処理を行うか否かを判定し、上記跨り処理を実現することが可能となる。