2、认识Gazebo界面:主窗口、世界面板、插入模型、运行仿真、保存世界

好,咱们直接进入正题。Gazebo的界面,说实话第一次打开可能会有点懵。我当年第一次启动时,盯着那个灰色窗口愣了好几秒——这玩意儿怎么玩?别急,其实它的布局非常清晰,说白了就几个核心区域。你花5分钟摸一遍,后面就顺手了。

2.1 主窗口布局

Gazebo启动后,你会看到一个大窗口。我个人习惯把它分成三个区域来看:

  • 3D场景视图:中间最大的那块,用来显示机器人、传感器、障碍物等所有模型。你可以用鼠标拖拽旋转视角,滚轮缩放。
  • 左侧面板:默认是“世界面板”(World),里面列出了当前场景中的所有模型、灯光、参数等。
  • 顶部工具栏:包含插入模型、运行/暂停仿真、保存世界等核心按钮。

嗯,这里要注意:3D视图默认是透视视角,如果你做机械臂抓取之类的精细调试,可以切换到正交视角,减少透视带来的误差。我在做AGV导航项目时,就经常在正交视角下测量障碍物距离,比透视准得多。

小技巧: 按住 Shift + 鼠标左键拖拽,可以平移视角;按住 Ctrl + 滚轮,可以调整视野远近。这些快捷键能让你操作快一倍。

2.2 世界面板(World)

世界面板在左侧,默认是展开的。它有点像Windows的资源管理器,但管的是仿真世界里的所有东西。

你会看到几个关键子项:

  • 场景(Scene):背景颜色、光照、阴影等全局设置。我一般把背景调成浅灰色,这样白色机器人能看得更清楚。
  • 物理(Physics):重力、摩擦系数、实时更新率等。默认重力是9.8,但如果你做水下机器人仿真,记得改成0。
  • 模型(Models):当前世界中所有已插入的模型列表。点击任意模型,可以在右侧属性面板查看它的位置、姿态、关节状态等。

为什么会强调这个面板?因为很多新手一上来就盯着3D视图看,模型一多就找不到东西了。其实你点一下左侧的模型名,3D视图会自动高亮它。我曾经调试一个多机器人协同场景,20多台机器人堆在一起,全靠世界面板来定位。

核心要点: 世界面板是仿真世界的“后台数据库”。你在3D视图里看到的每一个物体,都能在这里找到对应的参数。学会用它,你就掌握了Gazebo的“后台管理权”。

2.3 插入模型

点击顶部工具栏的“插入”(Insert)按钮,会弹出一个模型库。Gazebo自带了一些基础模型,比如立方体、球体、圆柱体,还有几个常见的机器人模型(比如Pioneer 3DX)。

插入模型的步骤很简单:

  1. 点击“Insert”按钮。
  2. 从列表中选择一个模型(比如“cuboid”)。
  3. 在3D视图中点击一下,模型就出现了。
  4. 你可以拖拽模型调整位置,或者用旋转工具调整朝向。

但这里有个坑——默认插入的模型没有物理属性。什么意思?就是你放一个立方体,它不会掉下来,也不会被撞飞。如果你需要物理碰撞效果,得在模型属性里勾选“静态”(static)为false。我刚开始做仿真时,放了一堆障碍物,结果机器人直接穿模而过,查了半天才发现是静态属性没关。

避坑指南: 如果你插入的模型是作为地面或墙壁,记得保持“静态”为true。如果是可移动物体(比如箱子、障碍物),一定要把“静态”设为false,否则物理引擎不会对它产生作用。

2.4 运行仿真

模型放好了,怎么让它动起来?看顶部工具栏的播放/暂停按钮:

  • ▶ 播放:启动仿真时钟,物理引擎开始计算,模型会受重力影响下落,机器人可以开始运动。
  • ⏸ 暂停:冻结仿真时钟,所有物体停在原地。这个功能在调试时特别有用——你可以暂停后仔细查看某个瞬间的状态。
  • ⏹ 重置:把仿真世界恢复到初始状态。

我个人习惯是:先暂停,把所有模型位置摆好,再点击播放。这样能避免模型刚插入就乱飞。另外,仿真速度可以在左侧世界面板的“Physics”里调整,默认是1.0(实时)。如果你做长时间测试,可以调到2.0或3.0,让仿真跑得更快。

你想想看,如果每次都要手动调整速度,多麻烦?所以我会在启动脚本里直接设置好:

<physics type="ode">
  <max_step_size>0.001</max_step_size>
  <real_time_factor>2.0</real_time_factor>
</physics>

这样一启动就是2倍速,省事。

2.5 保存世界

折腾了半天,好不容易搭好一个仿真场景,结果忘了保存?嗯,我干过这种事,而且不止一次。所以请记住:保存世界是你的救命稻草。

点击顶部菜单的 File → Save World As,会生成一个 .world 文件。这个文件本质上是一个SDFormat格式的XML文件,里面记录了所有模型的位置、属性、物理参数等。

保存后的世界文件,下次启动时可以直接加载:

gazebo my_world.world

或者在你的launch文件里引用它:

<launch>
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find your_package)/worlds/my_world.world"/>
  </include>
</launch>

这里有个细节:保存世界时,Gazebo会把当前所有模型的状态都写进去。但如果你在仿真运行中保存,模型的位置可能已经变了。所以我建议先暂停仿真,再保存世界,这样保存的是你想要的初始状态。

个人经验: 我会为每个项目建一个 worlds/ 文件夹,里面放多个版本的世界文件,比如 empty.world、with_obstacles.world、final_test.world。这样切换场景时,直接改launch文件里的world_name就行,不用每次都重新搭。

2.6 本章知识体系

下面这张图帮你梳理了本章的核心逻辑:

认识Gazebo界面 主窗口布局 世界面板 插入模型 运行仿真 3D场景视图 左侧面板 顶部工具栏 场景(Scene) 物理(Physics) 模型(Models) 选择模型 拖拽放置 调整属性 播放/暂停 重置 速度调节 保存世界 (.world)

这张图把五个核心操作串起来了。你从主窗口开始,通过世界面板管理模型,用插入功能搭建场景,运行仿真验证效果,最后保存世界文件。每一步都是下一步的基础。

好了,这一章的内容就这些。记住:界面是工具,不是目的。你花10分钟熟悉它,后面几十个小时的仿真调试会顺畅得多。

可可精品资料库