局部避障
全库目录221
本文目录8
角色需要在短期内避开动态邻居,同时尽量接近路线给出的首选速度。本文从圆盘速度障碍构造ORCA半平面,再与速度和加速度圆求交。守卫身体半径为0.4米,角色间避让另取0.5米半径;移动支撑与速度反馈提供同一世界基下的实际步末速度。
局部避障
速度障碍把“未来会碰撞的速度”表示成速度空间中的禁区,再选择禁区外的新速度。RVO 让双方各承担一部分避让责任;ORCA 用半平面约束求接近首选速度的可行解,群体运动会更平滑。
这类方法处理短期动态碰撞很好,但不理解全局死锁。窄门两侧人群、对称迎面和高密度拥堵仍可能振荡。工程上常加入通行优先级、车道、预约、局部重寻路或等待状态。角色半径、预测时间和邻居数量都会影响效果与成本。
速度约束的几何例子
先用一维迎面情况观察速度约束。守卫与迎面角色都按包含余量的0.5米避障半径处理,位于x=0和x=4,首选速度分别为+1和−1米/秒。导航侵蚀仍按0.4米身体半径,额外0.1米只用于角色之间的避让余量。相对距离4米、闭合速度2米/秒,扣除合计半径1米后,碰撞将在1.5秒后发生。若预测窗口为2秒,这组速度落在速度障碍内;若双方分别降到+0.5和−0.5,碰撞时间变为3秒,当前窗口内安全。这个计算只对匀速直线圆盘成立,实际ORCA要在相对速度空间把速度推到禁区边界,并分摊修正。障碍在本帧突然出现时,有限加速度可能使新安全速度无法立即达到,仍要由控制器做扫掠和接触处理。
对这个一维迎面例,2秒内闭合距离最多3米,相对闭合速度上限1.5米/秒;当前相对速度2需减少0.5,双方各承担0.25,得到+0.75与−0.75。二维中侧向避让也可能更接近首选速度,因此必须真正构造二维约束,不能把直线限速作为通用ORCA。
二维速度约束构造
设角色A看见B,p=p_B-p_A、v=v_A-v_B,合计半径R,预测时间T均为正。会在T内碰撞的相对速度满足:存在0<t<=T使|p-t*v|<R。把它除以t,可见速度障碍是圆心p/t、半径R/t的圆盘并集,边界由截断圆弧和两条切线射线组成。
当|p|>R时,令d为距离,圆心c=p/T、圆半径r=R/T,两切线方向与p夹角为±asin(R/d)。每条射线从距原点sqrt(d*d-R*R)/T的切点开始。求当前v到边界的最近点q时,分别计算两条射线的投影:参数为max(切点距离,dot(v,切线单位方向));再求v在截断圆上的径向投影;v恰好等于圆心时选朝原点的弧中点q=c-r*p/d,避免归一化零向量。径向投影只接受法线n满足dot(n,p)<=-R的朝原点圆弧,投影超出圆弧时改用两个切点。三类有效候选按平方距离选最小,平局按稳定角色ID约定方向。这样圆弧、左切线和右切线都有明确查询过程。
q处取指向速度障碍外部的单位法线n。圆弧的n是(q-c)/r,切线的n取垂直该射线且背离两射线夹角内部的一侧。令u=q-v,A承担一半修正,得到半平面dot(n,newVelocity-(v_A+0.5*u))>=0。B用对称计算承担另一半;B若是静止且不承担避让的圆形障碍,A承担全部u;墙体边界由有效走廊约束与胶囊扫掠保持,不能把整面墙当作一个半径很小的邻居。当前速度在障碍外时同样使用边界和外向法线,半平面允许保持安全速度,并约束未来变更不会跨入禁区。
这里的p与邻居速度都在同一世界水平基上,v_A、v_B取各自世界步末速度的水平分量。后文求解变量v则是角色相对当前支撑的水平速度。若支撑本步预测水平速度为vSupport,将世界半平面中的newVelocity换成vSupport+v,再与相对支撑的速度圆和加速度圆求交。静止地面上vSupport为零;两人站在不同平台时也先比较世界运动,不能直接相减各自的相对速度。这个本步模型冻结支撑速度,旋转或加速使预测失效时由控制器检查实际轨迹与接触,重新构造下一步约束,原ORCA平面不宣称覆盖这段未建模运动。
若已经重叠,长预测T不能及时解开穿透,改用物理步长dt:w=v-p/dt,n=normalize(w),u=(R/dt-|w|)*n,再建立责任半平面。w近零时用角色ID选定一对相反方向,避免归一化零向量。位置完全相同的角色没有几何上唯一的分离方向,稳定ID只提供确定性仲裁,实际位移仍经过碰撞求解。
多约束求解与可达速度
令V为地表速度上限、A为主动加速度预算,坡面换算系数k=sqrt(1+|g|²),g是高度梯度;这些量采用移动支撑与速度反馈的约定。对每个邻居生成上述半平面,再与本步速度上限圆|v|<=vMax求交,vMax取当前地块换算后的角色水平上限V/k与路线速度表上限的较小值,目标是最小化|v-vPreferred|²。可以用RVO2的增量线性规划;也可用一个较慢但完整的二维候选枚举器作为参考:加入首选速度、首选速度在每条边界直线上的垂足、每对边界直线交点、每条直线与速度圆交点,以及首选速度向速度圆的径向投影。删除不满足全部半平面与圆的点,再选距离最小者。平行直线没有唯一交点,同向重复约束只保留较严格者;无约束且首选速度为零时,零向量本身就是候选。
这些候选覆盖凸可行域最优点的情况:内点、直线内部、圆弧内部和边界交点。以v_x<=0.75、v_y>=0.2、最大速度1.5、首选速度(1,0)为例,两条约束交点(0.75,0.2)可行,比分别投影到(0.75,0)或(1,0.2)更接近可行最优;后两者各自违反另一条约束。一次依次投影不能替代检查全部约束。
有限加速度时,再加入以当前相对速度搬运到步末支撑朝向后的水平分量为圆心、半径aMax*dt的可达速度圆,aMax使用当前地块换算后的水平预算A/k。固定朝向支撑上,圆心就是反馈vEnd;候选中补充两圆交点、每条直线与第二个圆交点,以及首选速度向第二圆的径向投影。随后用两个圆共同筛选。选中的点只是候选步末速度,实际加速曲线交给导航边界与坡面交接检查。
若没有可行候选,记录动态避障无解;最终制动速度还要服从导航边界与坡面交接的约束与回退顺序。该枚举器最坏需要对O(N²)候选各检验N条约束,适合作为参考和少量邻居调试;大群体使用增量求解与邻居裁剪控制成本。
验证方法
用一维迎面例复算1.5秒碰撞与2秒窗口下的速度修正,再用两条半平面的交点检查联合求解。加入加速度圆后重新检验所有候选;真实群体运行采用对称迎面、窄门对冲和环形围堵,记录无解与死锁。
实现与证据
二维速度障碍与RVO2职责按来源核读;候选枚举是低规模参考设计。尚未运行群体避障、增量求解器或动态扫掠。
相关主题
参考资料
- RVO2 Agent.cc:2026-10-23核读动态邻居速度障碍、责任半平面及多约束求解;本页候选枚举器是独立推导的低规模参考方案。
- ORCA:Reciprocal n-body Collision Avoidance原项目页。