« 一応16ビットだったホビーパソコン”ぴゅう太”の思い出 | トップページ | Apple Watchで不整脈の97%を検出可能!? »

2017年5月21日 (日)

TensorFlowで顔めがけて近づいてくる車を作ってみた

久しぶりのRaspberry Pi電子工作です。

せっかくディープラーニングを勉強中ってことで、ちょっとAIっぽいものを作ってみました。

Img_2842

ずいぶん不細工な車ですが、これでも”人工知能”搭載カーです。

さて、まずベースとなる車ですが、このキットを使いました。

Img_09411

なんとなく勢いで買ってみたものの、使わずじまいでしまい込んでいたタミヤのリモコンロボットキットです。

Img_1366

先の連休中にこれをせっせと

Img_1367

組み立てて

Img_2843

百均のタッパーとRaspberry Pi 3にカメラモジュール、超音波センサーHC-SR04など、あまりものと安物で製作。

こんな時のために、気になる部品は買っておくものですね。

ちなみに、車そのものはArduino UNO互換ボードで制御。ArduinoとRaspberry PiとはUSBで接続。

ちなみに動作プログラムはこちらの記事を参考に作りました。

Arduinoでラジコン戦車 その1 – Nu

余談ですが、こちらの記事は以前私が作ったRaspberry Piレーダーを見てこのリモコンを作ったそうです。それを今度は私が参考にして・・・電子工作の世界のめぐりあわせって面白いですよね。

さて、ここでちょっと問題発生。

Raspberry Pi 3のX Windowが立ち上がらなくなっちゃいまして、VNC経由でカメラ画像を表示できなくなってしまいました。

このため、OSを再インストール。当然、TensorFlowも入れ直し。

OSはこちら(Download Raspbian for Raspberry Pi)から入手。

TensorFlowですが、tensorflow-on-raspberry-piを見てPython 2.7用をインストールしました。

$ wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.1.0/tensorflow-1.1.0-cp27-none-linux_armv7l.whl
$ sudo pip install tensorflow-1.1.0-cp27-none-linux_armv7l.whl

このコマンドで、依存するライブラリも一緒に入ります。

今回の再インストールで、Raspberry PiのTensorFlowも1.0以上になりました。

TensorFlowを1.0にあげると、一ついいことがありまして。

それはWindows版TensorFlowの学習データがそのままRaspberry Piでも使えるようになったこと。

これは大きな前進。Raspberry Piの活用が捗ります。

てことで、Raspberry PiでもWindows版と同じPython 3.Xを使いたいところですが、OpenCVがうまく入らないんですよね・・・

OpenCVは

$ sudo apt-get install libopencv-dev
$ sudo apt-get install python-opencv

とやれば入ります(ただしPython 2.7のみ動作、OpenCVのバージョンは2.x)。

今のところこれで支障はないので、このままいきます。

さて、ここでようやくRaspberry Pi側のプログラムです。

具体的にはけものフレンズの動画からフレンズさんの顔を検出するやつを無理やり作ってみた: EeePCの軌跡で使った物体検出のプログラムを流用しました。

アルゴリズム的には

(1) カメラ画像から、LBP特徴で顔検出させる

(2) ”けもフレ”認識でどんなフレンズなのかを判別

(3) 顔認識した位置に向かって車両を動作

カメラに映った顔の位置が右寄りなら右側に、左寄りなら左寄りに動くよう、Raspberry PiからArduinoに通信を送って制御させてます。

超音波センサーは前方に障害物がないかを測定しており、20cm以内に何かあったら動かなくなるようにしてます。

ところで実はこのプログラム、(2)で何を検知しようが、結果にかかわらず顔検出した場所に向かって動作するようにしたため、(2)の処理は今回まったく意味がありません。

いずれ(2)で意味のある学習データに置き換える予定のため、とりあえず動作速度を確認するためにあえてTensorFlowを動かしているというだけです。

当然、TensorFlow部分を抜いて、OpenCVだけにした方がもっと早く動作するはず。

てことで、恥ずかしいので今回もコードを載せませんが・・・いずれちゃんとした動作ができるようになったら、公開するつもり。

Image2

VNCでRaspberry Piのデスクトップを表示。

上のちっこい画像の中で寝そべっているのが私です。

Img_2840

この顔めがけて、このRaspberry Piカーが接近してくるんですが。

この動画のとおり、結構遅いです・・・1秒に一度、きゅっと動作しては1秒間は停止して確認、また1秒ほど動作しては確認・・・匍匐前進のような動作ですが、Raspberry Pi 3+Pythonなのでこの辺りが限界のようです。

Img_2846

このタミヤのキット、左右輪が別々のモーターで動いているんですが、回転速度がバラバラのため、直進させると右側に回ってしまいます。

プログラム的にちょっと左寄りに回るようにして無理やり直進させました。

今回は検出した場所にただ向かうだけの車を作りましたが。

ある物体はよけて、ある物体には向かうという、そういう車にする予定です。

問題は、その物体に何を使おうかというところですが・・・現在思案中。

ところで、なんでこんなものを作っているのか?

ちょっと会社で、こういうものが作れると何かと便利なことがありまして。

今はこれを実用的なものに作りかえようとしております。

今後、自動運転とは言いませんが、”プチ自動運転”っぽい車を作りあげる予定。乞うご期待。

Raspberry Pi 3 MODEL B

タミヤ 楽しい工作シリーズ No.162 リモコンロボット製作セット タイヤタイプ (70162)

« 一応16ビットだったホビーパソコン”ぴゅう太”の思い出 | トップページ | Apple Watchで不整脈の97%を検出可能!? »

Raspberry Pi・Arduino・電子工作」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: TensorFlowで顔めがけて近づいてくる車を作ってみた:

« 一応16ビットだったホビーパソコン”ぴゅう太”の思い出 | トップページ | Apple Watchで不整脈の97%を検出可能!? »

当ブログ内検索

スポンサード リンク

ブログ村

無料ブログはココログ