Driving Simulator Platform

SiriusUser’s Manual
August, 2020

Misaki design LLC

0目次

Operation Manual2

4. S-Interface

33

5. Re:simとの連携

37

7

6. UE4との連携

38

1.1 システム・コンフィギュレーション

9

7. Function Extender44

1.2 プロジェクト

12

1.3 PMTools

13

2. フォルダ構成

15

Technical Manual
1. 基本コンセプト

3. Score
3.1 GUI

17

3.2 Score関連ファイル

18

3.3 システム・コンフィギュレーションの編集

19

3.4 プロジェクトの編集

28

3.5 他PCへのログイン情報の編集

30

3.6 プリファレンス設定

32
1

Operation Manual2

すでにシミュレーション用データが全て設定されている場合には、操作は非常に簡単です。

① Scoreを立ち上げます。

※ Scoreは管理者権限で実行する必要があります。

② 実行するプロジェクトを”Load Recent Project”から、もしくは”Select Project”で選択します。

※ プロジェクトの概念ならびに作成方法については、Technical Manualパートを参照のこと。
※ 左の図中のプロジェクト・リストはサンプルであり、必ずしもこの通りであるとは限りません。

3

③ “Initiate System”ボタンを押します。

または、”F1”キーを押すことでも、同様の操作ができます。

必要なプログラムが立ち上がり、通信の確認と初期化が行われます。
準備が整うと、Status, Connectionの×が✓に変わり、また、メッセージ・ウィンドウやコンソールにも、”network connection all checked”
や”Initialized.[*]”などと表示されます。

4④ “Start Simulation”ボタンを押して、シミュレーションを開始します。
または、”F5”キーを押すことで、同様の操作ができます。

※ファンクションキーによる操作は、１台のPCで実行するときに、Scoreがグラフィック画面により隠れてしまい、ボタンを押せない場合に必須になります。

⑤ 終了させるときは、“Stop”ボタンを押して、その後、”Shutdown System”ボタンを押します。
または”F9”キーを押すことで、同様の操作ができます。
※開始時と同じく、ファンクションキーによる操作は、１台のPCで実行するときに、Scoreがグラフィック画面により隠れてしまい、ボタンを押せない場合に必須になります。

⑥ 再度実行する場合は、②もしくは③から手順を繰り返します。

5

Technical Manual61. 基本コンセプト
Siriusは、複数のプログラムが通信によりデータをやり取りしながら、連携して動作することで、ドライビング・シミュレータの機能を実現します。

シミュレーションの実行管理を司るのは、Score(スコア)というプログラムです。
このプログラムは、シミュレーションの実行に必要な各種プログラムの自動実行や、プログラム間の同期を取るといった処理を行います。

また、シミュレーションを行うためのシステム・コンフィギュレーションの設定、使用するコンフィギュレーションや各種データを指定するためのプロジェクトの設定を行うことが出来ます。

Score以外の構成要素としては、以下の４つのプログラムがあります。
S-Interface（エス・インターフェース）： 車両モデルを実装したプログラム

Re:sim（リシム）： 他車両制御・シナリオ実現のためのプログラム

UE4 App（ユーイーフォー・アップ）： UE4のパッケージ化プログラム（CG描画プログラム）

Function Extender(FE・エフ・イー)： 機能拡張のためのユーザー定義プログラム＊Re:simとUE4は、オープンソースのプログラムですので、難易度は非常に高いですが、独自にカスタマイズすることは可能です。

ドライビングシミュレータの機能を実現するために、最低限必要なプログラムは、S-InterfaceとUE4Appです。
他車両や歩行者・自転車などを登場させないのであればRe:simは不要ですし、簡単なシナリオを実現するだけであればFEは不要です。

7

プログラム間は、ネットワーク通信によりデータを授受するので、複数台のPCに分散させて実行することが出来ます。その場合でも、【実行管理】

PMToolsというツールを使って、プログラムの起動・終了等も、Score• 必要なプログラムの自動実行を実行するPCからリモートで行うため、実際に操作するのはScoreの• シミュレーションの開始/停止

みです。PMToolsについては、「1.3 PMTools」を参照してください。

• プログラム間の同期初期

なお、高性能なPCであれば、１台で全てのプログラムを実行することScoreも可能です。

S-Interface

UE4AppRe:simFunction Extender【車両モデル】【CG】【他車両制御】【機能拡張】• 車両挙動計算• CG描画• 交通流シミュレーション• 複雑なシナリオの実装• （オプション）Simulinkとの連携• サウンド• シナリオ制御• ハードウェア制御
etc.

8

1.1 システム・コンフィギュレーション
システム・コンフィギュレーションは、シミュレーションの実行を行うために、どのプラグラムを、どのように使用するか、をまとめたデータセットです。

たとえば、１画面のみ、DS車両のみで、他車両などのオブジェクトは出現しないような場合のシステム・コンフィギュレーションは、
System Config

Score
S-Interface
UE4Appー 画角、カメラ向きなどのパラメータセットとなりますし、３台のPCで3画面描画して、他車両を交通流シミュレーションで出現させるような場合のシステム・コンフィギュレーションは、
System Config

Score
S-Interface
UE4App（右画面用）

ー 画角、カメラ向きなどのパラメータセット

UE4App（正面用）

ー 画角、カメラ向きなどのパラメータセット

UE4App（左画面用）

ー 画角、カメラ向きなどのパラメータセット

Re:simとなります。

9

UE4Appは、UE4のプロジェクトをパッケージ化して、単独に実行できるようにした実行ファイルのニックネームとして使用しており、実際には、UE4のプロジェクト名に応じたものとなります。

UE4の１つのプロジェクトは、１つのマップに対応し、また同じマップでも、画面に警報等を表示する機能を持たせるか否か、などによって、異なる
プロジェクトを用意することになります。

マップ

マップA

マップB

パッケージ化機能

UE4プロジェクト

CG表示のみMap_A_Base→ Map_A_Base.exe

FEからデータを受け取って警報等表示

Map_A_Assist→ Map_A_Assist.exe

CG表示のみMap_B_Base→ Map_B_Base.exe

Map_B_TimeVarying→ Map_B_TimeVarying.exe

FEからデータを受け取って
太陽位置変更（朝→昼→夜の変化）※表中の名称等はサンプルであり、実際のデータではありません。

システム・コンフィギュレーションにおいて設定するUE4Appは、上の表示におけるUE4プロジェクトをパッケージ化して出来るプログラムのことです。

10

UE4は、ゲームエンジンと呼ばれるもので、単にCGを描画するだけの機能ではなく、ユーザーが独自にプログラムを作成して、ロジックを追加することが可能で、大変高機能なソフトウェアです。Siriusでは、三咲デザインが開発したSiriusプラグインを使用することで、Re:simやFEなどからデータを受信して利用できるようにしています。そのデータをどのように利用するかのロジックは、UE4のブループリントと呼ばれるビジュアルスクリプティン
グ機能でプログラムを作成します。

UE4

ポリゴン
データ

カメラ

リアルタイム・レンダリング
プログラム
動的変更

ブループリント(BP)Re:simSirius
プラグイン

Get Data

Set Data※ここのロジックは、自由に作ることが出来る

Function Extender※UE4は、オープンソースのソフトウェアであり、Siriusはそれを利用しているだけであり、UE4の使い方については別途、書籍やインターネットなどで調べて頂く必要があります（有償になりますが、UE4教育のご要望がありましたら検討いたします）。

111.2 プロジェクト
Siriusにおけるプロジェクトは、シミュレーションを実行するための、システム・コンフィギュレーションおよびシナリオデータをまとめたデータセットです。

同じマップ（システム・コンフィギュレーション）でも、使用するシナリオデータが異なれば、別のプロジェクトとして設定します。
Project

Project

Project

システム・コンフィギュレーションA

システム・コンフィギュレーションA

システム・コンフィギュレーションB

Re:sim シナリオデータ A

Re:sim シナリオデータ B

Re:sim シナリオデータ C

Re:simシナリオデータは、SEdit（エス・エディット）を使って作成します。
SEditについては、 SEdit-Manual-Part1-Basic_Operation.pdf と SEdit-Manual-Part2-Scenario_Data_Setting.pdf を参照してください。

12

1.3 PMTools
Siriusでは、PMTools内のPsExecというプログラムを使用して、リモートPCでのプログラムの自動実行を行います。
Cドライブ直下に、PMToolsをコピーしておく必要があります。
https://docs.microsoft.com/en-us/sysinternals/downloads/psexec

13

PMToolsを使えるようにするための設定①ポートを通す（FirewallをOFFにしているときは、おそらく不要）
135
455%SystemRoot%¥system32¥services.exe

Windowsのセキュリティ設定で、Access Deniedとなることが多く、多少面倒です。
これまでの経験上、Firewall, UACを無効にした上で、レジストリの修正とグループポリシーの変更を②UAC（User Access Control）を通知しないにする

行えば、大体は使えるようになります。

③レジストリの修正
reg add "HKLM¥SOFTWARE¥Microsoft¥Windows¥CurrentVersion¥Policies¥System" /v "LocalAccountTokenFilterPolicy" /t REG_DWORD /d 1

④パスワードなしでログインできるようにする場合
gpedit.mscをインストール(*)
gpedit.msc（ローカルグループポリシーエディタ）を実行して、「カウント:ローカルアカウントの空のパスワードの使用をコンソールログオンのみに制限する」を無効にする(*) 以下をバッチファイルで実行する@echo off
pushd "%~dp0"
dir /b %SystemRoot%¥servicing¥Packages¥Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt
dir /b %SystemRoot%¥servicing¥Packages¥Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt
for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%¥servicing¥Packages¥%%i"
pause

14

2. フォルダ構成
Siriusは、以下のフォルダ構成を前提として作成されています。

C:¥MDS-series¥Sirius
sbin

Score
S-Interface

Resim

実行ファイルおよび必要なDLL群、各種設定ファイル

FuncExtend
SEdit
configScore
S-Interface

システム・コンフィギュレーションのファイル群

UE4
UE4 Project Name

projects

Project Name

WindowsNoEditor

UE4パッケージ化ファイル群

…

UE4

…

scenario
LOG

Siriusプロジェクト、Re:simシナリオデータファイル群

Siriusプロジェクトについては、必ずしも上記のフォルダ構成に従う必要はありませんが、バックアップを取るなどを考えると、色々なところにフォルダを作るよりは、上記projectsフォルダ内にサブフォルダを作り、格納した方が手間が掛かりません。

15

複数台のPCに分散させて実行させる場合、Scoreを実行するPCのC:¥MDS_series¥Siriusフォルダを共有フォルダとして、他のPCから見れるようにしておく必要があります。また、UE4を実行するグラフィックPCについては、UE4のパッケージ化ファイル群をローカル環境に予めコピーしておく必要があります。その手順については、本Technical Manualの「5. UE4との連携」をご覧ください。

Scoreを実行するPC
共有フォルダC:¥MDS-series¥Sirius
sbin

UE4Appを実行するPC

xcopy

C:¥MDS-series¥Sirius
UE4

configUE4
projects
ネットワーク・ドライブ
割り当て

共有

X:

X:
sbin

sbin

configconfigUE4

UE4

projects

projects

16

3. Score
ネットワーク情報設定

プリファレンス設定

3.1 GUI

システム・コンフィギュレーション
設定
プロジェクト設定
プロジェクト選択

実行周期設定シミュレーション操作ボタン

シミュレーション時刻表示

通信状態表示部メッセージ表示部

17

3.2 Score関連設定ファイル
sbin/Scoreに置かれており、Scoreが実行時に読み込む、もしくは、実行中にロード/セーブするファイルとして、以下のがあります。
display_resolution_def.txtのみ、手動で設定し、ほかはScoreのGUIにて編集することが出来ます。

複数台PC使用時のログイン・PW情報

画面解像度[Read Only]

データ
machineLoginInfo.txt
display_resolution_def.txt

プリファレンス設定
ファイル

score_preference.txt

recentlyUsedProjectFiles.txt

recentlyUsedSettingFiles.txt

最近使用したプロジェクト

最近使用したシステム・コンフィギュレーション

ファイルの一覧

ファイルの一覧18

3.3 システム・コンフィギュレーションの編集“Edit System Config”ボタンを押すと、以下のダイアログが表示されます。
コンフィギュレーション・ファイルのロード、セーブは普通のアプリケーションと同じように行います。

19

”Add Node”ボタンを押して、使用するプログラムを追加・設定します。
以下のようなダイアログが表示されますので、必要項目を設定していきます。

20

① S-Interface

使用するS-Interfaceの実行ファイルを選択します（実行ファイルは通常はsbin/S-Interfaceに格納する）

S-Interfaceを実行するPCのIPアドレスを指定します。
PC１台のみの場合は127.0.0.1か、そのPCのIPアドレスを入力します。
S-Interfaceのコンフィギュレーション・ファイル名を指定します。
S-InterfaceオブジェクトのID番号を指定します。Re:sim,
UE4, FEでは、このID番号でS-Interfaceオブジェクトを識別します。
S-Interfaceオブジェクトの種類を指定します。
vehicke / pedestrian の２種類です。

21

S-Interfaceで必要とするファイルを設定できます。
Simulink利用時は、ここにSimulinkモデル名を指定します。

S-Interfaceでログ出力するかどうかの設定です。
S-Interfaceのプログラムで対応している必要があります。

S-Interfaceでログ出力する場合の出力先の指定です。

S-Interfaceオブジェクトの初期位置を設定している
テキストファイルを設定できます。
テキストファイルのフォーマットは、
X[m] ; -100.0
Y[m] ; 0.0
Z[m] ; 0.0
Yaw[deg] ; 0
V[km/h] ; 0のように、５つの項目をUE4の座標系で設定します。

22

② UE4Aｐｐ
UE4Appを使用する場合は、以下を設定します。
パッケージ化したUE4プロジェクトの実行ファイルを指定します。通常、WindowsNoEditor直下にあります。

UE4Appを実行するPCのIPアドレスを指定します。
PC１台のみの場合は127.0.0.1か、そのPCのIPアドレスを入力します。
UE4Appのコンフィギュレーション・ファイル名を指定します。UE4Appは、このファイルを読み込んで、以下で設定する情報を取得します。
S-Interfaceオブジェクトの動きに合わせてCG描画を行うために、S-Interfaceで設定するオブジェクトIDを設定します。
複数のPCでCGを表示させるためのスクリーンのID番号を設定します。０からの連番にします。

23

ログファイルを出力するかどうかの設定です。デバッグ用途なので、通常はチェックを入れません。

UE4で扱うアクターの最大数を設定します。現在のところ、車両、歩行者、自転車などを合わせて、1000を設定しておきます。
表示するCGの解像度を指定します（次のフルスクリー
ン設定が無効な場合のみ）。
フルスクリーン表示にするかどうかを設定します。
カメラの正面方向を指定します。
カメラの画角を指定します。
カメラのアスペクト比を指定します。
S-Interfaceオブジェクトの座標中心からカメラ取付位置までのオフセット量を指定します。
UE4Appが別途読み込むファイルを指定できますが、現在はSiriusプラグイン側が対応していません。

24

③ Function Extender
FEを使用する場合は、以下を設定します。

FEの実行ファイルを選択します（実行ファイルは通常はsbin/FuncExtendに格納する）

FEを実行するPCのIPアドレスを指定します。
PC１台のみの場合は127.0.0.1か、そのPCのIPアドレスを入力します。

FEを複数実行する場合のために、ID番号を設定します。
１つだけの場合はデフォルト値(0)のままにします。

FEの実行時に読み込むFE用設定ファイルを指定できます。

25

④ Re:sim
Re:simを使用する場合は、以下を設定します。

sbin/Resim/Reisim.exeを指定します。
PC１台のみの場合は C:¥MDS-series/Sirius,
複数台PCの場合は X:です。

Re:simを実行するPCのIPアドレスを指定します。
PC１台のみの場合は127.0.0.1か、そのPCのIP
アドレスを入力します。

26

設定内容を編集するためには、変更したいNodeのExecutableのセルをクリックしてから、“Edit Node”ボタンを押します。
削除する場合にも、削除するNodeのExecutableのセルをクリックしてから、”Del Node”ボタンを押します。

上下矢印ボタンで、表中の順序を変更することが出来ますが、見た目だけの問題で、実行において順序は関係ありません。

27

3.4 プロジェクトの編集“Edit Project”ボタンを押すと、以下のダイアログが表示されます。
プロジェクト・ファイルのロード、セーブは普通のアプリケーションと同じように行います。

28

プロジェクトの名称を付けることが出来ます。この名称が”Load Recent Projects”に表示されます。
使用するシステム・コンフィギュレーションを選択します。
事前に設定しておく必要があります。

Re:simを動かすためのRe:simコンフィギュレーションのファイル名を指定します。
SEditで作成したRe:simシナリオファイルを指定します。
Re:simでログファイルを出力するかどうかを指定します。
Re:simでログ出力する際のログファイル出力先を指定します。
Re:simでログ出力する際のログファイル名を指定します。
ログファイル名に、タイムスタンプを付けるかどうかを指定します。
ログデータ出力の間隔を指定します。出力間隔は(ここで設定した間隔+1)/実行周期 [s] となります。
Re:simのRestart機能を使う場合に、Restartファイルを指定します。

29

3.5 他PCへのログイン情報の編集“Edit Auth. Info”ボタンを押すと、以下のダイアログが表示されます。
“＋”ボタンを押すと、１行追加されて、使用するPCのIPアドレスとログインするためのユーザー名、パスワードを入力することが出来ます。
このダイアログを閉じると、入力内容は machineLoginInfo.txt に自動的に保存されます。

一台で動かすときは、特に設定しておく必要はありません。

30ユーザー名は、エクスプローラーで表示されるC:¥Users以下にある名前でないと、ログインできませんので、ご注意ください。
（最初に登録したユーザー名とWindowsで表示されるユーザー名が変更されている場合があります）

パスワードを設定していない場合は、何も入力しないでください。

31

3.6 プリファレンス設定“Preference”ボタンを押すと、以下のダイアログが表示されます。

現状では、ネットワーク・ドライブと、通信チェック時のタイムアウト時間を設定することが出来ます。
デフォルト値は、ネットワーク・ドライブが “X:”、タイムアウトが 120[s] です。
UE4は、初回の実行では時間が掛かることがあり、大きめの数値を設定しています。
また、Simulinkを使うときなどは、Simulinkの立ち上がりに時間が掛かることがあるので、適宜調整します。

32

4. S-Interface
S-Interfaceのプログラムとして、通常のゲームハンドル対応のS-Interface.exeと、Simulink対応のS-Interface-Simulink.exeの２種類があります。

通常のゲームハンドル対応のS-Interface.exeは、sbin/S-Interfaceにある device_setting.txt と vehicle_parameter.txt の２つの設定ファイルを読み込みます。また、 defaultDevice.dll と defaultModel.dll の２つのDLLを使用します。Forcefeedbackデバイスを使う場合には、さらに、
DirectInputDevice.dlｌ を使用します。

S-Interface.exe

defaultDevice.dll

DirectInputDevice.dll

defaultModel.dll
device_setting.txt

vehicle_parameter.txt

33

device_setting.txt の内容を左に示します。
#で始まる行はコメント行です。

Show * Dataのコメントを外すと、S-Interfaceのコンソールに、ゲームハンドルから取得した情報が表示されます。
新たに設定が必要な場合は、その表示を見ながら、軸やスイッチの対応などを設定します。
ForceFeedbackデバイスを使用する場合は、ForceFB Device を yes とします。
関数名などは変更する必要はありません。
デバイスによっては、この部分があると、正常に認識できない場合があるので、その場合はコメントにしておきます。
ハンドル、アクセル、ブレーキが、どの軸（xPos, yPos, zPos, uPos, vPos, rPos)であるか、また、他に変換のための係数と、ゼロ点位置を設定します。左の例では、
舵角[rad] = (xPosの値 － 32767）×2.396737e-4
アクセルストローク量 = (zPosの値 － 32767)×（-2.396737e-4)
ブレーキストローク量= (zPosの値 － 32767)×（2.396737e-4)

ヘッドライト、ウィンカー、前進/後進の切り替えを、ゲームハンドルのどのスイッチで行うかを設定します。
設定する値は、上のShow Row Dataなどを有効にして、コンソールに値を出して、ボタンを押して、スイッチの値がいくつになっているかを見て、決定します。

34

vehicle_parameter.txt の内容を左に示します。
#で始まる行はコメント行です。
タグ名を見れば、大体何のパラメータであるか分かると思うので、詳しくは省略します。

35

Simulink対応のS-Interface-simulink.exeは、sbin/S-Interfaceにある device_setting.txt を読み込みます。また、 ゲームハンドルを扱うために
defaultDevice.dll を使用します。Forcefeedbackデバイスを使う場合には、さらに、DirectInputDevice.dlｌ を使用します。
車両モデル部分はSimulink側に実装し、計算結果をS-Interface-sumilinkへ送信するようにします。
Simulinkで他車両の情報を必要とする場合には、FEを作り、Re:simから情報を中継して、Simulinkへ送る仕組みとします。
UDP通信

ゲームハンドルではなく、別途センサで操作量を取得する場合device_setting.txt

UDP通信
操作量

S-Interface-simulink.exe
起動defaultDevice.dll

開始・停止
コマンド

FE

UDP通信

UDP通信

センサ情報取得＆通信プログラム

車両状態量

起動
操作量

simulink_control.exe
DirectInputDevice.dll

開始・停止
コマンド

S-Function(Receive)

S-Function(Receive:Option)

S-Function(Receive: Option)

UDP通信

VehicleModel

S-Function(Send)

36

5. Re:simとの連携
交通流シミュレーションのための道路データやOD交通量設定、シナリオ作成はSEditにより行います。
その詳細については、 SEdit-Manual-Part1-Basic_Operation.pdf と SEdit-Manual-Part2-Scenario_Data_Setting.pdf を参照してください。

SEditで作成したRe:sim用のシミュレーションデータをSiriusで使用するための作業は、プロジェクトを作成するだけです。
プロジェクトの作成方法については、「3.4 プロジェクトの編集」を参照してください。
ここでは、ファイル依存関係を示しておきます。

プロジェクト・ファイル

Score

Config fileRe:simコンフィグ
ファイル*.spro*.rc.txt

SEditで作成するファイル
Scenario file*.rs.txt

Road data file*.rr.txt※Re:simコンフィグファイルは、プロジェクト・ファイルをTraffic Signal data file

SEdit

作成するときに、同時に作成されます。
*.ts.txt※Re:simコンフィグファイルは、SEditでも作成することが出来ます（Re:sim単独でシミュレーションを行うこともあるため）

37

6. UE4との連携
UE4のプログラム・データは、サイズが非常に大きくなるので、毎回実行時にネットワーク・ドライブから持ってくるのは非効率的になります。
そこで、UE4のプログラム・データだけは、UE4Appを実行するPCのローカルフォルダにコピーしておきます。

Scoreを実行するPC
共有フォルダC:¥MDS-series¥Sirius
sbin

UE4Appを実行するPC

xcopy

C:¥MDS-series¥Sirius
UE4

configUE4
projects

そのために、ログイン情報編集ダイアログにある配信ボタンを使用します。
配信ボタンを押すと、UE4フォルダ内のどのフォルダをコピーするか選択するダイアログが表示され、次に、どのPCにコピーするかを選択し、PMToolsのPsExecを使って、リモートPC側でxcopyコマンドを実行して、フォルダをコピーします。

38

①配信ボタンを押す②コピーするフォルダの選択③コピー先のPCを選択※Sirius/UE4もしくは、それより下にあるフォルダ
以外を選択すると、次のステップに進みません。

39

UE4との連携は、Siriusプラグインを介して行います。
SiriusConectionを、UE4のプロジェクトのPluginsフォルダにコピーします。
これによって、UE4のブループリント(BP)にて、Sirius関連のブロックを使用できるようになります。
UE4 Project

UE4プロジェクトを１から作るのは結構大変なので、既存のプロジェクトのコピーを作り、それを編集するか、コンテンツをマイグレーションし、BPもコピー＆ペーストして移植するなどするのが簡単です。
以下では、BPを掲載していますが、紙面の大きさ上、すべてを掲載できないので、実際についてはUE4プロジェクを参照してください。

40

必ず設定しなければならない初期化に関するBPは以下のようになります。
レベルBPのbeginPlayイベントに実装します。

41

S-Interface, Re:sim, FEなどによって、アクターを動かしたりするBPは、以下のように、レベルBPのtickイベントとして実装します。

42

車両１台につき、以下のようなBPを組むことで、車両位置の移動や高さ調整、タイヤの回転、ランプ類の点灯などを制御します。

43

7. Function Extender
Function Extenderは、シミュレーションを機能拡張するためのプログラムです。
S-InterfaceやRe:simからデータを受け取って、何らかの処理を行って、Re:simやUE4App、または外部接続機器へ信号を送るなどの使い方をします。
したがって、プログラム的には、「データの受信－処理ーデータの送信」を繰り返し行うシンプルなものです。

S-Interface

Re:simFunction Extender

UE4App44

Function Extenderは、コンソール・プログラムで、テンプレートとなるソースコードを提供しています。
開発環境は、Qt5 です。（UDP通信さえできれば、言語は何でも構いません。テンプレートを移植してください。）
Template

簡単なフローチャートを次ページに示します。
基本的には、FuncExtend_Init(), FuncExtend_Start(), FuncExtend_Main(), FuncExtend_Term()の４つの関数を、実現したいことに合わせてコーディング
することになります。

それ以外のデータ取得部分などは、テンプレートのコードのままで、通常は問題ありません。

45

fethread.cpp

main.cpp

UDP通信受信イベント
メインスレッド生成
初期設定

イベント設定メインスレッド終了待ち

fe_main.cpp
データ受信処理初期化？

FuncExtend_Init

開始？

FuncExtend_Start
他アプリへのUDPデータ送信

メインスレッド終了

更新？

FuncExtend_Main

終了？

FuncExtend_Term

スレッド終了プログラム終了

46

Function Extenderから、Re:sim, UE4などへデータを送る場合は、以下のデータフォーマットで送信します。
なお、送信データ・フォーマットについては、随時見直しを行っており、変更になる場合があります。

宛先

S-Interface

コマンド概要S-Interfaceオブジェクト(DS車両)の
ワープ

備考

バイト数

0

1

19

'F'

'W'

7

’Ｆ’

'H'

'L'

int HL

23

’Ｆ’

'A'

'C'

int controlMode

'F'

'C'

'T'

'O'

VS

int numTarget

'F'

'V'

'i'

's' Type VS

int targetID

'F'

'U'

'D'

int index

'F'

'U'

'm'

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

CZ: Z座標の値を変更するかどうか'y'のときに送信データのＺを使う

float X

float Yfloat Yaw

CZ

float Z

座標はUE4の座標系で指定し、ヨー角は[deg]S-Interfaceオブジェクト(DS車両)の HL = 0(OFF), 1(Low), 2(High)
ヘッドライト状態変更

送信データ

送信データ

この値はS-InterfaceからUE4Appに送信される
controlMode=0, 1, 2, 3
0 : 通常の手動運転
1 : アクセル、ブレーキ、ハンドル舵角のコマン

S-Interfaceオブジェクト(DS車両)の自動運転制御コマンドドを使用、トルクは発生しない
2 : アクセル、ブレーキコマンドを使用、トルク

float accelCom

float brakeCom

float steerCom

float trqCom

でハンドル動かし、その値が車両モデルに入る
3 : アクセル、ブレーキ、ハンドル舵角コマンド
を使用、トルクでハンドル動くが、舵角は制御には使用しないOption値は、UE4ブループリントで利用可

UE4App

信号機のVisibility, Option値の設定

OVはOption値（-128～127）
VSはVisibulity( 0 : Invisible, 1 : Visible)

10+
numTargetOV

int signalID_1

int signalID_2

・・・

×4

Type：アクター種別 'o' :車両、 't' :信号機
VSはVisibulity( 0 : Invisible, 1 : Visible)
アクターのVisility等設定

SO: 信号機のOption値も設定するかのフラグで'k' のときにOVを設定'o': 10't' : 12SO

OV

OVはOption値（-128～127）
userData[index] = data
ユーザーデータの設定

indexは 0 ～ 999まで
userDataの値は、UE4のブループリントから取

11

float data

得できる
複数ユーザーデータの設定

nData：設定するデータの数

8+
nData×8'D'

int nData

int index

float data

int index

float data…

＊UE4Appへのユーザーデータは、Siriusプラグインの
Get User Dataブロックで、BPで参照することができます。
（index番号を指定します)

47

43

宛先

コマンド概要

送信データ

送信データ

備考

バイト数

0

1

2

15

'F'

'T'

'c'

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

targetTSID : 対象の信号機のID
targetColor: 0 : 次の信号現示に遷移
その他は以下の通り
TRAFFICSIGNAL_BLUE

1

TRAFFICSIGNAL_YELLOW
TRAFFICSIGNAL_RED

Re:sim

信号現示の変更

2
4

TRAFFICSIGNAL_RIGHT_RED

12

TRAFFICSIGNAL_STRAIGHT_RED

int targetTSID

int targetColor

float duration

20

TRAFFICSIGNAL_STRAIGHT_RIGHT_RED 28
TRAFFICSIGNAL_LEFT_RED

36

TRAFFICSIGNAL_STRAIGHT_LEFT_RED
TRAFFICSIGNAL_YELLOWFLUSH
TRAFFICSIGNAL_REDFLUSH

52

64
128

duration : 信号現示の表示時間[s]6+

ログデータに追加

nData: データ数( 0 < nData ≦ 4)

'F'

'L'

int nDatachar data1[4]char data2[4]char data3[4]エージェントのワープ

座標はUE4の座標系で指定し、ヨー角は[deg]

18

'F'

'W'

int targetID

float moveX

float moveY

float moveDir

エージェントの退場

aID : 退場させるエージェントID

7

'F'

'A'

'd'

int aID

7

'F'

'A'

'a'

int aID

44

'F'

'A'

'e'

'b'

int aIDfloat X

12

'F'

'C'

'R'

'S'

int aIDfloat refSpeed

11

'F'

'C'

'P'

16

'F'

'C'

'C'

'S'

int aIDfloat X

float Y

24

'F'

'C'

'C'

'H'

int aIDfloat refSpeed

float HWD

8

'F'

'C'

'C'

'A'

int aID

16

'F'

'C'

'C'

'Ｉ'

int aIDfloat refSpeed

float insideSpeed

12

'F'

'C'

'S'

'D'

int fromAID

int toAID

11

'F'

'V'

'W'

横シフト量の設定

12

'F'

'S'

'L'

'S'

int aIDfloat lateralShift

横制御ゲイン乗数の設定

12

'F'

'S'

'G'

'M'

int aIDfloat gainMultipier

'F'

'A'

'p'

'a'

int nData

int aID1

'F'

'A'

'r'

'a'

int nData

int aID1

'F'

'F'

'C'

'S'

int aIDfloat Speed

'F'

'S'

'C'

'P'

int vID

int nData

エージェントの出現

aID : 出現させるエージェントID
シナリオで設定しておく必要あり

nData×4

char data4[4]座標はUE4の座標系で指定
エージェント（車両）挙動データの角度は[deg]、速度は[km/h]

埋め込みBrakeはランプ点灯目的（>0.05でON）

float Yfloat Z

float Rollfloat HWT

float targetID

int aID2…

int aID_N

int aID2…

int aID_N

float t0

float v0…

float Pitch

float Yaw

float t_N

float v_N

float Vfloat Steer

float Brake

Steerはハンドル舵角[deg]エージェント（車両）の目標速度の変更
パスデータのコピー

refSpeedは[m/s]で指定
fromAIDのパスデータをtoAIDのパスデータにコピーする

制御モードを目標位置停止制御に変X, Y : 目標停止位置

更X, YはUE4での座標

int fromAID

int toAID

refSpeedは[km/h]で指定
制御モードを車間距離制御に変更

HWD: 目標車間距離
HWT: 目標車間時間
targetID : 車間距離制御する対象

制御モードをエージェント制御に変更信号等関係なく、単に交差点を右左折するのみ
制御モードを交差点右左折制御に変（シナリオでパスデータを作るときも、３つのパ

更スで走行軌跡を作る必要あり）
refSpeed, insideSpeedは[km/h]で指定

シナリオデータのコピー

fromAIDのシナリオデータをtoAIDにコピー
winkerState:
0 : OFF

ウィンカー点灯状態の変更

1 : LEFT

int aID

int winkerState2 : RIGHT
3 : HAZARD

8+エージェント出現の一時停止

nData×4
8+

エージェント出現の再開
エージェント速度の強制（瞬時）変更
シナリオの速度プロフィール
データの変更nData×4

Speedは[km/h]で指定

12vID: 車両ID
slot: イベントスロットID

12 +nData×8

nData: データ点数

48

43