2、行人运动模型基础:社会力模型

好,咱们今天来聊聊行人运动模型里最经典的一个——社会力模型。说实话,我刚入行做自动驾驶仿真那会儿,第一次看到这个模型的名字,还以为是什么社会学理论。后来才发现,这玩意儿在行人模拟里,简直就是基石一样的存在。

社会力模型(Social Force Model)原理

社会力模型,说白了就是把人当成一个「受力粒子」。你想想看,我们走路的时候,是不是会下意识地避开别人?会朝着目标方向走?会跟前面的人保持距离?这些行为,在模型里都被抽象成了「力」。

我个人习惯把这个模型拆成三个核心力:

  • 驱动力:你想往哪儿走,就有一个力把你往那个方向拉。比如你赶着去上班,这个力就很大。
  • 排斥力:你不想撞到别人,也不想撞到墙。所以人和人之间、人和障碍物之间,都有一个排斥力,距离越近力越大。
  • 吸引力:有时候你会被某些东西吸引,比如看到朋友在路边等你,或者看到一家奶茶店。这个力会让你偏离原来的路线。

嗯,这里要注意一点:社会力模型里的「力」不是物理上的力,而是一种数学上的抽象。它描述的是行人行为的变化趋势。我在项目中遇到过有人非要拿牛顿第二定律去套,结果算出来的轨迹完全不对——因为行人不是无摩擦的小球,他有自己的意图和反应时间。

核心思想:行人的加速度 = 驱动力 + 排斥力 + 吸引力 + 随机扰动

社会力模型数学表达

好,咱们来看数学表达。别怕,其实不复杂。我尽量用白话讲清楚。

首先,每个行人 i 都有一个期望速度 v_i^0 和期望方向 e_i^0。驱动力就是让他的实际速度 v_i 朝着期望速度靠近:

F_drive = m_i * (v_i^0 * e_i^0 - v_i) / τ_i

这里 τ_i 是反应时间,说白了就是你从「想加速」到「真的加速」需要多久。我一般取 0.5 秒左右,太快了不真实,太慢了像在梦游。

然后是排斥力。行人 i 和行人 j 之间的排斥力长这样:

F_rep_ij = A_i * exp((r_ij - d_ij) / B_i) * n_ij

其中:

  • A_i 是力的强度,我习惯取 2000 N 左右
  • B_i 是作用范围,一般 0.08 米,太小了人会穿模
  • r_ij 是两个人半径之和
  • d_ij 是两个人质心之间的距离
  • n_ij 是从 j 指向 i 的单位向量

你看这个公式,距离越近,力越大,而且是指数增长的。这很符合直觉——你离别人越近,越觉得不舒服,会下意识躲开。

避坑指南:我曾经在调参时把 A_i 设得太大,结果仿真里行人像被弹弓打出去一样,互相弹飞了。后来我学乖了,先设小一点,再慢慢往上加,直到行为看起来自然为止。

障碍物的排斥力跟行人之间的类似,只是把行人换成了墙或者路障。公式差不多:

F_rep_iW = A_W * exp((r_i - d_iW) / B_W) * n_iW

这里 d_iW 是行人和墙的最短距离。嗯,要注意墙是有厚度的,别把行人算到墙里面去了。

最后,把所有力加起来,得到行人的加速度:

a_i = (F_drive + ΣF_rep_ij + ΣF_rep_iW + F_att + ξ) / m_i

那个 ξ 是随机扰动项,用来模拟行人行为的不确定性。我一般加一个高斯噪声,标准差取 0.1 左右,太小了太机械,太大了像喝醉了酒。

社会力模型优缺点

聊完了原理和公式,咱们来客观说说这个模型的优缺点。毕竟没有完美的模型,只有合适的模型。

优点 缺点
数学形式简洁,容易实现 参数调起来很麻烦,不同场景要不同参数
能模拟出自然的行人流现象 没有考虑行人之间的信息传递(比如眼神交流)
计算效率高,适合大规模仿真 在拥挤场景下容易出现震荡或穿模
可扩展性强,能加各种自定义力 对障碍物形状的处理比较粗糙

我个人觉得,社会力模型最大的优势就是「够用」。在自动驾驶仿真里,我们不需要模拟行人之间多么复杂的社交互动,只需要他们走路、避让、过马路这些基本行为看起来合理就行。社会力模型正好能满足这个需求。

但它的缺点也很明显。我记得有一次做十字路口的仿真,行人密度一高,模型就开始「抖」——两个人面对面走过来,互相让来让去,就是过不去。后来我加了点随机扰动,又调整了反应时间,才勉强解决。

注意:社会力模型不适合模拟群体恐慌、踩踏等极端场景。在这些场景下,人的行为逻辑完全变了,社会力模型的假设不再成立。如果你要做这类仿真,建议换用基于智能体的模型或者流体模型。

总的来说,社会力模型是行人模拟的「入门标配」。我建议初学者先把这个模型吃透,跑通几个典型场景,再去接触更复杂的模型。毕竟,能把简单的东西用好,比一上来就搞花里胡哨的模型要实在得多。

好,这一节就到这里。下一节咱们聊聊社会力模型在自动驾驶仿真里的具体应用,包括怎么跟感知模块对接、怎么处理行人突然横穿马路这些棘手情况。