ROS2: Realsense+Jetson Nano(Eloquent/Docker Foxy)の環境構築
海洋ロボコンをやってた人です。
今回は、Jetson Nanoに接続したRealsense D435/D435iをROS2で使用するための手順を備忘録として記載していきます。
なぜまとめるかは以下です。
- Realsense SDKのビルドを公式通りにやっていると大変
- Realsense ROSのパッケージって何使えばいいか分からない
- Realsense ROSをFoxyで使いたい(後述:探すとブランチがある)
- Jetson NanoでFoxy使いたい(後述:Foxy OS/Dockerを利用)
- Jetson Nano のGPU使えてるか分かりづらい
また、自身の研究機体にもRealsenseを搭載しているため、環境構築手順およびどのパッケージを使用しているかを明記することも目的の一つです。
"もっとこうすれば簡単に使用できる"や"ここは違うのではないか"というご意見がありましたら、是非ご教授いただけますと幸いです。
※2023/02/26追記
本記事の「ROS2」表記、正しくは「ROS 2」です。
ROS2: Realsense+Jetson Nano(Eloquent/Docker Foxy)の環境構築
動作環境は以下の通りです。
- Jetson Nano B01
- ROS2 Eloquent
- Docker
- ROS2 Foxy
- Realsense D435i
Jetson Setup
上記公式サイトより、JetPack 4.6.1のイメージファイルをダウンロードします。
Installing JetPack > JETSON NANO DEVELOPER KITS > Download the SD Card Image
インストール後フォルダを解凍し、Raspberry Pi Imager
等でSDカードに書き込みます。
Jetson起動後に各設定を行い、nanoのインストールとsudo権限をNOPASSWD:ALL
へ変更
sudo visudo
sudo apt install nano
固定IP等も設定して、ラップトップからsshできるようしておく。
Settings > Brightness & Lock のブラックスクリーンもOFFにしておく。
動画を録画できるようSimpleScreenRecorder
もインストールしておく。
sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
sudo apt update
sudo apt install simplescreenrecorder
Realsense+Jetson Nano Eloquent
Realsense D435/D435iとJetson Nano EloquentでGPU処理でのRealsense動作/PointCloudを確認していきます。
- Install Jtop & Check GPU utilization
sudo apt install python3-pip
sudo pip3 install jetson-stats
sudo jtop
JetsonにROS2 Eloquentをインストール
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=amd64,arm64] http://packages.ros.org/ros2/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros2-latest.list'
sudo apt update
sudo apt install ros-eloquent-desktop
echo "source /opt/ros/eloquent/setup.bash" >> ~/.bashrc
sudo apt install python3-argcomplete
sudo apt install python3-colcon-common-extensions
sudo nano ~/.bashrc
# add "export ROS_DOMAIN_ID=89"
source ~/.bashrc
Realsenseに必要なパッケージをインストール&動作確認
RealsenseSDKのインストール等はJetsonユーザーとして有名なJetsonHacks
様のパッケージ、記事、Youtubeを見て行っていきます。
- RealsenseSDK & Swapfile
mkdir jetsonhacks
cd jetsonhacks
git clone https://github.com/jetsonhacks/installRealSenseSDK
cd ./installRealSenseSDK
./installLibrealsense.sh
cd ~/jetsonhacks
git clone https://github.com/JetsonHacksNano/installSwapfile
cd installSwapfile
./installSwapfile
- Intel RealSense Viewer(v2.53.1)での確認
realsense-viewer
3DViewで、GPU処理しつつ動作していることが確認できました。
- Realsense ROS2
RealsenseをROS2で使用するには、ros2_intel_realsense
のパッケージを使用します。
このパッケージを使用することで
Depth Camera D415, D435, D435i
Tracking Camera T265
をROS2で使用することができます。
cd ~/
mkdir -p ros2_ws/src
cd ros2_ws/src
git clone -b eloquent https://github.com/intel/ros2_intel_realsense.git
cd ~/ros2_ws
colcon build
- Realsense ROS2およびGPU使用の確認
cd ~/ros2_ws
. install/setup.bash
ros2 launch realsense_examples rs_camera.launch.py
rviz2でRGB Image, Depth Image, PointCloudを確認してみます。
Realsense+Jetson Nano Docker Foxy
- Dockerの確認
JetPackではデフォルトでdockerがインストールされているので、バージョン確認をする。
docker -v
Docker version 20.10.7, build 20.10.7-0ubuntu5~18.04.3
- Dockerを基礎から学ぶのに読んだ本
著者の「ほげさん」様、非常に理解しやすく勉強になりました。ありがとうございます。
JetsonにDocker ROS/ROS2イメージをインストール
JetsonにROS/ROS2のDocker Imageをインストールする一つの方法として下記を使用します。
sudo docker pull dustynv/ros:foxy-desktop-l4t-r35.1.0
sudo docker image ls # imageの確認
sudo docker container run -it --name ros2_foxy 9d63c8bdf23d #[IMAGE ID]
X11を使用したコンテナを作製します。
sudo docker container run -it --name ros2_foxy --runtime nvidia --net host --privileged -e DISPLAY=$DISPLAY -v /tmp/.X11-unix/:/tmp/.X11-unix 9d63c8bdf23d
--privileged
オプションを使用することで、ホストすべてのデバイスへアクセスできるようになります。
Realsenseに必要なパッケージをビルド
RealsenseSDKは先ほどと同様のリポジトリを使用しますが、Docker上では./installLibrealsense.sh
がエラーとなるため、ビルドしてSDKを準備します。
mkdir jetsonhacks
cd jetsonhacks
git clone https://github.com/jetsonhacks/installRealSenseSDK
cd ./installRealSenseSDK
./buildLibrealsense.sh
ここまでできたら、Jetson(ホスト)側で
xhost +
でXサーバーを実行するホストからのアクセス許可を行います。
続いて、Docker Containerに入り
sudo realsense-viewer
を立ち上げ動作確認をしてみましょう。
また上記の./buildLibrealsense.sh
は以下で代替可能かもしれません、こちらは検討中です。
sudo apt-get install ros-foxy-librealsense2
sudo apt-get install -y libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
sudo apt-get install -y libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev
Foxyで使用可能なRealsenseパッケージのインストール
ros2_intel_realsense
をFoxyで使用する場合は、refactor
ブランチを使用します。
# Jetson Nano B01 and D435/D435i
mkdir -p ros2_ws/src
cd ros2_ws/src
git clone -b refactor https://github.com/intel/ros2_intel_realsense.git
cd ~/ros2_ws
colcon build
またbashrc
にROS_DOMAIN_ID等を記述しておく。
sudo apt install nano
sudo nano ~/.bashrc
# export ROS_DOMAIN_ID=89
Docker FoxyとJetson EloquentでROS通信
Docker Foxy側とJetson Eloquentのホスト側でROS通信をしてみます。
下記の設定が必要かと思っていましたが、特に必要なさそうです。
- docker default bridge network
テストとしてDocker側とJetson側で下記の通信ができることを確認してみましょう。
ros2 run demo_nodes_cpp talker
ros2 run demo_nodes_py listener
確認ができればOKです。
Docker Foxy Container側でrealsenseのノードを起動し、Jetson Eloquent側で映像を描画してみます。
Docker Containerを出ると、STATUS: Exited
となるためsudo docker container start ros2_foxy
でコンテナを起動し、sudo docker attach ros2_foxy
で先程のコンテナに入ります。
cd ~/ros2_ws
. install/setup.bash
ros2 launch realsense_examples rs_camera.launch.py
- その他ROS/ROS2イメージインストールで試したこと
NVIDIAよりAI用のイメージが公開されているようで、イメージをpullしてみましたが、apt updateが通らなかった点や上記のほうが多様なros/ros2ディストリビューションを選べるため、今回はこちらをスルーしました。
- Dockerでよく使用したコマンドたち
# Dockerイメージの一覧表示
sudo docker image ls
# Dockerイメージの停止&削除
sudo docker image rm --force [IMAGE ID]
# Dockerコンテナの一覧表示
sudo docker container ps -a
# コンテナに名前をつけて起動
sudo docker container run -it --name ros2_foxy 45f7e3294c0d
# コンテナの起動と停止
sudo docker container start ros2_foxy
sudo docker container stop ros2_foxy
# コンテナの停止&削除
sudo docker container rm --force [CONTAINER ID]
# 起動中のコンテナに入る
sudo docker container exec -it ros2_foxy bash
sudo docker attach ros2_foxy
# コンテナからイメージを作成する: commit [元のコンテナ] [新規コンテナ]
sudo docker commit ros2_foxy ros2_foxy_rs
# Docker Networkの一覧表示
sudo docker network ls
以上。
2022/12月よりJetson Nanoが昨年の2倍以上の価格で再販売されるようになったので、Jetson NanoでRealsenseを使用する方/研究室の学生が増えるのかなと思いまとめました。
少しでも参考にしていただければ幸いです。
Discussion