intdashと自動運転シミュレータを連携させてみた

f:id:aptpod_tech-writer:20201201093248j:plain

研究開発グループのエンジニアの酒井 (@neko_suki)です。

aptpod Advent Calendar 2020 の1日目を担当します。

今回の記事では、ROSに対応している3つのオープンソースの自動運転シミュレータと弊社製品のintdashを連携させて、自動運転シミュレータの画像やセンサー情報をウェブブラウザ上で可視化してみました。 自動運転シミュレータは、「LGSVL」、「CARLA」、「AirSim」の3つを試してみました。

まずはそれぞれのシミュレータとintdashを連携させた動画をご覧ください。 動画では左に自動運転シミュレータ、右側にウェブブラウザ上で可視化を行う弊社製品の「Visual M2M Data Visualizer」を配置しています。

intdash LGSVL連携

youtu.be

intdash CARLA連携

youtu.be

intdash AirSim連携

youtu.be

動画上では撮影のために自動運転シミュレータとウェブブラウザを単一のPCで実行しています。 実際には、以下の図のように可視化しているセンサー情報や画像はクラウドを経由してウェブブラウザに届いています。

f:id:aptpod_tech-writer:20201118152512p:plain

自動運転シミュレータ上の映像とウェブブラウザ上の映像を比較すると、クラウドを経由していますが大きな遅延がないことが確認できると思います。

このように、弊社の製品群を活用することで、ROSに対応した様々な自動運転シミュレータとの連携が実現できます。 ちなみに、今回は可視化を行っていますが、intdashを使うとクラウドにデータを保存することも可能です。保存されたデータをダウンロードして解析するなどの活用も可能です。

ここからはintdashとそれぞれの自動運転シミュレータをどのように連携させたかについて触れたいと思います。

intdashとROSの連携

最初に、3つの自動運転シミュレータに共通している部分について説明します。 ROSとintdashを連携させてウェブブラウザ上で可視化を行うまでは3つの自動運転シミュレータに共通しています。

f:id:aptpod_tech-writer:20201118152512p:plain

それぞれの自動運転シミュレータ*1 がROSトピックをpublishします。

ここで、発行されたROSトピックのうち画像以外のセンサー情報はintdash bridge という弊社製品のROSノードが、画像はConverter *2というROSノードがsubscribeします。

ROSトピックをウェブブラウザで可視化するためにintdash bridgeはROSトピックをJSON*3に、ConverterはROSトピックから画像のバイナリのみを取り出します。

JSONとバイナリのデータはintdash Edge Agentに渡されます。そしてintdash Edge Agent がクラウドにデータをアップロードします。 ウェブブラウザ上のVisual M2M Data Visualizerは、クラウドのintdash ServerからJSONと画像のバイナリを受け取り、可視化します。

このように、intdashを使用して、自動運転シミュレータのセンサー情報や画像をウェブブラウザ上で可視化しています。

LGSVLとROSの連携

LGSVLはLGエレクトロニクス社が開発しているUnityベースの自動運転シミュレータで、自動運転ソフトウェアのAutowareと連携できるシミュレータとしても知られています。

LGSVLをROSと連携させるためには、rosbridge server が必要になります。

intdashとLGSVLを連携させたときの構成図は以下のようになります。

f:id:aptpod_tech-writer:20201118155253p:plain
intdashとLGSVLの連携

LGSVLは内部にrosbridge serverと接続するためのrosbridge clientを内包しています。 rosbridge clientにrosbridge server と接続するための設定をしてからLGSVLを起動するとrosbridge serverに接続します。 rosbridge clientは接続後に、JSON形式の情報をrosbridge serverに渡します。

rosbridge serverはrosbridge clientから受け取ったJSONをROSトピックに変換してpublishします。

それらのROSトピックを、intdash bridgeとConverterがsubscribeします。 この後の流れは先ほど説明した通りです。

このようにすると、動画でお見せしたようにintdashとLGSVLの連携が可能になります。

CARLAとの連携

CALRAはUnreal Engineベースの自動運転シミュレータで、intel社やToyota Research Instituteなどがスポンサーを行っています。

intdashとCARLAを連携させたときの構成図は以下のようになります。

f:id:aptpod_tech-writer:20201118155317p:plain
intdashとCARLAの連携

CARLAはROSと連携するためにcarla_ros_bridge というROSノードを提供しています。 このcarla_ros_bridgeがCARLAからセンサー情報と画像を取得しROSトピックとしてpublishします。

それらのROSトピックを、intdash bridgeとConverterがsubscribeします。 この後の流れは先ほど説明した通りです。

このようにすると、動画でお見せしたようにintdashとCARLAの連携が可能になります。

AirSimとの接続

AirSimはUnrealEngineベースのドローンや車の自動運転シミュレータで、Microsoft社が開発しています。

intdashとAirSimを連携させたときの構成図は以下のようになります。

f:id:aptpod_tech-writer:20201118154134p:plain
intdashとAirSimの連携

AirSimはROSと連携するために、airsim_ros_pkgs を提供しています。 airsim_ros_pkgsに含まれる airsim_node というROSノードをROSとの連携のために使います。 airsim_ros_nodeは、AirSimのシミュレータからセンサー情報と画像を取得しROSトピックとしてpublishします。

それらのROSトピックを、intdash bridgeとConverterがsubscribeします。 この後の流れは先ほど説明した通りです。

このようにすると、動画でお見せしたようにintdashとAirSimの連携が可能になります。

まとめ

今回は「intdashと自動運転シミュレータを連携させてみた」について紹介しました。

このように、弊社の製品群を活用することで、ROSに対応した3つのオープンソースの自動運転シミュレータとの連携が簡単に実現できました。 それぞれのシミュレータとの連携で見ていただいたように、弊社製品部分の構成は変えずにそのまま使用しています*4

研究開発グループではROSに限らず、プロトコルや機械学習に関連したテーマなど様々な技術テーマの調査・検証を進めています。今後も継続的に調査・検証の結果を記事として投稿できればと思います。

最後までご覧いただきありがとうございました。

*1:実際には後述する通り自動運転シミュレータの情報をpublishするROSのノードがいます。

*2:製品ではないですが自作のROSノードです

*3:ROSトピックをバイナリのまま送信することも可能です。現状ではウェブブラウザ上での可視化にはJSONが使われているのでJSONに変換しています。

*4:subscibeするROSトピック名などの設定ファイルは変更しています