LoginSignup
1
0

ROS2 Humble、ROS2 Iron間のDockerコンテナ間通信で失敗する

Posted at

現象

  • docker runで起動したROS2 HumbleのDockerコンテナでPublishしたTopicをROS2 IronのDockerコンテナで見るとROS2 Humble側がstd::bad_allocを出して落ちる

環境 

公式のDocker Image

ROS2 Humble : osrf/ros:humble-desktop
ROS2 Iron : osrf/ros:iron-desktop

--net=host --ipc=hostを付けて実行した場合

HumbleとIronのDocker containerを起動

 docker run -it --rm --net=host --ipc=host osrf/ros:humble-desktop bash
 docker run -it --rm --net=host --ipc=host osrf/ros:iron-desktop bash

Humble側でtalkerを実行

 ros2 run demo_nodes_cpp talker

Iron側でros2 topic echo /chatterros2 topic listを実行すると以下のメッセージを出してNodeが終了する。

[INFO] [1707644091.355929196] [talker]: Publishing: 'Hello World: 17'
[INFO] [1707644092.355686072] [talker]: Publishing: 'Hello World: 18'
[INFO] [1707644093.355800370] [talker]: Publishing: 'Hello World: 19'
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
[ros2run]: Aborted

--net=host --ipc=hostを付けないで実行した場合

--net=hostを付けないでデフォルトのdocker0 bridgeネットワーク上で通信する。

 docker run -it --rm  osrf/ros:humble-desktop bash
 docker run -it --rm  osrf/ros:iron-desktop bash

同様にIron側でros2 topic echo /chatterros2 topic listを実行するとNodeが終了する。

[INFO] [1707645792.494870332] [talker]: Publishing: 'Hello World: 2'
[INFO] [1707645793.494768898] [talker]: Publishing: 'Hello World: 3'
[INFO] [1707645794.494608487] [talker]: Publishing: 'Hello World: 4'
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
[ros2run]: Aborted

DDSをEclipse Cyclone DDSに変更する

DDSをデフォルトのFast DDSからEclipse Cyclone DDSに変更する。
Cyclone DDS インストール済みのDockerfileを作成

ARG ROS_DISTRO=iron
FROM osrf/ros:${ROS_DISTRO}-desktop

RUN apt-get update && apt-get install -y \
    ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

Humble用のImage 作成

docker build --build-arg ROS_DISTRO=humble -t osrf/ros:humble-desktop-cyclonedds .

Iron用のImage 作成

docker build --build-arg ROS_DISTRO=iron -t osrf/ros:iron-desktop-cyclonedds .

同様に実行

Humble

docker run -it --rm --net=host --ipc=host osrf/ros:humble-desktop-cyclonedds bash

Iron

docker run -it --rm --net=host --ipc=host osrf/ros:iron-desktop-cyclonedds bash

Humble側でros2 run demo_nodes_cpp talker実行したあと、
Iron側でros2 topic echo /chatterros2 topic listを実行するとHumble側とIron側でそれぞれ以下のメッセージがでる

>>> [rcutils|error_handling.c:108] rcutils_set_error_state()
This error state is being overwritten:

  'invalid data size, at ./src/serdata.cpp:384'

with this new error message:

  'string data is not null-terminated, at ./src/serdata.cpp:384'

rcutils_reset_error() should be called after error handling to avoid this.
<<<
# ros2 topic list
[WARN] [1707647132.838054054] [rmw_cyclonedds_cpp]: Failed to parse type hash for topic 'ros_discovery_info' with type 'rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_' from USER_DATA '(null)'.
[WARN] [1707647132.838084382] [rmw_cyclonedds_cpp]: Failed to parse type hash for topic 'rt/rosout' with type 'rcl_interfaces::msg::dds_::Log_' from USER_DATA '(null)'.
[WARN] [1707647132.838100818] [rmw_cyclonedds_cpp]: Failed to parse type hash for topic 'rt/parameter_events' with type 'rcl_interfaces::msg::dds_::ParameterEvent_' from USER_DATA '(null)'.
[WARN] [1707647132.838104348] [rmw_cyclonedds_cpp]: Failed to parse type hash for topic 'rt/chatter' with type 'std_msgs::msg::dds_::String_' from USER_DATA '(null)'.
[WARN] [1707647132.838108761] [rmw_cyclonedds_cpp]: Failed to parse type hash for topic 'ros_discovery_info' with type 'rmw_dds_common::msg::dds_::ParticipantEntitiesInfo_' from USER_DATA '(null)'.
[WARN] [1707647132.838121432] [rmw_cyclonedds_cpp]: Failed to parse type hash for topic 'rt/parameter_events' with type 'rcl_interfaces::msg::dds_::ParameterEvent_' from USER_DATA '(null)'.
/chatter
/parameter_events
/rosout

コマンド実行・終了のタイミングで謎のメッセージが出るがIron側でros2 run demo_nodes_cpp listener実行してもNodeが落ちることはないので問題なく通信できてそう

参考

1
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
1
0