ルンバハックの経過を書きます
先日息子くんが初LTさせていただいたコチラで、その時点までのルンバのハックをはじめたことを報告させていただきました。
siroitori.hatenablog.com
今回は、その後の経過を書こうと思います。
目標としては、「ルンバをAI自動運転カーにする」です。
ルンバに息子くんの部屋まで自動運転させることを目指しました。
ルンバにもともと搭載されているAIは、部屋をまんべんなくお掃除するというお掃除AI。
今回はこのAIを使うのではなく、息子くんの作るAIでルート走行させようという試みです。
AIの自動運転
ここで作ろうとしているAIカーとは、ドンキーカー(Raspberry piを使ったAIカー)やJetBot(Jetson Nanoを使ったAIカー)などに代表されるカメラ画像を学習してそれをもとに走行させるものです。
↓ こういうの
話題のAIで自動運転するドンキーカーを走らせてみた、ちびっこ対AIの白熱バトルも! 遠藤諭の「Maker Faire Tokyo 2019」レポート - ロボスタ
まず、何度か自分で運転して、そのカメラ画像を記録。
そのカメラ画像を学習させて、AIに「ははーん、この画像のときは左に曲がるんだな、右に曲がるんだな」という知恵をつけてあげます。これは画像の情報を渡したらTensorFlowっていう機械学習プラットフォームが頑張ってやってくれます。とはいえ、微妙な調整が必要でこれが大事なのですが、それにしてもAIってすごい!ですよ!
AIに興味がでた方におススメの本はコチラ。ルンバのことも書かれてます。からあげ先生、広告料ください(笑)
siroitori.hatenablog.com
ゲームコントローラーで操作可能に
前述した、まずは「自分で運転する」部分をやります。
前回、PCから操作することはできるようにしたのでこれでもいいのですが、もっと楽に操作できるように息子くんBluetoothのコントローラー(XBoxのコントローラー)を接続しようと思いました。
とはいえ、Jetson NanoにBluetooth接続がない!
おおーコントローラーで動かせてる!ルンバがラジコンに!
— とり子 (@siroitori0413) 2021年2月20日
コントローラー→Bluetooth→Windows PC→Jetson Nanoという流れで信号が伝達されてるとのこと pic.twitter.com/Jbxs3NGuvh
ということで、上記の通りPC経由で接続したとのこと。
ラグはほとんどありません!
と思いきや。このときはJetson NanoがネットにLANケーブルで有線接続してました。これを無線にすべく(USBタイプのWiFiアダプタを使用)Wi-Fiにしたところ、ちょっとラグあり。しかもデータの欠損が発生してるようで、動作が不安定になってしまいました。
↓ これではないのですがこういうタイプのWi-Fiアダプターを使用しました。
ちゃんと動作するように通信プロトコルをUDP→TCPに変更して、大丈夫になったとのことです。
息子くん私にUDPとTCPの違いについてめっちゃ詳しく説明してくれました・・。UDPは早いのでラグが少ないけどパケットロスしたりするそうです。
Jetson Nanoで使えるモバイルバッテリー
これで通信は無線になりましたが、「あっ、Jetson Nanoの電源コンセントに繋がってる・・」。これではまだ有線状態です。
モバイルバッテリーをつなげばいいと軽く考えていましたが、Jetson Nanoってラズパイとかに比べてパワーが必要で、ラズパイで使っていたバッテリーは使えないことが判明しました。
息子くんJetson Nanoに適合しそうなモバイルバッテリーをAmazonから探してきて「これを買ってほしい」と言ってきたのですが、3000円くらいするお品。買ってもいいんだけど、もしやTwitterの優しく情報通な皆さんどなたか良いのご存じなのでは!とTweetしてみました。すると、@mongonta555 さんから有益な情報をゲット!
(残念ながら2024/9時点でAmazonに商品がありませんでした)
すごいお安いではないですか!ちゃんとJetson Nanoで動くことも確認されて、大感謝でございます!
@mongonta555 さんに紹介してもらったJetson Nanoで使えるモバイルバッテリーが届きました!
— とり子 (@siroitori0413) 2021年2月23日
いいかんじー🎵ルンバの操作やっと完全無線。 pic.twitter.com/ziOxV3zxHN
このモバイルバッテリー、充電も割と早いし充分長い時間充電持つし、良い買い物をしたと思いました。まだ使い始めたばかりですが、おススメです。
TensorFlowで学習・自動運転
今日はTensorFlowで学習させて運転を覚えさせルンバくん見事リビングから息子くんの部屋まで自動で行くことができるようになってました!
— とり子 (@siroitori0413) 2021年2月24日
OpenCVとTensorFlowでカメラ画像見てルート判定しながら進んでるらしいす。 pic.twitter.com/q0bf3DxF2Q
カメラ画像はリモデで見ながらどちらに進む判定になってるか確認できます。(動画、鳥の鳴き声が大きめ😅) pic.twitter.com/Iz2hDQ7u3i
— とり子 (@siroitori0413) 2021年2月24日
やったー!自動運転の完成です!
カメラ画像をAI判定して、左回転/右回転/直進するというpythonのプログラムになっているそうです。左回転/右回転/直進の判定は70%以上の確度で判断させてるということでした。
失敗パターン
数回走らせてみてほぼ毎回うまく動作しましたが、失敗の回もありました。
玄関の前
玄関の前で右折しないといけないんですが、そこで左右に首を振ってどっちに行くか悩んでいる様子が見られました。
すこしして息子くんが気が付いたんですが、玄関のオートライト(人感センサ)のせいじゃないかと思いました。
学習走行中や、最初何回かの自動走行で、いつも息子くんや私がルンバのあとについていっていたので、いつも玄関のライトがついてたんです。ところが、何度目かで誰も人がついていかずに走行したためライトが点かず、画像の認識に失敗した(左折の場所と間違えた)のではないかと推測しました。
↑ Rightの確度95% → 右回転
↑ Leftの確度74% → 左回転
youtu.be
ルンバくん「えー!左なの!右なの!どっちなの!」
おとうさんの登場
ちょうど左に曲がって息子くんの部屋に入ろうとしたとき!右の部屋からそうとは知らない在宅勤務中のおとうさんが扉を開けて登場しました。ルンバくん突然現れたおとうさんの足を見てわけがわからなくなり左折に失敗(笑)
youtu.be
ルンバくん「なに、なに、これなにー!」
ルンバかわいい
きょろきょろしちゃう様子なんか、ルンバくんなんだか人間みたいに見えてかわいいです。
Jetson Nanoで動かせるペットAIとかあったらルンバくんにそれ搭載してペットとして一緒に暮らしたいなぁ!