DonkeycarにIntel(R) Realsense T265 を使って経路追跡させる機能がついたらしい


[Donkeycar上でIntel(R) Realsense T265 のデータを読み取るためのパーツクラス](https://github.com/coolerking/donkeypart_t265) を昔作成したが、久しぶりに公式ドキュメントを読むと、T265 のデータをそのまま使って経路追跡（手動運転で１周したコースをそのままトレース）する機能がふかされていることに気づいた。

以下、[公式ドキュメント該当ページ](https://docs.donkeycar.com/parts/path_following/) を翻訳したものである。

-----

## Intel (R) Realsense T265センサによる経路追跡

Donkeycarは、標準的なカメラを使ってネットワークを学習させながら運転するのではなく、Intel(R) Realsense T265「トラッキングカメラ」を使って経路を追跡することをサポートしています。このアプリケーションでは、手動で一度だけ道を走れば、Donkeycarはその道を「記憶」し、自律的にそれを繰り返すことができます。

Intel T265は、ステレオカメラと内蔵の慣性計測ユニット（IMU）、そして独自のMyriad Xプロセッサを組み合わせて、視覚的慣性オドメトリを行います。これは、移動しながら周囲の光景を見て自分の位置を把握し、それをIMUのセンシングと関連付けることで自分の位置を特定し、GPSセンサと同様にX、Y、Z位置をドンキーに出力するという凝った方法です（ただし理想的にはもっと正確に、センチメートルの精度で出力されることが必要です）。

> 注意
> Realsense T265は Nvidia Jetson Nanoでも使用できますが、Raspberry Pi(メモリ4GB以上のRPi 4を推奨)を使用すると、もう少し簡単にセットアップが可能です。
> また、Intel Realsense D4XXシリーズは、通常のカメラとしてDonkeycarでも使用できますので(深度センシングデータの利用は近日中)、準備ができ次第その手順も追加します。

 -[Tawn Kramer 氏によるオリジナルのT265 経路追跡コード](https://github.com/tawnkramer/donkey)

### ステップ1：Ubuntuマシン上にLibrealsenseをセットアップ

RPi上で最新版のRaspberry OS (Busterでテスト済) を使う場合、[こちら](https://github.com/datasith/Ai_Demos_RPi/wiki/Raspberry-Pi-4-and-Intel-RealSense-D435) の手順でIntelのRealsenseライブラリ(Librealsense)と依存関係を設定します。これらの手順は、別のRealsenseセンサについて述べていますが、T265でも同様に動作します。また、[ビデオによる説明](https://www.youtube.com/watch?v=LBIBUntnxp8) もあります。

### ステップ2：Donkeycarのセットアップ

[こちらの標準的な手順](https://github.com/acrobotic/Ai_Demos_RPi/wiki/Raspberry-Pi-4-and-Intel-RealSense-D435) に従ってください。経路追跡では、Tensorflowをインストールする必要はありませんが、numpy/upgradeをインストールしてから `pip install -e .[pi]` を実行します。

### ステップ3：Donkeycarの経路追跡アプリを作成

```bash
donkey createcar --path ~/follow --template path_follow
```

### ステップ4：config 設定の変更/確認

```bash
cd ~/follow
sudo nano myconfig.py
```

デフォルト値のまま同意するか、好みに合わせて調整してください（例："throttle"や"steering"、PIDなど）。
変更した行をアンコメント(#を削除)します。
nano で cntrl-o を押してファイルを保存し、cntrl-x を押して終了します。

### ステップ 5：Donkeycar 経路追跡アプリの実行

以下のコマンドを実行します。

```bash
ssh pi@<your pi’s IP address or "raspberrypi.local">
cd ~/follow
python3 manage.py drive
```

アプリの実行中に表示される出力を見るために、ターミナルを開いておいてください。

T265が見つからないというエラーが表示された場合は、センサを一旦抜き、挿し直して再試行してください。
ゲームパッドがオンになっており接続されていることも確認してください(青いランプがコントローラについています）。

起動したら、ノートパソコンでブラウザーを開き、URLバーに次のように入力します： `http://:8890`

運転すると、Webインターフェースに経路が赤い線で、ロボットの位置が緑の円で描かれます。もし、緑の点は表示されるが、赤い線が表示されない場合は、パスファイルがすでに書き込まれていることを意味します。
`donkey_path.pkl` を削除( `rm donkey_path.pkl` )、再起動すると、赤い線が表示されるはずです。

PS4 ゲームパッドの場合、次のような操作を行います:
 
| control           | action                   |
|:------------------|:-------------------------|
| share             | toggle auto/manual mode  |
| ○                | save_path                |
| △                | erase_path               |
| ×                | emergency_stop           |
| L1                | increase_max_throttle    |
| R1                | decrease_max_throttle    |
| options           | toggle_constant_throttle |
| □                | reset_origin             |
| L2                | dec_pid_d                |
| R2                | inc_pid_d                |
| left_stick_horz   | set_steering             |
| right_stick_vert  | set_throttle             |

### ステップ6：運転上の注意事項

1. ロボットのスタート地点に印をつけてください。スタートするたびに、必ずそこに戻してください。
1. 車をループ状に走らせます。赤い線が道を示しています。
1. PS3/4コントローラの○を押して、経路を保存します。
1. ロボットをスタート地点に戻します。
1. 次に、PS3コントローラの "select "ボタン、またはPS4コントローラの "share "ボタンを2回押し、パイロットモードにします。これで道なりに走り出します。速くしたり遅くしたりしたい場合は、`myconfig.py` ファイルの次の行を変更します：

```bash
THROTTLE_FORWARD_PWM = 400
```

`myconfig.py` の下の方に、微調整するための設定項目があるので確認してみてください。
PID値、マップオフセット、スケールなどです。
私のリポジトリにある `myconfig.py` をダウンロードして使うことから始めるといいかもしれません。

### ヒント

- 起動すると、緑の点がボックスの左上隅に表示されます。中央の方がいいかもしれません。その場合は、`myconfig.py` ファイルの `PATH_OFFSET = (0, 0)` を `PATH_OFFSET = (250, 250)` に変更します。
- 小さなコースの場合、パスが小さすぎてよく見えないということがあるかもしれません。その場合は、`PATH_SCALE = 5.0` を `PATH_SCALE = 10.0` に変更します（必要であれば、それ以上の値でもかまいません）。
- 自動モードで実行しているときは、緑のドットが青に変わります。
- デフォルトでは0.3mごとにパスポイントを記録するようになっています。より滑らかにしたい場合は、`myconfig.py` のこの行でより小さな数値に変更することができます： `PATH_MIN_DIST = 0.3`

-----

donkeycarアプリのテンプレートとして組み込まれているようで、RealsenseをRaspberryPi/JetsonNano上で認識できるようにすれば、すぐに使えるようだ。

ただ..どうもこの経路 **追跡** なので、機械学習ベースの自動運転ではなくなるようだ。
Donkeycar学習データの収集するならtubデータ化するコードが `manage.py` 上で vhiecle オブジェクトに add されるはずが、一切書かれていない。

それに、最近の物価動向同様 Intel(R) RealSense T265 の価格が下がらない(2022/3/16時点)。というか、楽天とかのネット通販だと８万円とか初売価格より上の値段（自分は消費税込みで５万円で買った記憶がある）になっている。

つまり既存のDonkeycar本体を制作するよりもT265のほうがお金がかかる（初売価格でも上だったけど..）。

T265ベースのDonkeycarを作る人は、出てくるのかは、正直微妙なところだとおもうが...