―第1の実施の形態―
以下、図1~図12を参照して、演算装置の第1の実施の形態を説明する。
(システム構成)
図1は、本発明に係る演算装置10を含む車両制御システム1の構成を示すブロック図である。車両制御システム1は、演算装置10、外界センサ群20、車両センサ群30、およびアクチュエータ群40を備える。本実施の形態では、車両制御システム1は、車両9に搭載される。演算装置10、外界センサ群20、車両センサ群30、およびアクチュエータ群40は、車載ネットワーク50により接続される。車両制御システム1は、車両9に搭載され、車両9の周辺における走行道路や周辺車両等の障害物の状況を認知した上で車両9の運転行動や車両制御を判断し、車両運動を制御することで自動運転を実現するシステムである。なお以下では、車両9を他の車両を区別する意味で「自車両」9と呼ぶこともある。
外界センサ群20は、車両周辺の一定範囲の障害物、たとえば他車両、歩行者、物体などや、道路標識や白線などの特徴物を認識するセンサ群である。外界センサ群20は、たとえば、カメラ、レーダ、ライダ等により構成される。外界センサ群20は、検出した車両周辺の障害物や特徴物の情報、たとえば車両9からの相対距離と相対角度などを、外界センサ群20や演算装置10が接続されている車載ネットワーク50に出力する。演算装置10は、この車載ネットワーク50を介して外界センサ群20からの出力結果を取得できるように構成されている。なお本実施の形態では、外界センサ群20で障害物や特徴物を検出する処理を実施する構成になっているが、外界センサ群20から出力される信号やデータを用いて演算装置10や他装置でこれらの検出処理を行ってもよい。
車両センサ群30は、車両9の動きに関する情報、たとえば走行速度、操舵角、アクセルの操作量、ブレーキの操作量などを検出する装置群である。車両センサ群30を構成するセンサは、「内界センサ」とも呼ばれる。車両センサ群30は、たとえば、車載ネットワーク50上に検出したこれらの状態量を出力する。車載ネットワーク50に接続された演算装置10や他装置は、この車載ネットワーク50を通じて、車両センサ群30から出力された各種部品の状態量を取得する。
アクチュエータ群40は、車両9の動きを決定する操舵、ブレーキ、アクセル等の制御要素を制御する装置群である。アクチュエータ群40は、運転者によるハンドル、ブレーキペダル、アクセルペダル等の操舵情報や、演算装置10から出力される目標制御値に基づいて車両9の動きを制御する。
(演算装置の構成)
演算装置10は、たとえばECU(Electronic Control Unit)であり、処理部100と、記憶部110と、通信部120とを備える。なお演算装置10の形態に特に制限はない。たとえば、演算装置10は、外界センサ群20に統合されてもよい。
処理部100は、CPU(Central Processing Unit:中央演算処理装置)、およびRAM(Random Access Memory)を備え、CPUが記憶部110に格納された不図示のプログラムをRAMに展開して実行することにより以下の機能を実現する。車両制御システム1には1つ以上のCPUが搭載され、これらのCPU上で並列的にプログラムが実行される。処理部100はその機能として、センサ入力部101、実行制御部102、アクチュエータ出力部103、およびデータ管理部104を備える。処理部100は、演算装置10に外部から停止命令が入力されると、センサ入力部101、実行制御部102、アクチュエータ出力部103、およびデータ管理部104に停止指令を出力する。
センサ入力部101は、車両9の周辺に関連する周辺環境情報と、車両9の動きに関連する車両センサ情報とを取得して、これらを「出力値」として後述するアプリケーション入出力データ群111に格納する。センサ入力部101は、出力値を外界センサ群20および車両センサ群30から取得する。周辺環境情報とは、たとえば車両9の周辺に存在する障害物の情報や、車両9の周辺における道路の特徴を示す特徴物等の情報等である。なお車両9の周辺に存在する障害物とは、たとえば車両9の周囲を移動している他車両、自転車、歩行者等の移動体や、車両9の周囲の道路上で静止している駐車車両、落下物、設置物等である。車両センサ情報とは、たとえば車両9の位置、走行速度、操舵角、アクセルの操作量、ブレーキの操作量等である。センサ入力部101により取得された周辺環境情報と車両センサ情報は、アプリケーション入出力データ群111として記憶部110に格納される。
実行制御部102は、演算装置10上の1つ以上のCPU上で実行する各アプリケーションを実行する。実行制御部102は、記憶部110の設定情報群112に格納されているアプリケーションの実行スケジューリングの情報、およびスレッド数情報群113に格納されているアプリケーションごとのスレッド数の情報に基づいてアプリケーションを実行する。実行スケジューリングの情報とは、アプリケーションを逐次的または並列的に動作させるときの動作開始や終了のタイミング、および動作周期等が定義されたものである。たとえば、周期が10msと設定されたアプリケーションに対しては、実行制御部が10msで当該アプリケーションを実行する。またたとえば、データ並列化が設定されたアプリケーションに対しては、1つ以上のCPU上でアプリケーションを決められたタイミングで実行する等の制御を実行制御部102が行う。
アクチュエータ出力部103は、アプリケーション入出力データ群111から制御情報を取得し、車載ネットワーク50に接続されたアクチュエータ群40に対して出力する。
データ管理部104は、アプリケーション間でのデータ入出力を制御する。換言するとデータ管理部104は、異なるアプリケーション間でのデータ入出力を制御する。アプリケーション間で入出力されるデータは、アプリケーション入出力データ群111として集約的に管理されるが、アプリケーション入出力データ群111への全てのデータ入出力はデータ管理部104を介して行われる。
データ管理部104によるデータの制御は、設定情報群112に基づいて行われる。したがって、アプリケーション間のデータ入出力の設計を変更する際には、設定情報群112のみを変更するだけよい。データ管理部104は、アプリケーションとセンサ入力部の間、およびアプリケーションとアクチュエータ出力部の間においてもデータ入出力の制御を行ってもよく、これらも入出力制御の対象とする。
記憶部110は、たとえば、HDD(HARD Disk Drive)やフラッシュメモリである。ただしROM(Read Only Memory)を含んで構成されてもよい。記憶部110には、処理部100がその機能を実現するために実行するプログラム、周期的に実行されるアプリケーション、および演算装置10が動作するために必要なデータ群などが格納される。具体的には、記憶部110には、アプリケーション入出力データ群111、アプリケーション間の設定情報群112、スレッド数情報群113、およびアプリケーション群114が格納される。
アプリケーション群114は任意の複数のアプリケーションが含まれる。アプリケーション群114を構成するアプリケーションは任意であるが、たとえばADAS(Advanced Driver-Assistance Systems、先進運転支援システム)や自動運転向けの制御プログラムである。自動運転向けの制御プログラムはたとえば、センサフュージョンアプリ、地図フュージョンアプリ、行動予測アプリ、および軌道生成アプリなどである。
アプリケーション入出力データ群111には、アプリケーションに入力される情報、およびアプリケーションから出力される情報が格納される。具体的にはアプリケーション入出力データ群111には、車両9の周辺に関連する周辺環境情報や、車両9の動きに関連する車両センサ情報、およびアプリケーションがそれらを処理した情報が格納される。
本実施の形態では、アプリケーション入出力データ群111に格納される、所定の対象要素に対応するデータの集合を「オブジェクトデータ」と呼称し、このオブジェクトデータを単位としてデータの管理及び操作を行う。「対象要素」とは、オブジェクトデータとして一纏めにした個々の情報要素が共通して表現する概念的な対象である。「対象要素」はたとえば、外界センサ群20や車両センサ群30の検出対象やアクチュエータの制御対象、およびアプリケーションの演算処理結果が該当する。
外界センサ群20を構成するセンサにおいては、認識された個々の環境要素(障害物、道路形状、交通ルール等)が対象要素に該当することが望ましい。すなわち、外界センサ群20を構成する各センサというハードウェアそのものを抽象化するのではなく、検出対象である環境要素を単位として、データを抽象化する方式を採る。なお、車両センサ群30を構成する各センサについては、自車両9という概念でオブジェクトデータを構成してもよいし、個々の検出対象ごと、たとえば車速センサであれば車速情報ごとにオブジェクトデータを構成してもよい。
本実施の形態ではこれ以降、オブジェクトデータを「データ」と呼ぶ。あるデータがアプリケーション入出力データ群111へ入出力される際には、そのデータの入力元のアプリケーションと出力先のアプリケーション、およびそのデータの種類に基づいてアプリケーション入出力データ群111内でデータ管理部104が管理する。
設定情報群112には、演算装置10において実行されるアプリケーションのうちの、特定の2つのアプリケーション間で入出力されるデータの入出力の設定情報が記載されている。アプリケーション間で入出力されるデータの入出力の設定情報とは、たとえば、配列データの中で出力する要素の数やデータ出力のタイミングなどである。データ管理部104は、設定情報群112を利用して、アプリケーション間のデータの入出力を制御する。
通信部120は各種通信プロトコルに基づいて車両9に搭載された他の装置と通信する。通信部120は、たとえば、IEEE802.3またはCAN(Controller Area Network)等の通信規格に準拠したネットワークカードを含んで構成される。なお、通信部120と車両9に搭載された他の装置との間の接続形態は、Ethernetのような有線接続に限定されることはなく、Bluetooth(登録商標)や無線LAN(Local Area Network)などの近距離無線接続であってもよい。
図2は、本実施形態の処理部100の構成図である。前述のとおり、処理部100は、実行制御部102、データ管理部104、センサ入力部101、およびアクチュエータ出力部103を備える。
実行制御部102はアプリケーション群114に含まれる2つ以上のアプリケーションの実行を制御する。本実施の形態では一例として、実行制御部102が実行を制御するアプリケーションをセンサフュージョンアプリ102A、地図フュージョンアプリ102B、行動予測アプリ102C、および軌道生成アプリ102Dの4つとして説明をする。これらのアプリケーションはセンサ入力部101が出力した出力データや、他のアプリケーションの入出力データにアクセスする際には、データ管理部の備えるデータ操作IF201を介して行う。
センサ入力部101は、カメラやレーダなどの各センサに対応する構成として、センサA入力部101A、センサB入力部101Bなどの構成要素を内部に1つ以上備える。このセンサ入力部101は、各センサからの入力をセンサデータとして取得してもよいし、取得したセンサデータに対して何らかの演算を行ってもよい。
アクチュエータ出力部103は各アクチュエータに対応する構成として、アクチュエータA出力部103A、アクチュエータB出力部103Bなどの構成要素を内部に1つ以上備える。アクチュエータ出力部103は、データ管理部104から出力されるデータをそのままアクチュエータに対して出力してもよいし、データ管理部104から出力されるデータに何らかの演算を行った結果を出力してもよい。
センサ入力部101やアクチュエータ出力部103の各構成要素がアプリケーション入出力データ群111にアクセスする際にも、データ管理部104の備えるデータ操作インタフェース201を介して行う。このようにアプリケーションやセンサ入力部101、およびアクチュエータ出力部103はデータ管理部104の備えるデータ操作インタフェース201を介してアプリケーション入出力データ群111にアクセスする構成となっている。
本実施の形態では、アプリケーションやセンサ入力部、およびアクチュエータ出力部の各構成部品をまとめて、抽象化した概念としてソフトウエアの一部分とみなして「ソフト部品」と呼称する。上述したように、ソフト部品はデータ管理部104の備えるデータ操作インタフェース201を介してアプリケーション入出力データ群111にアクセスする。
データ管理部104は、アプリケーションやセンサ入力部101、アクチュエータ出力部103へ入出力するデータをアプリケーション入出力データ群111として集約管理する。このように、データをすべてデータ管理部104が集約管理し、データ入出力のための共通インタフェースとして、データ操作インタフェースを介してアクセスさせる構成とすることで、次の利点がある。すなわち、アプリケーションのデータ入出力の制御は、データ管理部104の内部に隠蔽される。
実行制御部102により実行される各アプリケーションは、共通のインタフェースであるデータ操作インタフェース201を活用することにより次の利点がある。すなわち各アプリケーションは、データ入出力の設計が変更されたとしても、アプリケーションそのものを修正してインタフェースを変更する必要がない。換言すると各アプリケーションは、アプリケーションを修正することなく、様々なデータ入出力に対応することができる。
(アプリケーション入出力データ群111)
図3は、アプリケーション入出力データ群111の一例を示す図である。アプリケーション入出力データ群111は、データ管理部104が記憶部110上で管理しているデータの集合である。アプリケーション入出力データ群111は1以上のデータから構成され、各データにはデータ種類301、データID302、タイムスタンプ303、およびデータ固有属性群304が含まれる。
データ種類301は、各データの概念的な種別を示す。データ種類301はたとえば、他車両、歩行者、白線、標識などである。データID302は、データ種類301を共通に持つデータ群の中で対象のデータを一意に特定するための識別子である。同一の対象要素、たとえば同一の車両を示すと判断される場合は、同一の値が設定される。異なるデータ種類301をもつデータ群の中ではデータID302は重複しうる。
タイムスタンプ303は、データに付随する時間情報である。時間情報は、たとえば、データが表現している対象時刻が該当する。センサ入力部がデータの生成元の場合は、データをセンサが検出した時刻に相当する。タイムスタンプ303はたとえば年、月、日、時、分、秒、および小数点以下3ケタの秒数をスラッシュで繋げた書式で表され、たとえば図3の1行目に記載の「2018/1/1/01/00/00/001」は、2018年1月1日1時0分0.001秒を表す。
以上の3点、すなわちデータ種類301、データID302、およびタイムスタンプ303は、データの種類に関わらず、いずれのデータも保持する情報である。次に説明するデータ固有属性群304はデータ種類301の値によって構成が異なる。データ固有属性304群は1以上のデータ固有情報から構成され、構成するデータ固有情報の数はデータの種類により異なる。たとえば、図3の1つ目のデータのようにデータ種類301が「自車両」のデータは、データ固有情報1として三次元の位置情報を有し、データ固有情報2として三次元の速度情報を有する。
なお図3に示すデータフォーマットは一例であり、アプリケーション入出力データ群111のデータフォーマットはこれに限定されない。たとえば、図3に示す例ではデータ種類を一列で一意に指定するフォーマットとしているが、データ種類を二層で表現してもよい。この場合はたとえばデータ種類301の大項目を「車両」とし、その小項目として「自車両」や「他車両」を設ける。フォーマットの形式によらず、統一的なデータフォーマットを作用することで、データに対する操作を汎用的に実装できる。たとえば、後述する図4の設定情報に記載されたソート方法410では「データIDソート」「タイムスタンプでソート」等のデータフォーマットに則るソートの方法を記載しているが、このようなソートを実現可能であるのは、データフォーマットを統一的に規定しておいたことによる。
(設定情報群112)
図4は、設定情報群112の一例を示す図である。設定情報群112は、記憶部110上に記録されている設定情報の集合である。設定情報群112は1以上の設定情報から構成される。各設定情報には、入力元アプリ401、出力先アプリ402、データ種類403、設定情報ID404、使用可否405、出力要素数406、通知待機407、種別408、コア数409、ソート方法410、および割当方法411が含まれる。なお以下では、出力先アプリ402を「第1ソフト部品」と呼ぶこともあり、入力元アプリ401を「第2ソフト部品」と呼ぶこともある。
設定情報群112のキーは、入力元アプリ401、出力先アプリ402、およびデータ種類403の組み合わせである。図4に示す例ではこれら3つの情報を別々の列で表現しているが、単一の列に統合した表としてもよい。これら3つの情報をもとにして対象のデータを特定し、そのデータを出力する際の制御の設定情報が表現されている。一つの対象データに対して複数の設定情報があってもよい。次に各列を順に説明する。
入力元アプリ401は、データの入力元アプリケーションの種類を示す。入力元アプリ401はたとえば、センサフュージョンや行動推定などである。ただし図4に示す例では、作図の都合によりセンサフュージョンを「SF」と記載している。なお入力元アプリ401に示されたアプリケーションは、複数の演算コアで並列的に演算されてもよいし、単一の演算コアで演算されてもよい。本項目はアプリケーションを特定する列挙値や識別値で記載されていてもよい。
出力先アプリ402は、データの出力先となるアプリケーションの種類を示す。出力先アプリ402はたとえば、センサフュージョン、行動推定、および地図フュージョンなどである。ただし図4に示す例では、作図の都合により地図フュージョンを「地図F」と記載している。出力先アプリ402に示されたアプリケーションは、複数の演算コアで並列的に演算されてもよいし、単一の演算コアで演算されてもよい。本項目はアプリケーションを特定する列挙値や識別値で記載されていてもよい。
データ種類403は、データの概念的な種別を示す。データ種類403はたとえば、他車両、歩行者、白線、標識などである。データ種類403は、入力元アプリ401と出力先アプリ402の間で受け渡しされるデータの種別である必要がある。本項目は図3に示す例におけるデータ種類301に相当する。データ種類301の場合と同様に、データ種類を一層で表現しても、二層で表現してもよい。
設定情報ID404は、アプリケーションの入出力設定のIDを示す。すなわち、設定情報群112のキーとなる、入力元アプリ401、出力先アプリ402、およびデータ種類403の組み合わせで特定される対象データに対する設定情報が複数存在する場合にそれら複数の設定情報を識別する識別子である。図4に示す例では、対象データに対して設定情報が単一の場合には、設定情報ID404は1が設定される。対象データに対して設定情報が複数存在する場合には、たとえば、図4に示すように設定情報IDに異なる値が設定される。本項目は、設定情報群112として必須の項目ではなく、対象データに対して複数の設定情報が存在する場合のみ存在するものである。つまり対象データに対して単一の設定情報のみが存在する場合には本項目は不要である。
使用可否405は、対象データに対する設定情報が使用されるか否かを示す。換言すると使用可否405は、当該設定情報が有効か無効かを示す。図4に示す例では、入力元アプリ401がセンサフュージョン、出力先アプリ402が行動推定、データ種類403が他車両で特定されるデータに対して設定情報が3つ存在する。使用可否405はこの3つのうちいずれが使用されるかを示すものであり、1つのみが肯定的な設定、たとえば「True」に設定される。図4ではち設定情報IDが「1」の設定情報のみ使用可否405がTrueとなっており、有効である例が示されている。
なお使用可否405は、設定情報群112としては必須の項目ではなく、対象データに対して複数の設定情報が存在する場合のみ必要な項目である。対象データに対して単一の設定情報のみが存在する場合には本項目は不要である。
出力要素数406は、データ管理部104から出力先アプリ402に対して出力するデータの要素数を示す項目である。出力要素数406が「3」となっている場合には、配列の要素を3つずつ出力する。出力するデータの型が配列でない場合には本項目は不要である。
種別408は、データ管理部104から出力先アプリ402に対してデータ出力するタイミングが、Pull型とPush型のいずれかであるかを示す。Pull型と指定されている場合には、データ管理部104が出力先アプリ402からデータ出力要求を受けたタイミングで出力する。Push型と指定されている場合には、データ管理部104は、入力元アプリ401からデータ入力要求を受けたタイミングに、出力先アプリ402へデータ出力を行う。本項目は、そもそもPull型とPush型の両方をデータ管理部104のデータ出力として機能をサポートする場合に必要なものであり、Pull型もしくはPush型のどちらか片方のみサポートする場合には不要である。
通知待機407は、データ管理部104が出力先アプリ402から出力要求を受けた際に、入力元アプリ401の処理完了を待機した上でデータを出力するか否かを示す。通知待機407が「True」と指定されていた場合には、全コアで動作している入力元アプリ401から完了通知を受け取ってから出力を行う。したがって本項目とコア数409はセットで扱われる。通知待機407が「False」と指定されていた場合には、入力元アプリ401の処理完了に関わらず出力を行う。通知待機407は、種別408がPull型に設定されている設定情報のみ参照される項目である。種別408がPush型に設定されている設定情報では通知待機407は設定されなくてよい。
コア数409は、入力元アプリ401に記載されたアプリケーションがいくつのCPUコア上で演算されるかを示す。通知待機407が「True」の場合には、演算を実行している全てのコアからの処理完了の通知を待機する必要があるので、コア数409の情報が必要となる。換言すると、通知待機407が「False」の場合にはコア数409は参照の必要はなく、コア数409に情報が記載されなくてもよい。
ソート方法410は、データ管理部104が出力先アプリ402へ出力する対象のデータに対して、予め実行しておくソートの方法を示す。このソートの実行結果によって、どのような順序で要素が出力されるかが変化する。ソート方法410には次に説明する「データID」、「タイムスタンプ」、「データ固有情報」、および「距離ソート」が含まれてもよい。「データID」によるソートとは、図3で示したデータID302をキーとして、昇順または降順でソートする方法である。「タイムスタンプ」によるソートとは、図3で示したタイムスタンプ303をキーとして、昇順または降順でソートする方法である。「データ固有情報」によるソートとは、図3で示したデータ固有属性群304のいずれかの情報をキーとして、昇順または降順でソートする方法である。
さらに、データの値を直接ソートキーとして使う代わりに、データの値をもとに演算した結果をキーとしてソートしてもよい。たとえば、データが固有属性として位置情報を保持する場合に、自車両9と対象データの位置情報を用いてユークリッド距離を演算し、その演算結果である距離の長さに基づいてソートすることも考えられる。図4に示す例ではこの方法を「距離ソート」と記載している。さらにソート方法を独自関数で実装し、その関数の識別子を指定することも可能である。また、ソート方法を指定しないことも可能である。このソートの設定情報に基づくソート処理は、データ管理部104が、データを集約管理している場合に効果が発生するものである。
割当方法411は、出力先アプリへ出力するデータの指定方法を示す。割当方法411の例として、「出力要求順割当」および「空間領域割当」を説明するが、他の指定方法が選択可能でもよい。「出力要求順割当」とは、出力先アプリへデータ出力する契機があった場合に、インデックスの小さい順に出力する方法である。データのインデックスは生成された順番に付されてもよいし、ソート方法410に記載の方法でインデックスがソートされてもよい。「空間領域割当」とは、出力対象のデータがたとえば、車両9が存在する2次元平面グリッドマップを示すような際に、その平面を空間的に分割した上で、動作スレッドに対して分割空間領域に存在するデータ要素を割り当てる方法である。たとえば、車両前方と車両後方で空間領域を二分割して、車両前方は特定の動作スレッドに割り当てて、車両後方は別の特定の動作スレッドに割り当てるなどを行うことが考えられる。
ところで、この空間領域割当の例のように、出力先の動作スレッドを識別した上で、その動作スレッドごとに割当を決める場合には、データ管理部104は、出力要求を受けた動作スレッドを一意に特定する手段を有しておく必要がある。後述する、図9のデータ操作インタフェース201のAPIの一例として記載のデータ出力要求APIでは、データ出力要求を行う呼出元のアプリIDとして、アプリケーションの種類とその動作スレッドを識別する値を引数で渡される例を記載している。
演算装置10は、この設定情報群112の各項目の情報に従って、データ管理部104が入力元アプリ401と出力先アプリ402の間のデータ入出力を制御する。そのため、たとえば並列化スケジューリング変更に伴ってデータ入出力の制御方法を変更したい場合には、設定情報群112のみ変更すればよい。
(動作例)
図5~図7は、演算装置10のA~Cの3つの動作例を示す図である。図5に示す例Aは、出力先アプリ402が演算コア1と演算コア2でデータ並列化されている。図6に示す例Bは、入力元アプリ401と出力先アプリ402がパイプライン並列化されている。図7に示す例Cは、入力元アプリ401と出力先アプリ402がともに演算コア1と演算コア2でデータ並列化されている。各例の詳細は後述する。
複数の演算コアを効率よく稼動させて、入力元アプリ401、たとえばセンサフュージョンアプリと出力先アプリ402、たとえば行動推定アプリ4とを高速に実行するための性能チューニングとして、スケジューリング設計を例A、例B、例Cの間で相互に変更されることが想定される。そのようなスケジューリング設計が変更された場合にも、図4に示す設定情報群112の使用可否405を書き換えることで、データ管理部104がデータ出力制御を変更することが可能となる。
図5に示す例Aでは、出力先アプリ402が演算コア1と演算コア2で並列化されている。入力元アプリ401の実行時間が、アプリケーション実行時間501として示されている。出力先アプリ402の実行時間が、演算コア2上でアプリケーション実行時間502、演算コア1上でアプリケーション実行時間503として示されている。この例Aでは、入力元アプリ401から出力先アプリ402へのデータ出力の設計として、「出力データ要素は3つずつ」、「入力元アプリ401が処理完了した後に」、「出力先アプリ402から出力要求があるたびにデータを出力先アプリへ出力する」、という設計によるデータ出力の様子をシーケンス図で示している。
まず図5の左半分、すなわち符号510Aの矢印の処理までを説明する。図5に示す例Aでは、まず入力元アプリ401が演算を行い、演算結果が得られるたびに符号510で示すように演算結果を出力する。入力元アプリ401が出力を行っている最中に、符号500で示すように出力先アプリ402から入力元アプリ401にデータが要求される。そして入力元アプリ401は符号501で示す時間を要して演算を完了させ、符号510Aに示すように処理が完了した旨の通知を送信する。
データ管理部104は、図4の例に示す1行目の設定情報、すなわち、出力要素数406が「3」、通知待機407が「True」、種別408が「Pull」、コア数409が「1」を読み取り、図5に示す例の動作を行う。すなわち、符号510Aで示す完了通知を「1」つ受信すると出力先アプリ402への出力を開始しており、符号511に示すように入力元アプリ401から受信したデータ「3」つを1つの塊として出力する。
図6に示す例Bでは、入力元アプリ401と出力先アプリ402がパイプライン並列化されている。入力元アプリ401の実行時間が、アプリケーション実行時間501として示されている。出力先アプリ402の実行時間が、アプリケーション実行時間505として示されている。これらのアプリケーションはそれぞれ別の演算コアで実行されており、時間的に同時並列的に動いている。入力元アプリ401の動作は例Aと同様なので説明を省略する。
この例Bでは、入力元アプリ401から出力先アプリ402へのデータ出力の設計は、「出力データ要素は1つずつ」、「入力元アプリ401が処理完了するか否かに関わらず」、「入力元アプリ401からデータがアプリケーション入出力データ群111へ格納されるタイミングでデータを出力先アプリ402へ出力する」、という設計によるデータ出力の様子をシーケンス図で示している。
データ管理部104は、図4の例に示す2行目の設定情報、すなわち、出力要素数406が「1」、種別408が「Push」を読み取り、図6に示す例の動作を行う。すなわちデータ管理部104は、入力元アプリ401からデータが「1」つ出力されると、種別408が「Push」なので完了通知を待機せずに、即座に出力先アプリ402への送信を開始する。
図7に示す例Cでは、入力元アプリ401と出力先アプリ402がともに演算コア1と演算コア2でデータ並列化されている。演算コア1上で実行する入力元アプリ401の実行時間がアプリケーション実行時間601として、演算コア2上で実行する入力元アプリ401の実行時間がアプリケーション実行時間602として示されている。演算コア1上で実行する出力先アプリ402の実行時間がアプリケーション実行時間603として、演算コア1上で実行する出力先アプリ402の実行時間がアプリケーション実行時間604として示されている。
この例Cでは、データ出力の設計として、「出力データ要素は3つずつ」、「入力元アプリ401が処理完了した後に」、「データを出力先アプリ402へ出力する」、という設計によるデータ出力の様子をシーケンス図で示している。データ管理部104は、図4の例に示す3行目の設定情報、すなわち、出力要素数406が「3」、通知待機407が「True」、種別408が「Pull」、コア数409が「2」を読み取り、図7に示す例の動作を行う。
入力元アプリは演算コア1と演算コア2で並列動作して、それぞれのコアは演算が完了すると完了通知を出力する。演算コア2は処理が先に完了し、符号611で示すデータと、符号612で示す完了通知を出力する。この時点におけるデータ管理部104の判断は次のとおりである。すなわちデータ管理部104は、出力要素数406が「3」でありすでに入力元アプリ401から3つのデータを受信しているが、受信した完了通知は1つしか受信しておらず、コア数409の「2」よりも少ないため出力条件を満たしていないと判断する。
その後、演算コア1が演算を完了し、符号613に示す3つのデータの出力と、符号614に示す完了通知を送信すると、データ管理部104は出力条件を満たしたと判断して出力先アプリ402にデータを出力する。
(フローチャート)
図8~図10を参照して、データ管理部104のデータ入出力処理を説明する。図8はデータ管理部104にデータが入力される際の処理であるデータ入力処理を示すフローチャートである。ただし図8では、所定の入力元アプリXからデータ入力がされるとしてデータ管理部104の動作を説明する。
データ管理部104は、ステップS701において、入力元アプリXからデータ入力要求を受けてステップS702に進む。本データ入力要求では後述する図9のデータ入力要求APIを通じて、いずれの入力元アプリからも共通のAPIにてアクセスされる。その際に、入力元アプリ401、データ種類403等の情報を入力データそのものとともに、API引数としてデータ管理部104が受け取る。
データ管理部104は、ステップS702において、入力元アプリ401とデータ種類403の情報をもとに、アプリケーション入出力データ群111の該当アドレスにデータを格納してステップS703に進む。入力元アプリ401とデータ種類403の情報とデータを格納するアドレスを紐付けるテーブルは、データ管理部104が内部で保持してもよいし、別のモジュールが保持してそれをデータ管理部104が参照してもよい。
データ管理部104は、ステップS703において、所定の待機スレッドに対して、入力元アプリ401とデータ種類403のデータが新たに格納されたことを通知してステップS704に進む。この待機スレッドは後述するステップS752において待機している。データ管理部104は、ステップS704において、後述するPush処理を実行してステップS705に進む。ステップS705において処理対象となるのは、設定情報群112において種別408が「Push」である設定情報である。種別408が「Pull」である設定情報は、後述する図10に示すフローチャートにおいて処理される。
データ管理部104は、ステップS705において、入力元アプリ401から完了通知があるか否かを判断する。なお以下では、「完了通知」は「アプリ処理完了通知」や「処理完了通知」とも呼ぶ。入力元アプリ401からのデータ処理完了通知は、後述する図11のアプリ処理完了通知APIを通じて受け付ける。データ管理部104は、データ処理完了通知があると判断する場合にはS706へ進み、ないと判断する場合は図8に示す処理を終了する。
データ管理部104は、ステップS706において、アプリケーション入出力データ群111へ完了通知を格納して図8に示す処理を終了する。本通知は、後に説明する図9に示すフローチャートにおいて参照される。
図9は、図8のステップS704の詳細を示すフローチャートである。データ管理部104はステップS751では、Push処理対象の設定情報が存在するか否かを判断する。データ管理部104は、Push処理対象の設定情報が存在すると判断する場合はステップS752に進み、Push処理対象の設定情報が存在しないと判断する場合は図9に示す処理を終了する。データ管理部104は具体的には、設定情報群112において入力元アプリ401が「入力元アプリX」の種別であり、データ種類403が受信したデータのデータ種類であり、使用可否405が「True」であり、かつ種別408が「Push」である設定情報が存在するか否かを判断する。
ステップS752ではデータ管理部104は、ステップS751において存在を確認した設定情報の出力条件を満たすか否かを判断する。データ管理部104は、出力条件を満たすと判断する場合はステップS753に進み、出力条件を満たさないと判断する場合はステップS752に留まる。具体的にはデータ管理部104は、出力要素数406の要素数分のデータがアプリケーション入出力データ群111に蓄積されているか否かを判断する。ただしステップS752において否定判断する場合は、ステップS752における待機が短時間で解消しない可能性もあるため、待機以下の処理を別スレッドで実行させて、次のデータ入力要求受付に備えて待機する。以下ではステップS752において否定判断されたことで生成されるスレッドを「待機スレッド」とも呼ぶ。
ステップS753ではデータ管理部104は、設定情報にソート方法410や割当方法411の記載がある場合には、その記載にしたがって、ソートや要素の割当を行いステップS754に進む。設定情報にソート方法410の記載がある場合には、その記載にしたがってソートを行う。たとえばデータIDで昇順もしくは降順にソートし要素を入れ替える。また設定情報に割当方法411の記載がある場合には、その記載にしたがって要素を割り当てる。割当の方法はインデックスを入れ替えるのでもよく、また別の方法としてスレッドごとに配列を確保して割当られた要素をコピーするなどしてもよい。データ管理部104は、ステップS754において、出力先アプリ402に対して指定要素分出力を行い図9に示す処理を終了する。
図10はデータ管理部104が出力先アプリへデータを出力するデータ出力処理を示すフローチャートである。データ管理部104は、ステップS800において、出力先アプリ402からデータ出力要求を受けるとステップS801に進む。本データ出力要求では後述する図11のデータ出力要求APIを通じて、いずれの出力先アプリからも共通のAPIにてアクセスされる。その際に、入力元アプリ401、出力先アプリ402、データ種類403等の情報をAPI引数としてデータ管理部104が受け取る。
データ管理部104は、ステップS801において、設定情報群112を読み込んでステップS802に進む。具体的にはデータ管理部104は、入力元アプリ401、出力先アプリ402、データ種類403の情報をキーにして設定情報群112を検索して設定情報を特定し、その設定情報を読み込む。ただしデータ管理部104は、該当する設定情報が複数存在する場合には、使用可否405が「True」に設定されている設定情報のみを読み込む。
データ管理部104は、ステップS802~ステップS804において、設定情報群112に記載されている各種出力条件を満たしているかを判断する。データ管理部104はまずステップS802において、要素数の蓄積条件を満たすか否か、すなわち出力要素数406の要素数分のデータがアプリケーション入出力データ群111に格納されているか否かを判断する。データ管理部104は要素数の蓄積条件を満たすと判断する場合はステップS803に進み、要素数の蓄積条件を満たさないと判断する場合はステップS802に留まる。
ステップS803ではデータ管理部104は、通知待機407がFalseであるか否かを判断し、Falseであると判断する場合はステップS805に進み、Falseではない、すなわちTrueであると判断する場合はステップS804に進む。ステップS804ではデータ管理部104は、入力元アプリ401のアプリ処理完了通知を受信済みであるか否かを判断し、受信済と判断する場合はステップS805に進み、受信していないと判断する場合はステップS805に留まる。なおステップS804における判断材料のアプリ処理完了通知とは、前述の図8におけるステップS706の処理によるものである。
なおデータ管理部104は、ステップS802およびステップS804において否定判断した際にステップS802に留まらず、ステップS800におけるデータ出力要求の送信元にエラーを通知して図10に示す処理を終了してもよい。ステップS805およびステップS806の処理のそれぞれは、ステップS753およびステップS754の処理のそれぞれと同様なので説明を省略する。
図11は、データ操作インタフェース201が解釈可能なAPIの一例を示す図である。記載例C901は、データ操作インタフェース201をC言語で記述した場合のヘッダファイルの一部を擬似コードで表現したものである。このAPIには、データの入力要求、データの出力要求、およびアプリ処理完了通知等が含まれる。
記載例C901の最初に示す例であるデータの入力要求API(dataInputRequest)は、データをアプリケーション入出力データ群111に格納する操作を要求するAPIである。このAPIの引数は、呼出元アプリを特定する呼出元アプリID、入力するデータ種類を指定する入力データ種類、データサイズ、およびデータアドレスを含む。呼出元アプリIDは、アプリケーションの種類を一意に特定できる識別子である必要がある。データ種類はデータ種類301は、データの概念的な種別を示すものである。たとえば、他車両、歩行者、白線、標識等があげられる。データサイズは入力されるデータの長さを示す。データアドレスは入力されるデータの格納される。このAPIの呼出は、図8のステップS701に対応する。
記載例C901の2番目の例であるデータ出力要求API(dataOutputRequest)は、データをアプリケーション入出力データ群111から出力する操作を要求するAPIである。このAPIの引数は、対象データをアプリケーション入出力データ群111に入力したアプリケーションを示す入力元アプリID、呼出元アプリを特定する呼出元アプリID、出力するデータの種類を指定する出力データ種類、格納先バッファサイズ、およびバッファアドレスから構成される。図4における割当方法411で実行スレッドIDに紐付くデータ割当方法が指定されるように設定情報が指定されていた場合には、本データ出力要求APIにおける引数の呼出元アプリIDは、アプリケーションの種類とそのアプリケーションの動作スレッドの両者を一意に特定できる識別子である必要がある。このAPIの呼出が、図10のステップS800に対応する。
記載例C901の3番目の例であるアプリ処理完了通知APIは、入力元アプリ401が処理を完了した際に、入力元アプリ401から呼び出されるものである。これに基づいて、図7におけるステップS705での判定がなされる。
以上のように、データ管理部の備えるデータ操作インタフェース201は、アプリケーションの種類やアプリケーションの実行スケジューリングに依存しない引数が定義されている。そのため、データ並列化やパイプライン並列化等のアプリケーションの実行スケジューリングに変更があった場合にも、アプリケーションのインタフェース自体は変更する必要がない。
図12は、アプリケーションの記述様式の一例として擬似コード1000を示す図である。この記述様式を用いて、入力元アプリ401や出力先アプリ402を含めあらゆるアプリケーションが記述されることを想定している。擬似コード1000の内部では、データが繰り返し処理される。たとえば、自車両周辺の他車両の行動を推定するアプリケーションの場合には、他車両1台ずつについて、その他車両の情報や周辺状況に基づいて、行動推定が繰り返される。
その繰り返し処理の先頭において処理部100は、符号1000Aで示すように、まずアプリケーションはデータの出力要求APIを用いてデータを取得する。図12の擬似コード1000では、単一のデータの出力要求するAPIを一度呼び、その出力データに対して処理を行う記述となっている。たとえば、この単一のデータの中に複数のデータを構成した構造体としてもよい。また、別の方法として、別々のデータ構造体に分かれた複数のデータを取得するために、出力要求APIを複数回呼ぶ構成としても構わない。図4における割当方法411で実行スレッドIDに紐付くデータ割当方法が指定されるように設定情報が指定されていた場合には、呼出元アプリIDは次の制約が課せられる。すなわち本データ出力要求APIにおける引数の呼出元アプリIDは、アプリケーションの種類とそのアプリケーションの動作スレッドの両者を一意に特定できる識別子である必要がある。
次に処理部100は、符号1000Bで示すように、取得したデータに対してアプリケーション独自の処理を行う。データに対する処理結果として図12の擬似コード1000では、単一のデータを返り値として記述しているが、複数のデータを処理結果としてもよい。次に処理部100は、符号1000Cで示すように、処理結果を次にデータ管理部104のデータ入力要求APIを用いて入力する。図12の擬似コード1000では、単一のデータを入力するために、データの入力要求を一度呼んでいるが、複数のデータを入力するためにデータの入力要求を複数回呼ぶ構成としてもよい。
次に処理部100は、符号1000Dで示すように、アプリケーションが処理するデータの出力元であるアプリケーションの処理完了通知がアプリケーション入出力データ群111に入っている場合には、アプリ処理完了通知を、データ管理部104に対して通知する。
図12の擬似コード1000のような記述様式としておくことで、アプリケーションからはデータ入出力設計の設定情報に関わらず統一的な記述が可能となる。データ入出力の制御に関しては、擬似コード1000で呼ぶデータ管理部104の提供するデータ操作インタフェース201の内部に隠蔽される。
以上のように、本実施形態によれば、予めアプリケーションとアプリケーション間で入出力されるデータに対して、出力タイミングや出力データ数を定義した設定情報を演算装置10に保持しておき、さらにアプリケーションから共通のインタフェースでデータ入出力可能なデータ管理部を介して、アプリケーションはデータを入出力することで、データ管理部は、設定情報に基づいて、アプリケーションへの出力データ数や出力タイミングを制御する。これにより、データの入出力設計の変更を設定情報の変更のみで行うことができ、アプリケーションのインタフェースを変更する必要がない。
上述した第1の実施の形態によれば、次の作用効果が得られる。
(1)演算装置10は、所定の対象要素に対応するデータ要素の集合であるオブジェクトデータ、すなわちアプリケーション入出力データ群111に格納される情報、およびオブジェクトデータの出力方式、すなわち設定情報群112の符号406~符号411の情報に関する設定情報を複数含む設定情報群112が格納される記憶部110と、オブジェクトデータを管理するデータ管理部104と、データ管理部104から取得されるオブジェクトデータである入力オブジェクトデータに基づいてオブジェクトデータである出力オブジェクトデータを演算し、出力オブジェクトデータをデータ管理部に出力するソフト部品を複数備える実行制御部102と、を備える。設定情報群112を構成するそれぞれの設定情報は、第1ソフト部品(出力先アプリ402)に対する入力オブジェクトデータであり第2ソフト部品(入力元アプリ401)が出力する出力オブジェクトデータ、すなわち設定情報群112の符号401~符号403により特定されるオブジェクトデータと、第2ソフト部品が出力する出力オブジェクトデータを第1ソフト部品に対して出力する際の出力方式、すなわち設定情報群112の符号406~符号411の情報と、が対応付いた情報である。データ管理部104は、第2ソフト部品(入力元アプリ401)から受け取ったオブジェクトデータを管理し、オブジェクトデータを、設定情報に規定された出力方式に基づき、第1ソフト部品(出力先アプリ402)に出力する。そのため演算装置10は、アプリケーションを変更することなくデータ入出力の変更に対応できる。
(2)出力方式は、オブジェクトデータの出力要素単位情報、すなわち出力要素数406と、オブジェクトデータの出力開始タイミング情報、すなわち通知待機407および種別408と、オブジェクトデータのスレッド割当方法、すなわち割当方法411と、のいずれか1つ以上を含む。
(3)出力方式は、さらにオブジェクトデータのソート方法410を含む。そのため制御装置10は、多彩な出力方式を設定可能である。
(4)演算装置10は、データ管理部に対するオブジェクトデータの入出力を操作するためのデータ操作インタフェース201を備える。ソフト部品は、データ操作インタフェース201を介してデータ管理部104に対するオブジェクトデータの入出力を操作する。データ操作インタフェース201は、データ管理部104によるソフト部品に対するオブジェクトデータの出力方式に関わらず共通である。そのため、アプリケーションのデータ入出力の制御はデータ管理部104の内部に隠蔽できる。
(変形例1)
記憶部110は演算装置10の外部に設けられてもよい。その場合は演算装置10は、通信部120を介して記憶部110にアクセス可能に構成される。
(変形例2)
実行制御部102は、設定情報群112を書き換えてもよい。本変形例では、記憶部110に対応表115がさらに格納される。対応表115は、状態と設定値との対応を示す表である。
図13は対応表115の一例を示す図である。実行制御部102は対応表115を読み込み、車両9が図示左側の欄に記載した状態に該当すると判断すると、設定情報群112を図示左側の欄に記載した設定値に書き換える。ただし図13に示す例では、具体的な設定値の代わりにDEF1、DEF2、などを記載している。この設定値は具体的には、使用可否405の項目の値である。たとえば図4に示す全ての設定情報についてのTrueまたはFalseのいずれかの情報であってもよいし、Trueである設定情報を特定する情報でもよいし、Falseである設定情報を特定する情報であってもよい。
図14は、実行制御部102が設定情報群112を動的に書き換える設定情報切替処理のフローチャートである。ステップS1100では実行制御部102は、対応表115を読み込む。続くステップS1101では実行制御部102は、外界センサ群20および車両センサ群30から取得した情報に基づき、車両9の状態を検出する。続くステップS1102では実行制御部102は、ステップS1101において検出した車両9の状態に対応する対応表115の設定値を読み取る。続くステップS1103では実行制御部102は、ステップS1102において読み取った設定値に設定情報群112を書き換えて図14に示す処理を終了する。具体的には実行制御部102は、設定情報群112の使用可否405の値を書き換える。
このように、アプリケーションの実行スケジュールの切替に合わせて、データ管理部から参照される設定情報群112を書き換えておくことで、アプリケーションの実行スケジュールに合わせた、データ入出力の設計を、アプリケーションの変更なしに動的に実現することができる。図13では、動的に設定情報を変更する処理フローF1100を示したが、もちろん複数の設定情報に対して、アプリケーション動作中ではなく、静的にどの設定情報を有効化するかを変更してもよい。
この変形例2によれば次の作用効果が得られる。
(5)演算装置10は、設定情報群112を書き換える実行制御部102を備える。そのため状況に応じて設定情報群112を書き換え、アプリケーションのデータ入出力を任意のタイミングで変更できる。なお本変形例では実行制御部102が設定情報群112を書き換えたが、実行制御部102以外が設定情報群112を書き換えてもよいし、演算装置10が他の機能構成を備え、その機能構成が設定情報群112を書き換えてもよい。また実行制御部102は、動的に、すなわちアプリケーションの動作中に設定情報群112を書き換えてもよいし、静的に、すなわちアプリケーションの停止中に設定情報群112を書き換えてもよい。
(変形例3)
設定情報群112は、符号406から符号411に示す構成の少なくとも1つを含めばよい。設定情報群112に含まれない構成は既定の固定値としてもよい。たとえば設定情報群112から出力要素数406を削除し、全ての設定情報において出力要素数406を「1」として扱ってもよい。
―第2の実施の形態―
図15を参照して、車両制御システムの第2の実施の形態を説明する。以下の説明では、第1の実施の形態と同じ構成要素には同じ符号を付して相違点を主に説明する。特に説明しない点については、第1の実施の形態と同じである。本実施の形態では、主に、演算装置をテスト環境で動作させる点で、第1の実施の形態と異なる。
(構成)
図15は、第2の実施の形態に係る車両制御システムの全体構成図である。第1の実施の形態との相違点は、車両制御システム1Aが車両9ではなく車両9の外部に存在するテスト環境9Aに置かれる点が大きく異なる。また第1の実施の形態において説明した外界センサ群20、車両センサ群30、アクチュエータ群40、および車載ネットワーク50Aは車両9に備えられる構成なので、本実施の形態ではそれらに代わって、外界センサ群シミュレータ20A、車両センサ群シミュレータ30A、アクチュエータ群シミュレータ40A、およびネットワーク50Aが備えられる。さらに車両制御システム1Aにはオペレータ端末60Aも備えられる。
外界センサ群シミュレータ20Aは、外界センサ群20の動作をシミュレートする装置である。具体的には外界センサ群シミュレータ20Aは、予め定められたタイミングであらかじめ定められたデータを演算装置10Aに出力する。車両センサ群シミュレータ30Aは、車両センサ群30の動作をシミュレートする装置である。具体的には車両センサ群シミュレータ30Aは、予め定められたタイミングであらかじめ定められたデータを演算装置10Aに出力する。アクチュエータ群シミュレータ40Aは、アクチュエータ群40の動作をシミュレートする装置である。具体的にはアクチュエータ群シミュレータ40Aは、演算装置10Aからの動作指令を受ける。
なおアクチュエータ群シミュレータ40Aが演算装置10Aから入力される情報に基づき、外界センサ群シミュレータ20Aおよび車両センサ群シミュレータ30Aが出力する情報を加工してもよい。たとえば演算装置10Aがアクチュエータ群シミュレータ40Aにアクセルペダルの踏み込み量増加の指令を出力すると、車両センサ群シミュレータ30Aが出力する自車両9の速度の出力、すなわち速度の値を増加させてもよい。
ネットワーク50Aは、たとえば室内に敷設されたLANである。ただしネットワーク50Aは無線LANであってもよい。オペレータ端末60Aはたとえばオペレータが操作するパーソナルコンピューターである。オペレータは、オペレータ端末60Aを介して10Aの内部に自由にアクセスができる。オペレータはオペレータ端末60Aを操作することで、設定情報群112の書き換え、および動作ログ116の取得が可能である。
本実施の形態における演算装置10Aの構成は、記憶部110に動作ログ116がさらに格納される点、および処理部100がその機能としてログ記録部105をさらに有する点が第1の実施の形態と異なる。ログ記録部105は、時間の情報を付して処理部100の動作を動作ログ116に記録する。
上述した第2の実施の形態によれば、車両9の外部で事前に様々な状況をテストすることができる。
(第2の実施の形態の変形例)
上述した第2の実施の形態では、外界センサ群シミュレータ20A、車両センサ群シミュレータ30A、およびアクチュエータ群シミュレータ40Aは演算装置10Aとは異なるハードウエアにより実現され、ネットワーク50Aにより接続された。しかし演算装置10A、外界センサ群シミュレータ20A、車両センサ群シミュレータ30A、およびアクチュエータ群シミュレータ40Aが同一のハードウエアにより実現されてもよい。換言すると、第2の実施の形態における構成は、全てが1台のコンピュータにおける仮想的な構成であってもよい。
演算装置10が不図示の入出力インタフェースを備え、必要なときに入出力インタフェースと演算装置10が利用可能な媒体を介して、他の装置からプログラムが読み込まれてもよい。ここで媒体とは、たとえば入出力インタフェースに着脱可能な記憶媒体、または通信媒体、すなわち有線、無線、光などのネットワーク、または当該ネットワークを伝搬する搬送波やディジタル信号、を指す。また、プログラムにより実現される機能の一部または全部がハードウエア回路やFPGA(field programmable gate array)により実現されてもよい。上述した複数の変形例は、それぞれ組み合わせてもよい。上記では、種々の実施の形態および変形例を説明したが、本発明はこれらの内容に限定されるものではない。本発明の技術的思想の範囲内で考えられるその他の態様も本発明の範囲内に含まれる。