Translate

2019年1月31日木曜日

ブログ記事「Inside a Donkeycar」を翻訳してみた

以下の文章は Inside a Donkeycar を勝手に翻訳したものです。

----

Inside a Donkeycar (Donkeycarの内部)



そして、私はラジコンカーを買い、手動運転をAIに置き換えました。それほど難しいことではありませんでした。ですが、これが誰かが以前にそのようなことをした成果の一部であることを、私は信じられませんでした。少なくとも「PIDコントローラの後にいくつかの回線を設けて実現しているんだろうなあ」ということと「衝突検出をともなう何らかのランダム化された動作を使って実現してるのかな」といったことを疑っていました。そして実際のニューラルネットワークをスピードコントローラとステアリングサーボに直接接続し、カメラだけでトラックを周回できることを夢見たことは一度もありませんでした。
では、今すぐにみなさんと共有しましょう。
 

Physical world (物理の世界)


初めにAnttiがいました、そして、さりげなく「物理世界が私を病気にする」と言いました。 当時私たちが笑っていたことと同様に、ソフトウェアを作ることはハードウェアと比べてかなり簡単で速いことを私たちに理解させました。 しかしそれは、物事を動かすための最低限のレベルではなく、私たちの志望に関するものでした。 車を走らせるためだけに、ハードウェアはまったく複雑ではありません。
 

Radio controlled car (ラジコンカー)


標準のラジコンカーには、車輪を駆動するための1つのモータ(Brushed DC motor)と、前輪を回転させるための1つのサーボモータ(Steering servo)があります。さらに、電子スピードコントローラ(ESC:Electronic Speed Controller)、バッテリ(Battery)、ラジオ受信機(Radio receiver)があります。 ラジオ受信機は車内部の「運転手」なので、取り除きます。

 

Inside a computer (コンピュータの内部)


これはすべてdonkeycarというオープンソースプロジェクトから始まっており、ここではプロジェクトが推奨するハードウェアを使用しています。 推奨ハードウェアは、小さなコンピュータ、バッテリーバンク、広角カメラとサーボドライバボードで構成されています。

バッテリーバンクはコンピュータ用です。車輪を駆動するための他のバッテリを調整する(DC-DCコンバータによる電圧電流調整が必要)よりも、別のバッテリを使用する方が簡単だからです。

サーボドライバボードはおそらくこれらの中で最も目につく電子部品です。サーボドライバボードの目的はESCとサーボモータにラジオ受信機と同じ言語で話すことです。 具体的には、安価な専用ハードウェアを使用して正確なPWM信号を生成することです。

上記のように、私たちの志望レベルはかなり高く、私たちはすべてのために3Dプリントマウントを設計しました。 ダクトテープとジップタイすべて使用することができます。 サポートされている車を見つけることができれば、当然のことながら公式 Donkeycar をマウントできます。

 



Software (ソフトウェア)


Donkeycarは車を走らせるのに必要なすべてのソフトウェアを含む高レベルライブラリです。 これはPythonで書かれており、デスクトップ上でニューラルネットワークをトレーニングするための自動車用ソフトウェアとユーティリティの両方を含んでいます。 私たちはすぐにそれをあちこちで修正することになりましたが、コア部分がかなり有用であることがわかりました。

Parts (パーツ)



駆動ソフトウェアは、パーツという名前のモジュールから構築されています。 各パーツは、呼び出されるたびに入力を受け取り、出力を返します。 たとえば、PiCameraパーツはカメラからフレームを返し、PWMThrottleパーツはスロットルを入力として使用し、それを使用してモータを制御します。

Sonarのようなカスタムパーツはすでにいくつかあります。Sonarは、車の前の物体までの距離を測定し、「衝撃までの時間」も秒単位で返します。 それは別のカスタムパーツEBrakeで使用され、スロットルとインパクトに時間がかかるため、調整されたスロットル値が返されます。 衝突が避けられない場合は、衝突を避けるために速度を落とす必要があります。 それはまた私達のサブウーファの部分に接続されているので、車はクラッシュに近づくと叫びます。

 

Core loop (コアとなるループ)


パーツは運転ループで互いに接続されています。運転ループは、設定されたパーツを指定された順序で永久にループする組み込み関数です。 それは新しいアクションのために新しいパーツを実験することを容易にします。 次の図は、現在の運転ループを視覚化したものです。

Artificial Intelligence (人工知能)


人工知能とは一体何ですか? 私は個人的に、よくある命令型条件付きコードから魔法のような深層学習ソリューションまで使用されている用語定義を見たことがあるので、自動的には意味がないと言うことができます。 デフォルトのDonkeycarコンテキストでは、人工知能は入力として単一の画像を取り、出力として2つの数(スロットルとステアリング)を予測するようにトレーニングされたニューラルネットワークを意味します。 だからそれは魔法の対局にあります。 ある状況では、PIDに続くラインがニューラルネットワークを打ち負かす可能性がありますが、それを本当に素晴らしいものにしているのは、トレーニングデータから学習する能力です。 しかし、それとは対照的に、デバッグとそれを使った推論は本当に困難です。今後の投稿では人工知能のトレーニングについて紹介します。


--------

ようは、Donkeycarの内部の概説です。

Donkeycarは、
  • RCカーの受信機から先を切り取っている
  • 受信機から先を搭載コンピュータで代用
  • コンピュータ内は予め定義されたパーツ郡を順番に運転ループで実行している
  • 自動運転はAIを使っている
というものである、と紹介しています。

個人的には、こんなブログ記事を読んでもたもたしてるより、まず作って動かしてみたほうが手っ取り早く理解できるのに..と思ってますが..

0 件のコメント:

既存アプリケーションをK8s上でコンテナ化して動かす場合の設計注意事項メモ

既存アプリをK8sなどのコンテナにして動かすには、どこを注意すればいいか..ちょっと調べたときの注意事項をメモにした。   1. The Twelve Factors (日本語訳からの転記) コードベース   バージョン管理されている1つのコードベースと複数のデプロイ 依存関係 ...