本节摘要:Gazebo 传感器按数据来源分三类制造——视觉类靠渲染管线、几何类靠射线投射、惯性/状态类直接读物理状态。相机、激光雷达、IMU、接触传感器四类常用件各自的配置与保真边界不同:视觉类"像不像"取决于材质光照,几何类只认碰撞体,惯性类几乎免费但最依赖噪声建模。本节给出四类的可运行配置。
5.1 的管线图已经预告了分工,这里补全第三条:
这个分类是排障的地图:视觉传感器出问题查材质光照,雷达出问题查碰撞几何(4.2 的"视觉精细碰撞简单"会让雷达看到比视觉简化的世界——这是特性不是 bug),IMU 出问题九成是噪声没配。

5.1 已给完整配置,这里补保真边界:默认相机无畸变(真实镜头有径向畸变),内参由 FOV 与分辨率推出。做视觉标定或 SLAM 迁移时,畸变要么在 5.3 显式注入,要么保证实机镜头本身低畸变。
<sensor name="lidar" type="gpu_lidar"> <update_rate>10</update_rate> <topic>/model/robot/lidar/scan</topic> <lidar> <scan> <horizontal> <samples>720</samples> <min_angle>-2.356</min_angle> <!-- -135 度 --> <max_angle>2.356</max_angle> <!-- +135 度 --> </horizontal> <vertical> <samples>16</samples> <min_angle>-0.26</min_angle> <max_angle>0.26</max_angle> </vertical> </scan> <range><min>0.5</min><max>50.0</max><resolution>0.01</resolution></range> </lidar> </sensor>
读这份配置时心里过三笔账:720×16 = 每帧 11520 点,10Hz 就是 11.5 万点/秒,后处理管道要吃得下;min 0.5 意味着贴脸障碍"隐形"(真机同款盲区,要对齐实机参数);玻璃与镜面在默认雷达模型里照样有回波(真实玻璃雷达穿过去)——高反射材质的账要靠专用插件另记。
<sensor name="imu" type="imu"> <update_rate>200</update_rate> <topic>/model/robot/imu/data</topic> <imu> <angular_velocity> <noise type="gaussian"> <mean>0.0</mean> <stddev>0.0002</stddev> <bias_mean>0.00001</bias_mean> <bias_stddev>0.000001</bias_stddev> </noise> </angular_velocity> <linear_acceleration> <noise type="gaussian"> <mean>0.0</mean><stddev>0.017</stddev> </noise> </linear_acceleration> </imu> </sensor>
不加 <noise> 的 IMU 是"教科书传感器":零漂移、零偏置。用它调出来的姿态滤波器上真机必翻车——真实 MEMS IMU 有常值偏置、偏置慢漂、温度特性。stddev 的取值抄你实机传感器的数据手册(上例量级对应消费级 MEMS),这就是最朴素也最有效的虚实对账。
<sensor name="bumper" type="contact"> <contact><collision>base_collision</collision></contact> <update_rate>100</update_rate> </sensor>
挂在某个 collision 上,返回接触点与法向力。注意它读到的是 3.3 软接触模型的力——kp/kd 改变,力读数跟着变。用接触力做精细力控时,先回去核对接触参数,否则你在测量一把会变形的尺子。
| 传感器 | 数据来源 | 默认缺失的"脏" | 补齐手段 |
|---|---|---|---|
| 相机 | 渲染管线 | 畸变、运动模糊、噪声 | SDF 畸变参数 + 5.3 |
| 激光雷达 | 射线求交 | 材质反射差异、雨雾衰减 | 反射率插件 + 5.3 退化 |
| IMU | 状态读取 | 偏置漂移、振动耦合 | <noise> 配置 |
| 接触 | 约束力求解 | 传感器本身的量测噪声 | 插件加噪声 |
💡 关键直觉:每类传感器问一句"真实世界里它的数据是怎么脏的",然后去配置里找对应的记账科目。找不到科目的(如雷达的雨雾衰减),就是需要插件或自建模型的地方——这也是写 2.3 插件的经典练手场景。
单个传感器的脏会配了,最后一节把它们组成体系:环境退化(雾、光照、延迟、丢包)如何系统性地注入,让仿真数据"脏得像真的"。