タグアーカイブ ros2

著者:yamamoto.yosuke

ROS-O で ROS1 を使う – ROS-O と ROS2 の併用

本シリーズ前回の記事「ROS-O で ROS1 を使う – パッケージのビルド」では ROS-O での ROS1 パッケージのビルドと実行について説明しました.

今回の記事では ros1_bridge を用いた ROS-O と ROS2 の併用方法について説明します.

本記事では対象とする Ubuntu のバージョンは次の2つとし,また ROS-O が既にインストールされている状態を前提としています.

  • Ubuntu 22.04 + ROS-O
  • Ubuntu 24.04 + ROS-O

ros1_bridge による ROS-O と ROS2 の併用

ROS-O と ROS2 を併用するには ROS1 と ROS2 間で通信を行うパッケージ ros1_bridge を利用します.

併用するための準備として ROS2 のインストールと ros1_bridge のビルドを行う必要があり,全体の手順は次のようになります.

  1. ROS2 のインストール
  2. ros1_bridge のビルド
  3. ROS-O / ROS2 併用システムの実行

以下に各手順の説明をします.

ROS2 のインストール

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 の場合は jazzyhumble に置き換えてください.

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 のビルド

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 環境の場合は jazzyhumble に置き換えてください.

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 / ROS2 併用のための準備が整ったということで前回の記事で ROS-O パッケージのビルド例として用いた 光近接センサモジュール WrPPS Single BoardROS1 パッケージ 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 インストール対応
について説明する予定です.

著者:yamamoto.yosuke

ROS-O で ROS1 を使う – パッケージのビルド

本シリーズ前回の記事「ROS-O で ROS1 を使う – インストール」では ROS-O のインストール手順について説明しました.

今回の記事では ROS-O における ROS1 パッケージのビルドと実行について説明します.

本記事では Ubuntu のバージョンは次の2つとし,また ROS-O が既にインストールされている状態を前提としています.

  • Ubuntu 22.04 + ROS-O
  • Ubuntu 24.04 + ROS-O

ROS-O におけるパッケージのビルドと実行

ROS-O におけるビルドと実行と言っても基本的には従来の ROS1 と手順は同じです.

本記事では ROS-O におけるパッケージビルドを 光近接センサモジュール WrPPS Single Board の ROS1 パッケージ wrpps_ros を例に手順を追って行きます.

wrpps_ros は元々 Ubuntu 20.04 + ROS Noetic での動作を前提としていました.

Ubuntu 22.04 および 24.04 の ROS-O で動作確認したところソースコード自体の変更は必要なく,インストール手順で新しいバージョンの Ubuntu や ROS-O パッケージに対応したコマンド内パスの変更や 非ROS ソフトウェアパッケージの追加インストールが必要なだけでした.

これらの Ubuntu 22.04 および 24.04 と ROS-O におけるインストール手順の追記は既に wrpps_rosREADME に反映されています.

Arduino IDE のセットアップとポストスクリプトの実行(非ROS)

インストール手順の内 ROS とは関係ない部分ですが Set up Arduino IDE の Arduino IDE ソフトウェアのインストール時に Ubuntu 22.04 と 24.04 での追加対応が必要な点がありました.

まず,Arduino IDE ソフトウェアをダウンロードします.

AppImage からインストールするための libfuse2 ライブラリをインストールします.ただし Ubuntu 24.04 の場合はライブラリ名が libfuse2t64 となります.

Terminal: Ubuntu 22.04 の場合

sudo apt install libfuse2

Terminal: Ubuntu 24.04 の場合

sudo apt install libfuse2t64

--no-sandbox オプションを付けて AppImage を実行してインストールします.

Terminal:

cd ~/Download
chmod a+x arduino-ide_2.3.8_Linux_64bit.AppImage
./arduino-ide_2.3.8_Linux_64bit.AppImage --no-sandbox

ポストインストールスクリプトを取得して実行します.
Run Arduino Post Install Script – wrpps_ros

Terminal:

cd ~/Download
chmod a+x post_install.sh
sudo ./post_install.sh 

wrpps_ros ソースコードの取得とビルド

Clone and Build wrpps_ros and FA-I-sensor packages – wrpps_ros

ソースコードの取得とビルドに必要なパッケージ,git と catkin tools を apt でインストールします.

Terminal:

sudo apt install git python3-catkin-tools

ROS ワークスペースの作成してソースコードの取得とビルドを行います.

Terminal:

source /opt/ros/one/setup.bash
mkdir -p ~/wrpps_ws/src
cd ~/wrpps_ws/src
git clone https://github.com/tork-a/wrpps_ros.git
git clone https://github.com/RoboticMaterials/FA-I-sensor.git
cd ~/wrpps_ws
rosdep install -r -y --from-paths src --ignore-src
catkin build
source ~/wrpps_ws/devel/setup.bash

rosserial の Arduino ライブラリを取得作成します.
Make rosserial Arduino Libraries – wrpps_ros

Terminal:

sudo apt update
sudo apt install ros-one-rosserial-arduino
sudo apt install ros-one-rosserial
source ~/wrpps_ws/devel/setup.bash
cd ~/Arduino/libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .

WrPPS Single Board 用スケッチがアップロードされていいない Arduino の場合は Upload WrPPS Sketch to Arduino の手順で Arduino IDE ソフトウェアを利用してアップロードします.

ビルドした ROS パッケージの実行

光近接センサモジュール WrPPS Single Board を対応 Arduino ボード経由で上記ビルドやインストールをした Ubuntu PC に接続します.本記事では Arduino WrPPS スケッチはアップロード済として進めます.
Usage – wrpps_ros

Terminal 1: 入力コマンド

source ~/wrpps_ws/devel/setup.bash
roslaunch wrpps_ros wrpps_single_board.launch

Terminal 2: 入力コマンド

source ~/wrpps_ws/devel/setup.bash
rostopic echo /wrpps_single_board/driver/output/range_tof

Terminal 2: 出力例(近接距離のトピック出力)

$ rostopic echo /wrpps_single_board/driver/output/range_tof
header: 
  seq: 1015
  stamp: 
    secs: 1754966728
    nsecs: 463486433
  frame_id: "wrpps_single_board_tof_frame"
radiation_type: 1
field_of_view: 0.4399999976158142
min_range: 0.029999999329447746
max_range: 2.0
range: 8.190999984741211
---

:
:
:

---
header: 
  seq: 1223
  stamp: 
    secs: 1754966733
    nsecs: 501786708
  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.07100000232458115
---
header: 
  seq: 1224
  stamp: 
    secs: 1754966733
    nsecs: 526211977
  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.07000000029802322
---
header: 
  seq: 1225
  stamp: 
    secs: 1754966733
    nsecs: 550466775
  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.0689999982714653
---

:
:
:

動作確認できたら各ターミナルを Ctrl-C で停止します.

以上のように ROS-O を用いることで元々 Ubuntu 20.04 + ROS Noetic 向けだった wrpps_ros パッケージが新しい Ubuntu 22.04 や Ubuntu 24.04 でも利用できる様子を見ていただけたのではないかと思います.

ROS-O でのビルドと実行まとめ

  • ROS-O でのパッケージのビルドと実行は基本的に ROS Kinetic 以前の操作と同じ
    • ROS-O の環境設定 source /opt/ros/one/setup.bash
  • Ubuntu のバージョン違いで 非ROS のソフトウェアの対応が必要な場合がある

今回の記事はここまでです.

本シリーズ次回の記事では ros1_bridge を用いた ROS-O と ROS2 の併用方法について説明する予定です.

著者:yamamoto.yosuke

ROS-O で ROS1 を使う – インストール

本シリーズ前回の記事「ROS-O で ROS1 を使う – ROS-O とは」では ROS-O が必要とされる背景などを中心にその概要の説明をしました.

今回の記事では ROS-O のインストールとその動作確認の方法について説明します.本記事での ROS-O をインストールする対象の Ubuntu のバージョンは次の2つを前提としています.

  • Ubuntu 22.04
  • Ubuntu 24.04

ROS-O のインストール

ROS-O のインストール手順は apt で取得できる ROS-O パッケージを配布している Web サイト Bielefeld University ROS-O package repository のトップページに
Install instructions to use ROS One: という項目で掲載されています.

Install instructions to use ROS One: のコメント以外,実行部分のみを書き出したものを下に掲載します.

インストールはターミナルに下のコマンドを1行ずつコピー&ペーストして [Enter] 入力で各コマンドを実行して行います.

  • 注)1行が長く下記掲載の枠内に表示しきれない行もあるので枠内で右スクロールをして行末までコマンドをコピーするよう注意してください.

Terminal: ROS-O インストール

sudo apt install curl

sudo curl -sSL https://ros.packages.techfak.net/gpg.key -o /etc/apt/keyrings/ros-one-keyring.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/ros-one-keyring.gpg] https://ros.packages.techfak.net $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros1.list

echo "# deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/ros-one-keyring.gpg] https://ros.packages.techfak.net $(lsb_release -cs) main-dbg" | sudo tee -a /etc/apt/sources.list.d/ros1.list

sudo apt update

sudo apt install python3-rosdep

sudo rosdep init

echo "yaml https://ros.packages.techfak.net/ros-one.yaml one" | sudo tee /etc/ros/rosdep/sources.list.d/1-ros-one.list

rosdep update

sudo apt install ros-one-desktop

ROS-O の動作確認

ROS-O が動作するかを確認します.動作確認手順の1つとして ROS Noetic 以前と同様に「タートルシム / turtlesim」を Ubuntu PC 画面上で動かしてみます.

ROS Noetic 以前と基本操作は同じですが,異なる点が1つあり,ターミナルの ROS 環境の設定が ROS-O となるように source /opt/ros/one/setup.bash を実行します.

Terminal 1: 入力コマンド roscore

source /opt/ros/one/setup.bash
roscore

Terminal 1: 出力例

robotuser@robotuser-PC:~$ source /opt/ros/one/setup.bash
robotuser@robotuser-PC:~$ roscore
... logging to /home/robotuser/.ros/log/96e7dc35-4f5d-11f1-b266-50eb713af63d/roslaunch-robotuser-PC-5625.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://robotuser-PC:43503/
ros_comm version 1.17.3


SUMMARY
========

PARAMETERS
 * /rosdistro: one
 * /rosversion: 1.17.3

NODES

auto-starting new master
process[master]: started with pid [5633]
ROS_MASTER_URI=http://robotuser-PC:11311/

setting /run_id to 96e7dc35-4f5d-11f1-b266-50eb713af63d
process[rosout-1]: started with pid [5642]
started core service [/rosout]

Terminal 2: 入力コマンド turtlesim_node

source /opt/ros/one/setup.bash
rosrun turtlesim turtlesim_node

Terminal 2: 出力例

robotuser@robotuser-PC:~$ source /opt/ros/one/setup.bash
robotuser@robotuser-PC:~$ rosrun turtlesim turtlesim_node 
QSocketNotifier: Can only be used with threads started with QThread
[INFO] [1778739996.107534065]: Starting turtlesim with node name /turtlesim
[INFO] [1778739996.111756257]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]

turtlesim_node が正常起動すると左図のような中心に亀が表示されたウィンドウが開きます.

Terminal 3: 入力コマンド turtle_teleop_key

source /opt/ros/one/setup.bash
rosrun turtlesim turtle_teleop_key

Terminal 3: 出力例

robotuser@robotuser-PC:~$ source /opt/ros/one/setup.bash
robotuser@robotuser-PC:~$ rosrun turtlesim turtle_teleop_key 
Reading from keyboard
---------------------------
Use arrow keys to move the turtle. 'q' to quit.

turtle_teleop_key を起動した状態でキーボードの方向キー(←↑↓→)を押すと turtlesim_node で表示しているウィンドウの中の亀がウィンドウ内で動くかと思います.

亀がキー操作で動いたらとりあえずの ROS-O の動作確認は終了です.

Terminal 3 は ‘q’ で,Terminal 1 と 2 は ‘Ctrl-C’ で終了します.


今回の記事はここまでです.

本シリーズ次回の記事では ROS-O での ROS パッケージのビルドとその実行について説明する予定です.

著者:yamamoto.yosuke

ROS-O で ROS1 を使う – ROS-O とは

ROS1 は最後の公式なバージョン ROS Noetic のサポートが 2025年5月 に終了(End of Life / EOL)し,ROS2 への移行が進みつつあります.

ROS2 が普及しつつあるとは言え,ROS1 で構成されたロボット資産をまだ有効活用したいこともまだあるかと思います.そのようなケースに対応するため,有志によるコミュニティ主導のプロジェクト ROS-O(ロスオー,ROS One)でサポートが終了した後の新しい Ubuntu 環境においても ROS1 を使えるように維持・管理が行われています.

今回は ROS-O で ROS1 を使う方法について次のように何回かの記事に分けて説明する予定です.

  1. ROS-O とは (←今回の記事)
  2. ROS-O のインストール
  3. ROS-O パッケージのソースビルド
  4. ROS-O と ROS2 の併用
  5. ROS-O パッケージのネットワーク apt インストール対応

ROS-O とは

ROS-O(ロスオー,ROS One)は ROS1 の公式最終バージョン ROS Noetic サポート終了後も,より新しい Ubuntu 環境で ROS1 系ソフトウェアを継続利用できるようにするためのコミュニティ主導プロジェクトです.

ROS1 が公式には 2025年5月 に EOL(End of Life)となり Ubuntu 20.04 にて公式対応が終了しました.その結果 Ubuntu 22.04 や 24.04 上で ROS1 のソフトウェアパッケージを apt install などにより簡単に利用することが難しくなりました.

  • ROS1 公式サポートの終了
    • 2025年5月
    • 最終対応 Ubuntu: 20.04
    • 最終バージョン: ROS Noetic

そうのような状況の中で ROS-O では多くの資産が残っている ROS1 ソフトウェアやそのハードウェアをより新しいバージョンの Ubuntu 上でも活用できるよう修正や保守が行われています.

具体的には ROS-O で ROS1 のコアパッケージの主要なリポジトリをフォークし,バグ修正や最新のコンパイラへの対応を一括して引き受ける受け皿として機能しています.また,新しい Python バージョンや C++ 標準,依存ライブラリの変化に伴って従来の ROS1 コードはビルドできなくなることが増えていることに対して ROS-O プロジェクトにて有志によりこれらの変更に追従するための修正が継続的に行われています.

新しい Ubuntu バージョンでの ROS1 資産の活用

ROS-O の重要な要素でもあるのが新しい Ubuntu バージョンでの ROS1 資産の活用です.公式最終バージョンの ROS1 である ROS Noetic は Ubuntu 20.04 での利用が前提でしたが,ROS-O は ROS Noetic が公式にサポートしていた Ubuntu 20.04 よりも新しいバージョンの Ubuntu にも対応するようメンテナンスされています.

  • ROS-O が対応している Ubuntu(2026年5月時点)
    • Ubuntu 22.04
    • Ubuntu 24.04

これらの Ubuntu バージョンにおいて ROS-O は ros-one-* パッケージを apt インストールできる状態で提供しています.

このように Ubuntu 20.04 以前の古いシステムを維持しなくても ROS1 を動かせることにより,研究・教育・産業の各分野にある ROS1 の大きな資産を継続的に利用することができます.

  • ROS1 資産の例
    • 古いロボット
    • 学術コード
    • センサドライバ

例えば特定のロボットやセンサーのドライバが ROS1 にしか対応しておらず,メーカーのサポートも終了しているような場合でも ROS-O を活用することで新しいシステム内で既存のハードウェアを利用できる可能性があります.

ROS-O 併用による段階的な ROS2 移行

ROS2 の普及が進みつつありますが ROS1 から完全移行するにも一部のパッケージが対応されていないような状況はまだあるものと考えられます.ROS-O により新しいバージョンの Ubuntu 上でも ROS1 と ROS2 を併用したシステムを運用しやすくなります.

  • ROS-O と ros1_bridge による ROS1 + ROS2 併用
    • ROS1 ドライバ
    • ros1_bridge
    • ROS2 Navigation

開発者自身のソフトウェアパッケージについても ROS1 パッケージから ROS2 への移植は簡単な場合も多いですが,一部においては ROS1 から ROS2 へのアーキテクチャなどの変更が大きく影響して移植コストが高くなってしまうケースがあります.その場合は既存の ROS1 パッケージを暫定的に ROS-O で運用し,より優先度の高いソフトウェア開発に注力してから順次 ROS1 パッケージの ROS2 移植を進めることができます.

注意点・限界

ROS-O はいくつか注意して利用する必要があります.

  • 公式 OSRF サポートではない
    • ROS-O はコミュニティベースで,Open Robotics 公式長期保守ではない
  • 全 ROS1 パッケージが必ず動くわけではない
    • 古いパッケージは新しい Ubuntu での言語バージョンなどの違いは修正が必要な可能性あり
  • ROS2 ネイティブ機能の恩恵は得られない
    • ROS2 と比べた ROS1 の本質的制約: DDS 非対応, QoS 設定なしなど

参考となるページ


今回の記事はここまでです.

本シリーズ次回の記事では ROS-O のインストール方法について説明する予定です.

著者:yamamoto.yosuke

テック技販フォースセンサロボット用アンプが ROS2 に対応しました!

東京オープンソースロボティクス協会は テック技販 社製フォースセンサロボット用アンプ DMA-03 for Robot の Linux / ROS2 ドライバソフトウェア tecgihan_driver の開発とリリースのお手伝いをしました.

ロボット用フォースセンサアンプ DMA-03 for Robot小型演算3CHひずみアンプ(デジタルタイプ)DMA-03 をロボットシステムに必要な実時間出力に対応させたものです.

2025年7月現在 tecgihan_driver が対応している Linux / ROS のバージョンは次のとおりです.

  • Ubuntu 22.04 + ROS Humble
  • Ubuntu 24.04 + ROS Jazzy

ロボット用フォースセンサアンプ DMA-03 for Robot のドライバソフトウェアが ROS に対応したことで テック技販 社製の小型フォースセンサを容易にロボットシステムに組み込むことが可能となっています.また,計測されたデータを ROS の豊富なツールで活用することもできます.

ROS ツール活用例1 – RViz で計測データを3次元視覚化表示

ROS ツール活用例2 – Rosbag2 でデータを保存し PlotJuggler でグラフ表示

ロボット用フォースセンサアンプ DMA-03 for Robot の Linux / ROS2 対応ドライバソフトウェアの詳しい説明や利用方法は GitHub tecgihan_driver リポジトリのトップページ にある README に日本語・英語併記で掲載しています.

tecgihan_driver に関する質問やサポートは GitHub tecgihan_driver サイトの Issues にて受け付けていますので気軽に投稿してください.

著者:yamamoto.yosuke

ルンバ 900 シリーズを ROS で遠隔操作ロボットに – 遠隔操縦編

本シリーズ前回の記事では 900 シリーズのルンバと Ubuntu PC を USB ケーブルで 接続して ROS からルンバを有線操縦する方法を紹介しました.

今回の記事ではルンバが独立して動きやすいようにバッテリー駆動のラズベリーパイ(ラズパイ・Raspberry Pi)をルンバと USB 接続し,併せて USB カメラもそのラズパイに接続することで,ルンバ 900 シリーズを WiFi を介した ROS 遠隔操作ロボットのようにしてみる様子を紹介します.

実行環境

前回の記事においてルンバを Ubuntu PC から ROS を使って USB 有線操縦することを目的としたハードウェア・ソフトウェア構成は以下のようになっていました.

  • ルンバ 961(→今回はラズパイに接続)
  • micro USB ケーブル(→今回はラズパイとルンバを接続するために使用)
  • PC: Dell Inspiron 13 5390
  • OS 等: Ubuntu 24.04 + ROS Jazzy (ROS2)
  • コントローラ(どちらか1つ)
    • Xbox360 互換ゲームパッド( 8bitDo SN30 pro – USB 有線 )
    • 3Dマウス( 3DConnexion SpaceMouse Wireless を有線で使用 )
  • 使用コード: https://github.com/y-yosuke/create_robot/tree/humble-add-setmode

今回はこれらのハードウェアに加えて下記のラズパイとその周辺機器のセットをルンバに接続したシステムも使用します.

  • Raspberry Pi 4B
    • OS をインストールする microSD カードは最大読込 100 MB/s 以上のスペックを推奨
  • OS 等: Ubuntu 24.04 + ROS Jazzy (ROS2)
  • USB 充電バッテリー( Anker Power Bank (10000mAh, 30W) )
  • USB カメラ( Buffalo WEBカメラ BSW505MBK )
  • 使用コード: https://github.com/y-yosuke/create_robot/tree/humble-add-setmode

OS などの環境については本記事執筆直近の動作検証では Ubuntu 24.04 と ROS Jazzy (ROS2) の組み合わせで行っていますが,過去に行った検証では Ubuntu 22.04 と ROS Humble の組み合わせでも動作確認しています.

使用コードについては前回の記事と同様に今回のシステム構成において使いやすいように Create Robot のソフトウェア GitHub リポジトリ https://github.com/AutonomyLab/create_robot からフォーク https://github.com/y-yosuke/create_robot/tree/humble-add-setmode して利用しています.

インストール・ビルド

今回追加した Raspberry Pi 4B に Ubuntu 24.04 + ROS Jazzy と必要なソフトウェアをインストール・ビルドします.

Raspeberry Pi への Ubuntu 24.04.1 のインストール

Ubuntu 24.04 ディスクイメージを microSD カードに書き込みます.
Install Ubuntu on a Raspberry Pi を参照して microSD カードに Ubuntu 24.04.1 以降ののインストーライメージを書き込みます.

Raspeberry Pi へのソフトウェアのインストール・ビルド

Raspberry Pi への ROS Jazzy と必要なパッケージのインストール・ビルドについては基本的に前回の記事のインストール手順 ルンバ 900 シリーズを ROS で遠隔操作ロボットに – USB 有線操縦編 : インストール・ビルド と同じですのでそちらを参照して進めてください.

1ヶ所 libcreate/include/create/packet.h を編集するときに gnome-text-editor がコマンドラインから起動できないことがありました.

$ gnome-text-editor ~/roomba_ws/src/libcreate/include/create/packet.h

その場合は本記事最後にあるトラブルシューティングの項目を参考に nanogedit その他お好みの gnome-text-editor 以外のテキストエディタを使用してください.

Ubuntu 24.04.1 インストール時点では ssh サーバが入っていないのでインストールして「設定(Settings)」で ssh 接続を有効化してください.

$ sudo apt update
$ sudo apt install openssh-server

今回使用するパッケージで依存関係記述から漏れていたパッケージ v4l2_camera をインストールします.

$ sudo apt install ros-jazzy-v4l2-camera

ルンバの遠隔操縦

ハードウェアのセットアップ

Raspberry Pi にルンバ,USB カメラ,バッテリーを接続します.Ubuntu PC 側にはゲームコントローラなどを接続します.

Raspberry Pi 4B + USB カメラ + バッテリー <==(USBケーブル)==> ルンバ 900 シリーズ
 ↑ /// ( WiFi ネットワーク ) /// ↓
Ubuntu PC + ゲームコントローラなど

次の画像はルンバ側のハードウェアを接続した様子です.

次の画像は Ubuntu PC 側のハードウェアを接続した様子です.この画像内の PC ディスプレイには後述する「ソフトウェアの実行」を行ったときのルンバに設置した USB カメラからの映像が映し出されています.

Raspberry Pi への ssh 接続とデバイスの権限設定

Ubuntu PC のターミナルからルンバと USB 接続されている Raspberry Pi に ssh 接続します.

下記の例では robotuser-rp4b というホスト名をつけた Raspberry Pi に robotuser というユーザ名で接続しています.ホスト名やユーザ名,接続時のパスワードは適宜読者の環境に沿ったもので実行してください.

ssh 接続ができたらルンバとのシリアル通信ポートの権限を chmod で変更します.

Ubuntu PC: Raspberry Pi に ssh 接続するターミナル

$ ssh robotuser@robotuser-rp4b.local
robotuser@robotuser-rp4b:~$ sudo chmod 777 /dev/ttyACM0

このターミナルの ssh は接続したままににします.

ソフトウェアの実行

Raspberry Pi に ssh 接続したターミナルで次のコマンドを実行して create_1_camera.launch
を起動します.

Ubuntu PC: Raspberry Pi に ssh 接続したターミナル

robotuser@robotuser-rp4b:~$ source ~/roomba_ws/install/setup.bash
robotuser@robotuser-rp4b:~$ ros2 launch create_bringup create_1_camera.launch
注)上記ボックス内を横スクロールでコマンド全文表示

次にルンバを遠隔操作する側の Ubuntu PC 上の2つのターミナルで次のコマンドを実行してルンバに接続した Raspberry Pi のカメラ映像を表示しながらゲームパッドノードからルンバへの速度指令のトピックを発行します.

Ubuntu PC: ターミナル 1(カメラ映像の表示)

$ source ~/roomba_ws/install/setup.bash
$ ros2 run rqt_image_view rqt_image_view 

画像トピック名に image_raw を選択するとウィンドウ内に映像が表示されます.

Ubuntu PC: ターミナル 2(速度指令発行ノードの実行)

ルンバへの速度指令を出すためのゲームパッドもしくは 3D マウスのノードを実行するためにターミナルをもう1つ開いて実行します.

< Xbox360 互換ゲームパッド使用の場合 >

Xbox360 互換ゲームパッドを用いてルンバに対する速度指令を出すノードを実行するのに joy_teleop.launch を起動します.

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup joy_teleop.launch
注)デッドマンスイッチ(現設定 L1 ボタン) を押しながらアナログスティック R を操作

< 3Dマウス( 3DConnexion SpaceMouse Wireless )使用の場合 >

3DConnexion SpaceMouse を用いてルンバに対する速度指令を出すノードを実行するのに spacenav_telelop.launch を起動します.

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup spacenav_teleop.launch 

次の動画ではルンバとラズパイのシステムが外部接続ケーブルが無く独立しており,Ubuntu PC 側のゲームパッドで操縦されルンバ上の USB カメラの映像も取得できている様子が見て取れると思います.

この動画内では撮影の都合で Ubuntu PC で操作を行っている操縦者の有視界内にルンバもありますが,Ubuntu PC とルンバは WiFi ネットワークを介してつながっているので例えば別の部屋などの視界外からもルンバ上の USB カメラからの映像や他の ROS トピックを参照しながら遠隔操縦できそうであることは想像できるのではないでしょうか.

ルンバ操作を終了するときは各ターミナルで実行しているプロセスを Ctrl+C で終了してください.


付録-A. 掃除中ルンバの ROS トピック発信

ルンバから派生した趣味や教育用をターゲットとした Create Robot は掃除機能を廃してしまっていますが今回使用しているのはお掃除ロボットのルンバそのものです.

ルンバが普通に掃除している間もその状態を Roomba Open Interface (ROI) を通じて取得できるのが ROI のパッシブモードです.

create_1_camera.launch でも launch オプションで control_mode:=passive を指定すると,ROI のパッシブモードでルンバを操作せずに通信してその状態を ROS トピックとして発行します.

Ubuntu PC: Raspberry Pi に ssh 接続したターミナル

robotuser@robotuser-rp4b:~$ source ~/roomba_ws/install/setup.bash
robotuser@robotuser-rp4b:~$ ros2 launch create_bringup create_1_camera.launch control_mode:=passive
注)上記ボックス内を横スクロールでコマンド全文表示

パッシブモードを実行中にルンバの CLEAN ボタンを押すか iRobot アプリから開始することで掃除が始まります.

create_1_camera.launch パッシブモード時に発行される ROS トピックのリスト出力は次の様になっています.

Ubuntu PC: ターミナル 1

$ source ~/roomba_ws/install/setup.bash
$ ros2 topic list
/battery/capacity
/battery/charge
/battery/charge_ratio
/battery/charging_state
/battery/current
/battery/temperature
/battery/voltage
/bumper
/camera_info
/check_led
/clean_button
/cliff
/cmd_vel
/day_button
/debris_led
/define_song
/diagnostics
/dock
/dock_button
/dock_led
/hour_button
/image_raw
/ir_omni
/joint_states
/main_brush_motor
/minute_button
/mode
/odom
/parameter_events
/play_song
/power_led
/robot_description
/rosout
/set_ascii
/side_brush_motor
/spot_button
/spot_led
/tf
/tf_static
/undock
/vacuum_motor
/wheeldrop

付録-B. トラブルシューティング

ターミナルが起動しない場合 → locale の LANG 設定を確認

Ubuntu 24.04.1 でターミナルが起動しなかったのですが,その時は /etc/default/locale の内容を LANG="en_US.UTF-8" に修正したら起動するようになりました.

/etc/default/locale

LANG="en_US.UTF-8"

gnome-text-editor が起動しない → 他のテキストエディタを使用

gnome-text-editor がコマンドラインから起動できない場合は他のテキストエディタ nano や gedit などを使用してください.

1. nano を使う
$ nano ~/roomba_ws/src/libcreate/include/create/packet.h
2. gedit を使う
$ sudo apt update
$ sudo apt install gedit
$ gedit ~/roomba_ws/src/libcreate/include/create/packet.h

今回の記事はここまでです.

著者:yamamoto.yosuke

ルンバ 900 シリーズを ROS で遠隔操作ロボットに – USB 有線操縦編

iRobot 社のお掃除ロボット「ルンバ(Roomba)」は 700 シリーズ以前のモデルでは mini-DIN のインターフェースポートがありシリアル通信にて外部からルンバを操作するためのインタフェース Roomba Open Interface (ROI) が提供されていました.またルンバ 900 シリーズではシリアルポートが micro USB となり USB ケーブル経由で外部コンピュータと簡単につなげて ROI が利用できるようになっていました.

そしてルンバから派生した掃除機能を廃して趣味や教育用をターゲットとした Create ロボットもルンバと共通の ROI で操作可能です.なおかつ Create 向けとして ROI の ROS インタフェースが GitHub で提供されているので この ROI-ROS インタフェースを用いることでシリアルポートの付いているルンバを ROS から操作することが可能となっています.

本シリーズの記事では PC やラズパイから USB ケーブルで 900 シリーズのルンバに接続して ROS からルンバを操縦する方法を紹介します.

記事のシリーズ構成は次のようになる予定です.

  • ルンバを Ubuntu PC から ROS を使って USB 有線操縦する(→本記事)
  • ルンバを Raspberry Pi に接続して ROS を使って WiFi 経由で無線遠隔操作ロボットにする(→次回記事)

実行環境

ルンバを Ubuntu PC から ROS を使って USB 有線操縦することを目的とした今回の記事におけるハードウェア・ソフトウェア構成は以下のようになっています.

  • ルンバ 961
  • micro USB ケーブル
  • PC: Dell Inspiron 13 5390
  • OS 等: Ubuntu 24.04 + ROS Jazzy (ROS2)
  • コントローラ(どちらか1つ)
    • Xbox360 互換ゲームパッド( 8bitDo SN30 pro – USB 有線 )
    • 3Dマウス( 3DConnexion SpaceMouse Wireless を有線で使用 )
  • 使用コード: https://github.com/y-yosuke/create_robot/tree/humble-add-setmode

OS などの環境については本記事執筆直近の動作検証では Ubuntu 24.04 と ROS Jazzy (ROS2) の組み合わせで行っていますが,過去に行った検証では Ubuntu 22.04 + ROS Humble の組み合わせでも動作確認しています.

使用コードについては今回のシステム構成において使いやすいように Create Robot のソフトウェア GitHub リポジトリ https://github.com/AutonomyLab/create_robot から
フォーク https://github.com/y-yosuke/create_robot/tree/humble-add-setmode して利用しています.

インストール・ビルド

Ubuntu 24.04 に ROS Jazzy のインストールする手順は下記リンク先の ROS 2 Documentation: Jazzy – Installation Ubuntu (deb packages) を参照して実行してください.

依存パッケージをインストールできるように rosdep をセットアップしておきます.

$ sudo apt install python3-rosdep
$ sudo rosdep init
$ rosdep update

ビルドのために colcon 関連パッケージをインストールします.

$ sudo apt install python3-colcon-common-extensions

ROS ワークスペースを作成して GitHub からコードをクローンし,インストール・ビルドを実行します.

$ source /opt/ros/jazzy/setup.bash
$ mkdir -p ~/roomba_ws/src
$ cd ~/roomba_ws/src/
$ git clone -b humble-add-setmode https://github.com/y-yosuke/create_robot.git
$ git clone https://github.com/AutonomyLab/libcreate.git
$ gnome-text-editor ~/roomba_ws/src/libcreate/include/create/packet.h
$ cd ~/roomba_ws/
$ rosdep install -r -y --from-paths src --ignore-src
$ colcon build
$ source ~/roomba_ws/install/setup.bash

2024.09.20 追記

上記手順の libcreate を git clone したあとに下記コマンドを追加しています.

$ gnome-text-editor ~/roomba_ws/src/libcreate/include/create/packet.h

本コマンドを実行するとテキストエディタが起動して修正が必要なファイル packet.h が開かれます.

下のように packet.h の 35行目 に #include <string> を挿入してファイルを保存してからテキストエディタを閉じます.

libcreate / include / create / packet.h

#define CREATE_PACKET_H

#include <mutex>
#include <string>

namespace create {
  class Packet {

これはビルドするのに必要な下記リンク先の修正のプルリクエストがまだ反映されていないための修正作業です.今後このプルリクエストが libcreate の master ブランチにマージされた後は不要となります.

ルンバの USB 有線操縦

ハードウェアのセットアップ

Ubuntu PC のソフトウェアのセットアップが終了したら Ubuntu PC にルンバとゲームパッドもしくは 3D マウスを接続します.

Ubuntu PC + ゲームパッド <==(USBケーブル)==> ルンバ 900シリーズ

ルンバ 900 シリーズの micro USB ソケットは上面右側にある細長いカバーを外すとあります.このカバーは工具なしで手で外すことができます.

デバイスの権限設定

ルンバが接続されているシリアルポートの権限を変更してユーザからもアクセス可能な状態にします.

$ sudo chmod a+rw /dev/ttyACM0
$ sudo usermod -a -G dialout $USER

ソフトウェアの実行

ターミナル 1

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup create_1.launch

launch 後,正常に Ubuntu PC からルンバに通信が確立されているとルンバ側で短いビープ音が鳴ります.

ターミナル 2

ルンバへの速度指令を出すためのゲームパッドもしくは 3D マウスのノードを実行するためにターミナルをもう1つ開いて実行します.

< Xbox360 互換ゲームパッド使用の場合 >

Xbox360 互換ゲームパッドを用いてルンバに対する速度指令を出すノードを実行するのに joy_teleop.launch を起動します.

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup joy_teleop.launch
注)デッドマンスイッチ(現設定 L1 ボタン) を押しながらアナログスティック R を操作

< 3Dマウス( 3DConnexion SpaceMouse Wireless )使用の場合 >

3DConnexion SpaceMouse を用いてルンバに対する速度指令を出すノードを実行するのに spacenav_telelop.launch を起動します.

$ source ~/roomba_ws/install/setup.bash
$ ros2 launch create_bringup spacenav_teleop.launch 

spacenav_teleop.launch においてはデッドマン・スイッチの設定はないので SpaceMouse の前後・ヨー軸のねじり入力がそのままルンバへの速度指令として出力されます.

次の動画はゲームパットを用いてルンバを動かしたときのものです.デッドマン・スイッチの L1 を押しながらアナログスティック R を操作することでルンバへの速度指令が出力されている様子が見て取れるかと思います.

ルンバ操作を終了するときは各ターミナルで実行しているプロセスを Ctrl+C で終了してください.

今回の記事はここまでです.


本シリーズ次回の記事ではルンバが動きやすいようにバッテリー駆動のラズベリーパイをルンバと USB 接続し,カメラも併せてラズパイに接続することで,ルンバ 900 シリーズを WiFi を介した ROS 遠隔操作ロボットのようにしてみる様子を紹介する予定です.