ここで紹介するシミュレータは、近未来のインフラ協調型安全運転支援システムを体験するためのものです。インフラ協調型安全運転支援システムは、既存の道路をベースに最先端の情報通信技術(ICT)を駆使し、人・道路・車を一体的なシステムとして構築するもので、その情報を用いることで運転がどのような状態となるかを体験できます。トヨタ自動車株式会社様と開発を行った事例となります。
|
このシステム全体の概要は下図の通りです。マンマシンインタフェースは【写真01】のインタフェース部分に当たりインタフェース部に対してデータの受信、送信を分けています。
(1) 体験シミュレータ3画面
交差点周りの走行環境表現力向上
(2)「インフラ協調型安全運転支援システム」体験機能
近い将来の量産化を目指し開発中のシステムを未来感を持たせ表現
信号見落とし防止支援(路車間)
接近車両検知システム(車車間) など
(3) 走行環境の整備
リアルな街環境の表現(名古屋駅周辺〜豊田市)
さまざまなアクシデント発生
シナリオの織り込み
(4) 車両運動モデル
−高精度なCarSim実装
(5) 6自由度のモーション装置付きシミュレータ |
|
■写真01 体験シミュレータ3画面 |
|
また、インフラ協調型安全運転支援システムとして以下の項目を体験できるようになっています。
- 歩行者見落とし防止
- 緊急車両情報提供
- 右折時衝突防止
- 追突防止情報提供
- 信号見落とし防止
- 左折巻き込み防止
- 一時停止見落とし防止
- 右折時横断歩行者見落とし防止
このシミュレータを作成するにあたっては、UC-win/Road の重要な機能の1 つとして「シナリオ機能」が挙げられます。UCwin/Road
体験シミュレータでは、時々刻々変化していく走行シーンの中で、あらかじめ決められたさまざまな動きをモデルに設定できます。たとえば、以下のようなストーリーのシーンを自由に設定することができ、シミュレータで表現したい事象を簡単に作成することができます。
- 信号が必ず赤信号に変わる
- 横から車が飛び出してくる
- 渋滞が発生する
- 人間が歩行を開始する
|
シナリオとイベントの関係と流れは、以下の【図03】のようになります。
|
■図03 シナリオとイベントの関係 |
このシステムの特徴の1 つとして、CarSim との連携が挙げられます。CarSim
は車両の物理的な挙動を計算するソフトウェアで、自動車メーカーや自動車部品メーカー、タイヤメーカーや大学、研究機関などで利用されています。運転の挙動をシミュレータに伝えるために、自車両の車両運動モデルとしてこのCarSim
を使用した開発が行われました【図04】。
|
■図04 CarSim とシミュレータとの連携画面 |
UC-win/Road SDK で車両運動計算を独自のものに置き換えるには、SDK のサンプルに収録されている「VehicleDynamicsSample」を利用します。このサンプルにある「VehicleDynamicsPhysicsModel.pas」の「procedureDoPhysics(
const dTimeInSeconds : Double )」メソッドが車両運動計算部になるので、この部分を変更することにより、使用したい車両運動計算の変更が行えます。
CarSim とのデータの連携
UC-win/Road → CarSim |
CarSim → UC-win/Road |
車体情報 |
車体の位置 |
車体の状態(ロール、ピッチ、ヨー) |
タイヤ位置の情報(全タイヤ数分) |
タイヤ接地面位置 |
タイヤ接地面の路面の傾き |
タイヤ接地面の摩擦係数 |
運転情報 |
ハンドル舵角 |
アクセル |
ブレーキ |
|
車体情報 |
車体の位置 |
車体の状態(ロール、ピッチ、ヨー) |
速度情報 |
加速度情報 |
角加速度情報 |
速度情報 |
角速度情報 |
運転状態の情報 |
エンジン回転数 |
ギア状態 |
ステアリングホイールトルク |
ハンドル舵角 |
|
このシミュレータはスバルカスタマイズ工房の6軸モーション付きのドライビングシミュレータを使用しています。このシミュレータのハードウェアとは、下記の内容をそれぞれのインタフェースで接続しています。
UC-win/Road とシミュレータ間の入出力データ
インタフェース |
データ |
RS-232C |
ハンドル情報&制御 |
6軸モーション制御 |
アナログ(CONTEC) |
アクセルペダル |
ブレーキペダル |
スピードメーター |
タコメーター |
デジタル(CONTEC) |
割り当てボタン5個 |
シートベルト着用 |
シートベルト制御 |
アナログ情報とデジタル情報は、CONTEC 社のアナログボードとデジタルボードを使用しています。CONTEC
社のボードのSDK に、Delphi で使用するためのヘッダファイルが付属しているので、それを利用して制御しています。
ステアリング情報は、UC-win/Road では− 1 〜 1(左〜右)の値を使用し、アクセル・ブレーキは0
〜1の値を使用します。この値をSDK からセットするにはApplicationServices
にアクセスし、SetSteering、SetThrottle、SetBrake にてセットすることが可能です。
if Supports(ApplicationServices, IF8ApplicationServices,winRoadApplication)
then
begin
// ステアリングのセット
winRoadApplication.mainForm.driver.SetSteering( Max(-1, Min(1,p_Param.CarState.Stear)
) );
// アクセルのセット
winRoadApplication.mainForm.driver.SetThrottle( Max(0,Min(1,Throttle)
) );
// ブレーキのセット
winRoadApplication.mainForm.driver.SetBrake( Max(0,Min(1,Brake) ) );
end; |
運転開始状態になっていないと、driver の値がnil となります。その場合に値をセットしようとするとエラーとなるため注意しましょう。
ここでは、Delphi によるUC-win/Road を使用した応用開発事例として、鉄道シミュレータの構築について説明します。特に、運転士のトレーニングを目的とした運転席シミュレータや、列車運行シミュレータとの連携について紹介します。
運転席シミュレータ、運転士のトレーニングを目的としています。実車の運転席からの情報をもとにVR
空間上を移動することで、電車の運転をトレーニングすることが可能となります。
■仕様の検討
この事例では、運転席システム(外部PC)からの情報を受け取り、その情報をもとにリアルタイムでVR
空間を移動していくというものです。開発については、以下のような項目についての取り決めが行われました。
・運転席の位置をどのように指示するか
・情報の通信方法
・カメラ位置の更新方法 |
|
|
■図05 運転席視点 |
UC-win/Road には空間をリアルタイムでVR 表示する機能があります。VR 表示に必要な情報はカメラの「位置」と「向き」の2
つです。シミュレーション対象が移動する場合、この2 つの情報を算出する処理を追加する必要があります。自動車を例にすると、UC-win/Roadが持っているドライブシミュレータ機能では、ゲームコントローラのInput
情報(ステアリングとアクセル/ブレーキ量)からリアルタイムに位置と向きを計算、移動するしくみ(車両ダイナミクス【注1】が備わっていますが、電車の動きを算出する仕組み(鉄道車両ダイナミクス)は備わっていません。そこで、UC-win/Road
では線形の開始点からの距離と速度を情報として受け取ることとしました。
情報の連携については、パソコン同士を接続するためにTCP/IP ネットワークを使用します。これについては通信プロトコルと通信フォーマットを決定することで解決しました。UC-win/Roadでは道路線形上の開始点からの距離より、3
次元座標と線形の向きを算出することができますが、これをネットワークで受信する毎に更新していくことで、移動の処理を実装しています。ただしこの処理では、受信周期が一定でないと滑らかな動きになりません。そこで、速度情報を用いて一定間隔ごとの位置を計算し、位置の補間を行っています。
|
■注01 車両ダイナミクスを決める要素は、運転席の情報以外に、路面の勾配や摩擦、車両重量、路面状況などもあります。 |
■開発のポイント
操縦に関するシミュレータについては操縦対象のダイナミクスが重要です。UC-win/Road
ではダイナミクスの結果からも連携することができました。
リアルタイムで映像を再生するには、データを受信するタイミングと描画するタイミングを調整する必要があります。描画の周期が正しくても、情報の周期が乱れる場合はコマ落ちしてしまいます。具体例を挙げると、描画フレームレートが60fps、データの周期10Hz
というシステムの場合、6 フレームはカメラ位置が変わらないため同じ映像を表示したままとなり、結果的に10fpsの見え方と同じとなってしまいます。これを解消するために、データを受信してから経過した時間を基に、フレーム毎のカメラ位置を速度から計算し、なめらかな動きが保てるようにしています。
|
■図06 対向車両 |
列車運行シミュレータは、鉄道ダイヤや車両の諸元から列車の動きやポイントの操作、信号機現示の変更をシミュレートします。この場合は、先ほどの運転シミュレータで使用した車両位置情報の他に、鉄道環境に関する情報(信号機、ポイント、自車以外の列車、遮断機など)を連携する必要があります。
■仕様の検討
まず、仕様について検討してみます。運転シミュレータの機能の他に、3D モデルの挙動を制御する必要があります。このため、開発についての課題は下記のようになります。
・どのように複数の列車を動かすか
・どのように3D モデル(踏切、ポイント、信号機)を動かすか
・運転席の位置をどのような情報で表現するか
・データの通信方法
|
■図07 鉄道運行シミュレータからの連携イメージ |
■VR 表示の更新方法
カメラの移動処理は運転シミュレータと同じように処理できますが、列車モデルを動かすときには以下のような項目を考慮する必要があります。
・列車モデルは、複数車両で編成されている
・カーブでは線路のカント(横断面の傾き)がある
・列車モデルがカメラの前を塞がないようにする
列車モデルを動かすには、列車モデル毎に座標と傾きを設定します。手順は次のようになります。複数車両ある場合は、次の車両の原点を計算してから2
以降を繰り返します。こうすることで、写真のような車両の表現ができるようになります。
手順1:列車モデルの原点を計算、セットする
手順2:列車モデルの向き(Yaw)を計算、セットする
手順3:列車モデルの傾き(Roll)を計算、セットする
|
|
■図07 列車の通過時はカントに応じて車両が傾く |
■図08 複数車両のすれ違いを確認できる |
先ほど紹介したように、UC-win/Road では3D モデルの位置と姿勢を指定することができますが、パーツ毎に動きを設定し、キーボードや内部イベントに反応して動かす方法もサポートされています。この機能を外部からコントロールできるように機能を追加し、仕様を拡張することとしました。これにより、遮断、ポイントの切り替え、信号機の変更処理を外部コントロールできるようになります。
■開発のポイント
鉄道にはダイアグラムという運行計画があり、その他に電車の性能や各種のイベント、環境などをVR
で表現することが重要となります。そのため、運転席だけでなくさまざまな視点から、列車の動きを見せることがポイントになると考えられます。
|
■図10 駅カメラからの映像模擬 |
有償セミナーのお知らせ
エンジニアのプログラミング入門セミナー CPD 認定 |
● 日時 |
2013 年 4 月4 日(木) 9:30 〜 17:00 |
● 受講費 |
1 名様 \18,000(税別) |
● 本会場 |
フォーラムエイト東京本社 GTタワーセミナールーム
※TV会議システムにて東京・大阪・名古屋・福岡・仙台同時開催 |
|
|
(Up&Coming '13 春の号掲載) |
|
|
>> 製品総合カタログ
>> プレミアム会員サービス
>> ファイナンシャルサポート
|