仮想の街で自由にクルマを走らせよう!
SDLアプリをドライブシミュレーター型のテスト環境で動かす《前編》
2020年12月11日 18時00分更新
カーナビなど車載機とスマートフォンをつなぐオープンソースの共通規格がSmartDeviceLink (SDL)。スマホアプリをカーナビ画面や音声で安全に使えることに加えて、走行中の車のスピードやウィンカーやワイパーなど状態がアプリ側から読み取れるのが大きな特徴です。そこで、SDLアプリの開発では、実車の走行にできるだけ近いテスト環境が欲しくなります。今回から2回にわたりドライブシミュレーターを活用したテスト環境を紹介します。
Manticoreは簡単お手軽でお勧めだが限界もある
この連載では、ここまで「Manticore」というウェブベースの開発環境や「BootCamp」というハードウェアを使用する開発キットでSDLアプリを動かしてきました。とくに、クラウドベースでSDLアプリが試せるManticore はとても簡単でお手軽なためもちろんおすすめです。しかし、そんな Manticore ですが、リアルタイム車両情報のシミュレーションにおいて、少々苦手なことがあります。例にあげると次のようなことです。
●車速をスライダーなどで簡単に設定できるが、本物のクルマを運転するような感じの、数値が時系列になだらかな曲線を描くようなシミュレーションデータを再現しにくい
●基本的にマウス操作でパラメーターを設定するため「エンジン回転数を変えながら、車速を変えながら、ハンドルを切る」といった同時進行のシミュレーションが難しい。手が足りない
●アプリが複数のクルマに搭載されて有機的に動作することを想定(それぞれの車両の緯度経度情報や、ワイパー、ブレーキランプなどと連動)していて、そのためのシミュレーションが必要な場合は、Manticore の操作に手が何本あっても足りない
SDLアプリのリアルタイムな車両情報のシミュレーションやテストの方法としては、実車を使ってやる方法ももちろんあります。車にあれこれ装置を付けて車両報のデータを引き出しSDL対応デバイスなどに渡して動かすことができるわけです。しかし、ここでも課題がいくつかあります。
●物理的なデバイスが必要なためコストがかかる。車両本体はもちろん、OBD2アダプターやマイコンなども必要
●車両情報は各メーカーごと・車種ごとで仕様が異なるため、汎用的なものを用意するのは簡単ではない
●運転免許証がないと、デバッグ&実験できない
●運転しながらのデバッグ&実験は、ひとりだと運転に集中できないため危ない。運転手とアプリを操作&確認するひと、複数人での対応が必要
●法令遵守が必要なため、時速150kmなどの状況を試すことができない
さて、そんな中 Manticore よりも、リアルな車両情報に近いシミュレーションを実現できて、とはいえ実車をつかうよりも手軽な方法は、なにかないものでしょうか?
そうだ『自動運転シミュレーター』をつかおう!
自動運転シミュレーターとは、バーチャルな街の中をたくさんの車が自動運転で動いているというものです。近年、自動運転シミュレーターの品質がぐんと上がってきています。またオープンソースになっているものもあり、かなり身近になってきました。
そこで、今回は、これをSDLアプリのシミュレーション環境として使います。自動運転シミュレーターは、自分の車を手で操作してやればドライブシミュレーター型のテスト環境になるわけです。いくつかシミュレーターの候補はあるのですが、「CARLA Simulator」 というオープンソースプロジェクトのものを採用することにしました。
このCARLAは以下の2つがあれば動作させることができます。
●Windows もしくは Mac
●AWS に支払うためのクレジットカード
CARLA Sumilatorは、レースゲームで使用するハンドルコントローラーやフットペダルを使って自分の車を運転することもできます。それによって、Manticoreと比べるとかなり実車に近い感覚でテストを進めることができます。
さて、ドライブシミュレーターを使ってどんなテスト環境ができるのか? これから作るテスト環境を実際に動かしている動画を紹介しておくことにしましょう。詳しくは、これも後編で紹介することになりますが、CARLA Simulator のバーチャル空間の中の自動車を動かすことで、SDLアプリのテストをします。
それでは、このゴールをめざして作業をはじめましょう!
AWS で準備しよう
自動運転シミュレーターは、さまざまな演算を必要とするため、それを動かすPCにGPU が搭載されていることが推奨されます。そのため、AWS(Amazon Web Service) のGPUを搭載したインスタンスを利用することにしました。
また、Ubuntu のほうが開発環境としては適していそうだったのですが、Windows のほうが比較的操作になれている方も多いと考え、ここではWindows 環境で準備しています。
※お手元に、GPUが搭載されたWindows 10 マシンをお持ちの方は、すこし先まで読み飛ばしてください。ここからしばらく、AWS での環境設定が続きます。AWS のアカウント登録(支払い方法登録など)は、このページから済ませておいてください。
まず、EC2のコンソールからインスタンスの準備をします。[AWS EC2 インスタンスの一覧]を開きましょう。右上が [東京] リージョンとなっていることを、念のために確認しておいてくださいね。
インスタンスをつくろう
[インスタンスの作成] をクリックしましょう。
ステップ1: Amazon マシンイメージ (AMI)
AMIの検索窓に、“nvidia windows” と入力してください。次に、左のカテゴリーから [AWS Marketplace] を選んでください。
そうすると、“NVIDIA Gaming PC - Windows Server 2019” という AMI の情報が表示されますので、それを確認し、[選択] をクリックしましょう。
すると、この AMIを利用するにあたって、おすすめのインスタンスとその料金が表示されます。
これは、もちろん、お値段が高ければ高いほうが今後の作業がスムースにすすみ、バーチャルな街も美しくアニメーション表示されるのですが、いったんは一番安いインスタンスを選んですすめていきます。g4dn.xlarge というインスタンスで、おおよそ 100円/時 となっています。
※この他に、ネットワーク利用料金やストレージ容量料金なども発生しますが、一般的に費用が一番大きくなるのはこのインスタンス料金なのでここだけはご注意ください。従量課金についてご確認した上で、[Continue]をクリックしましょう。
ステップ2: インスタンスタイプの選択
フィルター条件に [GPU インスタンス]を選んでください。
そして、すこし下にスクロールすると、g4dn.xlarge というインスタンスが見つかります。これをえらんで、[次のステップ]をクリックしましょう。
ステップ3: インスタンスの詳細の設定
ここからは、ネットワーク環境の設定にはいります。いままでに VPC を作っていたりしているなら、それを使ってすすめていただいても OK です。注意点として、アベイラビリティーゾーンとインスタンスの種類によって、インスタンスを作れないタイミングがあったりするので、それにひっかからないようにだけお気をつけください。
[新しい VPC の作成]をクリックしましょう。別の窓がひらきます。
3VPC (Virtual Private Cloud) の作成
VPC とは、ネットワークの領域です。今回は、そのネットワーク領域には、CARLA Simulator が動いている、1台のインスタンスを置くようなカタチになります。
この画面になったら、[VPC の作成]を選んでください。
次のように設定して、[作成]をクリックしましょう。
名称タグ:CARLA VPC
IPv4 CIDR ブロック:10.0.0.0/24
IPv6 CIDR ブロック:IPv6 CIDR ブロックなし
テナンシー:デフォルト
たとえば、複数のクルマが有機的に連携するようなアプリのVPC で作成します。
この画面の [VPC] をクリックしましょう。
インターネットゲートウェイの作成
VPC を外部とつなぐためのインターネットゲートウェイを作成します。[インターネットゲートウェイの作成]をクリックしましょう。
名前をつけて、サクサクすすめましょう。
作ったインターネットゲートウェイは、VPCへアタッチする必要があります。
使用可能な VPC から、さきほど作った[CARLA VPC] を選んで、[インターネットゲートウェイのアタッチ]をクリックしましょう。
サブネットの作成
まだネットワーク関係の設定はつづきます。
名称タグ:CARLA Subnet
VPC:CARLA VPC
アベイラビリティーゾーン:???
アベイラビリティーゾーンは、タイミングによって変わります。 ap-northeast-1d が無難な気がしますが、この後の工程で「指定されたアベイラビリティーゾーンでは、インスタンスを準備できませんでした」といった旨の失敗メッセージが出た場合は、適宜柔軟に対応ください。
IPv4 CIDR ブロック: 10.0.0.0/26
[作成]をクリックしましょう。
ルートテーブルの設定
ルートテーブルのフィルター設定で、VPC = CARLA VPC として絞り込みます。
※ 今回はじめて VPC の設定をされた場合は、ここには1件しか表示されていないはずですので、フィルターを掛ける必要はありません。CARLA VPC とつながっている ルートテーブルを選んで、[ルートの編集]をクリックしましょう。[ルートの追加]をえらんで、0.0.0.0/0 とし、ターゲットに、Internet Gateway (CARLA Gateway) を選び、[ルートの保存]をクリックしましょう。
ルートに名前をつけておこう
これは、必要不可欠な作業ではありませんが、後々わかりやすくなるのでいま設定したルートの「鉛筆アイコン」をクリックして、[CARLA Route]と名前を設定しておきましょう。
※鉛筆アイコンは、そのあたりをマウスオーバーさせると、表示されます。これで、VPC まわりの設定は終了です。
ステップ3: インスタンスの詳細の設定に戻る
別のタブなどで開いたままになっている画面に戻りましょう。
ここで、ネットワークの [更新アイコン] をクリックすると、CARLA VPC が表示されるかと思います。
ネットワーク:CARLA VPC
サブネット:CARLA Subnet
自動割り当てパブリックIP:有効
以上のように選んで、[次のステップ]をクリックしましょう。
ステップ4: ストレージの追加
初期設定で 30GiB となっているサイズを、100GiB くらいにしておきましょう。お金に余裕があったら、違う種類の高価なボリュームタイプを選んだほうがシミュレーターのパフォーマンスはすこしあがるかと思いますが、まずは一番リーズナブルな、汎用SSD(gp2) のまま進めます。
ステップ5: タグの追加
これから立ち上げるインスタンスに名前をつけておきましょう。
Name: CARLA Server
[次のステップ]をクリックしましょう。
ステップ6: セキュリティーグループの設定
新しいセキュリティーグループをつくりましょう。今回つかうのは、RDP (Remote Desktop Protocol) だけなので、そのルールのみ設定してください。
このインスタンスに対して「どこからリモートデスクトップ接続するのか?」のセキュリティールールの設定となります。こちら、ソースに「マイIP」を選ぶと、いま作業している環境の IPアドレスが自動的に設定されます。
作業する場所が、会社と自宅、あるいはコワーキングスペースなど変更になるような場合、また、自宅のルーターを再起動したから IPアドレスが変わってしまった場合などは、都度この値を追加・変更するなどして対応してください。
ステップ7: インスタンス作成の確認
ようやく準備がおわりました。 [起動] です。
キーペアの設定
その前に、もうワンステップ作業があります。キーペアの設定です。
すでキーペアを持っている方はそれをご利用いただいてもかまいません。AWSの利用がはじめての方は、[新しいキーペアの作成]を選んで、キーペア名 [carla]として、[キーペアのダウンロード]をクリックしましょう。このファイルはとても大事なので、なくさないように保管しておいてください。
これで、ほんとうにようやく [インスタンスの作成(=起動)] です。作成ステータスが表示されました。
インスタンス名をクリックすると、[初期化しています]という表示になるので、インスタンスが起動するのをしばらく待ちましょう(約5分くらい)。
【とても大事なこと】
●ここでインスタンスを起動した瞬間から、インスタンス利用料金が発生します。このあと、すこし食事休憩したりされる場合は、特に「インスタンス利用料金が発生しつづけていること」を忘れないようにしてくださいね
●ここでインスタンスを起動した瞬間から、インスタンス利用料金が発生します。このあと、すこし食事休憩したりされる場合は、特に「インスタンス利用料金が発生しつづけていること」を忘れないようにしてくださいね
●うっかりとインスタンスを起ち上げっぱなしにしちゃったら、このあとなにも利用しなくとも、一ヶ月で、約7〜8万円の請求がきてしまうことになります。くれぐれもご注意ください
ステータスチェックが [2/2] となったら、起動は完了しています。次に [接続] をクリックしましょう。
インスタンスに接続
[リモートデスクトップファイルのダウンロード] は、リモートデスクトップ接続するためのかんたんな設定ファイルをダウンロードすることができます。
Windows では、次のようなアイコンで表示されるファイルです。
Mac では、次のようなアイコンです。
また、起動したインスタンスには、管理者用のパスワードが自動的に発行されています。それを取得する必要があります。[パスワードの取得]をクリックすると、次のような画面になるケースもあります。
この場合は、もう数分お待ち下さい。順調に進むと、次の画面になります。
ここで、先ほど保存した、carla.pem というキーペアのファイルを選択してください。そして [パスワードの複合] をえらぶと、いま起動したインスタンスの管理者パスワードが表示されます。
こちら大事なので、メモしておいてくださいね。あまりにも長くて覚えにくいパスワードなので、この後、リモートデスクトップ接続ができたらすみやかにパスワードを変更してもよいでしょう。
リモートデスクトップ接続しよう (Windows)
このアイコンをダブルクリックすると、次の表示となります。
ここに、さきほど複合したパスワードをいれて、OK を選びましょう。どうですか? Windows のデスクトップが表示されましたでしょうか?
途中でこのような画面が表示されるケースもあるかもしれませんが、[はい]を選んですすめてください。
リモートデスクトップ接続しよう (Mac)
App Store で、Microsoft Remote Desktop をインストールしましょう。
その後、ダウンロードしておいたリモートデスクトップファイル、次のアイコンをダブルクリックします。
すると次のようになります。
ここに 、以下を入力して[Continue]ですすめます。
Username: Administrator
Password: 複合したパスワード
Windows のデスクトップが表示されましたでしょうか?
いざ、CARLA Simulator
リモートデスクトップ接続した、AWSインスタンスの Windows 内で、ブラウザを起ち上げましょう。デスクトップに、Google Chrome アイコンがあるかと思います。ここ を開いてください。
このページをひらいて、右側の [CARLA 0.9.9 release] をクリックしましょう。すると、その先の画面の中ほどに次のようになります。
[GET CARLA 0.9.9] をクリックです。すると、Github のリリースページが開きます。
ここで、次の2つをダウンロードしましょう。
[Windows] CARLA_0.9.9.4.zip
[Windows] AdditionalMaps_0.9.9.4.zip
それぞれ、2.8Gbyte, 1.5Gbyte と容量が大きいのですが、AWS 内へのダウンロード操作となりますので、ダウンロードスピードは比較的速いかと思われます。
まず、CARLA_0.9.9.4.zip を解凍(展開)しましょう。Download ディレクトリ内で作業をすすめていきます。この Zip ファイルの解凍には、かなり時間がかかります。10分以上かかるかもしれませんがお待ち下さい。
続いて、Additional Maps も解凍しましょう。こちらは、解凍先のディレクトリをきちんと指定する必要があります。
さきほど解凍した CALRA_0.9.9.4 内に上書きするような形で解凍します。そのため解凍先を、次のようになるように指定してください。
こちらも数分かかりますが、解凍している途中で次のようなダイアログが表示されます。
上書きしたいので [Replace the files in the destination] を選びましょう。
CARLA Simulator 起動
./CARLA_0.9.9.4/WindowsNoEditor/CarlaUE4 をダブルクリックします。すると、警告が表示されます。
[More Info] をクリックし、[Run anyway] で進めましょう。
すると次の2つが必要だと表示されます。
Microsoft Visual C++ 2015 Runtime
DirectX Runtime
さて、また準備です。“Visual Studio C++ 2015 Runtime” と、Webブラウザで検索すると、次のような画面にたどり着きます。
[ダウンロード]を選んでください。
x86 か x64 か聞かれたら、64bit 版を選びましょう。ダウンロードがおわったら、インストールしましょう。
続いて、[DirectX Runtime] で検索すると、次のような画面にたどりつきます。
ダウンロードし、インストールしましょう。そして、もう1回、[./CARLA_0.9.9.4/WindowsNoEditor/CarlaUE4] をダブルクリックすると、次のような画面が表示されたでしょうか?
CARLA Simulator が動きましたか? バーチャルな街が表示されましたでしょうか? なお、この画面は以下のようにして操作できます。
[W] 前進
[S] 後退
[A] 左移動
[D] 右移動
[Q] 下降
[E] 上昇
[マウスドラッグ] カメラの向き変更
街を飛び回って見渡してみてください。このとき[タスクマネージャ]を起ち上げてみると、CPU も GPU も仕事をしているのが、よくわかります。
Python 環境
まだ、クルマも人もいない、からっぽの街です。ここに、クルマや人など、自動運転シミュレーターの機能を追加するのには、Python をつかいます。Python の環境設定には Miniconda を用いることにします。
こちらのページから、[Python 3.7 Miniconda3 Windows 64-bit] をダウンロードしましょう。
そして、インストールです。[Next] で、どんどんすすめていきましょう。
Python 関連モジュールのインストール
スタートメニューから、[Anaconda Powershell Prompt (Miniconda)] をクリックしましょう。
Python 関連モジュールの設定を進めます。
$ cd .\Downloads\CARLA_0.9.9.4\WindowsNoEditor\PythonAPI\
$ cd .\carla\
$ pip install -r .\requirements.txt
$ cd ..\examples\
$ pip install -r .\requirements.txt
$ cd ..\util\
$ pip install -r .\requirements.txt
これらのコマンドですすめてください。
地図 と 天気 を変更してみよう
.\Downloads\CARLA_0.9.9.4\WindowsNoEditor\PythonAPI\util\ 内にて、以下のようにしてみてください。
$ python .\config.py --list
選べる、地図一覧と、天気一覧が表示されます。地図を Town01 に、天気を 小雨の昼 にしてみましょう。
$ python .\config.py --map Town01 --weather SoftRainNoon
表示は変わりましたか? 街をみわたしてみてください。地面には水たまりができています。次に、高解像度な地図, 晴れた昼 にしてみましょう。
$ python .\config.py --map Town10HD --weather ClearNoon
これでがらっと街の雰囲気がかわりましたね。美しいですね。同時に動きも、もっさりと重くなったと思います。高解像度なため、かなり CPU、GPU を酷使する地図です。
このように python で、CALRA Simulator に設定を行ったりしながら、作業を進めていきます。
刻々と自動的に天気を変えよう
util ディレクトリから、examples ディレクトリに移って実行します。
$ cd ..\examples\ $ python .\dynamic_weather.py
雨が降ったりやんだり、風が強くなったり弱くなったりします。時間が経ち雲がすくなければ、日の出や夕日もみえるかもしれません。夜には星空もみえるでしょう。ずっと眺めていられますね。
クルマと人を出現させよう
だれもいない街はさみしいです。自動運転シミュレーターっぽくクルマを出現させてみましょう。ついでに、人も歩くようにしましょう。一度、天気を変えるプログラムを停止させてもいいのですが (停止は [Ctrl]+[C])、せっかくなので天気を変えつづけながら、クルマと人を出現させてみましょう。
スタートメニューより、もうひとつ [Anaconda Powershell Prompt (Miniconda)] を起ち上げましょう。
$ cd .\Downloads\CARLA_0.9.9.4\WindowsNoEditor\PythonAPI\examples\ $ python .\spawn_npc.py -n 50 --car-lights-on
-n 50 は、クルマ 50台という意味、--car-lights-on は、実行した街が暗かったので、ヘッドライトを点灯させるオプションです。
クルマが走り始めましたね。自動運転してますね。
※ターミナル内に、エラーっぽい表示がでるかもしれませんが、いまは気にしないでよいです。街を見渡してみると、この街には歩行者用信号がないようです。信号を気にせず、人は道路を渡ります。ですが、クルマは人の横断を認識すると停止し、事故がおきないようになっています。自動運転シミュレーターが機能しているんですね。
クルマと運転してみよう
次は、クルマを運転(操作)してみましょう。スタートメニューより、もうひとつ [Anaconda Powershell Prompt (Miniconda)] を起ち上げましょう。
$ cd .\Downloads\CARLA_0.9.9.4\WindowsNoEditor\PythonAPI\examples\ $ python .\manual_control.py
あたらしくカーレースゲームのような画面が開きました。
※このとき車種がランダムに選ばれるので、クルマではなくバイクや自転車が表示されるケースもあります。もし、動きがおそすぎるようでしたら、[天気変更プログラム]や[クルマと人を出現させているプログラム]を [Ctrl]+[C] で停止しましょう。操作方法は、ターミナル画面にも表示されますが、かんたんに紹介しておきます。
[W] アクセル
[S] ブレーキ
[A/D] ハンドル
[Q] リバースギア切り替え
[Space] ハンドブレーキ
[P] 自動運転・手動運転の切り替え(デフォルトは手動運転)
[M] マニュアル・オートマの切り替え
[,/.] マニュアル操作時ギア切り替え
[L] ライトの切り替え
[SHIFT]+[L] ハイビームのON/OFF
[Z/X] ウィンカーのON/OFF
[I] インテリアライトのON/OFF
[1-9] センサーの切り替え
[C] 天気切り替え
[Backspace] 車種切り替え
[ESC] 終了
リモートデスクトップ接続の解像度の調整
リモートデスクトップ接続している場合、お手元のパソコンの画面サイズが大きいと、リモートデスクトップから転送されてくる画面サイズも大きくなり、画面情報量が多くなりネット回線に負荷がかかり、とても動きが遅くなるケースがあります。そんな場合は、解像度を低くする設定もあるので試してください。以下のように行います。
[オプションの表示]を選ぶ。
1280x720 や1920x1080 など、環境に応じて使いやすいサイズを指定してください。
重要:インスタンスは忘れずに停止させよう
作業がおわったら、必ずインスタンスを停止してください。インスタンスが起動したままになっていると、ずっと課金が続きますのでくれぐれもご注意ください。
次は CARLA と SDLアプリ を連携させます
AWS のインスタンス起動関係がとても長い説明になってしまいましたが、できるかぎりステップをふんで説明させてもらいました。というのは、コンピューターは、設定がひとつ違うだけで動きません。とくに AWS の VPC まわりについては設定ミスをしやすいところです。もしうまく動かない場合は、さいわいAWS についてはWeb上にもたくさんの解説はあるのが救いではあります。そうした情報もあわせてご覧いただきながら設定を進めてください。
後編では、いよいよ CARLA Simulator で走行しているクルマの情報を SDLアプリに連携させます。ご期待ください!
「クルマとスマホをなかよくする SDLアプリコンテスト2020」
主催:SDLアプリコンテスト実行委員会(事務局:角川アスキー総合研究所)
協力:SDLコンソーシアム日本分科会
応募締切:2021年1月15日(金)24:00
募集内容:エミュレーターか開発キット上で開発したSDL対応アプリ(既存アプリのSDL対応、新規開発)
募集対象:年齢、性別、国籍等不問。個人・チームどちらでも応募可
応募方法:プレゼンシートと動作解説動画をWebフォームで応募
審査:審査員が新規性、UX・デザイン、実装の巧みさ等で評価
最終審査会:2021年3月上旬、東京都内で開催予定
グランプリ:賞金50万円+副賞
特別賞(最大5作品):賞金各10万円
公式サイト:http://sdl-contest.com/
この連載の記事
-
第7回
sponsored
SDLアプリをドライブシミュレーター型のテスト環境で動かす《後編》 -
第5回
sponsored
これまでのSDLアプリコンテストでの優秀な作品を振り返る! -
第4回
sponsored
Webエンジニアでもクルマアプリが作れる! -
第3回
sponsored
ラズパイによる疑似SDL車載機に、地図を表示してみよう! -
第2回
sponsored
SDLデバイスシミュレーター「Manticore」でSDLアプリを動かそう! -
第1回
sponsored
スマートフォンと車をつなぐSDL規格。その魅力とは!? - この連載の一覧へ