文章目录
- 前情提要
- 1. ERROR: Service %s/spawn_entity unavailable. Was Gazebo started with GazeboRosFactory?
- 2. ERROR: [gzserver-1]: process has died [pid 155210, exit code 255, cmd 'gzserver /opt/ros/humble/share/turtlebot3_gazebo/worlds/turtlebot3_world.world -slibgazebo_ros_init.so -slibgazebo_ros_factory.so -slibgazebo_ros_force_system.so'].
前情提要
最近在使用UBUNTU22.04 on WSL2来学习ROS2,在尝试ROS2 workshop给的Cartographer教程时遇到了不少报错问题,在此汇总。
1. ERROR: Service %s/spawn_entity unavailable. Was Gazebo started with GazeboRosFactory?
场景描述
最近在使用UBUNTU22.04 on WSL2来学习ROS2,在尝试ROS2 workshop给的Cartographer教程时,当执行完3.3.1的命令后,gazebo报错如下:
[spawn_entity.py-4] [ERROR] [1721906966.950634417] [spawn_entity]: Service %s/spawn_entity unavailable. Was Gazebo started with GazeboRosFactory?
[spawn_entity.py-4] [ERROR] [1721906966.950878273] [spawn_entity]: Spawn service failed. Exiting.
解决方案
新开一个命令行,输入如下命令后再开启gazebo。1
gazebo -s libgazebo_ros_init.so -s libgazebo_ros_factory.so myworld.world
这样做是为了确保gazebo加载了gazebo_ros_factory相关库。
PS. 该报错不止以上未加载gazebo_ros_factory等库这一种原因,还有可能源于服务、节点等命名问题,见2。
2. ERROR: [gzserver-1]: process has died [pid 155210, exit code 255, cmd ‘gzserver /opt/ros/humble/share/turtlebot3_gazebo/worlds/turtlebot3_world.world -slibgazebo_ros_init.so -slibgazebo_ros_factory.so -slibgazebo_ros_force_system.so’].
解决方案
尝试了网上找到的两种方案,均未解决我的问题,但还是列在这里供大家参考。
- 安装所有gazebo相关包,source后再重试
sudo apt-get install ros-humble-gazebo-*
source /usr/share/gazebo/setup.bash
- 杀掉所有gazebo相关进程
gazebo执行时主要工作的有两个进程:gzclient 和 gzserver。gzclient 负责仿真物理传感器和渲染等工作,gzserver则提供GUI接口,两者通过gazebo库函数进行通信。这两个进程不能正常停掉释放资源时,便会影响gazebo的正常启动与工作。杀掉这些进程并重新执行:
killall gzserver
killall gzclient
该方法对部分人奏效,但不包括我。
2024.7.30 更新:重启电脑后,再次启动wsl,此问题神奇解决,gzserver-1不再无故中止运行。玄学问题+1