DonkeyCar Part3:250ドル未満で自動運転を学ぶ

これはシリーズのパート3です。パート1および2へのリンクを次に示します。数日間の苦労の末、ようやくドンキーカーで地下の線路を自律的に走行できるようになりました!ここに短いビデオがあります:

 

だからここで私がつまずいたのです。MacからPiにモデルをアップロードし、「ドライブ」コマンドを実行すると、モデルの読み込みエラーが発生していました。ステップを再実行し続け、同じエラーが発生しました。ドンキーカーと新しいバージョンのTensorFlow(1.8)の古いバージョンを実行していることに気づくまでに数日かかりましたMacBook Pro上のTensorFlow 1.12のバージョン。また、Donkey CarのヘルプSlackチャンネルに質問を投稿し、新しいTensorFlowバージョン1.12で構築されたモデルがTensorFlowの古いバージョンでは動作しないことを確認しました。MacでTensorFlowをダウングレードする方法を見つけたら(1行のpipシェルコマンド)、トレーニングを再実行し、SCPを使用して新しいモデルをPiに転送しました。カメラのレンズキャップをつけたままにしていた…

約16Kの画像からなる比較的小さなトレーニングセットから始めました。TensorFlow 1.12ではトレーニングに55分かかりましたが、TensorFlow 1.8では75分かかりました。1.8は2018年4月にリリースされました。DonkeyCarイメージがすぐにアップグレードされ、これらのパフォーマンスの改善をすべて活用できることを願っています。また、トラックを反時計回りに走行するテストセットを使用していました。実際のレースでは、時計回りと反時計回りの両方の走行で車を訓練します。しかし、それはまた、モデルを構築する時間を追加します。

車はトラックを回避できますが、床のライトの反射や側面のその他の白い物体に簡単にだまされます。これは、床に白いテープを1本だけ使用しているためです。それはビジョンシステムが使用するのに十分な信号ではありません。しかし、妻が本当にロバの公式トラックが使用しているように、真ん中に黄色いストライプのある広い黒い「道路」を描くことを望んでいたとは思わない。

私がついに自動車を自律モードで動作させるようになったとき、それは非常に満足でした。しかし、それは少し「不気味」でもありました。私は実際に小さな脳に床の線をたどるように「教えた」。それはほとんど私の貧しい運転を模倣するように見えた。ストレートでスピードアップする方法を学び、タイトなカーブでスローダウンしました。それは本当にクールでした!

TensorFlowとKerasを使って仕事をしていましたが、手順の多くは少し抽象的でした。一度ロバ・カーで遊ぶようになったとき、物事はより理解しやすくなりました。システムの長所と短所の両方が明らかになりました。また、トレーニングシステム(私のMacBook)と推論システム(Pi)の間でPythonとTensorFlowライブラリのバージョンを同期させることが重要なステップであることに気付きました。

すべての手順を一度行った後、ほとんどのコンポーネントを理解し、他の人がドンキーカーを実行するために知っておくべき概念を理解するために使用できる「コンセプトマップ」を作成しています。

私は今、学んだすべてのステップをたどり、そのステップを、地元のCoderDojoクラブのコンセプトカードを作成した以前の作業と統合しています。これは、ブログ投稿の上部にある図です。コンセプトマップの各ボックスは、最終的にアクティビティと質問が前面に、回答が背面にある1/2枚のラミネート紙になります。これらはビットサイズの学習であるため、CoderDojoでは「寿司カード」と呼ばれます。「Electric Motors」コンセプトカードのサンプル画像を次に示します。

私の友人Jon Herkeは、ドンキーカーを使用して、AIとロボット工学について子供たちに教えることを目標とする「AIレーシングリーグ」を構築することにも興味があります。ハックデイの基礎と、10週間、4時間/週のサマーキャンプタイプのプログラムを構築できるかどうか、ご期待ください。私たちは、これらのプログラムに少女や恵まれない若者を巻き込むことを望んでいます。あなたが私たちが始めるのを手伝うことに興味があれば教えてください。

DonkeyCar Part2:トレーニングデータの構築、調整、および生成

DonkeyCar(ロバ車) Part2:トレーニングデータの構築、調整、および生成

これは、ロバ車の3部構成シリーズのパート2です。これがパート1パート3です。ではパート1、私は私の新しいドンキーカーが稼働してラズベリーパイに基づいて、カメラの接続作業を持ってしまったかについて話しました。カメラをRPi Cam Web Interfaceでテストし、家の1階を走り回って車の感触と操作方法を確認しました。

このモードでは、PiはWebサーバーの背後にある携帯カメラであり、Webページにビデオ画像を送信していました。RCカーは、同梱されている2.4 Ghzコントローラーによって完全に制御されていました。RPi Cam Web Interfaceソフトウェアを実行するには、Piでターミナルを開き、githubサイトからコードをダウンロードしました。次に、Webサーバーを起動するstartup.shスクリプトを実行しました。

カメラで画像がキャプチャされてから、Webページで目の前に表示されるまでにどのくらいの遅延があるのか​​興味がありました。遅れは無視できたので、ウェブページの画像を見るだけで車を運転できました。これは、カメラとPi間の入出力が高速であり、WiFiチップを介したWebブラウザーへの画像の変換が高速であることを意味しました。基本的に、リアルタイムのリモートビデオドライビングを行うのに十分な馬力がPiにあることが証明されました。

次に、RCカーに付属の2.4GHzレシーバーからコネクターを取り外し、Amazonに注文したサーボコントローラーに接続を移動しました。このサーボコントローラーボードは最大16個のサーボを制御するように設計されていますが、必要なサーボは2つだけです。1回はスピードのため、もう1回は車の回転のためです。また、サーボコントローラーからPi 40ピンGPIOバスに4本のワイヤーを接続する必要がありました。これらの接続の写真は次のとおりです。

次のステップは、ステアリングと加速度計のキャリブレーションです。これを行うには、PiにSSH接続してキャリブレーションを実行する必要がありました。Electronic Speed Controller(ESC)の多くは少し異なるため、このプロセスは少し注意が必要です。こちらのロバカーサイトに文書化されています。私の「STOP」周波数が正しくないため、車を後進させることができないようです。最終的な結果は、スロットルのパラメーターと車のステアリングをエンコードする構成ファイルです。

これが完了したら、テストトラックを回る準備ができました。妻の悔しさの多くに、私は地下の家具を部屋の片側に移動し、地下の床に白い電気テープを置いた。床にクールなエポキシコーティングを施しましたが、白いテープのコントラストは良好でした。

また、床のライトの多くの反射を見ることができます。トレーニングプロセスでは、光の反射を無視し、床の白いテープにのみ「注意」をすることを学ばなければなりません。注意は、ディープラーニングの重要な概念です。

次に、壁のプラグからPiを取り外し、Amazonで購入した新しい6800 mAHパワーパックを使用して電源を入れました。プラットフォームの下にパワーパックを固定するためにテープを使用しました。ESCからのGNDおよびVCCワイヤは、RCカーで使用される2.4GHzレシーバーのデジタル回路に電力を供給することに注意してください。ただし、この電流はPiに電力を供給するのに十分ではありません。テストとして、Piの実行中にUSP電流計を車に接続しました。結果は下の写真にあります:

トレーニングデータの生成

車をすべて組み立てたら、トレーニングデータセットを生成する準備ができています。次に、PiにSSHを実行し、ドライブプログラムを起動しました。

$ python manage.pyドライブ

これは、カメラの内容を表示するWebサーバーを起動するpythonプログラムであり、トレーニングセットをキャプチャするためのコントロールも提供します。ドライブプログラムが実行されたら、任意のWebブラウザーに移動し、ポート8887を使用して車のIPアドレスを入力できます。今度は難しい部分です。トレーニングセットを作成するには、トラックを10回運転しなければなりませんでした!

問題は、キーボードのキーで車を制御することはできましたが、操縦するのが非常に困難だったことです。また、Webインターフェースの「ポインター」を試しましたが、操縦するのも困難でした。最後に、携帯電話を取り出して、電話のブラウザーでドンキーカーのWebページを表示しました。Webブラウザーは、スマートフォンの前方および側方の傾きを検出するのに十分なほどスマートであり、これを速度と回転に変換します。非常に賢い!約1時間の練習で、コースを回ることができました。その後、「記録開始」を押して、約10周後に「記録停止」を押しました。これが完了したら、Donkey CarにSSHで接続し、ディレクトリを「tub」フォルダーに変更しました。そのフォルダーには、約30Kの.jpgおよび.jsonファイルがありました。各JSONファイルには、画像への参照、タイムスタンプ、および浮動小数点数としての加速とステアリングがありました。これはトレーニングデータです。

JSONファイルのサンプルは次のとおりです。

{
「user / angle」:0.18989955357142868、
「user / throttle」:0.7175781250000001、
「user / mode」:「user」、
「cam / image_array」:「1000_cam-image_array_.jpg」、
「timestamp」:「2019–01– 05 17:09:35.184483”
}

そのJSONファイルに対応する画像を次に示します。

その後、トレーニングのためにドンキーカーからラップトップに画像をコピーしました。これについてはパート3で説明します。

DonkeyCar Part1: DIYロボット工学によるAIコミュニティの構築

DonkeyCar(ロバ車) Part1: DIYロボット工学によるAIコミュニティの構築

使用DIY机器人构建AI社区

これは、ロバ車の3部構成シリーズの最初のものです。ここに、パート2パート3へのリンクがあります。

私は、ほぼ4年間、CoderDojoプログラムを通じて子供のコンピューターサイエンスを教えるためのロボットを構築してきました。これはやりがいのある経験であり、Arduinoキットとシンプルなロボットの構築について多くのことを学びました。私は8〜18歳の子供向けの「学習ラダー」を作成しており、私の作品はThe Works Museumの5歳の子供たちに使用されています。DIYプロジェクトを中心にSTEMカリキュラムを作成することは楽しく、コミュニティを見つけるのに最適な方法です。私の作品のいくつかは、Moving RainbowCoderDojo Robotsサイトで見ることができます。

新しい年に、Raspberry Pi、Python、および機械学習に基づいたより複雑なロボットを含めるように快適ゾーンを拡張することにしました。私の友人であるArun Batchuも、非常にクールなNVIDIA Jetson Xavier開発キットの購入でこれを奨励しています。残念ながら、私の小さなロボットは、この90億トランジスタシステムをチップ上で実行するのに十分なほど強力ではありません。これは、最新の画像認識とエッジコンピューティングのホットトピックの両方をブラッシュアップする良い方法だと思いました。地元のDIYロボットグループを構築することは、ミネアポリス地域でより強力なAIコミュニティを構築する方法でもあります。

Donkey Carプロジェクトに慣れていない人にとっては、リアルタイムの画像認識と少しのAIの基礎を人々に学ばせるためのオープンソースDIYプロジェクトです。車の部品は約250ドルです。これは私のArduinoロボットよりも10倍高価ですがより強力です。ベイエリアでは、DIY Robocarsのミートアップに2,500人以上が参加し、ドンキーカースラックワークスペースには、車、トラック、アルゴリズム、機械学習モデルおよび関連トピックに関する何千もの投稿があります。ミネソタ州にはこのようなコミュニティはまだありませんが、これを変更したいと考えています!

以下は、私がロバ車の構築を開始するために行った作業のジャーナルです。彼らが言うように…私たちはレースに出発です!

Paul McCullughやThomas Richterを含むSwarm64の偉人たちが、前回のMinneAnalyticsカンファレンスでRaspberry Pi 3 B + Kitを「プレゼント」しました。Swarm64は、FPGAを使用したRDBMSシステム用の優れたアクセラレーターを作成します。より高速なリレーショナルデータベースが必要な場合は、お電話ください!

Raspberry Piキットには、PI OSを搭載した32GBマイクロSDカード、電源ブリック、GPIOブレイクアウト、ケース、およびその他の部品が含まれていました。27ドルのSainSmart広角魚眼カメラPCA9685 16チャンネル12ビットPWMサーボモータードライバーと、90ドルの新しいRCカー(まだテストしていません)を追加しました。Thonny Python IDEを使用してGPIOを使用してLEDを点滅させてPiをテストし、LEDストリップを制御するDMAライブラリを見つけました。また、セントルイスパークのマイクロセンターで2枚の追加の32GB SDカードをそれぞれ4.99ドルで購入しました。これは、Amazonで見つけられるよりもずっと少ない。Microcenterは本当に素晴らしいです!バックアップを作成できるように、いくつかのマイクロSDカードを入手することをお勧めします。

Arduinoで「C / C ++」で何年も仕事をした後、Piで始めるのがどれほど大変だったかに少し驚きました。適切な順序でインストールする必要がある多くのライブラリと、考慮する必要があるPythonの多くのバージョンがあります。Thonney Python IDEは素晴らしかったが、TensorFlowで真剣な仕事をするために必要なライブラリのほとんどが欠けていた。幸いなことに、ライブラリがセットアップされると、コーディングは非常に高速になります。物理デバイスを使用してハードウェアプログラミングを行っている場合、コードに変更を加えてArduinoにアップロードするときに「遅れ」はありません。プログラムは即座に実行されます!これは、特に大規模なプログラムがある場合に、開発をスピードアップできると思います。

さて、Donkey Carについて…Donkey CarのWebサイトは非常によくできていますが、UNIXとPiの両方について非常に強力な背景を想定しています。彼らが指示を出したとき、それは私が私の新しいPiでまたはリモートコンピュータから物事を実行する必要があることは明らかではなかった。さまざまなPythonおよびTensorFlowライブラリをPiでネイティブに動作させるために、約2日間を費やしました。私は進行中に多くを学びましたが、行き止まりであることが判明しました。わずか2GBまたはRAMのPiは、あまりにも小さくて、大胆な努力なしに大規模なTensorFlow-Kerasシステムをコンパイルできません。。16GBのメモリを搭載したMacでも、BazelベースのTensorFlowコンパイルシステムでバグに遭遇しました。Bazelビルドフレームワーク自体は非常に複雑であり、TensorFlowモンスターをコンパイルするにはBazelが必要です。makeはそれをカットしませんでした。私はあきらめようとしていました。私のような25年のUNIXの経験を持つ人がこのものをインストールできなかった場合、14歳の学生をどのように訓練したいと思うでしょうか

その後、私はドンキー車で行われるすべてがヘッドレスPi(モニターなし、SSHアクセスのみ)を想定し、LinuxおよびPiの専門家によって3年間にわたって慎重に作成されたディスクイメージを使用ていることに気付き始めました。Piイメージで起動する必要があり、他のすべてが機能します!Piを開発システムとして使用することはできません。TensorFlowのドキュメントこれを言ってますが、私はRTFM をしませんでした。

Donkeyイメージ(ディスクイメージを含むzipファイル)に基づいてPiのブートイメージを作成する方法を理解するのに少し苦労しました。NOOBSシステムを試した後、balenaEtcherアプリケーションがまさに私が必要とするものであることに気付きました。このアプリケーションは、WindowsまたはMacで非常に簡単に使用できます。Donkey Carサイトから画像zipファイルをダウンロードし、新しいSDカードを挿入してbelenaEtcherアプリケーションを実行するだけです。画像ファイルの入力を求められます(zipファイルを解凍する必要はありません)。SDドライブが自動的に検出されたので、[Flash]をクリックしました。失礼!ほんの数分で、検証済みのディスクイメージができました。

Piに新しいSDで再起動した後、ログインしてwifi設定変更できました。もう1回再起動すると、新しいドンキーカーにsshする準備ができました。また、静的IPアドレスを設定して、毎回同じIPアドレスに再接続するようにしました。「/ home / pi / env」ディレクトリの下のファイル数は、ほぼ13,000のファイルを明らかにしました。面倒な詳細がすべて必要な場合は、コメント対応のGoogleドキュメントファイルにここに入れます。そのファイルにコメントを追加してください。

追加の進捗状況を確認し、他の部品が到着した後、更新を投稿します。キャリブレーション手順を実行するためにそれらが必要になります。