自作できる小型ロボット「犬」に物体追跡AIを搭載してみよう:AI・データサイエンスで遊ぼう
身近な現実問題にAIやデータサイエンスの適用を試してみる新連載。今回は「ミニぷぱ」というラズパイベースの小型ロボット犬を製作し、OAK-D-LITEカメラを搭載することで物体検知して自動的に目で追うようにしてみる。
本連載の目的
AI/機械学習/データサイエンスをある程度学んできて、Kaggleにも挑戦してちょっとずつ実践を試してきたら、もっと身近な現実問題にAIやデータサイエンスの適用を試したくなってきますよね。そこで本連載では、AIやデータサイエンス、場合によってはもっと広げてPythonなどの幅広い技術を活用して、業務データの利活用や日常作業の効率化、身の回りの趣味や遊びの高度化などを試していきたいと思っています。
ちなみに、コンペティションでの挑戦をつづる『僕たちのKaggle挑戦記』という連載も現在展開中ですが、本連載はその姉妹版であり現実問題版のような立ち位置という想定です。連載タイトルも姉妹連載に似せて『僕たちのAI・データサイエンス実践記』のようにしてもよかったのですが、「実践してみた」のように肩肘を張るような堅い内容ではなく「ちょっと試して遊んでみた」のように気楽な内容にしたかったので、『AI・データサイエンスで遊ぼう』としました。
筆者らが試したことを、読者の皆さんが追体験/疑似体験して楽しめることを目標に執筆していきたいと思います。そこでは、成功例や楽しさだけでなく、筆者らの失敗や苦しんだ部分なども共有していく予定です。この連載が、筆者らだけでなく読者の皆さんにとっても「AIやデータサイエンスを現実問題でどうやって使えばよいのか?」を考えるヒントや練習にもなるとよいなと考えています。もちろん余裕があれば、ぜひ読者自身の手でも試してみてください。
当面の執筆予定者は2人です。2人とも教科書的なデータを使ったディープラーニングやKaggleに挑戦した経験はありますが、現実的な身の回りのデータを使うのはこれがほぼ初めてとなります。内容で「それ、おかしいだろう」と思うことがあればお手柔らかにSNSコメントなどで教えてもらえるとうれしいです。まずは自己紹介として、それぞれの予定や意気込みを短くコメントしておきます。
どうもどうも。かわさきです。あれこれやろうとして、いろいろと悪戦苦闘しているうちに、この連載でも一色さんに先行されてしまいました。この世の中、成功することはそれほど多くはないでしょうが、人はきっと失敗から学ぶこともあるはずです。とはいえ、何か形になるような(オチが付けられるような)結果を得てから、今回の連載の原稿執筆に取り組む所存です(笑)。
今回の記事を執筆している一色(いっしき)です。現実データを使ったAI/データサイエンスの実践としては、「Jigsaw」というレコメンデーションエンジンのメンテナンスをしていることや、ログイン認証で提示されるアイコンを画像認識して自動選択するC#のプログラム(「やっていいのか、それ?」というのはあるんだけど、作れちゃったんだもの)とかは過去にやったことがあります。とはいえ、現実問題の経験は圧倒的に少ないので、この連載をきっかけに頑張ろうと思っています。よろしくお願いします。
さて、連載紹介と自己紹介が終わったところで本題に入りましょう。
今回のお題
Boston Dynamics(ボストン・ダイナミクス)社の「Spot」って知っていますよね? 黄色くて、くの字の足がピョコピョコと動いて歩いたりできるロボット犬です(図1)。
Spotの挙動が「すごい」と、何年か前にSNSなどで話題になりました。「へぇ、欲しい」と思った筆者ですが、Spotは意外に体が大きく家で手軽に所有できるサイズではないし、そもそも価格が(ネット検索すると)800万円以上らしく、とても個人が趣味で持つようなものではありません。それから数年がたち、2021年の冬、ある小型ロボット犬に出会いました。それがMangDang Technology(マンダン・テクノロジー)社の「Mini Pupper」(ミニ・パッパー、日本名「ミニぷぱ」)です(図2)。
「Pupper」と聞いて思い出したのは、ルーディ・ラッカーのSF小説「ソフトウェア」「ウェットウェア」「フリーウェア」でした。が、あちらで出てくるのは「バッパー」でした。ただし、つづりは「bopper」なのでPupperという名前の元ネタってことはなさそうです。買って読んだはずなのに見つからないから、何とか買い直したいなぁ。
それはともかく、かわいいですね。
Pupperは「子犬、わんちゃん、わんこ」を意味する俗語らしいです。
ミニぷぱの詳しい説明は公式Makuakeサイトに任せますが、サイズは肩幅11センチ×胴体21センチ×高さ約17センチの超小型で机の上に乗せられ、価格も自作するなら約5万円と格安です(※基本部品のみのリサーチキットの場合)。これを見たとき、次のことを強く思いました。
「妻の帰宅時に出迎えをするペット犬を作りたい」
それが目標、お題になります。が、最初からそこに到達するにはあまりに長い道のりでした。まずは、ミニぷぱをチュートリアル通りに動かし、画像認識して物体に追従して動くところまでを、今回はやってみようと思います。
やってみた(1): ミニぷぱの組み立て
ミニぷぱのハードウェア組み立て部分は、ソフトウェアであるAIではないので、本稿では説明上の必要最小限で簡単に紹介するだけとします。
ちなみに、ミニぷぱは日本ではクラウドファンディングサイト「Makuake」のプロジェクトとして始動した段階であり、まだ一般販売されていません。よって、執筆時点(2022年4月25日)での新たな入手は難しいです。今後、Amazon.co.jpでの一般販売が計画されているようです(執筆時点ではまだページがありません)。Amazon.co.jpでも一般販売が開始されたようです(2022年5月27日追記/修正、リサーチ・キット/コンプリート・キット/四足組立完成版/その他)。※なお、筆者自身はMangDang社と全く関係がなく、本稿も宣伝ではありません。AIの実装体験を解説するために、筆者がやったことをつづっているだけです(念のため)。
組み立ては公式ドキュメントに従うだけです。とはいうものの、筆者が自作した段階ではドキュメントの情報や丁寧さが不足していることもあって、パーツの組み立て順序や向き、配線などあらゆる場面で何度も間違えてかなり苦労しました(図3)。「製作目安:初心者なら約2〜3日、上級者なら約2〜3時間」とアナウンスされていますが、私の場合は2週間かかりました。逆に何度も分解しては組み立て直したおかげで、慣れたところはあるかもしれません。今なら1日以内に組み立て可能と思います。なお、公式ドキュメントは写真が多数追加されるなどアップデートされ続けており、情報は充実してきているようです。また、今後の組み立てはもっと簡単になることが公式ドキュメントに書かれています。
筆者の一番複雑な自作物はDeAGOSTINI(デアゴスティーニ・ジャパンディ)社の「週刊 マイ3Dプリンター」だったけど、ここまで間違えなかったので、ミニぷぱの組み立て難易度はかなり高いと思います。最悪なのは、足の基本位置を調整するキャリブレーション(Calibration)で、サーボモーター(=姿勢を制御するモーター)を2つ壊してしまったことです。幸いなことにサーボモーターが1つ予備で付属していました。1つはギアが、もう1つはモーターが壊れたと想定して、2つのサーボモーターを分解して1つに組み立て直したところ何とかなりました。このサーボモーターはMangDang社の特注品で、一般販売されていません。もしこれから作る人はサーボモーターとキャリブレーションの取り扱いは優しく丁寧に、キャリブレーションの最初は足が急に動くので全4足を外しておくことをお勧めします。AIとは全く関係ないけど。
ちなみに、基本部品の他に、電子工作で広く使われている基盤「Raspberry Pi 4 Model B / 2GB」(以下では「ラズパイ」と表記。※現在、半導体不足の影響で価格高騰の上に入手困難)と、32GB以上のmicroSDカードが最低限必要です。また、ラズパイを使うために、キーボードとマウス(EwinミニキーボードをUSB無線ドングルで使うのがお勧め)、モニター、HDMIケーブル(Type-A ― micro Type-D)なども当然必要です。
やってみた(2): ミニぷぱのソフトウェア
ミニぷぱを動かすためのソフトウェアには、下記の2つのエディションがあります(※エディションの命名は筆者が便宜的に行ったものであり、公式ドキュメントには記載されていません)。
- PS4版: PS4コントローラーでラジコン風に操作できるエディション。一般利用目的
- ROS版: ロボット用プラットフォーム「ROS(Robot Operating System)」を通じて動くエディション。開発利用目的
PS4版はPS4コントローラーでラジコン風に遊ぶだけのエディションです。他には顔の表情をカスタマイズできます。ミニぷぱは元々、スタンフォード大学の学生グループ(Stanford Student Robotics)が中心に開発したもので、最初にこのエディションが開発されたようです(※PS4版からROS版への開発経緯はこちらの記事で紹介されています)。PS4版では内部で「Stanford Pupper」という四足ロボット用ソフトウェアが使われています。PS4コントローラーとミニぷぱをBluetooth接続してから、PS4コントローラーの[L1]ボタンでミニぷぱ本体をアクティブにした後、[R1]ボタンでRest(休憩)モードからTrot(足踏み)モードに切り替えることで足踏みが始まります(※詳しくは公式ドキュメントを参照)。この状態で左スティックで前後左右に動かせ、右スティックで向きを変えられます(図4)。
図4 PS4版でのラジコン操作風景
※ラズパイがむき出しになっていますが、黄色いカバーを付けるとmicroSDカードを差し替える際に付け直しが必要になり面倒だからです(カバーを付けた状態でmicroSDカードを差し替えられるようにしてほしい……)。
一方のROS版はカスタマイズ開発用のエディションです。Trot(足踏み)モードのようなものはなく、静止した状態から動かすことが可能です。手動による操作は、PS4コントローラーの他、PCからのキーボードでも可能です(図5は[i]キーを長押して前に進めているところ)。AIなどでの自動操縦をしたい場合にも、このエディションを使います。
さらに、本稿で試すような画像認識などを行いたい場合は、ミニぷぱが正式対応しているOAK-D-LITEというAIカメラが便利です。本稿でもOAK-D-LITEを用います(詳細後述)。なお、OAK-D-LITEとラズパイを接続するには、USBケーブル(Type-C ― Type-A。お勧めはL字型のこちら)が必要です。OAK-D-LITEの土台となるパーツが付属していないので、パーツを自作するために3Dプリンターもあるとよりよいです(※土台の3Dモデルを一般の方が作成し公開してくれていましたので、これを利用しました。いつの間にか公式でも土台の3Dモデルが公開されていました。ただし土台を付けると、ねじの長さが微妙に足りなくなるんですよね……)。
また、AIではないので筆者は試していませんが、周辺の物理環境を光から3Dでセンシングするデバイス「LiDAR」(Light Detection And Ranging、ライダー)にもROS版で対応しており、自己位置推定と環境地図作成を同時に行う技術「SLAM(Simultaneous Localization and Mapping)」を使ってロボット犬を部屋の中で自由に移動させることもできます(※詳細は公式ドキュメントを参照)。
このようにミニぷぱを本気で使うのであれば、ROS版を利用することになります。PS4版は親しみやすくできており、起動時にピャーと鳴き声を発したり、バッテリーが減ったらジギジギと苦しい声を出したりします。これらの機能は、ROS版にも移植可能だったので筆者は個人的に移植しました(※その方法についてはマニアックすぎるので割愛します)。
上記のようにPS4版とROS版の違いがあることも、コードを読み進めるなどしてようやく気付くことができました。バッテリーの電池が1時間で切れてしまうこともあり、ソフトウェアコードを読んで仕組みを理解するのに2〜3週間を費やしてしまい、製作から本稿を執筆するまでに約1カ月がかかってしまいました。始める前は「2週間ぐらいでいけるかな」となめていました。ぐぬぬ……。
先人の苦労のおかげで、後の人は楽できるのです。
やってみた(3): ROSによる手動操作
前掲の図5では、キーボードでミニぷぱを操作していました。ROSを動かすために、ミニぷぱのラズパイにはOSとしてUbuntu 20.04 LTSがインストールされています(※ROSがUbuntuのLTSにしか対応しない方針なので必ずしも最新OSではありません)。公式ドキュメントによれば、ミニぷぱをリモートから動かすためのPCのOSも基本的に同じUbuntu 20.04 LTSにして、これにROS Noeticをインストールする必要があります。しかし筆者が試した範囲では、PS4コントローラーや、PCからのキーボード、OAK-D-LITEによる操作/作業などはWindowsやmacOSからも可能でした(※ただし、筆者自身がROSを使うのが初めてであり、人に教えられるほどの知識はまだない上での発言ですのでご了承ください)。
リモートPCからのキーボードによる操作
前掲の図5のように動かすには、リモートにあるPC上でターミナルを3つ開いて、リスト1〜3のコマンドを実行するだけです(※前述の通り、WindowsやmacOSでリスト1は実行しなくても動作はしました)。
roscore
ssh ubuntu@192.168.1.83 -p 22
ubuntu@mini-pupper-ros:~$ roslaunch mini_pupper bringup.launch
ssh ubuntu@192.168.1.83 -p 22
ubuntu@mini-pupper-ros:~$ roslaunch champ_teleop teleop.launch
PS4コントローラーによる操作
3つ目のコマンドをroslaunch ps4_interface ps4_interface.launchに変えると、PS4コントローラーによる操作が可能です(図6)。
ピョコピョコした動作はほんとにかわいらしいですね。こんな子が出迎えに出てくれると、確かにうれしいかもしれません。
基本的には3つ目以降のコマンドを別のものに変えることで、さまざまな挙動が可能になっています。
試行錯誤の連続で苦労しましたが、ここまで動かせると後述の作業も含めて次々と成功しました。
ちなみに、筆者はPS4版とROS版のコードを比較しながら「両者で何が違うか」「どのような仕組みで動くのか」を理解しようとしましたが、最初からそこまでする必要はないかもしれません。MangDang社が公開しているROS版OSの.imgファイルを使えば、基本的なものはインストールされているので少し設定を変えるだけですぐに動く状態です。筆者が失敗した例では、間違ってラズパイ側UbuntuへROSをインストールしたりしてしまっていましたが、そんな作業は不要でした。これからROS版を試す人は、取りあえず動かしてみるところから始めた方がよいです。公式ドキュメントには、PC側の作業とラズパイ側の作業の2種類があるので、両者を混同しないようにご注意ください。
やってみた(4): OAK-D-LITEによる自動操作
いよいよ今回の目的です。OAK-D-LITEカメラで画像認識をして物体検知し、その物体を視線で追うようにミニぷぱの姿勢を動かします。
Copyright© Digital Advantage Corp. All Rights Reserved.