Unity ML-Agentsを使って歩行者を回避する移動ロボットを作ってみた

2023年03月23日

こんにちは。B4の五月女です。 白熱したWBCも終わり、そろそろ新学期だなー、とやや憂鬱になっている3月後半でございます。

少し前の話になりますが、我々はB4は年明けの1月に卒業論文を書き、先月の1日に卒論発表をしました。 卒論発表というと、「素人質問で恐縮ですが…」から始まる正論パンチで教授達からボコボコにされるイメージがあったのですが、特にそんなこともなく、無事終えることが出来て良かったです。

僕は『自動生成した歩行者を含む都市型シミュレーション環境における深層強化学習による移動ロボットの自律走行モデルの獲得』というタイトルで発表を行いました。…ちょっと長いタイトルですね。 要するに「街の仮想環境を用意して、そこで歩行者を歩かせて、人を避けるような行動を学習させよう!」という研究です。 強化学習には、Unity ML-Agentsを使用しました。 img 今回はその内容を軽くご紹介します。

歩行者の実装

Unity内で学習を行ったのですが、昨今は便利なもので、Navigation機能(NavMesh Agentとか)というものを使って簡単に歩行者を実装することが出来ます。 img ↑こんな環境で学習を行いました。ユニティちゃんを人のモデルとして採用。

入力とした画像

また、基本的に人間は目の前の歩行者を避ける際、視覚情報を使って回避していると思います。 「ならばロボットも視覚情報だけで人間を避けることが出来るはずだ!」ということで、ここではレーザーセンサー等を使わず、単眼カメラのみによって歩行者を回避することを目標としました。 img ↑ロボットから見える風景。解像度を粗くすることによって、学習が収束しやすくなります。

学習内容

人を避けつつ、横断歩道や歩道上を直線的に進むだけのシチュエーションです。 今回は人を避けることに重きを置いたため、移動自体は簡単なものとしています。 img

学習結果

かなり人を避けて進むことが出きるようになりました。

単純に人を避けるだけではなく、目の前の人の集団が通り過ぎるのを待つといったような行動を取る瞬間も見られました。

今回初めて強化学習を触ってみたのですが、思ったよりちゃんと人を避けるようになって、ちょっと感動しました。 今回は直線を進むだけのシチュエーション&歩行者の見た目も1種類だけだったので、次は右折や左折のシチュエーションを導入したり、ランダムな人の見た目で学習させたりしたいですね。

あと1週間ほどで自分は大学院生になり、初めての学会発表も控えているので、気を引き締め直して研究をしていきたいと思います。 それでは。