Jetson Xavier NXでJetRacerを構築

![IMG_2882.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63450/85557747-6665-5db5-26e0-17b0587f7910.jpeg)

Jetson Xavier NXの上で、DockerベースでJetracerを構築する方法のまとめ。

## JetPack

JetPack4.6はTensorRT 8系になるので、TensorRT 7系のJetPack 4.5.1を使用する

https://developer.nvidia.com/jetpack-sdk-451-archive

## Docker

DLI用のDockerがいろいろなパッケージがインストール済みなので、これをベースにする。

```
sudo docker run  \
-it \
--rm \
--runtime nvidia \
--network host \
--volume ~/data:/nvdli-nano/data \
--volume /tmp/argus_socket:/tmp/argus_socket \
--volume ~/jetracer:/nvdli-nano/jetracer \
--device /dev/video0 \
--privileged \
nvcr.io/nvidia/dli/dli-nano-ai:v2.0.1-r32.5.0
```

## Dockerの起動確認

Jetson Xavier NXの`http://IPアドレス:8888`で、JupyterLabが起動している事を確認する。

|Password|
|:--|
|dlinano|

/hello_camera/csi_camera.ipynb を実行し、カメラ画像が表示される事を確認

![camera.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63450/d96f63e5-e970-f8ad-daaf-aabb10fe54ff.jpeg)

## I2Cの確認

```
sudo i2cdetect -y -r 8
```

![IMG_2878.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/63450/14a7e1af-f97e-f18e-6388-62800c87ac72.jpeg)


```
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- 3c -- -- -- 
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: 70 -- -- -- -- -- -- --         
```
## JetRacerのインストール

JupyterLabのTerminalを立ち上げて、JetRacerのインストール

```
cd /nvdli-nano/jetracer
git clone https://github.com/NVIDIA-AI-IOT/jetracer
cd jetracer
python3 setup.py install
```

Xavier NXのI2C Busnumは8を使う(Nanoは0)ので、Adafruit_Blinkaを最新版にUpdateでする。最新版はXavier NXのボードが識別できるようにUpdateが入っている。

```
cd /nvdli-nano/jetracer
git clone https://github.com/adafruit/Adafruit_Blinka
cd Adafruit_Blinka
python3 setup.py install
```


## Torch2TRTのインストール

Jupyterのターミナルから下記コマンドでインストール

```
cd /nvdli-nano/jetracer/
git clone https://github.com/NVIDIA-AI-IOT/torch2trt
cd torch2trt
python3 setup.py install --plugins
```

## Dockerを保存

この処理は、Dockerの中でおこなうのではなく、Dockerを起動した階層でおこなう。もう1つTerminalを起動し、起動したDockerのイメージをcommitする。

```
sudo docker ps
```

```
CONTAINER ID        IMAGE                                           COMMAND                  CREATED             STATUS              PORTS               NAMES
108cc5ed8a2e        nvcr.io/nvidia/dli/dli-nano-ai:v2.0.1-r32.5.0   "/bin/sh -c '/bin/ba…"   7 minutes ago       Up 3 minutes  
```

CONTAINER IDを指定してDockerをcommit。上記の場合は、CONTAINER IDは、`108cc5ed8a2e`。ユニークであれば省略可能なので、前から3桁の`108`を使用。

```
sudo docker commit 108 jetracer
```

起動中のDockerを停止する

```
sudo docker stop 108
```

## Dockerを再起動時に自動起動する設定(--restart always)で起動

```
sudo systemctl enable  docker.service
```

```
sudo docker run  \
-it \
--restart always \
--runtime nvidia \
--network host \
--volume ~/data:/nvdli-nano/data \
--volume /tmp/argus_socket:/tmp/argus_socket \
--volume ~/jetracer:/nvdli-nano/jetracer \
--device /dev/video0 \
--privileged \
jetracer
```



## カメラの初期化

```
camera.running = False
camera.cap.release()
```