EurekaMoments

ロボットや自動車の自律移動に関する知識や技術、プログラミング、ソフトウェア開発について勉強したことをメモするブログ

SVL Simulatorにおける車両のセンサ構成設定の概要

SVL Simulatorを起動する

www.eureka-moments-blog.com

デフォルトのセンサ構成を確認する

左メニューからLibrary -> Vehiclesと進み、構成を見たい車両を選ぶ。
今回はApolloとの連携で使用しているLincoln2017MKZを選択する。
f:id:sy4310:20211114092735p:plain

選択後の概要画面からSensor Configurationsを見ると、
Apollo 6.0のセンサ構成は(modular testing)というものだけが
デフォルトで用意されている。
f:id:sy4310:20211114093052p:plain

modular testingとは?

www.svlsimulator.com
Apolloのような自動運転スタックが持つPlanningモジュールを
テストするのに特化したテスト方式。
車両の位置姿勢推定や周囲のオブジェクト認識は全て100%正確に
出来ているという設定の下でテストするというもの。
本来は位置姿勢の推定や外界認識もApolloが行うが、このテスト
方式では、SVL Simulatorがこれらの処理を代替する。

3D Ground Truth Sensor

www.svlsimulator.com
Apolloによる外界認識を代替する疑似センサ機能。
周囲の多車両や歩行者の真の位置姿勢を出力する。

Single Sensor

www.svlsimulator.com
Apolloによる道路信号機の検出を代替する疑似センサ機能。
信号機の色情報の真値を出力する。

センサ構成とパラメータの設定方法

センサ構成とパラメータ設定は全てJSON形式のテキストファイルで
記述できる。使用するセンサをこのような形でリストアップする。

[
    SENSOR,
    SENSOR,
    SENSOR
]

そして、各センサが持つパラメータをこのような形で記述する。

{
    "type": STRING,
    "name": STRING,
    "params": {PARAMS},
    "parent": STRING,
    "transform": {
      "x": FLOAT,
      "y": FLOAT,
      "z": FLOAT,
      "pitch": FLOAT,
      "yaw": FLOAT,
      "roll": FLOAT,
    }
}

例えばLiDARならこのように記述できる。

{
    "params": {
      "LaserCount": 32,
      "MinDistance": 0.5,
      "MaxDistance": 100,
      "RotationFrequency": 10,
      "MeasurementsPerRotation": 360,
      "FieldOfView": 41.33,
      "CenterAngle": 10,
      "Compensated": true,
      "PointColor": "#ff000000",
      "Topic": "/apollo/sensor/lidar128/compensator/PointCloud2",
      "Frame": "velodyne"
    },
    "transform": {
      "x": 0,
      "y": 1.96,
      "z": 1.0510799,
      "pitch": 0,
      "yaw": 0,
      "roll": 0
    },
    "name": "Lidar",
    "parent": null,
    "pluginId": "b30d0478-8c7b-4687-bfc2-b3cdb3f5faff",
    "sortKey": 6,
    "plugin": {
      "isFavored": true,
      "isShared": false,
      "isOwned": false,
      "accessInfo": {
        "userAccessType": "favored",
        "owner": {
          "id": "0d888b00-fa53-47c1-882a-b68391268a11",
          "firstName": "SVL",
          "lastName": "Content"
        }
      },
      "supportedSimulatorVersions": [
        "2021.3",
        "2021.2",
        "2021.2.2",
        "2021.1",
        "2021.1.1"
      ],
      "id": "b30d0478-8c7b-4687-bfc2-b3cdb3f5faff",
      "name": "Lidar Sensor",
      "type": "LidarSensor",
      "category": "sensor",
      "ownerId": "0d888b00-fa53-47c1-882a-b68391268a11",
      "accessType": "public",
      "description": "This sensor returns a point cloud after 1 revolution.\nSee https://www.svlsimulator.com/docs/simulation-content/sensors-list/#lidar for more details.",
      "copyright": "LG Electronics Inc.",
      "licenseName": "LG Content",
      "imageUrl": "/api/v1/assets/download/preview/dd44a969-c038-4966-a39f-a445ab3b6c00",
      "status": "active",
      "owner": {
        "id": "0d888b00-fa53-47c1-882a-b68391268a11",
        "firstName": "SVL",
        "lastName": "Content"
      },
      "shareRequests": []
    },
    "type": "LidarSensor"
  }

各センサのパラメータ設定の詳細についてはここを参照。
www.svlsimulator.com

新しいセンサ構成を追加してみる

一からJSONファイルを記述するのは面倒なので、
既存のファイルを修正する形で追加してみる。
まずは、既存車両モデルからSensor Configurationsを開く。
f:id:sy4310:20211114110613p:plain
Configurationsを開けたら、構成リストからApollp 5.0 (full analysis)を選ぶ。
f:id:sy4310:20211114110956p:plain
すると、このように搭載されているセンサの一覧が確認できる。
この画面から、Configuratorの右端になるダウンロードアイコンを押して、
現在の設定を記述したJSONファイルを出力する。
f:id:sy4310:20211114111418p:plain
このファイルをローカルの好きな場所に置き、
好きな名前でコピーを作る。今回は下記のように、
Apollo 6.0 (full analysis).jsonとした。
f:id:sy4310:20211114113327p:plain
次に再びSensor Configurations一覧の画面に戻り、
右下にあるAdd New Configurationを選択する。
f:id:sy4310:20211114114408p:plain
Configuration NameとBridge方式を聞かれるので、
名前は先程作ったJSONファイルと同じ名前にし、
BridgeはCyberRTを選択してApplyする。
f:id:sy4310:20211114114651p:plain
次に、何もセンサがない状態の設定画面になるので、
ConfiguratorのUploadアイコンから先程作ったJSONファイルを
取り込む。すると、このように記述したセンサ構成とパラメータが
全て取り込まれた状態になる。
f:id:sy4310:20211114115337p:plain
最後に、Uploadアイコンの上にあるSaveアイコンを押せば、
Apollo 6.0 (full analysis)がセンサ構成リストに新しく追加される。

Apolloとの連携シミュレーションで動作確認

まずはこの記事にあるようにApolloを起動し、
SVL Simulatorとブリッジ接続できるようにする。

次に、SVL Simulator左メニューのSimulationsから、
上の記事で作ったシミュレーション環境を選択する。
f:id:sy4310:20211114122129p:plain
概要画面が開くので、ここで右上にあるEditを選択する。
f:id:sy4310:20211114122928p:plain

シミュレーション条件の編集画面が開くので、
真ん中のTest caseタブを選択し、Vehicleの
Sensor Configurationsから先程作った構成を選択する。
f:id:sy4310:20211114125002p:plain

最後にSaveし、Run Simulationでシミュレーション開始。

問題なければ、SVL Simulator上ではこのように設定した
各種センサの出力が模擬されていることを確認できる。
f:id:sy4310:20211114125608p:plain