見出し画像

Stable Baselines と Raspberry Pi によるホッケーロボットの強化学習

「AI・人工知能EXPO 2020 【秋】」の「ギリア」ブースにて、「Stable Baselines」 と「Raspberry Pi」によるホッケーロボットの強化学習を展示しました。

Webカメラの映像を入力として使って、「Raspberry Pi」上で「Stable Baselines」による推論を行い、ロボットアームの操作して、ホッケーロボットの対戦を実現させています。

画像2

今回は、「Stable Baselines」と「Raspberry Pi」によるホッケーロボットの強化学習の作成の流れを紹介します。

【ステップ1】 ロボットアームとホッケー台の選定

はじめに、ロボットアームをいろいろ試してみて、KHRシリーズで有名な近藤科学の「KXR-A5」を選びましました。ホッケーするのに十分なサーボ速度、長時間動く耐久性、1台38,000円という値段の安さが決め手になりました。

ホッケー台はAmazonでサイズと値段で手頃なものを選びました。

【ステップ2】 Raspberry Piによるロボットアームを制御

次に、「Raspberry Pi」を使って、ロボットアームをキーボードで操作できるようにしました。

「KXR-A5」のコントロールボードは「RCB-4mini」のため、「Raspberry Pi」上のPythonスクリプトから「RCB-4 Library for Python」を使って、ロボットアームのサーボモーターを操作できます。

画像2

詳しくは、以下の資料が参考になります。

Python でRCB-4をコントロール

画像4

具体的には、キーボード操作(上下左右)に応じて、ロボットアームが持つラケットの位置を切り替えられるようにしました。これによって、人間 vs 人間が操作するホッケーロボで、対戦できるようになりました。

【ステップ3】 学習用の人間の操作ログの収集

「強化学習」は、人工知能が試行錯誤によって行動を学ぶ学習方法ですが、無学習状態からの試行錯誤はロボットには負荷が高すぎるので、「人間の操作ログ」に近いほど報酬を与える強化学習である「模倣学習」を行うことにしました。

入力となる「Webカメラの映像」と、出力となる「キーボード操作」(0:無、1:上、2:下、3:左、4:右)をペアで保存するPythonスクリプトを作成して、30分ほどの「人間の操作ログ」を収集しました。

画像4

この画像では、左が人間、右が人間が操作するホッケーロボになります。

【ステップ4】 Stable Baselinesによる深層学習モデルの学習

次に、収集した「人間の操作ログ」を使って、「Webカメラの映像」から「キーボード操作」を推論する深層学習モデルを作成しました。

この時、パック位置の特徴を捉えやすいように、「OpenCV」を使って「Webカメラの映像」を「パックのXY座標」に変換してから、深層学習モデルに渡すようにしました。

模倣学習は、「OpenAI Baselines」をベースにした、強化学習アルゴリズムの実装セットの改良版である「Stable Baselines」の「Behavior Cloning」を使って学習しました。

「Stable Baselines」の使い方は、以下で紹介しています。

【ステップ5】 Rasberry Piによる深層学習モデルの推論

次に、学習した深層学習モデルを使って、ロボットアームを操作できるようにしました。

「Raspberry Pi」上で「Stable Baselines」で学習した深層学習モデルを推論する方法は、以下で紹介しています。

【ステップ6】 人間の操作と深層学習の推論のギャップの調整

最後に、人間の操作と深層学習の推論のロボットアームの動作を目視で確認して、異なる点を調べ、同じになるように調整します。

・ホッケー台の角にパックがハマる
    → スポンジを貼り付ける
・パックが中央で止まるとロボットアームが届かなくなる
     → エアーファンを強力なのもに交換してパックを滑りやすくする
・赤いラケットが
赤いパックと誤認識されやすい
    → ラケットを緑に塗る
・ロボットアームの動くタイミングが遅れ気味
    → 推論速度のチューニングとフレームレートの調整

ホッケー台には、強力なエアーファンだけでなく、展示用にアダプタとトグルスイッチ(元は電池ボックス)も追加しました。

画像5

これで、完成になります。

関連


この記事が気に入ったらサポートをしてみませんか?