Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ros1_bridgeをつかう その2:teleop_twistと接続させる

実際のところ

前提

  • Ubuntu 22.04 LTS
    • ROS1 noetic on Docker
      • AgileX Tracerの環境構築済み
    • ROS 2 humble

ROS 1側の用意

$ roscore

ターゲットであるtracerのノードを起動

$ roslaunch tracer_bringup tracer_robot_base.launch

ROS1トピックとの接続

$ ros2 run teleop_twist_keyboard teleop_twist_keyboard

ros1_bridgeをつかう その1:環境構築

実際のところ

前提

構築

$ cd ~/dev_ws/src
$ colcon build --symlink-install --packages-select ros1_bridge --cmake-force-configure

環境に反映

$ source ~/dev_ws/install/setup.bash

起動

roscoreは立ち上げた状態で

$ ros2 run ros1_bridge dynamic_bridge

Ubuntu 22 LTS上に "ROS 1 noetic on Ubuntu 20 LTS "の環境をつくる

実際のところ

Dockerfile

# Ubuntu 20.04 LTSをベースイメージとして使用
FROM ubuntu:20.04

# 環境変数を設定
ENV DEBIAN_FRONTEND=noninteractive

# ROS Noeticのインストール
RUN apt-get update && apt-get install -y software-properties-common && \
    add-apt-repository universe && \
    apt-get update && \
    apt-get install -y curl && \
    curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | apt-key add - && \
    sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' && \
    apt-get update && \
    apt-get install -y ros-noetic-desktop-full

# 環境設定
RUN echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc

# ROSパッケージ管理ツールのインストール
RUN apt-get update && \
    apt-get install -y python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential

# rosdepの初期化
RUN rosdep init
RUN rosdep update

# 作業ディレクトリの設定
WORKDIR /root

# コンテナ起動時にbashを実行
CMD ["bash"]

ビルド

docker build -t ros:noetic .

起動

後々ROS2とつなぐので、ホストマシンと同一のネットワークに存在してもらいます

docker run --network host -it ros:noetic

ROS 2 humbleのcolconでビルドしたlaunchファイルはinstallディレクトリのもの

そりゃそうだろうという話ですが、なぜか詰まったため

実際のところ

ROS 2 humbleのcolconでビルドしたlaunchファイルはinstallディレクトリのものがコールされます。
srcにも同じものがあるので、たとえばlaunchファイルが直下のconfigファイルを参照していた場合は適切な所のを弄らないとダメです。

例:ROS 2 for xArmで標準では無効のserviceを有効化する

というわけで……ROS 2 for xArmで標準では無効のserviceを有効化する

$ cd ~/dev_ws/install/xarm_api/share/xarm_api/config
$ cp xarm_params.yaml xarm_user_params.yaml
$ nano xarm_user_params.yaml
$ cat xarm_user_params.yaml | grep set_position_aa
      set_position_aa: true

この状態でserviceをみると

$ ros2 service list | grep aa
/xarm/get_position_aa