工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

ロバの車のガベージコレクターのための自動運転AI

Raspberry Pi plusPiカメラでTensorFlowSSD MobileNetV2 DNNを使用して、物体検出が可能な自動運転車を構築します。

ストーリー

このプロジェクトでは、(Raspberry Pi + Pi Camera)を搭載したRCカーを物体検出と自動運転が可能なものに変換する方法を紹介します。これを行うために、2つのディープニューラルネットワークを展開します。 1つは物体検出用で、もう1つはステアリングとスロットルの推論を使用した自動運転用です。 RPi3は車両のコンピューターとして機能します。 RPiのリソースが限られているため、一度に実行できるネットワークは1つだけです。

アイデアは、車が自律的にゴミ箱を拾うことができるように、ゴミ箱を識別するようにニューラルネットワークをトレーニングすることです。


車とノートパソコンの識別

プロジェクトは2つの部分で構成されています。最初の部分では、中程度のサイズの畳み込みネットワークを使用して、Piカメラからの入力ビデオフィード内のオブジェクトを認識することを計画しています。 TensorFlowを使用してCNNモデルをデプロイし、OpenCVを使用してPiカメラからのビデオフィードを管理します。

第2部では、行動のクローン作成を使用して、車を自律的にナビゲートさせます。改造された車には、超音波距離センサー、GPS、6-DOF IMUなどの追加センサーが追加され、追加のテレメトリ機能が実装されます。

はじめに

2017年(1年前)に、GoogleはMobileNetをリリースし、今年初めにMobileNetV2をリリースしました。これらのネットワークは、スマートフォンなどの組み込みデバイスで動作するようにカスタム最適化されています。偶然にも、RPi 3で使用されるMPUは、LinuxまたはAndroidのいずれかで実行できるため、このカテゴリに分類されます。

最初に遭遇する問題は、Raspberry Pi 3のRAMと計算能力が限られていることです。これはクアッドコアMPUですが、YOLO(You Only Look Once)タイプのネットワーク。

最初に思い浮かぶ解決策は、Piカメラで取得した画像をWIFI経由で外部PCに送信し、そこでオブジェクト推論ステージを実行してから、ロバの車にコマンドを送信することです。本質的には、すべてのステップで母船に連絡する必要があります。これは、外部のラップトップとの通信が不可能なシナリオでは非現実的であることは言うまでもなく、非効率的です。

私は最初、ごみ箱を検出するときに比較的正確なVGG16ネットワークをテストしました。ただし、重量だけで約350MBであったため、RPiでは実行できませんでした。VGGネットワ​​ークをテストするには、最後に添付されているコードを参照し、入力と同様の画像を使用してください。

問題:

python KerasVGG_test.py

したがって、巨大な重みサイズの問題を解決するために、よりスリムなネットワークを使用してRPiですべてのモデルを実行します。具体的には、MobileNetV2シングルショット検出器ベースのCNNを使用します。これは、非常に小さい(比較的)重みを持つように最適化されたDNNです。

事前にトレーニングされたネットワークウェイトを使用しているため、この手法は転移学習と呼ばれます。

ソフトウェアを詳しく調べる前に、ハードウェアにいくつかの変更を加える必要があります。

ハードウェア

ロバカープロジェクトではマグネットカーが使用されました。マグネットは、2.4GHzマルチチャンネルラジオを使用して動作するRC(リモートコントロール)カーです。マグネットをロバの車に変えるには、いくつかの手順を実行する必要があります。

1.分解

まず、背面のクリップと2本のネジを外して、トップカバーを取り外します。あなたは2人の運転手がいるケージを見つけるでしょう。これも取り外してから、アウタートップケージを取り外します。これで、車の回路にアクセスできるようになります。上から、レシーバー、ESC(Electronic Speed Controller)、サーボを一度見ることができます。

裸のDonkeyCar 受信機は、B / C(バッテリー除去)回路を備えた4チャンネル受信機です。各チャネルは3線式コネクタを使用します。チャネルCH3とCH4は使用されません。 ESCは、バッテリーを入力、電源スイッチ、およびレシーバーチャネル1からの入力として受け取ります。サーボはレシーバーのチャネル0に接続されています。サーボはステアリングに使用されます。ジョイスティックを介して運転する場合、または調整する必要がある場合は、ステアリング角度を手動で調整できます。

2.アダプターを取り付けます

2本のネジとボディトップを取り外した後、2つの3Dプリントプラスチックアダプターが使用されます。同じネジを使用して、既存のクリップの代わりに2つのアダプターをねじ込む必要があります。2つのクリップを2つの3D印刷アダプターに交換した後、上部の木製ロバの車のプレートを取り付けることができます。

長いクリップを交換するアダプター次に、ベースボードプレートのカメラハンドルをねじ込みます。次に、各穴にプラスチック製のネジ部品を配置します。これらは、RaspberryPiとサーボコントローラーを所定の位置に固定するために使用されます。

3.サーボコントローラーとRPi

RPiとサーボコントローラーを木の板に取り付けます。アンテナの近くに金属製のネジを置きたくなかったので、RPiを固定するために結束バンドを使用することになりました。サーボコントローラをねじ込んだ後、RPiからサーボコントローラにI2Cバスピンを接続します。次に、小さなナイフを取り、ESCとサーボ3ピンワイヤーを一緒に保持しているジップタイを切断します。

外部サーボコントローラーに接続するときは、レシーバーへの両方の接続を切断し、後でDonkeyCarトップに取り付けるサーボコントローラーのチャネル0と1に接続する必要があります-プレート。

4.木の板

木製プレートをアダプターに取り付けます。次に、クリップを使用して、DonkeyCarプレートをマグネットシャーシアダプターに取り付けます。

ロバの車のナンバープレートを上に取り付け、短いUSBケーブルを使用してUSBバッテリーをRPiに接続します。スロットルケーブルとステアリングケーブルはプレートの開口部から突き出ており、ロバの車のプレートに取り付けられているサーボコントローラーのチャネル0と1に接続します。

5.追加のセンサー

標準構成の主な問題は、速度や障害物までの距離を測定するために使用されるセンサーがないことです。 RPiが3D加速度と回転を測定できるようにする6DOFMPU6050 IMUを追加しました。次に、シリアルポートにGPSを追加し、距離測定用のHCSR04センサーも追加しました。ただし、HCSR04は5V経由で動作するため、レベルシフターが必要です。

これで、ユニットのハードウェアステージが完了します。ロバカーは完全に:

を装備した4輪車に変換されました

a)単眼広角カメラ

b)サーボコントローラー。

c)6-DOFIMUセンサー

d)GPS

e)距離センサー

すべての追加センサーは、取得時にタイムスタンプが付けられ、深部神経ネットワークのトレーニングベクトルを増強するために使用されます。

追加のセンサーをサポートするには、manage.pyスクリプトを変更してこの機能を追加する必要があります。

IMUを使用するために、私は最初にDebianStretchでFXOS8700用のPythonライブラリを試しました。 RPiの起動バグが繰り返されたため、これはそのままでは機能しませんでした。そのため、ジャイロスコープも付属しているMPU6050を使用することになりました。

IMUコードをテストするには、以下のスニペットを使用してください。

IMUからインポートMPU6050
mu =MPU6050()
a =imu.run()
a #print answer

次のソフトウェアはMPU6050のvirtualenv内にある必要があります:

sudo apt install python3-smbus
pip install mpu6050-raspberrypi

IMUデータのログ記録をサポートするには、tubフォルダーの下のmeta.jsonファイルを拡張する必要があります。

{「入力」:[「cam / image_array」、「user / angle」、「user / throttle」、「user / mode」、「imu / acl_x」、「imu / acl_y」、「imu / acl_z」、「imu / gyr_x」、「imu / gyr_y」、「imu / gyr_z」]、「types」:[「image_array」、「float」、「float」、「str」、「float」、「float」、「float」、 「float」、「float」、「float」]}

manage.pyファイルも次のように変更する必要があります。

imu =Mpu6050()
V.add(imu、outputs =['imu / acl_x'、 'imu / acl_y'、 'imu / acl_z'、 'imu / gyr_x'、 'imu / gyr_y'、 'imu / gyr_z ']、threaded =True)
#データを保存するためのタブを追加
input =[' cam / image_array '、' user / angle '、' user / throttle '、' user / mode '、 'imu / acl_x'、 'imu / acl_y'、 'imu / acl_z'、 'imu / gyr_x'、 'imu / gyr_y'、 'imu / gyr_z']
types =['image_array'、 'float' 、 'float'、 'str'、 'float'、 'float'、 'float'、 'float'、 'float'、 'float']

最後に、GPSモジュールもユニットに追加しました。これは屋内では使用できませんが、WIFIネットワークに接続できるエリアでの屋外テストに追加すると便利です。

GPSデータにログインする必要がある場合は、IMUと同じ変更を実装する必要があります。

HSCR04距離センサーを使用するには、Python環境からRPI.GPIOライブラリを一度インストールする必要があります。

pi p install RPi.GPIO


これは、すべてのハードウェアの変更をまとめたものです。最終的には、次のようなDonkeyCarが作成されます。


ソフトウェア

ここでのアイデアは、RPiで実行されるオブジェクト検出用のAIパイプラインを実装することです。最初のステップは、外部デバイスに依存せずにRPi3で機能するオブジェクト検出DNNを展開することです。必要なソフトウェアをインストールすることから始めましょう。

1.DNNライブラリをインストールします

プロジェクトはTensorFlowとOpenCVを使用しています。簡単に言うと、Raspberry Piで推論を行うために、すでにトレーニングされたネットワークを使用します。重みがロードされた後、オブジェクトの検出と推論が各カメラフレームに対して実行されます。

pip install tensorflow [pi]
pip install matplotlib raspberry
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-devsudo apt-get install qt4-dev-tools
pip3 install opencv-python

指摘する必要があるのは、ウェイトをh5ファイルとしてロードするための比較的単純なワークフローを持つKerasとは異なり、TensorFlowが異なるファイル形式を使用することです。

sudo pip3 install keras –アップグレード

公式のTensorFlowモデルリポジトリのクローンを作成します。

git clone –recurse-submodules https://github.com/tensorflow/models.git

パスをエクスポートします:

export PYTHONPATH =$ PYTHONPATH:/ home / pi / tensorflow1 / models / research:/ home / pi / tensorflow1 / models / research / Slim

最後にすべてがインストールされたときと問題を再開する前に

#sudo shutdown -h now

を使用している場合は、#を非アクティブ化して仮想環境ワークスペースから抜け出します。

次のステップは、MobileNetV2SSDの重みに対応するProtobufferコンパイラをインストールすることです。

2.ProtoBufferコンパイラをインストールします

KerasはTensorFlowとは異なるファイル形式を使用しています。そのため、TensorFlowのネイティブ形式であるProtobuffersを処理する必要があります。

バージョン3.5.1をインストールしました

sudo apt-get install autoconf automake libtool curl
wget https://github.com/google/protobuf/releases/download/v3.5.1/protobuf-all–3.5.1.tar.gz
tar -zxvf protobuf-all–3.5.1.tar.gzcd protobuf-3.5.1
./configure

これをコンパイルするには、RPiでかなりの時間(約1.5時間)かかります。もう1つの解決策はクロスコンパイルですが、今のところは単純に保つ必要があります。問題:

作る

次に問題:

make check
sudo make install
cd pythonexport
LD_LIBRARY_PATH =../ src / .libs

最後にコンパイラをインストールします:

python3 setup.py build –cpp_implementation python3 setup.py test –cpp_implementationsudo python3 setup.py install –cpp_implementation

パスをエクスポートします:

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION =cpp
export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION =3
sudo ldconfig

最後に、コンパイラをテストするには、次のように入力します。

protoc

これで、私たちはうなり声を上げるように読まれました。これにより、ウェイトをTensorFlowが理解できる形式に変換できるようになります。

詳細を読む:ロバの車のガベージコレクター向けの自動運転AI


製造プロセス

  1. シミュレートされた都市環境下での複数の状況における自動運転車のリアルタイム動作計画
  2. 運用・保守のための運転教習
  3. 自律的な未来への準備
  4. コネクテッドカーに5Gは何を提供できますか?
  5. 安全性:未来の車の最優先事項
  6. 安全な集塵機操作のための7つの重要なヒント
  7. 自律技術のための3Dモーショントラッキングシステム
  8. 自律型ドローンスウォームの充電ポート
  9. ダイムラーとBMWが自動運転で協力する
  10. 自動運転のためのコンチネンタルパイオニアソリューション
  11. 作業環境保護装置:オイルミストコレクターシステム