Jetson OrinでROS2 Humble入門
Jetson Orin x ROS2 Humble
Jetson OrinでROS2(ロボットソフトウェア開発のミドルウェア)をセットアップして色々試してみましたのでメモしておきます。
Jetson Orinの基礎的なセットアップに関しては以下記事参照ください。
JetsonのベースソフトのJetPackのバージョンはJP6.0です。詳細バージョンは、以下コマンドで確認できます。
$ dpkg-query --showformat='${Version}' --show nvidia-l4t-core
36.3.0-20240506102626
また、本記事ではROS2の基礎知識については扱いませんので、ご了承ください。
ROS2 Humbleインストール
ROS2は、Ubuntuのバージョンに合わせてセットアップする必要があります。JP6.0は、Ubuntu 22.04なのでROS2 Humbleをセットアップします。
Dockerを使った方法などもありますが、今回は素のUbuntuにROS2をインストールします。また、ROSは、uvやcondaなどのPythonのパッケージ管理ソフト、仮想環境ソフトと一緒に使うのは煩雑になるので、Pythonも素のまま使います。
ROS2 Humbleは、以下公式サイトの通りにコマンドを実行すればインストールできました。
以下コマンドです(コピペしやすいように最初の$
を削除しています)。
sudo apt install -y software-properties-common
sudo add-apt-repository universe
export ROS_APT_SOURCE_VERSION=$(curl -s https://api.github.com/repos/ros-infrastructure/ros-apt-source/releases/latest | grep -F "tag_name" | awk -F\" '{print $4}')
curl -L -o /tmp/ros2-apt-source.deb "https://github.com/ros-infrastructure/ros-apt-source/releases/download/${ROS_APT_SOURCE_VERSION}/ros2-apt-source_${ROS_APT_SOURCE_VERSION}.$(. /etc/os-release && echo $VERSION_CODENAME)_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb
sudo apt update
sudo apt install -y ros-humble-desktop
sudo apt install -y ros-dev-tools
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
一通り実行したら、新しいターミナルを開きます。
ROS2 Humble活用法
以下を試していきます。
- シミュレーションでカメを動かす
- USBカメラを動かす
- Intel Realsense(3Dセンサ)を動かす
- LeRobot SO-101(ロボットアーム)を動かす
- yolo_ros(AI画像認識)を動かす
カメ動かす
ROSはセットアップしたら、チュートリアルとしてカメを動かすのが恒例なので、カメを動かしてみます。
新しいターミナルを開いて、カメを動かすソフト(turtlesim)をセットアップします。
$ sudo apt install ros-humble-turtlesim
turtlesimノードを起動します。
ros2 run turtlesim turtlesim_node
テレオペ(遠隔操作)のノードを起動します。
ros2 run turtlesim turtle_teleop_key
キーボードでカメを動かせます。
USBカメラ
続いて、ROS2でUSBカメラを動かします。
USBカメラを扱うROS2パッケージをインストールします。
$ sudo apt install -y ros-humble-v4l2-camera
カメラノードを起動します。
$ ros2 run v4l2_camera v4l2_camera_node
可視化するソフト(rqt_image)を起動します。
$ ros2 run rqt_image_view rqt_image_view
ポチポチTopicを設定するとUSBカメラの画像を表示できます。
rviz2というROS2の代表的な可視化ソフトを起動して、画像表示します。
$ rviz2
Intel RealSense
家に転がっていた、Intel RealSense D405をROS2で動かします。
公式のJetsonでのインストールガイドを参考にセットアップします。
以下コマンドでRealSenseのSDKのセットアップできます。
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key F6E65AC044F831AC80A06380C8B3A55A6F3EFCDE
$ sudo add-apt-repository "deb https://librealsense.intel.com/Debian/apt-repo $(lsb_release -cs) main" -u
$ sudo apt-get install librealsense2-utils
$ sudo apt-get install librealsense2-dev
ビュワー(realsense-viewer)で動作確認します。
$ realsense-viewer
続いて、ROSのパッケージをインストールします。
$ sudo apt install ros-humble-realsense2-*
以下コマンドで3次元点群を可視化します。
$ ros2 run realsense2_camera realsense2_camera_node --ros-args -p pointcloud.enable:=true
$ rviz2
点群、何故か色付きの点群は可視化できませんでした。多分ROSパッケージのバージョンの問題とかだと思います。自分でビルドすれば多分直ると思いますが、ROSではよくあることなので次に行きます。
LeRobot SO-101
ロボットアーム SO-101をROSで制御します。SO-101の基本的なセットアップは以下記事の通り実施した前提となります。
SO-101のROSパッケージはいくつかありましたが、その中でも実機で動かせて良さそうな以下を使用しました。
今回は、自分でROSのパッケージをビルドする必要があるので、まずはROS2のビルド環境をセットアップします。[公式のチュートリアル](Using colcon to build packagesを参考にします。
以下必要なソフトのインストールからビルドまで、コマンドを実行していきます。
$ sudo apt install python3-colcon-common-extensions
$ mkdir -p ~/ros2_ws/src
$ cd ~/ros2_ws/src
$ git clone https://github.com/AgRoboticsResearch/Lerobot_ros2
$ cd Lerobot_ros2
$ rosdep install --from-paths src --ignore-src -r -y
$ cd ~/ros2_ws
$ colcon build
$ echo "source $HOME/ros2_ws/install/setup.bash" >> ~/.bashrc
コマンドの詳細は説明しませんので、気になる方は調べたりAIに聞いたりしてください。
足りていないライブラリを素のPythonにインストールします。
$ pip3 install pyserial
$ pip3 install feetech-servo-sdk
$ pip3 install deepdiff
キャリブレーションをします。以下実行すると、ロボットが、いきなりSO-101のMiddleの姿勢になるので、注意して実行してください。
$ ros2 run so101_hw_interface so101_calibrate --ros-args -p port:=/dev/usbserial_lerobot_follower
1つずつ、Min, Maxまでモータを可動させます。ここはReLobot単体のキャリブレーションと同じ流れです。
以下コマンドでSO-101のノードを起動します。port
は、udevルールで固定してあるデバイス名を入力します。
SO-101ノード起動
$ ros2 run so101_hw_interface so101_motor_bridge --ros-args -p port:=/dev/usbserial_lerobot_follower
ロボットの可視化
$ ros2 launch so101_follower_description display.launch.py \
use_gui:=false \
joint_states_topic:=/so101_follower/joint_states
ジョイントの制御
$ ros2 run joint_state_publisher_gui joint_state_publisher_gui \
--ros-args -r /joint_states:=/so101_follower/joint_commands
ジョイントを制御すると、実機とRviz2の画面が連動して動作します。
あとは、ROSの有名な軌道生成ライブラリ、MoveItでもSO-101の制御をしようとしましたが、MoveItのPythonラッパーのビルドが必要だったり、色々準備が必要そうなので、MoveItに関してはまた試したら追記したいと思います(追記しました)。
LeRobot SO-101 MoveIt
※ 注: 相当挙動が怪しいので非推奨です。使用する場合は自己責任でお願いします
MoveItでLeRobot SO-101を動かす方法です。
必要なパッケージをインストールします。
$ sudo apt install ros-humble-topic-based-ros2-control
$ sudo apt install ros-humble-ros2-controllers ros-humble-joint-state-broadcaster ros-humble-joint-trajectory-controller
そして、Lerobot_ros2のMoveItがどうしても実機で動かせなかったので、Claude Codeに聞きながら色々変更して動くようにしました。まだ動き怪しいですが、とりあえずforkしてロボットを動かせるように変更したものを作成したので今回は、こちらを使って動かします。
以下コマンドを実行してダウンロードします(もし元のLerobot_ros2をクローンしていたら削除しておいてください)。
$ cd ~/ros2_ws/src
$ git clone https://github.com/karaage0703/Lerobot_ros2
$ cd ~/ros2_ws
$ colcon build --packages-select so101_follower_moveit
以下コマンド実行すると、MoveItでロボット制御を動かせました(ただ、だいぶ動き怪しそうなので修正必要かも、使用は注意ください)。
$ ros2 launch so101_follower_moveit demo.launch.py use_fake_hardware:=false port:=/dev/usbserial_lerobot_follower
yolo_rosでAI画像認識
yolo_rosというYOLOによる画像認識できるROSのパッケージを使ってみます。
なお、yolo_rosのライセンスはYOLOの多くのバージョンと同様にGPLv3なので注意しましょう(特に商用利用時は)。ソフトを取り込んだりすると、GPLv3ライセンスが適用されることになります。気になる人はソフトウェアライセンスについて調べてください(本記事では主題でないので割愛します)。
まず、JetsonでGPUを使えるようにCUDAをセットアップします。Dockerなどではなく、素の状態でのセットアップです。DockerでCUDA使う方法もありますが、ROSを使うときは素の状態に入れたほうがなんだかんだ楽かなと(個人的には)思います。
JetsonへのCUDAのセットアップとyolo_rosセットアップの部分は、ほとんどFANATICさんの会社ブログ記事を参考にさせていただきました。有益な知見の共有感謝いたします。
まず、~/.bashrc
に以下2行を追記します。
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
必要なパッケージをインストールします。
$ sudo apt install -y curl python3-pip
$ sudo apt install -y libopenblas-base libopenmpi-dev libomp-dev
PyTorch
$ curl -L https://nvidia.box.com/shared/static/mp164asf3sceb570wvjsrezk1p4ftj8t.whl > torch-2.3.0-cp310-cp310-linux_aarch64.whl
$ pip3 install ./torch-2.3.0-cp310-cp310-linux_aarch64.whl
torchvision
$ curl -L https://nvidia.box.com/shared/static/xpr06qe6ql3l6rj22cu3c45tz1wzi36p.whl > torchvision-0.18.0a0+6043bc2-cp310-cp310-linux_aarch64.whl
$ pip3 install ./torchvision-0.18.0a0+6043bc2-cp310-cp310-linux_aarch64.whl
torchaudio
$ curl -L https://nvidia.box.com/shared/static/9agsjfee0my4sxckdpuk9x9gt8agvjje.whl > torchaudio-2.3.0+952ea74-cp310-cp310-linux_aarch64.whl
$ pip3 install ./torchaudio-2.3.0+952ea74-cp310-cp310-linux_aarch64.whl
PyTorchのインストールで、以下のようなエラーが出ました。何度かcurlのダウンロードをやり直すとうまくいきました。
ERROR: THESE PACKAGES DO NOT MATCH THE HASHES FROM THE REQUIREMENTS FILE. If you have updated the package versions, please update the hashes. Otherwise, examine the package contents carefully; someone may have tampered with them.
以下で結果がTrueになれば、GPU(CUDA)が使える状態になっています。
$ python3 -c "import torch; print(torch.cuda.is_available())"
yolo_rosのセットアップは以下の通りで実現できます。
$ cd ~/ros2_ws/src/
$ git clone https://github.com/mgonzs13/yolo_ros
$ https://github.com/mgonzs13/yolo_ros
$ pip3 install -r yolo_ros/requirements.txt
$ rosdep install --from-paths src --ignore-src -r -y
$ cd ~/ros2_ws
$ colcon build
途中以下のエラーが出ましたが、特に問題なく動きました。なぜ??(ROSあるあるということで)。
パッケージ ros-humble-warehouse-ros-mongo が見つかりません
ここまででセットアップが完了したので、動作確認します。
以下コマンドを異なるターミナルで実行します。
$ ros2 run v4l2_camera v4l2_camera_node
$ ros2 launch yolo_bringup yolo.launch.py input_image_topic:=/image_raw
$ ros2 run rqt_image_view rqt_image_view
rqt_image_viewでyolo/dbg_imageの内容を確認している様子です。
まとめ
Jetson OrinでROS2をセットアップして、色々試してみました。ROS2色々試したいこと
MoveIt以外にも、まだ試せていないROS2のパッケージ色々あるので、また試したら追記していきたい思います。
参考リンク
関連記事
関連記事
- 2025/07/24 yolo_rosとMoveItについて追記
Discussion