ROS Gazebo(三):启动gazebo/URDF

本文介绍Gazebo仿真环境的启动方式及机器人模型的加载方法,包括使用roslaunch启动空环境和预设环境、创建自定义Gazebo ROS Package流程、通过ROS Service Call和Model Database方法加载URDF模型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

打开Gazebo的方式主要有两种:rosrun 和 roslaunch。

1、启动ROS节点

启动ROS节点、bring up 机器人的标准工具是roslaunch。打开一个空的Gazebo世界命令如下:

roslaunch gazebo_ros empty_world.launch

参数:

  • paused
    在暂停状态打开Gazebo (default false)
  • use_sim_time
    节点启动模拟时间,启动主题topic /clock (default true)
  • gui
    启动Gazebo用户接口 (default true)
  • headless
    禁止仿真器调用任何渲染组件。不能在gui:=true (default false)是使用
  • debug
    用gdb (default false)调试模式启动 gzserver (Gazebo Server)

例如:

roslaunch gazebo_ros empty_world.launch paused:=true use_sim_time:=false gui:=true throttled:=false headless:=false debug:=true

2、demo 环境

还有一些demo可以直接使用,它们在包含在gazebo_ros功能包中,包括:

roslaunch gazebo_ros willowgarage_world.launch
roslaunch gazebo_ros mud_world.launch
roslaunch gazebo_ros shapes_world.launch
roslaunch gazebo_ros rubble_world.launch

注意mud_world.launch中,加入了一个机械关节,文件如下:

  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="worlds/mud.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
    <arg name="paused" value="false"/>
    <arg name="use_sim_time" value="true"/>
    <arg name="gui" value="true"/>
    <arg name="headless" value="false"/>
    <arg name="debug" value="false"/>
  </include>
</launch>

所有的文件都继承了empty.world,只改变了一个参数:world_name

这里写图片描述

3、创建Gazebo ROS Package

1、建立工作空间

/home/user/catkin_ws/src

2、编写sdf文件

文件夹目录如下:

../catkin_ws/src
    /MYROBOT_description
        package.xml
        CMakeLists.txt
        /urdf
            MYROBOT.urdf
        /meshes
            mesh1.dae
            mesh2.dae
            ...
        /materials
        /cad
    /MYROBOT_gazebo
        /launch
            MYROBOT.launch
        /worlds
            MYROBOT.world
        /models
            world_object1.dae
            world_object2.stl
            world_object3.urdf
        /materials
        /plugins

3、创建通用的 World 文件

  • 创建ROS功能包

  • 创建launch文件夹

  • 创建 YOUROBOT.launch 文件

<launch>
  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find MYROBOT_gazebo)/worlds/MYROBOT.world"/>
    <!-- more default parameters can be changed here -->
  </include>
</launch>
  • 创建MYROBOT.world 文件
<?xml version="1.0" ?>
<sdf version="1.4">
  <world name="default">
    <include>
      <uri>model://ground_plane</uri>
    </include>
    <include>
      <uri>model://sun</uri>
    </include>
    <include>
      <uri>model://gas_station</uri>
      <name>gas_station</name>
      <pose>-2.0 7.0 0 0 0 0</pose>
    </include>
  </world>
</sdf>
  • 运行文件
. ~/catkin_ws/devel/setup.bash
roslaunch MYROBOT_gazebo MYROBOT.launch

4、加载 URDF 模型

如何把自己建立的URDF模型添加到gazebo环境中?

利用 roslaunch,有两种方法:

  • ROS Service Call Spawn Method

这种方法保持ROS软件包在不同电脑间轻松移植。只要软件包在一个ROS包路径中即可。不过要求编写一个ROS service call脚本。

  • Model Database Method

只要放置在默认的数据库路径中,或者自己建立一个数据库,并把它包含在环境变量中


1、ROS Service Call

利用 pawn_model脚本向 gazebo_ros 节点(在主题中,空间名为”gazebo” )发出服务请求,进而添加 URDF 到 Gazebo 中。

rosrun gazebo_ros spawn_model -file `rospack find MYROBOT_description`/urdf/MYROBOT.urdf -urdf -x 0 -y 0 -z 1 -model MYROBOT

如果是.xacro,可以转化为 urdf 文件:

rosrun xacro xacro.py `rospack find pr2_description`/robots/pr2.urdf.xacro -o /tmp/pr2.urdf

查看其关节图:

check_urdf pr2.urdf
urdf_to_graphiz pr2.urdf

cd ~
rosrun tf view_frames
evince frames.pdf

查看 pawn_model的所有参数,可以运行:

rosrun gazebo_ros spawn_model -h

launch文件中,可以编写为形如:

<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-file $(find baxter_description)/urdf/baxter.urdf -urdf -z 1 -model baxter" />

例子:

<!-- Convert an xacro and put on parameter server -->
<param name="robot_description" command="$(find xacro)/xacro.py $(find pr2_description)/robots/pr2.urdf.xacro" />

<!-- Spawn a robot into Gazebo -->
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model pr2" />

2、Model Database

此种方法需要编辑 sdf 文件,官方的模型都是采用的这种方法。

参考

https://bitbucket.org/osrf/gazebo_models/downloads/
http://gazebosim.org
http://wiki.ros.org/urdf

<think>我们正在解决GazeboROS环境中启动失败的问题,错误信息为:[pid 111273, exit code 255]。 首先,我们需要分析可能导致Gazebo启动失败的原因。常见的原因包括: 1. Gazebo模型没有正确加载(例如,模型下载不完整或缺失) 2. 环境变量设置问题(如GAZEBO_MODEL_PATH, GAZEBO_PLUGIN_PATH等) 3. 端口占用(Gazebo默认使用多个端口,如果被占用会导致启动失败) 4. 显卡驱动或OpenGL问题(导致Gazebo无法正常渲染) 5. 依赖包缺失 根据exit code 255,通常表示程序异常退出。我们可以按照以下步骤进行排查: 步骤1:尝试单独启动Gazebo 在终端运行: gazebo 观察是否能够正常启动。如果单独启动Gazebo也有问题,那么可能是Gazebo安装或环境配置的问题。 步骤2:检查Gazebo模型 有时候因为网络原因,Gazebo模型没有下载完全。我们可以尝试运行以下命令来安装Gazebo模型: sudo apt-get install gazebo11-common # 请根据你的Gazebo版本调整,如gazebo9, gazebo7等 或者手动下载模型并放置到~/.gazebo/models目录下。 步骤3:检查环境变量 确保ROS环境变量已经设置。通常,在运行ROS相关命令前,需要运行: source /opt/ros/<ros_distro>/setup.bash 其中<ros_distro>是你的ROS发行版(如melodic、noetic等)。 另外,检查Gazebo相关的环境变量: echo $GAZEBO_MODEL_PATH echo $GAZEBO_PLUGIN_PATH echo $GAZEBO_RESOURCE_PATH 如果这些变量没有正确设置,可以参考Gazebo官方文档设置。 步骤4:检查端口占用 使用以下命令查看是否有程序占用了Gazebo的端口(默认端口为11345): netstat -tulpn | grep 11345 如果端口被占用,可以尝试关闭占用端口的程序,或者更改Gazebo使用的端口(通过设置环境变量ROS_MASTER_URI和GAZEBO_MASTER_URI)。 步骤5:检查显卡驱动 确保你的显卡驱动已正确安装,并且支持OpenGL。可以运行: glxinfo | grep "OpenGL version" 如果输出显示OpenGL版本较低或不支持,可能需要更新显卡驱动。 步骤6:查看日志 Gazebo启动失败时,通常会在终端输出错误信息。另外,可以查看~/.gazebo/gzserver/目录下的日志文件。 步骤7:重新安装GazeboROS相关包 如果以上步骤都无法解决,可以尝试重新安装GazeboROSgazebo插件: sudo apt-get install --reinstall gazebo11 ros-<ros_distro>-gazebo-ros-pkgs ros-<ros_distro>-gazebo-ros-control 根据上述步骤,逐步排查问题。 注意:由于错误信息有限,可能需要根据实际运行时的错误信息进一步分析。 相关问题: 1. 如何解决Gazebo启动时出现的黑屏问题? 2. ROSGazebo的通信机制是怎样的? 3. 如何自定义Gazebo模型并导入到ROS中?</think>### Gazebo ROS节点启动失败问题排查指南 当GazeboROS环境中启动失败并显示`[pid 111273, exit code 255]`错误时,通常表示进程异常终止。以下是系统性的排查步骤: #### 1. **检查环境变量配置** ```bash # 验证ROS环境变量 echo $ROS_MASTER_URI echo $GAZEBO_MASTER_URI ``` 确保两个URI一致(通常为`http://localhost:11311`)。若不一致,需更新: ```bash export GAZEBO_MASTER_URI=$ROS_MASTER_URI ``` #### 2. **验证Gazebo依赖** ```bash # 检查关键依赖 sudo apt install ros-${ROS_DISTRO}-gazebo-ros-pkgs \ ros-${ROS_DISTRO}-gazebo-plugins \ libgazebo11-dev ``` 将`${ROS_DISTRO}`替换为实际ROS版本(如`noetic`)。 #### 3. **端口占用排查** Gazebo默认使用端口`11345`和`11311`: ```bash lsof -i :11345 # 检查端口占用 kill -9 <占用进程PID> # 强制释放端口 ``` #### 4. **模型路径修复** ```bash # 重置模型路径 export GAZEBO_MODEL_PATH=$HOME/.gazebo/models:/usr/share/gazebo-11/models # 下载缺失模型(可选) wget -P ~/.gazebo/models http://models.gazebosim.org/sun/model.tar.gz ``` #### 5. **显卡驱动兼容性** ```bash # 验证OpenGL支持 glxinfo | grep "OpenGL version" ``` 若输出低于OpenGL 3.3,需更新显卡驱动: ```bash sudo ubuntu-drivers autoinstall ``` #### 6. **调试Gazebo启动** 通过`--verbose`输出详细日志: ```bash rosrun gazebo_ros gzserver --verbose ``` 观察日志中`[Err]`字段定位具体错误。 #### 7. **重装Gazebo-ROS桥接包** ```bash sudo apt purge ros-${ROS_DISTRO}-gazebo-* sudo apt install ros-${ROS_DISTRO}-gazebo-ros-pkgs ``` ### 常见解决方案 1. **环境变量冲突** 在`.bashrc`中添加: ```bash unset GTK_PATH export LIBGL_ALWAYS_SOFTWARE=1 ``` 2. **模型加载失败** 删除损坏缓存: ```bash rm -rf ~/.gazebo/*.log ~/.gazebo/models ``` 3. **权限问题** 授予当前用户设备权限: ```bash sudo usermod -aG video $USER ``` > **关键提示**:若使用虚拟机,需启用3D加速(VirtualBox:设置 > 显示 > 启用3D加速)[^1]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值