タグアーカイブ jazzy

著者: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

テック技販フォースセンサロボット用アンプが 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 で遠隔操作ロボットに – 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 遠隔操作ロボットのようにしてみる様子を紹介する予定です.