5.2 常用传感器模型原理


5.2 常用传感器模型原理

本节摘要:Gazebo 传感器按数据来源分三类制造——视觉类靠渲染管线、几何类靠射线投射、惯性/状态类直接读物理状态。相机、激光雷达、IMU、接触传感器四类常用件各自的配置与保真边界不同:视觉类"像不像"取决于材质光照,几何类只认碰撞体,惯性类几乎免费但最依赖噪声建模。本节给出四类的可运行配置。

三条制造路径

5.1 的管线图已经预告了分工,这里补全第三条:

  • 渲染路径(相机、深度相机、RGBD):数据是像素,场景的材质与光照直接进入观测——视觉模型里墙是纯灰还是带纹理,算法看得一清二楚。
  • 射线路径(激光雷达、声呐、红外):数据是距离,靠几何求交。材质与贴图完全不影响雷达(除非显式配置反射率相关插件),雷达"看"到的是碰撞几何的世界。
  • 状态读取路径(IMU、GPS、接触):直接读物理引擎内部状态再加噪声。零几何成本,但不配噪声时输出完美得反常——IMU 无漂移、接触无抖动,这在真实世界不存在。

这个分类是排障的地图:视觉传感器出问题查材质光照,雷达出问题查碰撞几何(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 意味着贴脸障碍"隐形"(真机同款盲区,要对齐实机参数);玻璃与镜面在默认雷达模型里照样有回波(真实玻璃雷达穿过去)——高反射材质的账要靠专用插件另记。

IMU:默认太完美,必须配噪声

<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 插件的经典练手场景。

本节要点回顾

  • 三条制造路径:渲染、射线、状态读取;排障按路径定位责任人。
  • 雷达只看碰撞几何:视觉精细碰撞简化的世界在雷达眼里是"低配版",特性使然。
  • IMU 不配噪声 = 教科书传感器:stddev 抄实机数据手册是最有效的一次对账。
  • 接触力随接触参数变:做力控先核 kp/kd,别拿会变形的尺子量东西。

单个传感器的脏会配了,最后一节把它们组成体系:环境退化(雾、光照、延迟、丢包)如何系统性地注入,让仿真数据"脏得像真的"。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U