本シリーズ前回の記事「ROS-O で ROS1 を使う – パッケージのビルド」では ROS-O での ROS1 パッケージのビルドと実行について説明しました.
今回の記事では ros1_bridge を用いた ROS-O と ROS2 の併用方法について説明します.
本記事では対象とする Ubuntu のバージョンは次の2つとし,また ROS-O が既にインストールされている状態を前提としています.
ROS-O と ROS2 を併用するには ROS1 と ROS2 間で通信を行うパッケージ ros1_bridge を利用します.
併用するための準備として ROS2 のインストールと ros1_bridge のビルドを行う必要があり,全体の手順は次のようになります.
以下に各手順の説明をします.
ROS-O がインストール済の Ubuntu PC に ROS2 パッケージをインストールします.ROS-O は Ubuntu のバージョンに非依存ですが ROS2 は Ubuntu のバージョンにそれぞれ対応したバージョンがあります.Ubuntu 22.04 であれば ROS 2 Humble,Ubuntu 24.04 であれば ROS 2 Jazzy をインストールします.
次のリストに ROS 2 Humble と ROS 2 Jazzy のインストール手順が記載されている Web ページへのリンクがありますので参照してインストールしてください.
以下に ROS 2 Jazzy のインストールコマンドを書き出したものを記します.ROS 2 Humble の場合は jazzy を humble に置き換えてください.
Terminal: ROS 2 Jazzy のインストール
locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale
sudo apt install software-properties-common
sudo add-apt-repository universe
sudo apt update && sudo apt install curl -y
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 ${UBUNTU_CODENAME:-${VERSION_CODENAME}})_all.deb"
sudo dpkg -i /tmp/ros2-apt-source.deb
sudo apt update
sudo apt upgrade
sudo apt install ros-jazzy-desktop
source /opt/ros/jazzy/setup.bash
ros1_bridge は ROS 2 Humble と ROS 2 Jazzy では apt でインストールできるパッケージとしては提供されていないため,ROS-O と ROS2 をインストールした Ubuntu PC 内に新たに ROS ワークスペースを作成してそこで ros1_bridge のソースコードを取得・ビルドして利用します.
この際 ros1_bridge 専用・単独のワークスペースを作成し,そこに git でソースコードを取得してビルド・実行することを強くおすすめします.
それをおすすめする理由は ros1_bridge 実行時のターミナル環境設定で ROS1(ROS-O)と ROS2 双方のソフトウェアへのパス(PATH)を通すため,そのターミナルで他の ROS1(ROS-O)や ROS2 パッケージもビルドや実行をしてしまうと,ROS1 と ROS2 のライブラリパスを混同してしまい ROS1 が ROS2 のもしくは ROS2 が ROS1 のライブラリを使おうとしてエラーになることを回避するためです.
以下の ROS-O + ROS 2 Jazzy の環境で ros1_bridge のビルドを行うコマンドの手順に従って実行します.ROS-O + ROS 2 Humble 環境の場合は jazzy を humble に置き換えてください.
Terminal: ros1_bridge のビルド
mkdir -p ~/bridge_ws/src cd ~/bridge_ws/src git clone https://github.com/ros2/ros1_bridge.git source /opt/ros/one/setup.bash source /opt/ros/jazzy/setup.bash cd ~/bridge_ws rosdep update rosdep install --from-paths src --ignore-src -r -y sudo apt install python3-colcon-common-extensions colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure
最後の入力コマンド colcon build でビルドオプション --cmake-force-configure をつけているためビルド時間が数分〜十数分ほどかかります.これは ros1_bridge を構成するときに ROS 環境全体を解析して ROS-O / ROS2 それぞれにどのようなパッケージやメッセージ型,サービス型があるかなどを確認するために行っています.
以上で基本的な ROS-O / ROS2 併用システムの準備は終了です.
ROS-O / ROS2 併用のための準備が整ったということで前回の記事で ROS-O パッケージのビルド例として用いた 光近接センサモジュール WrPPS Single Board の ROS1 パッケージ wrpps_ros を実行したときに発行されている ROS Topic を ros1_bridge を介して ROS2 からも購読できるか確かめてみます.
以降 光近接センサモジュール WrPPS Single Board はハードウェア的に正しく接続された状態にあるとして進めます.
下の「入力コマンド」は Ubuntu 24.04 + ROS-O + ROS 2 Jazzy 環境での実行コマンドを記しています.Ubuntu 22.04 + ROS-O + ROS 2 Humble の場合は jazzy のところを humble に置き換えて実行してください.
まず 1つ目のターミナルで ROS1(ROS-O) の環境設定を行い wrpps_ros を起動します.
Terminal 1: 入力コマンド(ROS-O パッケージ wrpps_ros の実行)
source ~/wrpps_ws/devel/setup.bash roslaunch wrpps_ros wrpps_single_board.launch
次に 2つ目のターミナルで ROS1(ROS-O)と ROS2 双方の環境設定を行い ros1_bridge を実行します.
Terminal 2: 入力コマンド(ros1_bridge の実行)
source /opt/ros/one/setup.bash source /opt/ros/jazzy/setup.bash source ~/bridge_ws/install/setup.bash ros2 run ros1_bridge dynamic_bridge --bridge-all-topics
最後に 3つ目のターミナルで ROS2 の環境設定を行い ros1_bridge を介して ROS1 側から送られてくる wrpps_ros のトピックを購読・出力します.
Terminal 3: 入力コマンド(ROS2 での ROS Topic 出力)
source /opt/ros/jazzy/setup.bash ros2 topic list ros2 topic echo /wrpps_single_board/driver/output/range_tof
Terminal 3: 出力例
robotuser@robotuser-PC:~$ source /opt/ros/jazzy/setup.bash
robotuser@robotuser-PC:~$ ros2 topic list
/diagnostics
/parameter_events
/rosout
/wrpps_single_board/driver/enable_intensity
/wrpps_single_board/driver/enable_tof
/wrpps_single_board/driver/got_enabling_command
/wrpps_single_board/driver/output/proximity_intensity/raw
/wrpps_single_board/driver/output/range_tof
/wrpps_single_board/driver/output/range_tof/raw
/wrpps_single_board/intensity_model_acquisition/output/range_combined
/wrpps_single_board/intensity_model_acquisition/output/range_intensity
/wrpps_single_board/range_low_pass_filter/output
robotuser@robotuser-PC:~$ ros2 topic echo /wrpps_single_board/driver/output/range_tof
header:
stamp:
sec: 1781165598
nanosec: 426033496
frame_id: wrpps_single_board_tof_frame
radiation_type: 1
field_of_view: 0.4399999976158142
min_range: 0.029999999329447746
max_range: 2.0
range: 0.06300000101327896
variance: 0.0
---
header:
stamp:
sec: 1781165598
nanosec: 451354742
frame_id: wrpps_single_board_tof_frame
radiation_type: 1
field_of_view: 0.4399999976158142
min_range: 0.029999999329447746
max_range: 2.0
range: 0.06400000303983688
variance: 0.0
---
header:
stamp:
sec: 1781165598
nanosec: 474993467
frame_id: wrpps_single_board_tof_frame
radiation_type: 1
field_of_view: 0.4399999976158142
min_range: 0.029999999329447746
max_range: 2.0
range: 0.06300000101327896
variance: 0.0
---
:
(以下略)
:
動作確認ができたら各ターミナルを
Ctrl-C で停止します.
このように基礎的なシステム構成ですが ros1_bridge を利用して ROS-O と ROS2 を併用している様子を見て取れたのではないかと思います.
今回の記事はここまでです.
本シリーズ次回の記事では ROS-O パッケージのネットワーク apt インストール対応
について説明する予定です.