mos4423のアイコン画像
mos4423 2024年12月13日作成 (2025年01月31日更新) © Apache-2.0
製作品 製作品 閲覧数 190
mos4423 2024年12月13日作成 (2025年01月31日更新) © Apache-2.0 製作品 製作品 閲覧数 190

ハンドジェスチャーを用いたRCカー制御

ハンドジェスチャーを用いたRCカー制御

はじめに

Spresenseカメラボードと画像認識を用いて、ハンドサインで反応するロボットを制作しました。
以前からハンドジェスチャーでのロボット制御に興味があり、SpresenseはエッジAIとカメラボードを搭載しているため今回挑戦してみました。

作成の流れ

まずカメラボードやSDカード、NNCや推論モデル周辺の確認に取り掛かりました。
ここで苦労した事は、カメラデータのリアルタイム推論に関して詳しく解説した資料があまり無く、またその中でも推論結果の表示に外部ディスプレイを必要とする場合が多く、シリアルモニタへの出力といった例をあまり発見出来なかった点です。
のでこちら(※1)を参考に、カメラデータのリアルタイム推論結果をシリアルモニタに出力するプログラムを作成しました。
苦労した点としては、カメラが何を写しているのかが全くわからず、手探りでモデルの推論結果が正しくなる写り方を見つける必要があった点かなと思います。

次にkaggle(※2)からハンドジェスチャの学習に必要なデータを集め、グーやチョキ、パー等を用いて学習しました。
がしかし過学習か或いはデータ量が少なかったのか、あまり良い曲線を描いてくれず。いざ推論してみてもそれらしい反応が得られず、悩むことになります。
色々条件を変えていくうちに、距離と色合いをデータセットのそれと合わせると正確な推論をする為、2値化や撮影環境、NNBモデルに問題がありそうと推測。
今回はSpresense側で固定閾値2値化を実装し、更に環境(手の影を作らない、手を逆光で黒色に認識)に依存させる方向で動くことにしました。
上記の通り閾値が必要なのですが、流石に手探りでは時間がかかる為、点字を用いてカメラデータをシリアルモニタに映し、テストを繰り返して特定しました。

ここに動画が表示されます

こんな感じですね。

また、先の環境セットアップには白背景を映したディスプレイモニタを使用しました。

これにより何とか手の推論が成功、最後にこれらを秋月で見繕ったRCカーと合わせて、モータの出力に分岐させて、完成です。

環境情報・使用部品

環境情報

環境 バージョン
使用PC MSI Prestige 13 Evo
OS環境 Windows11
Arduino IDE 2.3.4
Spresenseボード v3.2.0

使用部品

製品名 型番
Spresenseメインボード CXD5602PWBMAIN1
Spresense拡張ボード CXD5602PWBEXT1
Spresenseカメラボード CXD5602PWBCAM1
ラジコンカー FT-DC-002
モータドライバ AE-TB6612-BO
microSDHC KLMEA032G
電池ボックス BH-321-1B
バッテリスナップ BS-ER-150
ブレッドボード BB-801
オスオスジャンパ BBJ-20
USBケーブル Aオス-マイクロBオス 2A L0.3m

設計図

ラジコンカー

キャプションを入力できます

モータとモータドライバ、拡張ボードを接続する回路図

キャプションを入力できます

完成図

キャプションを入力できます
キャプションを入力できます

動作

ここに動画が表示されます

パーだと時計回りに、チョキだと反時計回りに、グーで止まります。

ソースコード

ソースコードは全てGitHubに記載しました。
nnbfilesの中身である.nnbファイルは画像認識用のモデルです。SDカードに入れて、Spresense拡張ボードに挿して使用します。
.nnbファイルはMNIST用とハンドジェスチャ用があります。
mnist_imageにはMNISTのリアルタイム推論でテストできる画像を用意しました。
https://github.com/PetaCiel/spr2024_mos4423

概要 名前
カメラリアルタイム推論(MNIST) Cam_and_Dnnrt_MNIST_Guess
カメラ閾値2値化点字シリアルモニタ Camera_Capture_SerialPlot_forBraille
カメラ閾値2値化用推論(ハンドジェスチャ) Cam_and_Dnnrt_Hand_Gestures_Guess
カメラ閾値2値化用推論(ハンドジェスチャ)->モータ出力 RCCar_hand_Gestures_Controll

反省点・今後の展望

反省点としては、ハンドジェスチャの情報を思うように入手出来なかった点です。
物理面では、カメラがテーブルに近すぎるため手を無理やりカメラの画角にねじ込む必要があり、
ソフトウェア面では、2値化して環境も整えないと推論が上手く行えない点です。
そのため、物理面での改善点としては、カメラそのものの向きと固定の仕方等の設計や調節が、
ソフトウェア面での改善点としては、より高度な画像認識を実装する必要があるように感じました。

参考文献

(※1) SPRESENSE で小型AIカメラを作ってみた!
(※2) Hand Gesture Recognition Dataset

1
ログインしてコメントを投稿する