2025.09.24
工作キット×AI技術でここまでできる!顔認識機能搭載移動体の開発記録~電子工作編
#電子工作 #AI #顔認証 #開発 #Raspberry Pi #MJPG-Streamer #webIOPi
トップ > 技術ナレッジのアーカイブ > 工作キット×AI技術でここまでできる!顔認識機能搭載移動体の開発記録~電子工作編
2025.09.24
#電子工作 #AI #顔認証 #開発 #Raspberry Pi #MJPG-Streamer #webIOPi
現在公開中のYouTube動画「ロボット×ゲームでARブロック崩し作ってみた」(詳しくはこちら)。こちらは「電子工作」「通信」「組込制御」などの技術を駆使して、ゲームでお馴染みのブロック崩しをリアルの場で再現したものです。
その中でブロック崩しの「バー」の役割を果たす「移動体」をさらにアップデートしてみました。
動画でご覧いただくと分かる通り、移動範囲が左右のみで自由度がありませんでした。
しかし、「もっと自由に操作できたら、新しい使い方やアイデアが広がるのでは?」という思いから、新しい移動体の開発をスタートしました。
今回はスマホでより直感的な操作性、映像配信、顔認識機能を搭載し機能性を向上させた移動体を完成させました。その製作過程と技術的ポイント、そして失敗から学んだ改善方法を紹介します。
1999年に中途入社。ディスプレー製造装置および成膜装置の電気制御設計に携わりました。
趣味は電子工作で、電子部品専門店からパーツを取り寄せては、半田付けや組立行うのを日々の楽しみにしています。筋トレにもはまっており最近は週2回のペースでパーソナルジムにも通いはじめました。
今年は12年振りにAI対応ハイスぺPCの制作を計画しています。
本プロジェクトでは以下6点の改良・機能追加を行いました。
<改良ポイント>
シャーシをアルミ板からタミヤのユニバーサルプレートへ変更し耐久性と組立の自由度を向上しました。
足回りを四論駆動からキャタピラに変更したことで、凹凸のある走行面で走破性能が向上し、狭い範囲での旋回も可能になりました。
モータドライバーを見直したことで、使用電圧が下がり昇圧回路を省略できたことで、回路を簡略化できました。
画面上の矢印をタッチする方法から、進みたい方向に指をスライドさせる方法に変更したことで、直感的で滑らかな操作が可能になりました。
<追加機能>
MJPG-Streamerでリアルタイム映像を配信しスマホの画面を見ながら操縦が可能にしました。
Open-CVのカスケード分類器を利用し、顔検出機能を実装しました。
このシステムはRaspberry Pi4を中心に構成されており、スマホ操作や映像配信、顔認識によるLED制御を組み合わせています。 大きく分けると以下の3つの要素があります。
続いて回路図です。
では、各パーツについて解説します。
スマホのブラウザから操作すると、WebIOPiがRaspberry Pi4上で指示受け取り、GPIOを通してモータドライバーへ命令を送ります。
その結果、左右のモータが動き、移動体が前進や旋回を行います。
操作画面はスマホに表示されるので、スマホ画面を見ながら操作可能です。
Raspberry Pi4に接続したUSB Webカメラ から映像を取得します。
その映像はMJPG-Streamerを使ってWi-Fi 経由でスマホへ配信されます。
これにより、スマホでリアルタイムで映像を確認しながらロボットを操作できます。
Raspberry Pi4上で動作するOpen-CVがUSB Webカメラの映像を解析します。
顔を検出した場合、GPIO 出力を使って赤色LEDを点灯させます。
図の中にある「たぬきの置物」は、人の顔と無関係な物体を区別するための例として表示しています。
まずはこれらの部材を組み立てていきます。
このギアBOXは組立前にギア比を予め決めておく必要があります。
今回は前回の移動体よりも重量が増しているのでトルクを重視しました。意外と知られていないのが付属のグリス塗布。
付属以外のグリスを塗布すると、使用中に油切れになったりしてギアBOXが簡単に壊れてしまいます。実は繊細なパーツです。
続いてモータードライバを半田付けしブレッドボードに組付けしていきます。
モータドライバーだけでなく電子部品は基本的に静電気に弱いです。
今回は「ESDグローブ」と「導電性マット」に接地を行い静電気対策をしっかりと行った上で半田付けを行いました。
導電性繊維を編み込んだ電気を通す手袋で腕に装着したアース線からアースに静電気を逃がしています。
2層構造になっており、表面の緑色部分は高抵抗で静電気をゆっくり逃がし、電子部品への静電気による急激な放電による影響を抑えています。裏面の黒い部分は低抵抗で、静電気を速やかにアースへ逃がします。
写真には写っていませんが半田付け時には「フラックス」を塗布しています。 フラックスを塗布することで半田付けを綺麗に仕上げることができます。
そのモータードライバーとRaspberry Pi4を移動体に搭載し配線作業を行って完成です。
使用するブラシモータは整流時に高周波ノイズを発生します。このノイズはマイコン制御に悪影響を与える可能性があります。
一般的にはモータの端子付近に0.1μF程度のセラミックコンデンサを接続しますが、今回はより効果の高いEMI除去フィルタを採用しました。
EMI除去フィルタは「インダクタ」で高周波成分を遮断し「コンデンサ」で残った交流成分をGNDに逃がしてノイズを除去しています。
では、実際に動かしてみましょう。
スマホ画面のタッチ操作で、前進・後退・左右旋回、指をスライドすることで加速・減速を滑らかに制御できることができます。
オシロスコープでPWM信号の波形が加速、減速に追従しているかも確認できました。
実際の様子がこちら。
WebIOPi(ウェブアイオーピーアイ)とは、Raspberry Piを使って、インターネット経由で電子部品を操作できるようにするソフトウェアです。
具体的には、Raspberry Piに接続されたLEDやセンサーなどの電子部品を、Webブラウザ(ChromeやEdgeなど)から簡単に操作・監視できるようになります。
今回の移動体でも以下のような動作をしています。
この動作を分かりやすくレストランに例えると
①お店の受付窓口が開店
⇒
②お店からメニューを受け取る
⇒
③メニューを基に厨房に指示が行く
⇒
④ その指示を基にコックさんが作業する
のような動きになります。
いかがでしたでしょうか?ここまでで移動体が動作するまでを記載しました。次回は移動体に搭載したカメラで顔認証をさせる仕組みについて解説いたします。
Raspberry Pi4に「WebIOPi」をインストールし、ワクワクしながらスマホの操作画面をタッチしました。しかし何度押しても移動体はピクリとも動きません。画面は固まったまま。
「配線ミスか?コードの間違いか?」と配線やソースを何度も見直しても異常なし。ターミナル上でエラーメッセージも表示されず原因の特定が困難な状況でした。
期待は徐々に焦りに変わっていきました。調査の結果以外な事実が判明しました。
WebIOPi は Raspberry Pi4のGPIOを簡単に制御できる便利なフレームワークですが、
といった環境面の制約が主な原因でした。
Raspberry Pi OS Legacy 32bit (Bullseye) をクリーンインストールし、 有志パッチを適用することで正常に動作。スマホからのタッチ操作無事動作できるようになりました。
そもそも何故WebIOPiを使ったのか?
私が手に取った最初の書籍「名刺サイズの魔法のパソコン ラズベリー・パイ で遊ぼう! / 著:林和孝」で紹介されていたのがきっかけでした。後にこのWebIOPiについて調べてみたのですがメリット、デメリットとして以下の特徴があるそうです。
<メリット>
<デメリット>
などの特徴のあるWebIOPiですが、今回はこのデメリットで悩まされました。
WebIOPi代替案として「Flask + RPi.GPIO」なども紹介されていました。
次回機会があれば改良版として是非チャレンジしてみたいと思います。