找回密码
 立即注册
首页 业界区 科技 有向距离场SDF,在游戏中如何实现agent导航以及绕障 ...

有向距离场SDF,在游戏中如何实现agent导航以及绕障

崔竹 3 天前
有向距离场(Signed Distance Field, SDF)为智能体(agent)实现避障和绕行提供了一种高效且强大的方法。其核心思想在于,SDF 不仅仅是检测碰撞,而是提供了一个关于环境中障碍物远近和方向的连续信息,从而可以引导智能体平滑地绕过障碍物。
什么是有向距离场 (SDF)?

有向距离场是一个在空间中每个点都存储了到最近物体表面的距离的场。 它的关键特性在于“有向”二字,这个“向”是通过距离值的正负号来体现的:

  • 正值: 表示该点位于物体外部。
  • 负值: 表示该点位于物体内部。
  • 零值: 表示该点正好位于物体表面上。
通过这种方式,SDF 将环境中的几何信息编码成一个连续的标量场。智能体只需查询自身所在位置的SDF值,就能立刻知道自己离最近的障碍物有多远,以及是否在障碍物内部。
利用SDF实现避障

SDF 实现避障的核心原理非常直观:智能体需要始终保持在SDF值为正的区域内活动。当智能体靠近障碍物时,其所在位置的SDF值会减小。通过监控这个值的变化,可以非常容易地实现碰撞检测和预防。
具体实现方式通常有以下几种:

  • 简单的安全距离判断: 可以在路径规划中设置一个安全阈值,要求智能体规划的路径上所有点的SDF值都必须大于这个阈值。这样可以确保智能体与障碍物之间始终保持一个最小的安全距离。
  • 基于距离的排斥力: 可以将SDF值转化为一个作用在智能体上的“排斥力”。当SDF值越小(越接近障碍物),排斥力就越大,从而将智能体推离障碍物。
利用SDF实现绕行

SDF 更强大的功能在于引导智能体进行平滑的绕行,而不仅仅是简单的避开。这主要是通过利用SDF的梯度来实现的。SDF的梯度是一个向量,它指向SDF值增长最快的方向,也就是垂直于最近物体表面并指向远离该表面的方向
基于梯度的绕行算法

  • 计算梯度: 在智能体当前位置,计算SDF的梯度。这个梯度向量就是“最安全”的移动方向,因为它直接指向远离障碍物的方向。
  • 规划路径/生成速度: 智能体的导航算法可以将这个梯度信息融合进去。例如,可以将目标点的方向向量与SDF的梯度向量进行加权平均,从而生成一个既朝向目标点又远离障碍物的合力方向。
  • 梯度下降/上升: 智能体可以沿着SDF的负梯度方向移动,以最快的速度远离障碍物,这在需要紧急避障时非常有用。 相反,在路径规划中,可以通过在SDF场中进行类似梯度上升的搜索,来寻找远离障碍物的路径点。
总结:SDF在避障和绕行中的实现步骤

一个典型的利用SDF进行避障和绕行的智能体导航流程如下:

  • 离线构建SDF: 在任务开始前,对已知的静态环境进行处理,为整个场景或其关键区域生成一个SDF体素网格或SDF函数。
  • 实时感知与更新 (可选): 对于动态变化的环境,可以通过传感器(如LiDAR)实时感知周围环境,并动态地更新局部或全局的SDF。
  • 路径规划与导航:

    • 智能体在进行全局路径规划时(如使用A或RRT算法),可以将SDF值作为代价函数的一部分。离障碍物太近的节点会有更高的代价值,从而使规划出的路径天然地远离障碍物。
    • 在局部路径规划或实时运动控制中,智能体在每个时间步查询当前位置的SDF值及其梯度。
    • 如果SDF值小于预设的安全阈值,则激活避障逻辑。
    • 避障逻辑会根据SDF的梯度计算出一个“逃逸速度”或调整力,与朝向目标的驱动力结合,共同决定智能体下一步的运动方向和速度。

通过这种方式,SDF为智能体提供了一种连续、平滑且计算高效的避障和绕行解决方案,广泛应用于机器人导航、无人机飞行和游戏中角色的自动寻路等领域。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册