OrienterNetをAWSIMで動かす

 OrienterNetというものがあります。

 カメラ画像とマップの画像(OpenStreetMapの画像)を突き合わせて自分がどこにいるのかを推定するニューラルネットワークだそうです。

 Meta社が関わっているのでAR向けのようにも見えますが、論文中ではKITTIデータセットでも評価されているように、自動運転もまた念頭に置かれているようです。

 ところでAWSIMというのはROS 2ベースで実装されている自動運転のシミュレータです。

 だいたいAutowareとセットで動かすことが想定されていると思います。現状だと西新宿向けのものがバイナリとして用意されているので手軽に使えます。

 というわけでOrienterNetにROS 2の実装を追加するとAWSIM・Autowareと合わせてこの手法を試してみることができます。実装してみました。

 Autowareの動作には影響せず、流れているトピック(データ)を盗み見て自己位置推定だけ完全に独立した状態で実行します。OrienterNetを使うには入力として「ある程度の自己位置」が必要なのですが、それにはEKFの出力(つまり結構良い精度のもの)を利用しています。結果をAutowareに返したりはしないので、OrienterNetの自己位置推定結果を使ってAutowareがどうこうするということもないです。

 動かしてみると、だいたい3~4秒に1回くらいのペースで推論が走りました。右側に出ているものが、上:入力画像、下:推論結果画像です。

 速度的にはOpen Street MapのAPIをいちいち呼んでいる部分が遅いようです。そこをなんとかできれば、ネットワークの推論や結果の描画だけなら1~2FPSくらいは出そうです。(ネットワーク推論部分だけを見ると、RTX 3090を使って1回250msecほど)

 精度的には、交差点を曲がるところや、曲がってから右手に公園が大きく広がるところでは結構苦しんでいる印象です。似た景色が続きそうなので無記憶的な毎フレームの推論では難しそうにも感じます。

 自己位置推定という技術がどこへ向かっていくのかはよくわからないところですが、他の部分は(長期的には)ニューラルネットベースになっていくと思うので、自己位置推定もそれと親和性が高い状態だとご利益があったりなかったりするのかもしれません。