Gazebo中针对Gazebo软件或生成模型出现process has died问题的参考方案

在基于ROS机器人仿真时,打开Gazebo经常出现一些问题,比如Gazebo窗口打开了,终端却显示gazebo进程已死。本文记录了一次遇到的类似问题,并给出了在部分情况下能够适用的参考方案。


问题描述

[gazebo-1] process has died [pid 35399, exit code 255, cmd /opt/ros/noetic/lib/gazebo_ros/gzserver -e ode worlds/empty.world __name:=gazebo __log:=/home/zkr/.ros/log/e51b3962-dfae-11ec-8295-55409ce7a650/gazebo-1.log].
log file: /home/zkr/.ros/log/e51b3962-dfae-11ec-8295-55409ce7a650/gazebo-1*.log

上述报错是打开Gazebo后常出现的问题,除此之外,也会有打开一些节点,或者加载模型的错误,如下所示:

[spawn_husky_model-10] process has died [pid 21703, exit code 1, cmd /opt/ros/noetic/lib/gazebo_ros/spawn_model -x 0.0 -y 0.0 -z 0.0 -Y 0.0 -unpause -urdf -param robot_description -model husky -robot_namespace / __name:=spawn_husky_model __

这些报错看起来都差不多(都有process has died),原因却千差万别。另外,这些错误可能还将继续引发连锁反应,使得后续启动的相关节点报错,需要耐心排查。有时,前后的一些错误也会给查找错误原因一定启示,如下所示:

[ERROR] [1653871548.080154246, 1263.793000000]: SpawnModel: Failure - model name husky already exist.
[ERROR] [1653871548.080916, 1263.794000]: Spawn service failed. Exiting.

解决方案

  1. 升级Gazebo
    如果一开始打开就存在这个问题,可能是Gazebo版本和使用的包有一些冲突,可以尝试升级Gazebo到最新版本。
  2. 关闭Gazebo服务
    如果第一次打开Gazebo模型没有问题,关闭后再次打开同样的文件出现gazebo process has died,可能是由于之前关闭Gazebo出现问题,导致实际没有完全关闭,运行如下指令关闭
killall gzserver
  1. 修改模型名称
    针对模型生成程序process has died,如果提示是model name already exist,可能是由于之前打开环境后进行了修改,并保持了机器人模型在环境中,再次打开加载同样的模型就冲突了。此时,检查环境模型是否正确,可以在生成机器人的启动脚本(一般叫spawn_xxx机器人.launch)中修改机器人名字进行验证测试,如下所示:
    
    <node name="spawn_xxx机器人_model" pkg="gazebo_ros" type="spawn_model"
        args="-x $(arg x)
              -y $(arg y)
              -z $(arg z)
              -Y $(arg yaw)
              -unpause
              -urdf
              -param robot_description
              -model 模型名称
              -robot_namespace $(arg robot_namespace)" />
              
  group>

更改-model选项后的<模型名称>,就可以在Gazebo中生成新名称的机器人避免冲突。

你可能感兴趣的:(自动驾驶,人工智能)