ラズベリーパイ(Raspberry Pi)ロボットをディープラーニングで人間に追従させる

  • URLをコピーしました!

今回はラズベリーパイ(Raspberry Pi)をコントローラとして動作する4足歩行ロボット、PiCrawlerの自律制御機能の一部が実装できたので記事にしたいと思います。

目次

使用するラズパイロボット PiCrawler

使用するロボットはSunfounderが販売しているラズベリーパイベースの多脚ロボット、PiCrawlerです。詳細は以下のページをご覧ください。

ロボットの制御で使用しているマイコンボードはRaspberri Pi 3Bです。Raspberry Pi 4でも同様の制御が可能です。

制御するプログラムは全てPythonでコーディングしています。

やりたいこと

今回はラズベリーパイに接続されているカメラモジュールの映像の中に映った人間をディープラーニングを使ってリアルタイムに検出し、その人間がいる方向にロボット本体の向きを変えるという動作をさせてみたいと思います。

物体認識はPINTOさんが公開されている学習済みライブラリ「TensorFlow Lite-bin」を使用させて頂きいています。この学習済みモデルの「Person」というラベルに対応するオブジェクトが検出された場合のみ、サーボモーターを制御してロボットの向きを変えています。

PINTOさんのリポジトリは以下となります。

ベースとなるアプリケーション

オブジェクトの位置検出

ディープラーニングによるオブジェクト検出については、以下の記事でソースコード付きで解説しています。オブジェクトの検出だけでなく、オブジェクトがロボットに対してどちらの方向にあるのかという情報もOpenCVを使って検出しています。

サーボモーター制御

オブジェクトの位置情報を元にサーボモーターを動かすための制御プログラムは、以下の記事でソースコード付きで解説しています。

今回はこの2つの記事で記載している機能の調停を行うプログラムを作成し、ディープラーニング側のプロセスが持っているオブジェクトの位置情報を、プロセス間通信を使ってサーボ制御プロセスにリアルタイムに渡せるようにしました。

実際にうごかしてみた

実際にプログラムを改修して動かしてみた動画です。
人間の手を検出するとそちらへロボットの向きを変えていることが確認できました。

手だけだとディープラーニングでの検出精度が低いので私自身の全身で検出するように動画を撮ってみました。

少し離れた位置で試すとうまく追従して動いてくれました。

まとめ

今回はラズベリーパイロボット PiCrawlerを、人間に追従して向きをかえるという処理を実装してみました。
目標となるオブジェクトとの距離が近すぎたり、目標の移動速度が速すぎたりするとうまく追従できない場合があったので、移動平均フィルターを入れるなどのチューニングをして精度を上げていきたいと思います。

機械学習を勉強したい方向けに以下の記事で公開していますので、ぜひご覧ください。

また、今回のようにディープラーニングを使ったアプリケーション開発を学べるオンラインスクールについても以下の記事でまとめていますので、ぜひご覧ください。


それでは、また次の記事でお会いしましょう。

おすすめ記事

よかったらシェアしてね!
  • URLをコピーしました!
目次