Jetson Xavier NXでJetRacerを構築


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

JetPack

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

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 を実行し、カメラ画像が表示される事を確認

I2Cの確認

sudo i2cdetect -y -r 8

     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()