初めに
AliExperssとかで、ほんとに安いローバーがあるんだけど、これをSpresenseで制御して遊んでみようと思って購入してみました。
お一人様1点なら200円以下
普通に買っても1500円以下
ということで、めちゃくちゃ安い!
これを買ってドライブしてみようと思うんだけど、Spresenseなんだし、AIを入れようと思って、昔のAIBOのようにピンクのボールを追っかけるようにしてみようと思いました。
使用したもの
・SpresenseのMainボード
・Spresenseの拡張ボード
・SpresenseのHDRカメラボード
・DRV8835モータードライバ
ブログ(元ネタ)
この記事は、以下のブログへ過去に投稿したもののまとめです。
まずは、DRV8835を使ったモーターの制御
秋月さんのこのモータードライバはほんとに便利。ジャンパワイヤーでの配線だけでつなぐことができます。
PWMはできるだけ残しておきたいなと思っていたので、
今回は、このDRV8835は、PASE/ENABLEモード(MODE = 1)で運用することにしました。
なので、以下のように配線します。
Spresense → DRV8835
5V → VM
3.3V → VM
GND → GND
左モーター → BOUT1
左モーター → BOUT2
右モーター → AOUT1
右モーター → AOUT2
D2 → MODE
D6 → AIN1/APHASE
D12 → AIN2/AENBL
D9 → BIN1/BPHASE
D13 → BIN2/BENBL
※これ別な記事でのKoovとの連携と合わせたものになっています。
これを簡単に使うため、ちょっとしたライブラリを用意しました。
これで、モータはうまくドライブできそうです。
様々な駆動系のローバーの共通化
実は、この安いローバーだけでなく、安い中華のラジコンカーを改版することもしています。
これは、2つのDCモーターなんだけど駆動系とステアリングで2つ使っていて同じDRV8835を使っているんだけど、制御が全く異なります。でも、やりたいこと一緒だったりするので、駆動系が変わっていても共通なAPIで叩けるようにしたいな~と思い、さらにローバーライブラリを用意しました。
これによって、色々なローバーが同一のAPIで制御でき、結局、サンプルが全部共通化できます!
ボールを見つけるAI
ピンクのボールを見つけるAIの学習などについては、ここでは細かく書かないんだけど、こちらのソニーの太田さんの本、
と、そのサンプル
を参考にすれば、結構簡単に作れます。
今回は、対象のオブジェクトをピンクの丸にして学習させると、このように検出が出来ました!
これができたら、現在の領域のX、Y座標を検出するものをエリアの重心の位置と面積を出すように変更することで、ボールの位置が推定できるようになります。
領域の重心がカメラの中心位置より右に入れば右に進むように、左に入れば左に進むようにし、面積が一定以上大きければバックするように、一定以上小さければ前に進むように変更します。
これによって、ボールを追いかけて、近すぎた場合は下がるようになります。
そのコードは、これ。
これによって、ボールを追いかけるようになりました!
余裕があったら、検出のフィルタだったり、閾値の調整だったりします。
所感
記事は、めちゃくちゃ簡潔に書いてしまいました。
時間ができたら、膨らませます。
で、実際やってみましたが、非常に簡単にできました。
これは面白い!
ぜひ、いろいろやってみようと思いました!
