湿滑地面与甲板晃动下局部规划器对比实验的扰动建模方案
湿滑地面与甲板晃动下局部规划器对比实验的扰动建模方案
1. 核心思路
在 Gazebo 仿真和实物实验中,没有必要完全复现真实湿滑甲板环境。真实甲板涉及水膜、金属材质、油污、船体六自由度运动、轮地接触变化等复杂因素,如果全部精确建模,工作量很大,而且不一定能提升论文实验的说服力。
更合理的做法是将真实问题等效为几类可控扰动:
湿滑地面 ≈ 低摩擦 + 轮速/转向执行误差 + 侧向滑移
甲板晃动 ≈ 横向加速度扰动 + 航向扰动 + 定位噪声/IMU 扰动
局部规划器本身通常不直接接收“湿滑噪声”或“甲板晃动噪声”。局部规划器一般接收:
- 全局路径;
- 当前机器人位姿;
- 当前速度;
- 局部代价地图;
- 障碍物信息;
然后输出cmd_vel或底盘控制量。
因此,扰动不应该直接“喂给局部规划器”,而应该作用在以下位置:
- 机器人真实运动结果;
- 控制执行环节;
- 里程计 / IMU / TF 状态反馈;
- Gazebo 物理接触参数。
最终观察不同局部规划器在闭环反馈中是否还能稳定跟踪全局路径。
2. 最推荐的加噪位置
| 加噪位置 | 对应真实现象 | 推荐程度 |
|---|---|---|
| Gazebo 地面摩擦参数 | 湿滑地面、低附着 | 必做 |
| 机器人本体外力 / 外力矩 | 甲板横摇、侧向晃动、车体被甩偏 | 强烈推荐 |
| 里程计 / IMU / TF 噪声 | 定位漂移、传感器受晃动影响 | 强烈推荐 |
cmd_vel执行误差 | 轮胎打滑、电机执行不到位、速度滞后 | 最简单、最实用 |
需要让机器人表现出以下现象:
1. 低摩擦导致转弯能力下降 2. 运动中出现横向侧移 3. yaw 航向角受到扰动 4. 里程计 / IMU 反馈不准 5. cmd_vel 执行结果和局部规划器期望不一致3. Gazebo 仿真实现方法
3.1 降低地面摩擦系数,模拟湿滑
在 Gazebo / SDFormat 中,可以通过collision -> surface -> friction设置地面的摩擦系数和滑移参数。
为避免复杂甲板接触建模和 Gazebo 地面物理参数调试带来的不确定性,本文不直接修改仿真环境中甲板表面的摩擦属性,而是采用软件层面的变摩擦系数等效滑移扰动模型。具体而言,将摩擦系数定义为随时间或空间变化的参数 μ(t,x,y),在局部规划器输出速度指令后加入滑移扰动节点,根据当前摩擦系数对线速度和角速度执行效果进行衰减,并引入与速度、角速度及摩擦降低程度相关的横向侧滑项,用于模拟湿滑低附着条件下车辆转向能力下降、路径偏离和横向侧移现象。同时,将甲板晃动等效为周期性横向加速度扰动或航向扰动,叠加到速度执行或里程计反馈中,从而在不改变 Gazebo 地面材质和几何结构的情况下模拟湿滑甲板环境对无人车全局路径跟踪的影响
示例:
<surface><friction><ode><mu>0.35</mu><mu2>0.25</mu2><slip1>0.02</slip1><slip2>0.08</slip2></ode></friction></surface>参数含义:
| 参数 | 含义 |
|---|---|
mu | 第一摩擦方向的摩擦系数 |
mu2 | 第二摩擦方向的摩擦系数 |
slip1 | 第一方向的滑移参数 |
slip2 | 第二方向的滑移参数 |
推荐设置:
| 地面类型 | mu | mu2 | slip1 | slip2 |
|---|---|---|---|---|
| 干燥地面 | 0.8 ~ 1.0 | 0.8 ~ 1.0 | 0.00 | 0.00 |
| 普通湿滑地面 | 0.4 ~ 0.6 | 0.3 ~ 0.5 | 0.01 | 0.03 |
| 严重湿滑地面 | 0.2 ~ 0.4 | 0.15 ~ 0.3 | 0.03 | 0.08 |
其中,mu2可以设置得比mu小一些,用于模拟横向更容易发生侧滑的情况。
3.2 对车体施加横向外力,模拟甲板晃动
不需要真实搭建一个会晃动的甲板,可以直接对机器人base_link施加周期性横向扰动力。
横向扰动力可以写成:
Fy(t)=m⋅ay(t) F_y(t) = m \cdot a_y(t)Fy(t)=m⋅ay(t)
其中:
ay(t)=Aysin(2πft)+ny(t) a_y(t) = A_y \sin(2\pi f t) + n_y(t)ay(t)=Aysin(2πft)+ny(t)
参数说明:
| 参数 | 含义 |
|---|---|
| mmm | 机器人质量 |
| AyA_yAy | 横向加速度扰动幅值 |
| fff | 甲板晃动频率 |
| ny(t)n_y(t)ny(t) | 随机横向扰动 |
如果想和甲板横摇角建立联系,可以写成:
ay(t)=g⋅sin(ϕ(t)) a_y(t) = g \cdot \sin(\phi(t))ay(t)=g⋅sin(ϕ(t))
ϕ(t)=Aϕsin(2πft) \phi(t) = A_\phi \sin(2\pi f t)ϕ(t)=A
