Unity を検索

Made with Unity:ML-Agents を使ったサッカーロボット

2021年8月6日 カテゴリ: ゲーム | 8 分 で読めます
Picture of lego ML/AI agents
Picture of lego ML/AI agents
シェア

Is this article helpful for you?

Thank you for your feedback!

Made with Unity: AI シリーズでは、Unity の人工知能関連製品を使って、クリエイターが様々な目的をもって制作した Unity プロジェクトを紹介しています。今回ご紹介する事例は、ML-Agents を使って AI 開発者が機械学習環境を迅速かつ容易に構築し、エージェントがサッカーができるようにトレーニングを行い、最終的にそのエージェントを本物のロボットに移植したというものです。 

Unity Machine Learning Agents Toolkit(ML-Agents)を使えば、Unity を使って強化学習を簡単に始めることができます。ML-Agents では、ユーザーが強化学習を使い始めるための様々なサンプル環境やモデルアーキテクチャを提供しています。ユーザーはハイパーパラメーターを調整して、結果として得られるモデルを試し、改善することができます。これらの作業は、ユーザーが Unity 環境の構築やアセットのインポートなどについて気にすることなく行うことができ、まず最初にコーディングが必要になることもありません。このプロジェクトはギリア株式会社による日本発のプロジェクトで、ML-Agents のサッカー環境を使ってサッカーをするエージェントのトレーニングが行われました。その結果得られた強化学習モデルをソニーの toio に移植し、サッカーをさせることに成功しました。これは、ML-Agents を使って訓練したロボットを、シミュレーションの世界から実世界へ持ち出すことに成功したエキサイティングな例です。

ギリアの代表取締役社長兼 CEO の清水亮氏、イノベーション & ブランド戦略室リードプログラマーの布留川英一氏、イノベーション & ブランド戦略室イノベーションセクションマネージャーの内田政俊氏に、このプロジェクトを構築することになったきっかけについてインタビューを行いました。実際のロボットにサッカーの練習をさせるために ML-Agents ツールキットをどのように活用したか、またこのシナリオにゴルフボールがどうして適しているのかについては、この記事の続きをお読みください。

ML-Agents とソニーの toio を使ったロボットサッカー

Made with unity logo

プロジェクトを立ち上げたきっかけはどのようなものでしたか。

ギリアは、強化学習アプリケーションに注力している企業です。ギリアのファウンダー北野宏明氏は、RobocupSoccer を立ち上げ、ソニーで AIBO の開発に携わりました。私たちのチームは以前にもエアホッケーのデモを作ったことがありましたが、構成部品が多種多様だったため、あまりあちこちに持ち運べるようになっていませんでした。強化学習とは何かをお客様に説明するための別のデモを作成することを検討し始めた時、もっと簡単に持ち運べるものにしたいと思いました。ML-Agents にはすでにサッカー環境があったので、これを利用して小型で持ち運び可能なソニーの toio というロボットにサッカーゲームをさせるのが良いと思いました。また、受けるコンテンツにもなるだろうと考えました。

Picture of square MLA soccer demonstration with a 3d rendering of a soccer arena

ML-Agents で作ったモデルをどのようにして実際のロボットに移植したのでしょうか。

強化学習を実際のロボットに適用するには、ロボットがシミュレーション環境の中に存在する必要があります。幸いにも、toio には最初から toio SDK for Unity というシミュレーターがあります。これに ML-Agents のパッケージを加えることで、すぐにトレーニングに使えるようになりました。toio SDK for Unity には Unity 用に用意されたロボットのモデルがありましたが、ボールは別途作る必要がありました。まず Unity の物理エンジンを使ってシミュレーター上でボールを再現しましたが、(これを実世界に持ってくるには)シミュレーションの結果と合う本物のボールを探す必要がありました。いろいろ試した結果、ゴルフボールを使うとトレーニングの結果をよく反映する結果が得られることがわかりました。ボールの位置はシミュレーションでは Unity のトランスフォームの値を使いましたが、実世界では OpenCV とカメラによる画像認識によって割り出された値を使いました。

MLA soccer demonstration with lego piece robots

このシステムを実世界で動かすためのハードウェアのセットアップはどのようなものでしょうか。

サッカーボールの表現にはゴルフボールを使いました。このボールは認識率を上げるために赤く塗っています。1 台の iPhone とそのカメラだけで、ボールの検出、8 台のロボットの制御(このシナリオでは 4 対 4 のサッカーゲームを行ったため)、ML-Agents モデルによる推論を行うことができたのです。

Demonstration of ML-Agents soccer with a soccer layout and lego ML agents and a red golf ball as the soccer ball

報酬関数はどのように設計されたのでしょうか。

最初はオウンゴールが多かったので、オウンゴールに対してマイナスの報酬を与えてみました。しかし、これではゴールキーパーがゴールを守らないようになってしまいました。ボールを動かしたときにプラスの報酬を与えようとすると、両チームとも行ったり来たりを繰り返し、ボールをゴールに入れることができず、ただ時間稼ぎをしてしまうのです。最終的には、相手のゴールにボールを入れるとプラス 1 点、得点されるとマイナス 1 点される形に落ち着きました。

このプロジェクトで最も困難だったことは何だったでしょうか。

実際のロボットがシミュレーションと同じように動かないことがあるのですが、その原因の究明が難しかったことです。たとえば、少し傾いた床の上でロボットを操作したために、推論がうまくいかないことがありました。また、ボールの跳ね返り方がシミュレーションと違っていたため、ロボットが期待通りに反応しないこともありました。また、カメラの位置は非常に繊細でミリ単位の精度が要求されるため、イベント会場で毎日調整するのは大変でした。モデルに大きな改良を加えるたびに、3 日間ほどのトレーニングを行いました。結果として、6 回ほどのトレーニングで望みの結果を得ることができました。

バーチャル空間のロボットが衝突しても実世界に影響はありませんが、実際のロボットが衝突すると影響があります。この問題にどのように対処したのでしょうか。

ML-Agents のデモではボールがゴールに入った後、エージェントは元の位置に戻りますが、実際のロボットで同じことをするのはそう簡単ではありません。toio 同士の衝突回避など、強化学習だけでは解決が難しい問題もありました。最初はこのシナリオに対応するための報酬関数を設計しようとしましたが、最終的にはヒューリスティックに解決しました。

Gif of MLA agent simulation of playing soccer

このプロジェクトはオープンソースでしょうか。詳細な情報はどこで得られますか。

もし要望があれば、公開することを検討します。このプロジェクトの詳細については、布留川氏のブログ記事 (日本語)でご覧いただけます。

機械学習をプロジェクトに活用したいと考えている Unity クリエイターにアドバイスをお願いしたいです。

AI、特に深層学習は魅力的ですが、十分に理解されているとは言えません。実際に手を動かしてみないと、その美しさや複雑さを十分に理解することはできません。その境地に至っていないのはもったいないと思うので、ぜひ世界中の Unity 開発者に実際に手を動かしてみてほしいと思います。また、機械学習がいかに楽しいかということと、Unity ML-Agents が、機械学習を簡単に始めたり、プロジェクトに取り入れたりするために適したシステムであるということも強調しておきたいと思います。

さらに知りたい人のために

今すぐ Unity ML-Agents を使い始めていただいたり、Unity Robotics パッケージをご覧いただいたりすることが可能です。プロジェクトで複数のトレーニングセッションを並行して立ち上げる必要がある場合は、Unity が提供している ML-Agents Cloud についてお問い合わせください。

また、布留川英一氏は「Unity ML-Agents 実践ゲームプログラミング」という日本語の書籍を出版しています。この本では、ML-Agents を使った強化学習の始め方が詳しく説明されています。

2021年8月6日 カテゴリ: ゲーム | 8 分 で読めます

Is this article helpful for you?

Thank you for your feedback!