0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JetBot AI Kit ROS 2 FoxyからHumbleへの移行手順

0
Last updated at Posted at 2026-10-14

概要

ホストOS(Ubuntu 18.04 / L4T R32.7.1)はそのままにして、Dockerのベースイメージだけを dustynv/ros:humble-pytorch-l4t-r32.7.1 に差し替えることで、モーター・OLED・CSIカメラ(15fps)までHumbleで動作することを確認した。

  • 対象機材: Waveshare JetBot AI Kit(0.91インチOLED、TB6612FNG、I2C接続)
  • ベース環境: Jetson Nano / JetPack 4.6.x(L4T R32.7.1)/ Ubuntu 18.04
  • 前提: Foxy版の手順で dusty-nv/jetbot_ros のDocker環境が構築済み(Dockerfileの修正①〜③、モーター専用launch、csi_camera_node.py)

Jetson NanoはUbuntu 22.04が公式サポート外のため、ホストを上げるとGPUや nvarguscamerasrc が使えなくなるリスクがある。dusty-nvがJetPack 4向けにソースビルドしたHumbleコンテナを使えば、この問題を避けられる。なお、コンテナ内のPythonは3.6のまま。

Gazeboは移行対象から外した。シミュレータはIsaac Simを使う方針で、Gazeboのビルドはメモリ不足やHumbleとの不整合で落ちやすいため。

手順

手順1:事前準備

Foxy版イメージ(jetbot_ros:foxy-r32.7.1-stable)はタグが別なので上書きされない。念のため docker save のバックアップがあることを確認し、空き容量とスワップも確認する。

df -h
swapon --show
cd ~/jetbot_ros
git checkout -b humble

手順2:Dockerのデフォルトランタイムをnvidiaにする

build.sh の冒頭コメントでも推奨されている設定。ビルド中にGPUライブラリを参照するステップで失敗しないようにする。

sudo tee /etc/docker/daemon.json > /dev/null << 'EOF'
{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}
EOF
sudo systemctl restart docker
sudo docker info | grep -i "default runtime"

Default Runtime: nvidia と出ればOK。

手順3:launchファイルを新書式に変更

Humbleでは node_executable などの旧引数が削除されているため、置換しておく。

sed -i 's/node_executable=/executable=/; s/node_name=/name=/; s/node_namespace=/namespace=/' launch/*.py
grep -rn "node_executable" launch/

手順4:DockerfileからGazeboを除外する

Foxy版の修正①〜③(APT鍵の無効化、-j1、ros_deep_learning の除外)はそのまま残す。そのうえで、Gazebo関連の4ブロックを外す。行番号はFoxy版の修正を適用した直後のもの。

cp Dockerfile Dockerfile.bak
sed -i \
  -e '52,58d' \
  -e '62,64d' \
  -e '65s/^ *pip3/RUN pip3/' \
  -e '67s/^/#/' \
  -e '73,93s/^/#/' \
  -e '143,148s/^/#/' \
  Dockerfile
対象 変更内容
apt-get(Gazebo・blender等) nano 以外を削除
py3gazebo cloneを削除し、pynput だけ独立した RUN で残す
ENV PYTHONPATH=/opt/py3gazebo コメントアウト
gazebo_ros_pkgs のソースビルド 丸ごとコメントアウト
Gazeboプラグインのcmake/make 丸ごとコメントアウト

apt-getの中の行はコメントアウトではなく削除にする。\ で続くRUN命令の途中に # 行を入れると、Dockerのバージョンによって挙動が変わるため。残る GAZEBO_* の ENV 3行は無害なのでそのままでよい。

手順5:net-toolsとカメラノードを追加する

Humbleのベースイメージには ifconfig が入っておらず、OLEDノードがIP取得で落ちる。apt-getに net-tools を追加する。また、カメラノードをイメージに含めておく。

sed -i 's/^\([[:space:]]*\)nano \\$/&\n\1net-tools \\/' Dockerfile
sed -i '/^COPY setup.cfg/a COPY csi_camera_node.py /root/csi_camera_node.py' Dockerfile

手順6:改行コードをLFに揃える

過去の修正でCRLF(^M)が混入していたため、ビルド前にLFに統一する。

sed -i 's/\r$//' Dockerfile
file launch/*.py
git diff Dockerfile | grep -c $'\r'

最後のコマンドで 0 と出ればOK。launchファイルに CRLF と表示されたものがあれば、同じsedで直す。

手順7:ビルド

build.sh は第1引数でROSディストリビューションを受け取り、ベースイメージを dustynv/ros:humble-pytorch-l4t-r32.7.1 に自動で切り替える。

docker/build.sh humble 2>&1 | tee ~/build_humble.log

Gazeboを外したため、Foxy版で1〜2時間かかったビルドが大幅に短くなる。Successfully tagged jetbot_ros:humble-r32.7.1 で完了。

手順8:起動(2ターミナル構成)

run.sh のデフォルトはfoxyのため、--ros humble を指定する。

ターミナルA:

docker/run.sh --ros humble
# コンテナ内で
ros2 launch jetbot_ros jetbot_motors_only.launch.py

起動ログの CONTAINER: が jetbot_ros:humble-r32.7.1、ROS_DISTRO humble になっていることを確認する。

ターミナルB:

sudo docker exec -it jetbot_ros /bin/bash
ros2 run jetbot_ros teleop_keyboard

手順9:カメラの動作確認

まず前提ライブラリを確認する。

python3 -c "from cv_bridge import CvBridge; print('cv_bridge ok')"
python3 -c "import cv2; print([l.strip() for l in cv2.getBuildInformation().splitlines() if 'GStreamer' in l])"

cv_bridge ok と GStreamer: YES (1.14.5) が出ればOK。Foxy版の csi_camera_node.py がコード変更なしで動く。

python3 ~/csi_camera_node.py
# 別ターミナルで
ros2 topic hz /jetbot/camera/image_raw

average rate: 15.0 前後で安定すれば成功。

手順10:保存

sudo docker commit jetbot_ros jetbot_ros:humble-r32.7.1-stable
sudo docker save jetbot_ros:humble-r32.7.1-stable -o ~/jetbot_ros_humble_backup.tar
git add Dockerfile csi_camera_node.py launch/ docker/
git commit -m "Migrate to ROS 2 Humble: drop Gazebo, add net-tools, include CSI camera node"

次回からは docker/run.sh -c jetbot_ros:humble-r32.7.1-stable で保存したイメージを起動できる。

つまずきポイントと対処

症状 原因 対処
Temporary failure resolving 'packages.ros.org' でapt-getが失敗 ビルド中の一時的なDNS解決失敗(Gazeboのパッケージ取得時) ホストで ping packages.ros.org を確認して再実行。Gazeboを除外すればこのステップ自体がROSリポジトリに依存しなくなる
pip実行時に setuptools>=61.0 のエラーが大量に出る コンテナのPythonが3.6のため、新しい evdev / spidev が入らない 無視してよい。pipが自動で3.6対応版(evdev 1.6.1、spidev 3.5)に落としてインストールする
OLEDノードが ifconfig: not found で落ちる Humbleのベースイメージに net-tools が無い 手順5で net-tools を追加。その場しのぎならコンテナ内で apt-get install -y net-tools
docker/run.sh でFoxyのコンテナが起動する run.sh のデフォルトが ROS_DISTRO="foxy" docker/run.sh --ros humble で起動する
git diff で変更行の末尾に ^M が出る 過去の修正でCRLF改行が混入 手順6で sed -i 's/\r$//' Dockerfile
xhost: unable to open display などの警告 SSH接続でXディスプレイが無い Foxy版と同じく無視してよい

次のステップ

RTX PC側のIsaac SimとROS 2 Humbleでつなぎ、/jetbot/camera/image_raw を受信してデジタルツインの監視に使う。両側で ROS_DOMAIN_ID とRMW実装(デフォルトのFast DDS)を揃える。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?