I’m using a Lynx mobile base together with an Ouster OS1-32 LiDAR. I run the LiDAR driver using the husarion/ouster-docker repository on the user PC, launched with:
docker compose -f compose.ouster.yaml up
This works as expected. I also publish a static transform between the LiDAR (os_sensor) and the robot (/lynx/mount_link).
I want to use the husarion_ugv_autonomy_ros repository for SLAM and navigation. Before launching navigation, I set:
export OBSERVATION_TOPIC=/ouster/points
export OBSERVATION_TOPIC_TYPE=pointcloud
export CAMERA_IMAGE_TOPIC={camera_image_topic}
export CAMERA_INFO_TOPIC={camera_info_topic}
export SLAM=True
export ROBOT_MODEL=lynx
export ROBOT_NAMESPACE=lynx
(I’m not using cameras or docking at the moment, so those topics are left unused.)
Then I start navigation from the user PC:
just start-hardware navigation
And the web interface:
just start-visualization
Problem:
As soon as I start the navigation container, ROS2 communication between the user PC (10.15.20.3) and the robot’s internal PC (10.15.20.2) breaks.
On the user PC (10.15.20.3)
ros2 topic list shows the navigation topics (/lynx/map, etc.)
BUT all core robot topics disappear — such as:
-
e-stop
-
battery status
-
/base_link,/cover_link,/mount_link, and related TFs (from/tfand/tf_static)
The TF graph on the user PC only shows LiDAR frames: os_imu, os_sensor, os_lidar.
On the robot built-in PC(10.15.20.2)
ros2 topic list shows the topics from husarion_ugv_ros (which runs automatically on startup).
BUT LiDAR topics and navigation topics are missing.
The TF graph on the robot shows the complete Lynx mobile base tree (odom → base_link → mount_link → cover_link → wheels), but no LiDAR frames.
What I verified
-
RMW_IMPLEMENTATIONisrmw_cyclonedds_cppon both machines. -
ROS_DOMAIN_IDis empty on both. -
ROS_LOCALHOST_ONLYis empty on both. -
Ping between machines works.
-
Both run ROS2 Jazzy.
-
Stopping the navigation container does not restore communication.
-
Restarting containers does not help.
-
Full robot shutdown + power on the next day does restore communication. (shutdown + power on immediately (1 minute wait time) does no help for some reason)
-
In this state (normal ros communication), from the user PC (built-in PC as well) I can see topics from both:
-
the robot (via
husarion_ugv_ros) -
the Ouster driver container
-
-
Because the issue only appears after launching navigation, I suspect the cause is just start-hardware navigation- it’s Docker configuration.
compose.hardware.yaml:
x-common-config:
&common-config
network_mode: host
ipc: host
env_file: .env
services:
docking:
build:
context: ..
dockerfile: Dockerfile
container_name: docking
<<: *common-config
volumes:
- ./config:/config
- ../husarion_ugv_docking:/ros2_ws/src/husarion_ugv_autonomy_ros/husarion_ugv_docking
command: >
ros2 launch husarion_ugv_docking docking.launch.py
namespace:=${ROBOT_NAMESPACE:-lynx}
use_wibotic_info:=True
camera_image_topic:=${CAMERA_IMAGE_TOPIC:-/lynx/camera/color/image_raw}
camera_info_topic:=${CAMERA_INFO_TOPIC:-/lynx/camera/color/camera_info}
apriltag_output_dir:=/config/apriltags
apriltag_size:=0.08
use_sim:=False
navigation:
build:
context: ..
dockerfile: Dockerfile
container_name: navigation
<<: *common-config
volumes:
- ./config:/config
- ../maps:/maps
- ../husarion_ugv_navigation:/ros2_ws/src/husarion_ugv_autonomy_ros/husarion_ugv_navigation
command: >
ros2 launch husarion_ugv_navigation bringup_launch.py
namespace:=${ROBOT_NAMESPACE:-lynx}
observation_topic:=${OBSERVATION_TOPIC:-/ouster/points}
observation_topic_type:=${OBSERVATION_TOPIC_TYPE:-pointcloud}
slam:=${SLAM:-True}
use_sim_time:=False
robot_model:=${ROBOT_MODEL:-lynx}
It would be appreciated if you could give me tips to overcome this problem.
Thanks in advance