
解决以下报错
bash
[spawn_entity.py-2] 2026-06-13 14:06:23.338 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7419: open_and_lock_file failed -> Function open_port_internal
[spawn_entity.py-2] 2026-06-13 14:06:23.338 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7423: open_and_lock_file failed -> Function open_port_internal
[spawn_entity.py-2] 2026-06-13 14:06:23.338 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7425: open_and_lock_file failed -> Function open_port_internal
[spawn_entity.py-2] 2026-06-13 14:06:23.338 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7427: open_and_lock_file failed -> Function open_port_internal
[spawn_entity.py-2] 2026-06-13 14:06:23.339 [RTPS_TRANSPORT_SHM Error] Failed init_port fastrtps_port7431: open_and_lock_file failed -> Function open_port_internal
这是 ROS 2 FastDDS(FastRTPS)共享内存(SHM)端口冲突/残留 的典型报错,不是 Gazebo 本身的错,是 ROS 2 底层通信层的问题。
一、报错含义
Failed init_port fastrtps_port7419: open_and_lock_file failed
- FastDDS 想用 共享内存文件
/dev/shm/fastrtps_portXXXX做进程间通信。 - 但这个文件已经存在、被锁、或权限不够,导致新节点抢不到,直接报错。
- 常见于:之前没正常退出、多次启动/关闭、Gazebo+ROS2 反复启停。
二、最快解决(直接复制执行)
1)杀干净所有残留 ROS2/Gazebo 进程
bash
pkill -9 gazebo gzserver gzclient ros2 rclcpp
pkill -9 fastrtps
2)删除所有残留共享内存文件(关键)
bash
rm -f /dev/shm/*fastrtps*
三、根本原因(简单说)
- 残留文件没清:上次关仿真时没正常退出,/dev/shm 里留下 fastrtps_port 文件,新进程打不开。
- 权限不够:当前用户对 /dev/shm 没有读写权限。
- Domain ID 冲突:同一机器多个 ROS2 实例用同一个 ID(默认0),互相抢端口。
- FastDDS 版本 bug:特定版本(如 Humble 默认)SHM 稳定性差。