news 2026/4/14 10:22:44

从 Blender 建模到 Gazebo 仿真:海上工业平台仿真场景搭建全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从 Blender 建模到 Gazebo 仿真:海上工业平台仿真场景搭建全流程

从 Blender 建模到 Gazebo 仿真:海上工业平台仿真场景搭建全流程

前言

这篇文章记录了在Blender, Gazebo中搭建仿真环境的全流程。本项目研究的是机器人在工业场景下的应用,需要一个尽可能真实的仿真环境来验证机器人的自主巡检能力。

建模对象是一个海上制氢平台,搭建的场景尺寸约 30m × 15m × 3m,包含主楼、集装箱、管道、储罐、楼梯和栏杆等典型海上平台结构,如图所示。

系统整体由三部分构成:

  • Blender构建三维场景模型
  • Gazebo生成带碰撞体的仿真环境
  • 机器人系统集成进去完成导航和巡检

本文重点介绍前两部分,机器人系统是参照B站up主 “鱼香ROS机器人” 的视频来进行搭建的,有兴趣的朋友可以参考学习,这一部分只做简单说明。


一、系统架构

整个工作流程如下:

  1. 在 Blender 中参照平台结构建立可视化模型,导出为.obj.dae文件
  2. 将模型导入 Gazebo,自动生成碰撞模型,保存为.world文件
  3. 通过 ROS 2 的 launch 文件将机器人系统集成到仿真场景中,完成导航和自主巡检

二、Blender 建模与导出

2.1 建模思路

Blender 是一款免费开源的三维建模软件,支持完整的 3D 制作流程,在工业设计和机器人仿真领域有广泛应用。

建模时应遵循:用简化几何体代替精细模型。仿真环境的核心需求是准确的碰撞检测,所以平台上的所有结构都用基础几何形体来近似表达,同时对模型表面做了适当细分(4-5次),以保证后续碰撞体生成的精度。

建模完成后,需要在导出前确认所有物体的 Scale 均已应用为 1(在属性面板 → Item → Scale 中检查),未应用的缩放会导致导入 Gazebo 后尺寸异常。

2.2 导出设置

在顶部菜单选择:

File → Export → Wavefront (.obj)

或者:

File → Export → Collada (.dae)

⚠️关键设置:导出窗口中务必将Up Axis 设为 Z,Forward Axis 设为 Y。忽略这一步会导致模型导入 Gazebo 后出现方向错乱(通常表现为模型躺倒)。如果仍有错误可以继续调整轴向设置。

此项目中将导出文件命名为offshore_visual.obj,这里是保存在桌面。


三、将模型导入 Gazebo

导出的.obj.dae文件有两种方式导入 Gazebo,可根据需求选择。

方案一:使用 Gazebo Model Editor 导入(自动生成 collision)

Gazebo 内置的 Model Editor 可以直接导入 mesh 文件并自动生成对应的 collision model,省去手动编写 SDF 碰撞参数的工作,更加快捷直观,而且生成的collision model精度与视觉模型匹配,较为精准,是首推的导入方法。

操作步骤:

  1. 打开 Gazebo,点击菜单Edit → Model Editor
  2. 在左侧Insert面板中点击Custom Shapes
  3. 点击Browse,选择导出的offshore_visual.obj
  4. 点击Import完成导入
  5. 退出Model Editor, 点击Gazebo中的save world as保存文件到 ROS 包的 world 目录,例如:
/path/src/fishbot_description/world/offshore_platform.world

Gazebo 会基于 mesh 几何形状自动生成碰撞体,导入后可在 Model Editor 中进一步调整位置和属性,也可以添加一些部件如阀门和障碍物。

验证碰撞模型是否生成

打开新的终端,执行:

gazebo /path/src/fishbot_description/world/offshore_platform.world

在world列表中右击offshore_platform → view → collision。就能看到场景的碰撞模型是否能正常生成。


方案二:手动创建配置文件

这种方式通过手动编写配置文件来加载模型,适合需要精确控制模型参数或手动添加新物品的场景。

第一步:建立目录结构
打开终端,执行:

mkdir-p~/.gazebo/models/offshore_platform/meshes

.obj文件(以及.mtl材质文件,如果有)复制进去:

cp~/Desktop/offshore_visual.obj ~/.gazebo/models/offshore_platform/meshes/cp~/Desktop/offshore_visual.mtl ~/.gazebo/models/offshore_platform/meshes/

要验证是否复制成功,执行:

ls -R ~/.gazebo/models/offshore_platform

随后的结构应该如下所示:

~/.gazebo/models/offshore_platform: meshes ~/.gazebo/models/offshore_platform/meshes: offshore_visual.obj offshore_visual.mtl

第二步:创建 model.config
用nano来打开和编辑model.config文件。

nano是 Linux 系统自带的命令行文本编辑器,直接在终端里打开和编辑文件,不需要图形界面。

model.config是 Gazebo 识别模型的入口文件,Gazebo 启动时会扫描~/.gazebo/models/下的所有目录,通过读取这个文件来注册模型并将其显示在 Insert 面板中。

打开新的终端,执行:

nano~/.gazebo/models/offshore_platform/model.config

随后编辑model.config文件

<?xml version="1.0"?><model><name>offshore_platform</name><version>1.0</version><sdfversion="1.6">model.sdf</sdf><author><name>user</name><email>user@example.com</email></author><description>offshore platform model for Gazebo Classic.</description></model>

保存退出:Ctrl+O→ 回车 →Ctrl+X

第三步:创建 model.sdf
同样用nano打开并编辑model.sdf文件。

model.sdf 是模型的核心描述文件,SDF(Simulation Description Format)是 Gazebo 专用的格式,用来定义模型在仿真中的完整信息,包括:

  • visual:模型的视觉外观,也就是在 Gazebo 中看到的样子,这里直接引用了从 Blender 导出的 .obj 文件
  • collision:碰撞体,定义模型的物理边界,机器人与环境的碰撞检测就依赖这部分。碰撞体不需要和视觉模型完全一致,通常用简单的 box、cylinder 来近似,以降低计算开销
  • static设为true:将模型设为静态,意味着它不会受重力或碰撞力影响而移动,适合用于固定的场景物体

每一个collision块都通过pose指定位置和姿态(x y z roll pitch yaw),通过 geometry指定形状和尺寸(单位:m)。

打开终端,执行:

nano~/.gazebo/models/offshore_platform/model.sdf

编辑model.sdf文件

<?xml version="1.0" ?><sdfversion="1.6"><modelname="offshore_platform"><static>true</static><linkname="platform_link"><!-- visual --><visualname="platform_visual"><geometry><mesh><uri>model://offshore_platform/meshes/offshore_visual.obj</uri><scale>1 1 1</scale></mesh></geometry></visual><!-- ========================= 1) floor ========================= --><collisionname="deck_collision"><pose>0 0 0 0 0 0</pose><geometry><box><size>30 15 0.1</size></box></geometry></collision><!-- ========================= 2) main building ========================= --><collisionname="main_building_collision"><pose>-12 -1.5 1 0 0 0</pose><geometry><box><size>6 12 2</size></box></geometry></collision><!-- ========================= 3) containers ========================= --><collisionname="mid_equipment_collision"><pose>-4 -3 1 0 0 0</pose><geometry><box><size>6 8 2</size></box></geometry></collision>

保存退出:Ctrl+O→ 回车 →Ctrl+X

编辑完成后打开 Gazebo,在左侧Insert面板中找到offshore_platform并插入场景。这时场景的视觉模型应该能够正常显示了。在world列表中右击offshore_platform → view → collision。就能看到场景的碰撞模型是否能正常生成。

点击Gazebo中的save world as保存文件到 ROS 包的 world 目录:

/path/src/fishbot_description/world/offshore_platform.world

💡 上面的 SDF 只包含了部分碰撞体作为示例实际场景中需要为每一个结构都添加对应的 块,工作量较大。推荐的做法是将模型的各部件尺寸和坐标整理后提供给 AI,让它直接生成model.sdf文件,再自己逐一校对调整。
可以看到,手动生成的碰撞模型精度没有自动生成的那么高,这也是我第一次尝试的方法。后来觉得不够高效,遂直接使用方案一自动生成的方法。


四、集成机器人系统

机器人系统基于 ROS 2 Galactic 开发,运行在 Ubuntu 20.04 上,具体的搭建过程请参考UP主 “鱼香ROS” 的视频。该系统主要由四个功能包组成:

  • Description Package:定义机器人的 URDF/XACRO 模型,包含 LiDAR、Camera、IMU 等传感器的配置,以及 Gazebo 仿真的 launch 文件。
  • Navigation Package:基于 Nav2 框架实现自主导航,使用预先通过 SLAM Toolbox 构建的地图完成定位和路径规划。
  • Application Package:提供独立调用的功能节点,包括位姿初始化、位置获取、单点导航和路径点跟随。
  • AutoPatrol Package:实现自动巡检逻辑,机器人按预定路径点依次巡逻,到达每个点后自动拍摄并保存图像。

将机器人集成到自定义 world 中只需修改gazebo.sim.launch.py中的 world 路径:

default_gazebo_world_path=os.path.join(urdf_package_path,'world','offshore_platform.world')

常见问题

地面闪烁(Z-fighting)

场景地面与 Gazebo 默认的ground_plane模型重叠时会出现闪烁。解决方法:在左侧 World 列表中找到ground_plane,右键 → View →Wireframe,将其切换为线框模式即可。


最后的最后,感谢大伙对这篇文章感兴趣并看到这里,新人第一次尝试在CSDN发文章,如果觉得有帮助,希望获得各位的点赞收藏加关注!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/14 10:20:35

FontViewOK:字体预览与对比的轻量级解决方案

在日常办公或设计工作中&#xff0c;你是否曾为选择合适的字体而烦恼&#xff1f;Word里字体列表很长&#xff0c;但每种字体到底长什么样&#xff0c;只能一个一个点开看&#xff1b;想对比几种字体效果&#xff0c;要来回切换&#xff1b;或者你需要打印一份字体样式表&#…

作者头像 李华
网站建设 2026/4/14 10:19:52

StructBERT中文语义匹配系统开源大模型部署:中小企业语义处理方案

StructBERT中文语义匹配系统开源大模型部署&#xff1a;中小企业语义处理方案 1. 项目概述 StructBERT中文语义智能匹配系统是一个专为中文文本处理设计的本地化解决方案。基于先进的孪生网络架构&#xff0c;这个系统能够准确计算文本相似度、提取语义特征&#xff0c;彻底解…

作者头像 李华
网站建设 2026/4/14 10:16:57

MogFace-large开发者必备:GitHub高效使用与模型源码管理教程

MogFace-large开发者必备&#xff1a;GitHub高效使用与模型源码管理教程 如果你正在或打算基于MogFace-large这类前沿的人脸检测模型进行开发&#xff0c;那么高效地管理你的代码、与团队协作、以及跟踪项目进展&#xff0c;就是一项必须掌握的技能。对于很多开发者来说&#…

作者头像 李华
网站建设 2026/4/14 10:15:54

Qwen3.5-2B多模态效果展示:GIF动图内容识别与时间序列行为分析

Qwen3.5-2B多模态效果展示&#xff1a;GIF动图内容识别与时间序列行为分析 1. 模型概览 Qwen3.5-2B是阿里云推出的轻量化多模态基础模型&#xff0c;属于Qwen3.5系列的小参数版本&#xff08;20亿参数&#xff09;。这个模型专为低功耗、低门槛部署场景设计&#xff0c;特别适…

作者头像 李华
网站建设 2026/4/14 10:15:52

ncmdump音乐解密工具:打破平台限制,让音乐真正属于你

ncmdump音乐解密工具&#xff1a;打破平台限制&#xff0c;让音乐真正属于你 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾遇到过这样的困扰&#xff1f;在网易云音乐下载了心爱的歌曲&#xff0c;想要在车载音响播放、分…

作者头像 李华