Jetson Xavier NXでDonkeyCar

#Jetson Xavier NXでDonkeyCar（まだ編集中です。）
|ソフトウェア   |バージョン|
|-----|-----|
|JetPack|4.4.1|
|DonkeyCar|3.5.1|
|librealsense|2.40.0|

###DonkeyCar
セットアップの流れはここにある通り。
https://docs.donkeycar.com/guide/robot_sbc/setup_jetson_nano/

```
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential python3 python3-dev python3-pip python3-pandas python3-h5py libhdf5-serial-dev hdf5-tools nano ntp
```
```
pip3 install virtualenv
python3 -m virtualenv -p python3 env --system-site-packages
echo "source env/bin/activate" >> ~/.bashrc
source ~/.bashrc
```
numpy1.13.3だとdonkey createcar実行時とmanage.pyでdepthイメージを保存する際に
エラーになるのでnumpyを1.17.3にアップグレードする。

```
pip install numpy==1.17.3   
```

####DonkeyCarのインストール
```
mkdir -p ~/projects; cd ~/projects
Get the latest donkeycar from Github.
git clone https://github.com/autorope/donkeycar
cd donkeycar
git checkout maste
pip install -e .[nano]
```

アプリケーションの作成とmyconfig.pyの編集

```
$ donkey createcar --path ~/mycar
$ cd mycar 
$ vi myconfig.py
CAMERA_TYPE = "D435"   # (PICAM|WEBCAM|CVCAM|CSIC|V4L|D435|MOCK|IMAGE_LIST)

PCA9685_I2C_BUSNUM = 8

REALSENSE_D435_RGB = True       # True to capture RGB image
REALSENSE_D435_DEPTH = True     # True to capture depth as image array
REALSENSE_D435_IMU = False      # True to capture IMU data (D435i only)
REALSENSE_D435_ID = None        # serial number of camera or None if you only ha

```


##realsense D435
[t_kumazawa](https://qiita.com/t_kumazawa)さんの[DonkeyCarをREALSENSEで作る](https://qiita.com/t_kumazawa/items/91fa9f8a49b3b899dec9#depth%E3%81%AE%E7%94%BB%E5%83%8F%E3%82%92%E5%AD%A6%E7%BF%92%E3%81%AB%E4%BD%BF%E3%81%86%E6%94%B9%E9%80%A0)を参考させて頂きました。
###Librealsense
```
$ git clone https://github.com/JetsonHacksNano/installLibrealsense.git
```
installLibrealsense.shだとpyrealsense2がインストールされないのでソースからビルドする。

```
$ git clone https://github.com/JetsonHacksNano/installLibrealsense.git
```

buildLibrealsense.shを編集する

```
-LIBREALSENSE_VERSION=v2.31.0
+LIBREALSENSE_VERSION=v2.40.0
-NVCC_PATH=/usr/local/cuda-10.0/bin/nvcc
+NVCC_PATH=/usr/local/cuda-10.2/bin/nvcc
```
buildLibrealsense.sh実行

```
$ ./buildLibrealsense.sh
```

###DonkeyCarを実行してみる。
```
$ cd mycar 
$ python manage.py drive --js  
using donkey v3.1.5 ...
loading config file: /home/nx/mycar/config.py
myconfig myconfig.py
loading personal config over-rides from myconfig.py
config loaded
cfg.CAMERA_TYPE D435
Depth Scale is:  0.0010000000474974513
Adding part RealSense435i.
Starting Donkey Server...... you can now go to nx.local:8887 to drive your car.
Adding part LocalWebController.
Adding part ThrottleFilter.
Adding part PilotCondition.
Adding part RecordTracker.
Adding part ImgPreProcess.
Adding part DriveMode.
Adding part AiLaunch.
Adding part AiRunCondition.
PWM Steering created
Init ESC
PWM Throttle created
Adding part PWMSteering.
Adding part PWMThrottle.
Tub does NOT exist. Creating new tub...
New tub created at: /home/nx/mycar/data/tub_5_20-11-29
Adding part TubWriter.
Starting vehicle at 20 Hz
```
キャプチャしたRGBイメージとdepthイメージ。
![203_cam-image_array_.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148248/bcf300b7-8c4a-c9da-8edb-247c4b4394bb.jpeg)

![203_cam-depth_array_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/148248/9938809c-3afb-f529-ccff-7506229178a2.png)


##母艦を作る
```
$conda env create -f install/envs/ubuntu.yml
CondaHTTPError: HTTP 500 INTERNAL SERVER ERROR

$conda config --set ssl_verify yes 
```