RC-ESDF 详解:以机器人为中心的欧几里得有符号距离场
RC-ESDF 详解:以机器人为中心的欧几里得有符号距离场
来源:浙大高飞团队论文
核心思想:将复杂的"机器人形状"问题从在线计算中剥离,通过离线预计算实现极致的碰撞检测速度(2.4μs 级查询)
大佬的开源地址:https://github.com/JackJu-HIT/RC-ESDF-2D
目录
- 1. 什么是 ESDF?
- 2. 什么是 RC-ESDF?
- 3. RC-ESDF 的核心原理
- 4. RC-ESDF 与传统 ESDF 的区别
- 5. RC-ESDF 如何与局部规划器结合?
- 6. 碰撞惩罚计算方法
- 7. 常见疑问解答
- 附录:梯度如何用于轨迹优化
1. 什么是 ESDF?
ESDF(Euclidean Signed Distance Field,欧几里得有符号距离场) 是一种环境地图表示方法:
- 将空间离散化为网格
- 每个点存储到最近障碍物的欧几里得距离
- 正距离 = 在障碍物外部(安全)
- 负距离 = 在障碍物内部(碰撞)
- 同时存储梯度方向(最快的逃离方向)
ESDF 使得规划器不仅能判断"能不能走",还能精确掌握"离障碍物多远"以及"该往哪躲"。
传统 ESDF 的构建流程
传感器数据 → 占据栅格地图 → 距离变换算法 → ESDF 距离场
常用算法包括 BFS 广度优先搜索、FIESTA 增量更新、Voxblox(TSDF 转 ESDF) 等。
2. 什么是 RC-ESDF?
RC-ESDF(Robo-centric ESDF,以机器人为中心的 ESDF) 是高飞团队提出的创新方法。其核心思路是:
将"机器人在环境中的碰撞检测"这个动态问题,转化为"在机器人坐标系下,机器人形状与静态障碍物场的距离查询"这个静态问题。
一句话理解
RC-ESDF 是在机器人本体坐标系下离线预构建的 ESDF 地图,准确描述机器人的形状(包括非凸形状):
- 机器人内部:ESDF 值为负(表示穿透深度)
- 机器人表面:ESDF 值为零
- 机器人外部:ESDF 值为正(表示到最近表面的距离)
这张地图记录了机器人身上每个点到其自身"皮肤"(外轮廓)的有符号距离和梯度。它不包含任何环境信息,是一张纯静态的、与外界无关的自我描述地图。
关键在于:RC-ESDF 只与机器人自身形状有关,与环境无关。一旦机器人形状确定,RC-ESDF 就固定了,不需要实时更新。
3. RC-ESDF 的核心原理
3.1 构建过程(离线预计算)
机器人 CAD 模型 → 体素化(本体坐标系) → 距离变换 → RC-ESDF 地图
- 体素化与边界标记:根据机器人几何模型,在本体坐标系中创建密集网格,"皮肤"表面经过的格子标记为边界(距离=0)
- 内外区分:内部点标记为负,外部点标记为正
- 距离变换传播:计算每个点到最近边界的最短欧氏距离,内部为负值
- 预计算解析梯度:提前算好每个位置的梯度方向,供规划器直接调用
3.2 查询过程(在线查表)
运行时,RC-ESDF 完全不更新,只做 O(1) 复杂度的内存访问:
- 将机器人候选位姿变换到本体坐标系
- 在 RC-ESDF 查表,获取"该点到自己皮肤的距离"
- 同时查全局 ESDF(环境地图),获取"该点到最近障碍物的距离"
- 比较两者:如果障碍物距离 < 自身皮肤距离 → 碰撞
3.3 关键数值含义
| 值 | 含义 |
|---|---|
| 正 (+) | 该点在机器人外部(安全),数值 = 到最近表面的距离 |
| 零 (0) | 该点恰好位于机器人轮廓表面 |
| 负 (-) | 该点在机器人内部,绝对值 = 穿透深度 |
3.4 在线查询的插值方法
RC-ESDF 在离线阶段构建了一个规则网格,每个网格点存储了机器人坐标系下的距离值和梯度方向。在线查询时,机器人当前位置并不恰好落在网格节点上,因此需要通过插值快速估算中间值。
双线性插值原理
双线性插值是一种在二维网格上估算任意点函数值的常用方法。基本思想是:先在一个方向(x 轴)上做两次线性插值,再在另一个方向(y 轴)上做一次线性插值,从而得到平滑的曲面拟合结果。
假设已知网格四个角点 Q 11 = ( x 1 , y 1 ) Q_{11}=(x_1, y_1) Q11=(x1,y1)、 Q 12 = ( x 1 , y 2 ) Q_{12}=(x_1, y_2) Q12=(x1,y2)、 Q 21 = ( x 2 , y 1 ) Q_{21}=(x_2, y_1) Q21=(x2,y1)、 Q 22 = ( x 2 , y 2 ) Q_{22}=(x_2, y_2) Q22=(x2,y2) 上的函数值。对于任意点 P = ( x , y ) P=(x,y) P=(x,y),其中 x 1 ≤ x ≤ x 2 , y 1 ≤ y ≤ y 2 x_1 \le x \le x_2, y_1 \le y \le y_2 x1≤x≤x2,y1≤y≤y2:
-
x 方向线性插值:在 y = y 1 y = y_1 y=y1 线上,由 Q 11 Q_{11} Q11 和 Q 21 Q_{21} Q21 插值得到 R 1 R_1 R1:
f ( R 1 ) ≈ x 2 − x x 2 − x 1 f ( Q 11 ) + x − x 1 x 2 − x 1 f ( Q 21 ) f(R_1) \approx \frac{x_2 - x}{x_2 - x_1} f(Q_{11}) + \frac{x - x_1}{x_2 - x_1} f(Q_{21}) f(R1)≈x2−x1x2−xf(Q11)+x2−x1x−x1f(Q21)
在 y = y 2 y = y_2 y=y2 线上,由 Q 12 Q_{12} Q12 和 Q 22 Q_{22} Q22 插值得到 R 2 R_2 R2:
f ( R 2 ) ≈ x 2 − x x 2 − x 1 f ( Q 12 ) + x − x 1 x 2 − x 1 f ( Q 22 ) f(R_2) \approx \frac{x_2 - x}{x_2 - x_1} f(Q_{12}) + \frac{x - x_1}{x_2 - x_1} f(Q_{22}) f(R2)≈x2−x1x2−xf(Q12)+x2−x1x−x1f(Q22) -
y 方向线性插值:在 R 1 R_1 R1 和 R 2 R_2 R2 之间沿 y 方向插值得到 P P P:
f ( P ) ≈ y 2 − y y 2 − y 1 f ( R 1 ) + y − y 1 y 2 − y 1 f ( R 2 ) f(P) \approx \frac{y_2 - y}{y_2 - y_1} f(R_1) + \frac{y - y_1}{y_2 - y_1} f(R_2) f(P)≈y2−y1y2−yf(R1)+y2−y1y−y1f(R2)
合并写成对称形式:
f ( P ) = ∑ i = 1 2 ∑ j = 1 2 w i j f ( Q i j ) f(P) = \sum_{i=1}^2 \sum_{j=1}^2 w_{ij} \, f(Q_{ij}) f(P)=i=1∑2j=1∑2wijf(Qij)
其中权重 w i j w_{ij} wij 与 P P P 到对角点的距离成比例。
直观理解
| 特性 | 说明 |
|---|---|
| 线性 | 在每个方向上,函数值随坐标线性变化 |
| 双 | 在两个独立的方向上各做一次线性插值 |
| 效果 | 得到的是双线性曲面(网格内光滑,但二阶导数不连续) |
在 RC-ESDF 中的应用
使用双线性插值的好处:
- 计算极快:只需几次乘加运算,时间复杂度 O(1)
- 连续可微:保证轨迹优化时梯度信息平滑,避免碰撞函数出现台阶突变
- 精度足够:对于中等分辨率的网格,插值误差远小于机器人控制精度需求
与最近邻插值的对比
| 插值方法 | 速度 | 光滑性 | 精度 | 是否可导 |
|---|---|---|---|---|
| 最近邻 | 最快 | 阶梯状 | 较低 | 不可导 |
| 双线性 | 很快 | 连续 | 较高 | 一阶可导 |
在机器人运动规划这类需要梯度下降的场合,双线性插值是网格距离场查询的首选。
4. RC-ESDF 与传统 ESDF 的区别
| 对比维度 | 传统 ESDF(环境为中心) | RC-ESDF(机器人为中心) |
|---|---|---|
| 坐标系 | 世界坐标系 | 机器人本体坐标系 |
| 构建基础 | 依赖环境障碍物信息 | 依赖机器人自身形状模型 |
| 更新方式 | 在线实时更新,开销大 | 离线预计算,在线无需更新 |
| 存储内容 | 空间点到最近环境障碍物的距离 | 机器人本体上点到最近自身表面的距离 |
| 运行时任务 | 在线实时计算距离场 | 仅坐标变换 + 查表 |
| 查询速度 | 取决于地图大小和算法 | 2.4μs 级,与地图大小无关 |
| 形状支持 | 凸形状可实时处理,非凸形状计算复杂 | 天然支持任意复杂形状(包括非凸) |
| 梯度类型 | 数值梯度 | 解析梯度(精确指导逃离方向) |
核心区别:一表 vs. 一计算器
| 传统 ESDF | RC-ESDF | |
|---|---|---|
| 本质 | 动态计算器 | 静态速查表 |
| 任务 | 一体化:同时处理"自我形状"+“环境障碍物” | 分而治之:离线处理"自我",在线专注"环境" |
5. RC-ESDF 如何与局部规划器结合?
5.2 碰撞检测如何用 RC-ESDF
论文中的碰撞检测流程(参见 Fig.3 和 Fig.4):
核心思想:只需要 RC-ESDF 一张地图,将环境中的障碍物点变换到机器人本体坐标系下,查询这些点相对于机器人"皮肤"的距离。
步骤1:全局系下的碰撞点筛选
机器人位姿为 ( p k , ψ k ) (\mathbf{p}_k, \psi_k) (pk,ψk),使用 AABB(轴对齐包围盒)算法在全局坐标系下划出一个矩形区域,区域内的障碍物点被定义为碰撞点 q w , i \mathbf{q}_{w,i} qw,i。
说明:障碍物点直接来自传感器数据(如激光雷达、深度相机)或占据栅格地图,不需要构建环境 ESDF。
步骤2:变换到机器人本体坐标系
将所有障碍物点从世界坐标系变换到机器人本体坐标系下:
q b , i = R k − 1 ( q w , i − p k ) \mathbf{q}_{b,i} = R_k^{-1}(\mathbf{q}_{w,i} - \mathbf{p}_k) qb,i=Rk−1(qw,i−pk)
其中 R k R_k Rk 是机器人从本体坐标系到世界坐标系的旋转矩阵。
步骤3:查 RC-ESDF 得到距离值
在 RC-ESDF 中查询每个障碍物点 q b , i \mathbf{q}_{b,i} qb,i 对应的距离值 H i , k H_{i,k} Hi,k:
- H i , k < 0 H_{i,k} < 0 Hi,k<0:该障碍物点在机器人内部 → 发生碰撞
- H i , k = 0 H_{i,k} = 0 Hi,k=0:该障碍物点恰好在机器人表面 → 接触
- H i , k > 0 H_{i,k} > 0 Hi,k>0:该障碍物点在机器人外部 → 安全
步骤4:计算总碰撞惩罚
将所有障碍物点的 RC-ESDF 值求和,得到该位姿下的总碰撞惩罚值:
d p k , ψ k = ∑ i = 1 M d H i , k d_{p_k, \psi_k} = \sum_{i=1}^{M_d} H_{i,k} dpk,ψk=i=1∑MdHi,k
其中 H i , k H_{i,k} Hi,k 是第 i i i 个障碍物点在 RC-ESDF 中查询到的有符号距离值。
5.3 与 MPPI 等采样规划器的结合
RC-ESDF 集成到 MPPI 中,本质上是替换原有的 ObstaclesCritic 模块,用精确的机器人形状碰撞检测替代粗糙的代价地图:
// 原有方式(基于 Costmap)
for (轨迹上每个采样点) {
cost = costmap->getCost(x, y); // 粗糙的膨胀代价
}
// RC-ESDF 方式(精确距离)
for (轨迹上每个候选位姿) {
cost = 0;
// 1. 在全局坐标系下用 AABB 筛选障碍物点
obstacle_points = getObstaclesInAABB(pose, robot_bbox);
// 2. 对每个障碍物点进行碰撞检测
for (每个障碍物点 q_w) {
// 3. 坐标变换:全局坐标 → 机器人本体坐标系
q_b = transform_to_body_frame(q_w, pose);
// 4. 查 RC-ESDF:获取该障碍物点相对于机器人皮肤的距离
H = rcesdf->lookup(q_b);
// 5. 累加碰撞惩罚(H < 0 表示碰撞)
if (H < 0) {
cost += abs(H); // 穿透深度作为惩罚
}
}
}
关键区别:
- 不需要构建环境 ESDF 地图
- 直接使用传感器感知到的障碍物点
- 通过 RC-ESDF 精确判断障碍物点是否在机器人形状内部
5.4 与不同规划器的适配
| 规划器 | RC-ESDF 的作用 |
|---|---|
| Fast-Planner | 无缝替换碰撞评估模块 |
| Ego-Planner | 快速判断车体轮廓是否碰撞,替代原有的"碰撞轨迹 vs 无碰撞引导路径"比较 |
| TEB | 解决障碍物增多时优化耗时剧增的问题,加速收敛 |
| MPPI | 扩展 ObstaclesCritic,用精确距离替代膨胀代价 |
5.5 不同规划器类型与 RC-ESDF 输出的对应关系
RC-ESDF 提供两种核心输出:距离值和梯度。不同类型的规划器对这两者的需求不同,取决于其底层优化范式。
RC-ESDF 的输出内容
| 输出 | 含义 | 坐标系 | 用途 |
|---|---|---|---|
| 距离值 d s e l f d_{self} dself | 查询点到机器人自身皮肤的距离 | 本体坐标系 | 碰撞检测、代价评估 |
| 梯度 ∇ ϕ s e l f \nabla \phi_{self} ∇ϕself | 指向机器人外部的最快逃离方向 | 本体坐标系 | 解析导数计算、优化方向指导 |
规划器类型分类
| 规划器类型 | 代表算法 | 优化范式 | 需要 RC-ESDF 的什么? | 为什么? |
|---|---|---|---|---|
| 采样-based 规划器 | MPPI、RRT* | 零阶优化:大量采样轨迹,评估每条轨迹的标量代价,加权平均得到最优解 | 仅距离值 | 不需要梯度信息,通过标量代价函数隐式探索避碰轨迹 |
| 梯度-based 优化器 | Fast-Planner (B-spline)、EGO-Planner | 一阶优化:沿代价函数的负梯度方向迭代更新控制变量 | 距离值 + 梯度 | 需要解析地计算代价函数对控制点的导数,高效指导优化方向 |
| 非线性优化器 | TEB、MPC | 基于梯度的数值优化:构建非线性约束问题,使用雅可比/海森矩阵求解 | 距离值 + 梯度 | 需要梯度构建雅可比矩阵,加速非线性求解器收敛 |
为什么 MPPI 不使用梯度?
MPPI(Model Predictive Path Integral)的工作流程:
// MPPI 伪代码
for (每条采样轨迹) {
cost = 0;
for (轨迹上每个时间点) {
// 状态前向传播
x = dynamics(x, u);
// 代价评估(包括碰撞代价)
cost += collision_cost(x); // 只需要标量代价
}
// 根据总代价加权平均,更新控制序列
optimal_control = weighted_average(cost, control_samples);
}
| 原因 | 详细解释 |
|---|---|
| 算法范式不匹配 | MPPI 是零阶优化方法,通过采样和加权平均寻找最优解,而非沿梯度方向迭代下降 |
| 坐标系转换开销 | RC-ESDF 的梯度在本体坐标系下,而 MPPI 的采样轨迹在全局坐标系下,用于优化需要复杂的雅可比变换 |
| 梯度的局部性 | RC-ESDF 的梯度只描述"当前位姿下某点被侵入时的逃离方向",而 MPPI 需要评估整条轨迹的全局代价 |
| 采样的隐式探索 | MPPI 通过大量采样已经隐式探索了不同方向的轨迹,不需要显式梯度来引导搜索 |
正确的用法对应
┌─────────────────────────────────────────────────────────┐
│ RC-ESDF outputs │
├──────────────────┬──────────────────────────────────────┤
│ 距离值 H │ → MPPI / 采样规划器:用于标量代价评估 │
│ 梯度 ∇H │ → 梯度优化器:用于解析导数计算 │
└──────────────────┴──────────────────────────────────────┘
-
MPPI 中的 RC-ESDF:
double evaluateCollisionCost(Pose pose) { double cost = 0; // 1. 获取当前位姿周围的障碍物点(来自传感器) auto obstacles = getObstaclePoints(pose); // 2. 对每个障碍物点进行碰撞检测 for (auto& q_w : obstacles) { // 3. 变换到本体坐标系 auto q_b = transformToBodyFrame(q_w, pose); // 4. 查询 RC-ESDF double H = rcesdf->lookup(q_b); // 5. 累加碰撞代价(H < 0 表示障碍物在机器人内部) if (H < 0) { cost += -H; // 穿透深度作为惩罚 } } return cost; }MPPI 拿到标量代价后,自动在采样过程中隐式探索避碰轨迹。
-
梯度优化器中的 RC-ESDF:
void optimize_trajectory() { for (迭代) { // 1. 计算碰撞代价 cost = collision_cost(traj); // 2. 计算代价对控制点的梯度(使用 RC-ESDF 梯度) grad = ∂cost/∂control_points; // 3. 沿负梯度方向更新 control_points -= learning_rate * grad; } }RC-ESDF 的梯度用于解析地计算代价函数的导数,高效指导优化方向。
附录:梯度如何用于轨迹优化
RC-ESDF 提供解析梯度。由于 RC-ESDF 是以网格地图形式存储的,通过双线性插值可以同时获得 ESDF 值和梯度信息。
A.1 链式求导过程
论文推导了碰撞代价 F c ( p k , ψ k ) F_c(\mathbf{p}_k, \psi_k) Fc(pk,ψk) 对位置和偏航的梯度。首先定义碰撞代价:
F c ( p k , ψ k ) = d p k , ψ k 2 = ( ∑ i = 1 M d H i , k ) 2 F_c(\mathbf{p}_k, \psi_k) = d_{p_k, \psi_k}^2 = \left(\sum_{i=1}^{M_d} H_{i,k}\right)^2 Fc(pk,ψk)=dpk,ψk2=(i=1∑MdHi,k)2
其中 H i , k H_{i,k} Hi,k 是第 i i i 个碰撞点在 RC-ESDF 中查询到的有符号距离值。
A.2 对位置 p k \mathbf{p}_k pk 的梯度
∂ H i , k ∂ p k = − R k ∂ H i , k ∂ q b , i \frac{\partial H_{i,k}}{\partial \mathbf{p}_k} = -R_k \frac{\partial H_{i,k}}{\partial \mathbf{q}_{b,i}} ∂pk∂Hi,k=−Rk∂qb,i∂Hi,k
A.3 对偏航角 ψ k \psi_k ψk 的梯度
∂ H i , k ∂ ψ k = ( q w , i − p k ) T [ − sin ψ k cos ψ k − cos ψ k − sin ψ k ] ∂ H i , k ∂ q b , i \frac{\partial H_{i,k}}{\partial \psi_k} = (\mathbf{q}_{w,i} - \mathbf{p}_k)^T \begin{bmatrix} -\sin\psi_k & \cos\psi_k \\ -\cos\psi_k & -\sin\psi_k \end{bmatrix} \frac{\partial H_{i,k}}{\partial \mathbf{q}_{b,i}} ∂ψk∂Hi,k=(qw,i−pk)T[−sinψk−cosψkcosψk−sinψk]∂qb,i∂Hi,k
其中 ∂ H i , k ∂ q b , i \frac{\partial H_{i,k}}{\partial \mathbf{q}_{b,i}} ∂qb,i∂Hi,k 是 RC-ESDF 在 q b , i \mathbf{q}_{b,i} qb,i 处的空间梯度,通过双线性插值直接得到。
A.4 碰撞代价的最终梯度
最终,碰撞代价 F c F_c Fc 对位置和偏航的梯度为:
∂ F c ∂ p k = 2 d p k , ψ k ∑ i = 1 M d ∂ H i , k ∂ p k \frac{\partial F_c}{\partial \mathbf{p}_k} = 2d_{p_k, \psi_k} \sum_{i=1}^{M_d} \frac{\partial H_{i,k}}{\partial \mathbf{p}_k} ∂pk∂Fc=2dpk,ψki=1∑Md∂pk∂Hi,k
∂ F c ∂ ψ k = 2 d p k , ψ k ∑ i = 1 M d ∂ H i , k ∂ ψ k \frac{\partial F_c}{\partial \psi_k} = 2d_{p_k, \psi_k} \sum_{i=1}^{M_d} \frac{\partial H_{i,k}}{\partial \psi_k} ∂ψk∂Fc=2dpk,ψki=1∑Md∂ψk∂Hi,k
A.5 轨迹优化问题的完整形式
轨迹表示
论文使用均匀 B 样条曲线参数化轨迹,同时优化位置控制点 Q k \mathbf{Q}_k Qk 和偏航控制点 Ψ k \Psi_k Ψk。
约束点的选取
根据三阶 B 样条的性质,约束点 p k \mathbf{p}_k pk 和 ψ k \psi_k ψk 由相邻控制点的加权平均得到:
p k = 1 6 ( Q k + 4 Q k + 1 + Q k + 2 ) \mathbf{p}_k = \frac{1}{6}(\mathbf{Q}_k + 4\mathbf{Q}_{k+1} + \mathbf{Q}_{k+2}) pk=61(Qk+4Qk+1+Qk+2)
ψ k = 1 6 ( Ψ k + 4 Ψ k + 1 + Ψ k + 2 ) \psi_k = \frac{1}{6}(\Psi_k + 4\Psi_{k+1} + \Psi_{k+2}) ψk=61(Ψk+4Ψk+1+Ψk+2)
完整的目标函数
min Q , Ψ J = λ p s J p s + λ p f J p f + λ ψ s J ψ s + λ ψ f J ψ f + λ c J c \min_{\mathbf{Q}, \Psi} J = \lambda_{p_s}J_{p_s} + \lambda_{p_f}J_{p_f} + \lambda_{\psi_s}J_{\psi_s} + \lambda_{\psi_f}J_{\psi_f} + \lambda_c J_c Q,ΨminJ=λpsJps+λpfJpf+λψsJψs+λψfJψf+λcJc
其中:
- J p s , J p f J_{p_s}, J_{p_f} Jps,Jpf:位置平滑性和可行性惩罚
- J ψ s , J ψ f J_{\psi_s}, J_{\psi_f} Jψs,Jψf:偏航角平滑性和可行性惩罚
- J c J_c Jc:碰撞惩罚项(即上文计算的 F c F_c Fc)
- λ \lambda λ 为各项的权重系数
数值优化方法
论文采用 L-BFGS 求解数值优化问题。由于 ESDF 值通过线性插值获取,其梯度相对机器人自身运动并不光滑,因此使用了 Lewis-Overton 线搜索来支持非光滑函数。
6. 碰撞惩罚计算方法
6.1 基本原理
RC-ESDF 的碰撞检测直接查询障碍物点在本体坐标系下的有符号距离:
d p k , ψ k = ∑ i = 1 M d H i , k d_{p_k, \psi_k} = \sum_{i=1}^{M_d} H_{i,k} dpk,ψk=i=1∑MdHi,k
其中 H i , k H_{i,k} Hi,k 是第 i i i 个障碍物点在 RC-ESDF 中查询到的有符号距离值。
物理意义:
| 条件 | 含义 |
|---|---|
| H i , k > 0 H_{i,k} > 0 Hi,k>0 | 障碍物点在机器人外部 → 安全 |
| H i , k = 0 H_{i,k} = 0 Hi,k=0 | 障碍物点恰好在机器人表面 → 接触 |
| H i , k < 0 H_{i,k} < 0 Hi,k<0 | 障碍物点在机器人内部,穿透深度为 $ |
6.2 碰撞惩罚函数
对于每个障碍物点,碰撞惩罚可以定义为:
c i = { 0 , H i , k ≥ 0 ∣ H i , k ∣ , H i , k < 0 c_i = \begin{cases} 0, & H_{i,k} \ge 0 \\ |H_{i,k}|, & H_{i,k} < 0 \end{cases} ci={0,∣Hi,k∣,Hi,k≥0Hi,k<0
总碰撞代价为所有障碍物点惩罚的累加:
J c o l l i s i o n = ∑ i = 1 M d c i J_{collision} = \sum_{i=1}^{M_d} c_i Jcollision=i=1∑Mdci
6.3 带安全裕度的软惩罚(可选)
如果需要考虑安全裕度(而不仅仅是碰撞检测),可以引入阈值 d s a f e d_{safe} dsafe:
c i = { 0 , H i , k ≥ d s a f e ( d s a f e − H i , k ) 2 , 0 ≤ H i , k < d s a f e d s a f e 2 + ∣ H i , k ∣ , H i , k < 0 c_i = \begin{cases} 0, & H_{i,k} \ge d_{safe} \\ (d_{safe} - H_{i,k})^2, & 0 \le H_{i,k} < d_{safe} \\ d_{safe}^2 + |H_{i,k}|, & H_{i,k} < 0 \end{cases} ci=⎩ ⎨ ⎧0,(dsafe−Hi,k)2,dsafe2+∣Hi,k∣,Hi,k≥dsafe0≤Hi,k<dsafeHi,k<0
这样可以在接近机器人表面时就产生惩罚,保持安全距离。
6.4 RC-ESDF 碰撞检测的优势
- 精确形状支持:天然支持任意复杂形状(包括非凸形状),不需要用圆形/矩形近似
- 计算速度快:2.4μs 级查询速度,与地图大小无关
- 解析梯度:通过双线性插值可同时获得距离值和梯度,便于梯度-based 优化
- 全身碰撞评估:精确判断障碍物点是否在机器人形状内部,实现全身碰撞检测
7. 常见疑问解答
Q1:RC-ESDF 需要提前构建整个环境地图吗?
不需要。RC-ESDF 本身只包含"自我",与环境完全无关。
真正需要环境信息的是局部 ESDF(或全局 ESDF),它负责实时感知"周围有什么"。
Q2:RC-ESDF 建好之后还需要更新吗?
不需要。RC-ESDF 是纯离线预计算的静态表,只要机器人形状不变,就永远不需要更新。
Q3:为什么有了全局 ESDF 还需要 RC-ESDF?
全局 ESDF 能告诉你"离障碍物多远",但**不知道机器人自己的皮肤在哪里"。RC-ESDF 通过离线预计算,把"机器人形状"这个问题从在线计算中彻底剥离,换来了 2.4μs 级的极致查询速度。
Q4:突然出现动态障碍物怎么办?
传感器实时检测。RC-ESDF 本身不需要任何改动,当传感器(如激光雷达、深度相机)检测到新的障碍物点时,规划器将这些新的障碍物点变换到机器人本体坐标系下,重新查询 RC-ESDF 评估候选轨迹即可。
Q5:RC-ESDF 对复杂形状的优势在哪里?
对于非圆形机器人(如多旋翼无人机、机械臂),传统方法只能用圆形/矩形近似。RC-ESDF 天然支持任意复杂形状(包括非凸形状),因为它提前用 CAD 模型构建好了完整的自我距离场。
Q6:RC-ESDF 的"排斥力"是怎么工作的?
RC-ESDF 本身不产生排斥力,它提供的是指向机器人外部的解析梯度(最快逃离方向)。这个梯度与全局 ESDF 的梯度联合,指导优化器调整机器人位姿,从而产生"推开"效果。
总结
| 传统 ESDF | RC-ESDF | |
|---|---|---|
| 核心思想 | 一体化构建,环境中心 | 分而治之,机器人为中心 |
| 自我形状 | 在线近似(如圆形) | 离线精确预计算 |
| 在线计算 | 重(实时更新) | 轻(仅查表) |
| 查询速度 | 取决于地图大小 | 2.4μs 固定 |
| 形状支持 | 简单形状 | 任意复杂形状 |
| 架构 | 一张图搞定一切 | 两张图协同:自我离线表 + 环境在线图 |
RC-ESDF 的设计哲学:用离线预计算换取在线极致速度,用分而治之换取任意形状支持。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)