【想到什么发什么】在 Gazebo 中使用 gazebo_models_worlds_collection 丰富仿真场景
在 Gazebo 中使用 gazebo_models_worlds_collection 丰富仿真场景环境说明本教程基于Ubuntu 22.04 LTSROS 2 HumbleGazebo Classic 11编写。项目介绍gazebo_models_worlds_collection 是一个开源资源库整合了来自多个公共项目的 Gazebo 模型和世界文件包括3DGEMSRotorSTU DelftARTI-RobotsClearpath RoboticsFetch Robotics这些资源涵盖了从简单几何体到完整城市街道、实验室、仓库等各种仿真场景对机器人导航、SLAM、路径规划算法的测试非常有用省去了自己搭建仿真环境的大量时间。资源结构项目主要包含两类资源gazebo_models_worlds_collection/ ├── models/ # Gazebo 模型文件障碍物、建筑、家具等 ├── worlds/ # Gazebo 世界文件完整的仿真场景 └── screenshots/ # 各世界文件的预览截图models/独立的 3D 模型可以插入到任何世界文件中worlds/完整的仿真场景包含地形、建筑、光源等安装与配置第一步克隆仓库选择一个合适的目录存放推荐放在 home 目录下cd~gitclone https://github.com/chaolmu/gazebo_models_worlds_collection.git第二步配置环境变量需要将模型目录和世界目录分别添加到 Gazebo 对应的环境变量中这样 Gazebo 才能找到这些资源。编辑~/.bashrcnano~/.bashrc在文件末尾添加以下两行注意替换为实际路径# Gazebo 模型路径用于在场景中插入模型exportGAZEBO_MODEL_PATH$GAZEBO_MODEL_PATH:~/gazebo_models_worlds_collection/models# Gazebo 资源路径用于不带绝对路径加载世界文件exportGAZEBO_RESOURCE_PATH$GAZEBO_RESOURCE_PATH:~/gazebo_models_worlds_collection/worlds保存后让配置立即生效source~/.bashrc第三步验证配置确认环境变量已正确设置echo$GAZEBO_MODEL_PATHecho$GAZEBO_RESOURCE_PATH输出中应包含你添加的路径。快速启动启动测试世界配置完成后可以直接用世界文件名启动 Gazebo无需绝对路径# 加载小城市场景gazebo small_city.world# 加载户外场景gazebo outdoor.world也可以结合 ROS 2 启动# source ROS 2 环境source/opt/ros/humble/setup.bash# 通过 ros2 launch 启动 Gazebo 并加载世界ros2 launch gazebo_ros gazebo.launch.py world:~/gazebo_models_worlds_collection/worlds/small_city.world可用世界文件一览以下是部分常用的世界文件可根据需求选择世界文件名场景描述适用场景small_city.world小型城市街道城市导航、自动驾驶outdoor.world户外开阔地形室外 SLAM、路径规划indoor.world室内环境室内导航、家庭机器人cyberzoo.world实验室竞技场无人机实验、竞技测试willowgarage.world办公楼场景服务机器人hospital.world医院走廊医疗机器人warehouse.world仓库场景工业机器人playpen.world围栏测试场算法初步测试提示可以在screenshots/目录中提前预览每个世界的外观再决定使用哪个。在 ROS 2 Launch 文件中使用实际开发中通常在 launch 文件中指定世界文件方便一键启动完整仿真系统。创建 launch 文件创建my_simulation.launch.pyfromlaunchimportLaunchDescriptionfromlaunch.actionsimportIncludeLaunchDescriptionfromlaunch.launch_description_sourcesimportPythonLaunchDescriptionSourcefromlaunch.substitutionsimportPathJoinSubstitutionfromlaunch_ros.substitutionsimportFindPackageShareimportosdefgenerate_launch_description():# 世界文件路径world_fileos.path.expanduser(~/gazebo_models_worlds_collection/worlds/small_city.world)# 包含 gazebo_ros 的启动文件gazebo_launchIncludeLaunchDescription(PythonLaunchDescriptionSource([PathJoinSubstitution([FindPackageShare(gazebo_ros),launch,gazebo.launch.py])]),launch_arguments{world:world_file,verbose:false,}.items())returnLaunchDescription([gazebo_launch,])运行ros2 launch my_simulation.launch.py在世界文件中引用模型配置好GAZEBO_MODEL_PATH后可以在自定义世界文件中直接引用这些模型?xml version1.0?sdfversion1.6worldnamemy_world!-- 基础光源和地面 --includeurimodel://sun/uri/includeincludeurimodel://ground_plane/uri/include!-- 引用 collection 中的模型 --!-- 例如在场景中放置一栋建筑 --includeurimodel://house_1/uripose5 0 0 0 0 0/pose/include!-- 放置另一个模型 --includeurimodel://construction_cone/uripose2 2 0 0 0 0/pose/include/world/sdf启动自定义世界gazebo my_world.world在 Gazebo 界面中插入模型除了写在世界文件里也可以在 Gazebo 运行时通过 GUI 动态插入模型启动 Gazebo 后点击左侧面板Insert标签如果模型路径已正确配置会看到来自 collection 的模型列表点击模型名称然后在场景中点击放置位置常见问题问题 1启动 Gazebo 后世界文件加载失败错误信息Unable to find file with URI [small_city.world]原因GAZEBO_RESOURCE_PATH未正确配置或 source 未生效。解决方法# 确认环境变量echo$GAZEBO_RESOURCE_PATH# 如果为空重新 sourcesource~/.bashrc# 或使用绝对路径启动gazebo ~/gazebo_models_worlds_collection/worlds/small_city.world问题 2模型加载后显示为白色方块无纹理原因Gazebo 找不到模型的纹理文件通常是GAZEBO_MODEL_PATH路径设置有误。解决方法# 确认路径是否包含 models 目录echo$GAZEBO_MODEL_PATH# 检查模型文件是否存在ls~/gazebo_models_worlds_collection/models/# 在 Gazebo 界面手动添加路径# Edit → GUI → Model Paths → 添加 models 目录问题 3Gazebo 启动极慢原因默认会连接 Gazebo 在线模型数据库。解决方法禁用在线数据库连接echoexport GAZEBO_MODEL_DATABASE_URI~/.bashrcsource~/.bashrc问题 4模型纹理颜色偏暗这是从 SketchUp 导出到 Gazebo 的常见问题。找到对应模型的.dae文件在/diffuse后添加 ambient 白色设置/diffuseambientcolor1 1 1 1/color/ambient总结gazebo_models_worlds_collection是一个非常实用的仿真资源库配置步骤简单主要就三步克隆仓库配置GAZEBO_MODEL_PATH和GAZEBO_RESOURCE_PATHsource ~/.bashrc直接gazebo 世界文件名启动合理利用这些现成的场景资源可以大幅节省仿真环境搭建的时间让你专注于算法本身的开发和调试。参考链接gazebo_models_worlds_collection GitHubGazebo Classic 官方文档ROS 2 Humble 文档