凌晨五点的菜市场,老陈推着满载热汤的餐车,在人群中左闪右避。他不需要任何行人喊“让一让”,只需看一眼对方的肩膀朝向、脚步频率,就知道这位大妈要停下挑菜、那位小伙会突然转身。更神奇的是,老陈从不贴着人擦过去——他总会在离人还有半臂远的地方微微绕个弧线,仿佛每个人身边都套着一个看不见的气泡。这就是人类与生俱来的“社会导航”能力:既到达目的地,又不冒犯任何人。 机器人要走进医院、餐厅、仓库这些有人类活动的地方,光会“躲障碍物”远远不够。它得像老陈一样,读得懂行人的位置变化、预测得出人家下一步要去哪,还要遵守“不贴脸”“不堵路”“从右侧超车”这类没有写进法律、却人人默认的社交默契。社会导航(Human-Aware Navigation)要解决的核心命题正是:机器人在人类环境中行进时,如何同时保证物理安全与社交舒适。这套能力由个人空间建模、行人运动预测、社会规范约束、规划决策等模块共同组成,是移动机器人从实验室走向真实世界的必修课。

岗位关联

掌握社会导航,意味着你设计的机器人不再是一台“铁憨憨”,而是一个懂得与人共处的移动助手——这在服务机器人、仓储物流、医疗陪护等场景中,是将算法落地为产品竞争力的关键一步。

目录
  1. 可视化演示
  2. 社会导航概述
  3. 个人空间建模
  4. 行人运动预测
  5. 社会规范约束
  6. 规划与决策
  7. 工程实现
  8. 挑战与展望
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

社会导航概述

老陈推了二十年餐车,从没撞翻过一碗汤。你若问他秘诀,他会说:“眼睛得长在别人脚上。”行人往左偏,他早半步往右让;大妈停下挑菜,他绕着走绝不从人背后硬挤。传统避障只把行人当成“会动的柱子”,绕开就完事;而老陈的行事逻辑里,每个行人都是有情绪、有意图、有边界的活人。这就是社会导航与传统避障的本质分野——前者把人当场景,后者把人当障碍。

把老陈的经验翻译给机器人,首先要定义什么叫“社会导航”。社会导航(Human-Aware Navigation)指移动机器人在人类活动环境中,同时满足物理安全与社交可接受性的导航方法。它不追求几何意义上的最短路径,而是追求“人类觉得舒服”的路径。设计目标通常包括三方面:安全(不碰撞)、舒适(不侵入个人空间)、可预测(机器人行为符合人类对移动物体的预期,不突然急停或诡异摇摆)。

从技术架构看,社会导航是一个感知—预测—规划—控制的闭环。感知层回答“人在哪”,预测层回答“人将去哪”,规划层回答“我该怎么走”,控制层回答“每一步怎么迈”。任何一个环节脱节,机器人的行为就会像新手司机一样僵硬。现代机器人学把这一整套能力视为服务机器人落地的核心前提——毕竟没有任何一家医院敢让一台不懂社交礼仪的机器人在走廊里横冲直撞。

老陈的餐车功夫不是天生就会的,他也是在菜市场摔过几跤、被人骂过几句之后才慢慢摸出门道。社会导航算法也是同样的道理:让机器人在一次次“被嫌弃”和“被容忍”中不断调优,最终变成那个让人愿意侧身让路的“老陈”。

社会导航性能=安全性×舒适度×任务效率\displaystyle \text{社会导航性能} = \text{安全性} \times \text{舒适度} \times \text{任务效率}
三个指标相互牵制:路线最短不一定最舒服,速度最快不一定最安全。好的社会导航是三者平衡的艺术。
  1. 安全性指标衡量机器人是否与行人或障碍物发生碰撞,是导航的底线要求。
    Psafe=1−NcollisionNtotal\displaystyle P_{\text{safe}}=1-\frac{N_{\text{collision}}}{N_{\text{total}}}
  2. 舒适度指标衡量机器人与人的交互是否令对方感到紧张或不适,通常与最小侵入距离相关。
    C=1T∫0Tc(d(t)) dt\displaystyle C=\frac{1}{T}\int_0^T c(d(t))\,dt
  3. 任务效率指标衡量机器人完成导航任务的时间与路径开销,防止为了礼貌而无限绕路。
    E=LidealLactual\displaystyle E=\frac{L_{\text{ideal}}}{L_{\text{actual}}}

个人空间建模

老陈心里有一张“谁都不许碰”的地图:每个人身边都套着一个隐形气泡。大妈挑菜时气泡会膨胀,因为注意力在菜上,容易被吓到;赶火车的小伙气泡会缩小,因为他自己就在横冲直撞,不太介意别人靠近。老陈的绕行半径,从来不是固定的半米,而是根据对方的“状态”实时调整。

这个“隐形气泡”在学术上叫个人空间(Personal Space),是爱德华·霍尔提出的人类社交距离理论的核心概念。社会导航把它建模为机器人周围的势场:越靠近一个人,社会压力越大;距离越远,压力迅速衰减。机器人规划路径时,会把这种压力当作“看不见的山丘”主动绕开,而不是直接把人当作硬障碍切断路线。

最常用的模型是指数衰减势场。设机器人到行人的实际距离为 \( d \),则该行人产生的社交压强为:

其中 \( \alpha \) 控制压力随距离衰减的快慢,\( \beta \) 反映该行人的个体特性。老人、儿童、低头看手机的人 \( \beta \) 更大,因为他们对突然靠近更敏感。

有了这个势场模型,机器人就能把“别靠太近”这种模糊的社交要求,转成一张可以用梯度计算的数学地图。老陈凭直觉完成的绕行,如今在算法里变成了“沿着最陡下坡方向走”的数值问题。个人空间从社会学概念变成规划器的输入,是社会导航从“玄学”走向“工程”的第一步。

Ucomfort(d)=βe−αd\displaystyle U_{\text{comfort}}(d)=\beta e^{-\alpha d}
指数衰减的直觉:你靠近陌生人时,空气仿佛一点点变黏稠;离得越远,这种黏稠感消失得越快。
  1. 实际距离 \( d \) 的计算取机器人与行人的欧氏距离,即连线的长度。
    d=∥probot−phuman∥\displaystyle d=\left\|\mathbf{p}_{\text{robot}}-\mathbf{p}_{\text{human}}\right\|
  2. 指数项 \( e^{-\alpha d} \)距离为 0 时压力最大为 1,距离增大时按指数速度衰减,模拟“越近越紧张”的心理感受。
    e−αd=1eαd\displaystyle e^{-\alpha d}=\frac{1}{e^{\alpha d}}
  3. 个体敏感系数 \( \beta \)衡量该行人能容忍的最小距离,敏感人群取大值。
    β=β0×wvulnerable\displaystyle \beta=\beta_0 \times w_{\text{vulnerable}}

行人运动预测

老陈最厉害的本事不是躲人,而是预判。他看见小伙子的肩膀往右转,就知道对方三秒后会往右走,于是提前半步朝左让——等小伙子真的转身时,两人已经错开了。这就是“不看脚底看意图”的行人预测:不是等行人动了再反应,而是提前推断他要去哪。

机器人没有老陈的直觉,它只能靠模型。最基础也最实用的模型是恒定速度模型(Constant Velocity Model):假设行人在短时间 \( \Delta t \) 内保持当前速度不变,从而外推出未来位置。这在行人正常行走、没有突然转向时相当可靠,而且计算量极小,适合实时导航。

其中 \( \mathbf{p}(t) \) 是行人当前位置,\( \mathbf{v}(t) \) 是当前速度矢量。更复杂的方案还会结合行人朝向、头部姿态、历史轨迹,甚至用循环神经网络预测多峰轨迹——但在工程落地时,恒定速度模型往往是性价比最高的起点。

p^(t+Δt)=(xt+vxΔt, yt+vyΔt)\displaystyle \hat{\mathbf{p}}(t+\Delta t) =(x_t+v_x\Delta t,\ y_t+v_y\Delta t)

行人预测的质量直接决定绕行是否从容。预测得准,机器人像老陈一样提前平移半步,行人都没察觉;预测得不准,机器人就会在人群中“蛇形走位”,反而让人困惑。业内常说“预测多一分,刹车少一次”,正是这个道理。

p^(t+Δt)=p(t)+v(t)Δt\displaystyle \hat{\mathbf{p}}(t+\Delta t) = \mathbf{p}(t) + \mathbf{v}(t)\Delta t
恒定速度模型就像老陈判断“这人走得稳,应该会继续直走”——大部分时候靠谱,特殊情况下再启动更复杂的预测模型。
  1. 当前位姿 \( \mathbf{p}(t) \)由激光雷达或相机实时检测到的行人坐标。
    p(t)=(xt, yt)\displaystyle \mathbf{p}(t) = (x_t,\ y_t)
  2. 当前速度 \( \mathbf{v}(t) \)由连续两帧位置差分估计得到。
    v(t)=p(t)−p(t−Δt)Δt\displaystyle \mathbf{v}(t)=\frac{\mathbf{p}(t)-\mathbf{p}(t-\Delta t)}{\Delta t}
  3. 预测时域 \( \Delta t \)预测时间窗口,通常取 1—3 秒。窗口太长预测不可靠,太短则来不及规划绕行动作。

社会规范约束

菜市场虽然没有交警,但人人遵守一套默认规则:靠右走、不堵在通道中间、别人低头挑东西时不从背后吓人。老陈从不跟人抢道,宁可放慢速度等半拍,也不在人群中玩急转弯。这些不成文的规矩,就是社会规范。

社会导航要让机器人也“懂规矩”,常见约束有三类:右侧通行(Right-Handed Rule),即与行人交错时默认从右侧通过,避免双方同时向左让位造成“镜像僵局”;礼貌避让(Polite Yielding),即当行人占住通道时,机器人主动减速等待,而不是强行挤过;社交距离保持(Social Distance Keeping),即前文提到的个人空间约束,不贴脸、不尾随。

这些规范在算法里通常转化为规则势场或代价项。例如右侧通行可以建模为路径侧偏的惩罚项:当机器人从行人左侧通过时代价升高,从右侧通过时代价降低。礼貌避让则表现为速度调节:当行人密度超过阈值时,机器人把期望速度下调到“跟随人群”的节奏,而不是保持巡航速度硬闯。

老陈常说:“快一步是抢,慢一步是礼。”社会规范约束的深层价值,就是让机器人的行为变得可预期。当所有人的移动规律都遵循同一套社会默契时,机器人就从一个不可理喻的“闯入者”,变成了人群里“懂规矩的陌生人”。人类不需要专门给机器人让路,机器人也不会吓到任何人——这是共处的前提。

规划与决策

老陈的每次左拐右绕,其实都在心里盘算:“走直线最近,但会撞到人;绕左边远半步,但会贴着小贩的摊子;绕右边多走三步,但最稳妥。”多数时候他选择右边,因为那顿饭只要晚三秒送到,客人不会怪他,但撞翻一筐鸡蛋的代价他承受不起。这就是多目标决策:把所有考量加成一个总代价,选代价最小的路。

社会导航的规划层正是如此。它把目标吸引力、个人空间压力、行人预测、社会规范全部折算进一个代价函数,然后搜索使总代价最小的路径。一种典型表达是:

其中 \( J_{\text{goal}} \) 衡量偏离目标的代价(希望尽快到达),\( J_{\text{social}} \) 衡量社交侵入代价(希望不冒犯行人),\( J_{\text{obstacle}} \) 衡量碰撞代价(希望绝对安全)。权重 \( w \) 决定了机器人的“性格”:医院里 \( w_s \) 调大,让机器人更谨慎礼貌;仓库里 \( w_o \) 调大,优先保障绝对安全。

Jobstacle={1d−1dmin,d<dmin0,d≥dmin\displaystyle J_{\text{obstacle}}=\begin{cases} \dfrac{1}{d}-\dfrac{1}{d_{\text{min}}}, & d<d_{\text{min}}\\[4pt] 0, & d\ge d_{\text{min}} \end{cases}

在代价函数的基础上,规划器还可以叠加速度调节:根据前方行人密度、距离和预测轨迹,动态调整机器人的平移速度与转向角速度。行人多时减速慢行,行人间隙大时恢复巡航。路径生成则可以采用动态窗口法或模型预测控制,每次求解一段短时间内的最优控制量,滚动更新。这样一来,机器人的每一步都在“赶路”和“礼让”之间做一次微小的权衡——正如老陈的那句“快一步是抢,慢一步是礼”。

J=wgJgoal+wsJsocial+woJobstacle\displaystyle J = w_g J_{\text{goal}} + w_s J_{\text{social}} + w_o J_{\text{obstacle}}
权重就是机器人的“性格旋钮”:往左拧是效率优先的急性子,往右拧是彬彬有礼的慢性子。
  1. 目标代价 \( J_{\text{goal}} \)当前点到目标点的距离或时间开销,鼓励机器人向前推进。
    Jgoal=∥pnow−pgoal∥\displaystyle J_{\text{goal}}=\left\|\mathbf{p}_{\text{now}}-\mathbf{p}_{\text{goal}}\right\|
  2. 社交代价 \( J_{\text{social}} \)对附近所有行人的个人空间势场求和,鼓励远离人群。
    Jsocial=∑i=1nβie−αdi\displaystyle J_{\text{social}}=\sum_{i=1}^{n}\beta_i e^{-\alpha d_i}
  3. 障碍代价 \( J_{\text{obstacle}} \)硬性碰撞成本,通常设计为在危险距离内急剧上升。

工程实现

把老陈的功夫教给机器人,光有算法还不够,还得有一整套“感觉器官”和“骨架”。老陈靠眼睛和耳朵感知世界,机器人靠传感器;老陈的肌肉记忆来自十年经验,机器人靠导航框架里的实时计算。工程实现就是把理论模型装进真实硬件的关键一跳。

感知输入层,主流方案是激光雷达 + 深度相机的组合。激光雷达提供大范围、高精度的行人位置与速度,深度相机补充行人的朝向、头部姿态等“社交线索”。经过目标检测与跟踪(如卡尔曼滤波或多目标跟踪器),感知模块输出密集的“行人状态列表”,供预测与规划模块使用。在 ROS(机器人操作系统)生态中,社会导航通常作为 move_base 导航栈的全局/局部规划器插件集成:全局规划器生成符合社交代价的粗略路径,局部规划器实时避让动态行人。

评估指标是工程落地的“验收标准”。最核心的三项是:到达率(能否成功走到目标点)、最小侵入距离(全程离行人最近的距离,体现舒适度)、交互时间比(机器人在人群中等待与绕行的时间占比,体现效率)。这些指标组合起来,回答了老板最关心的三个问题:能不能到?会不会吓到人?会不会太慢误事?

老陈的餐车装上了传感器,他的“读心术”被翻译成一行行 ROS 节点之间的消息流。测试那天,机器人第一次在模拟菜市场里平稳绕过一位“低头看手机”的假人模型,全程最小侵入距离 0.8 米——老陈眯着眼看了半天,说了一句:“还行,像那么回事。”

挑战与展望

老陈也有怕的时候:早高峰的菜市场入口,五六个人同时从不同方向涌来,每个人都像在跳即兴舞蹈。他预测了左边的阿姨往右拐,结果右边的学生突然转身;他让了半步,身后又冒出一辆运菜板车。这种“所有人都同时在动、互相影响”的场景,是社会导航最难啃的骨头。

学术上把这类问题归为多智能体博弈:每个行人都在根据其他人调整自己的路线,机器人的行为又会反过来影响行人。传统“感知—预测—规划”单向流水线在这里捉襟见肘,因为预测本身改变了行人的后续行为。研究者开始尝试交互感知预测与联合规划——让机器人把自己也放进预测模型中,而不是站在局外“算人行人的路”。

另一个挑战是动态环境:商场里突然窜出的儿童、医院走廊里临时停放的病床、仓库里移动的叉车,都要求机器人具备实时重建地图与快速重规划能力。而更深层的难题是人机信任:机器人再怎么礼貌,人们第一次遇到它仍会紧张。只有当机器人的行为长期保持一致、可预期、不越界,人类才会像对待老陈的餐车一样自然地侧身让路——这份信任不是靠一次漂亮的演示赢来的,而是靠成千上万小时的稳定表现积累的。

展望未来,社会导航正与大型语言模型、具身智能结合:机器人不仅要“读懂”行人的身体语言,还要“听懂”人类的自然语言指令,甚至能通过语音或屏幕表达自己的意图。老陈听说未来的机器人能边让路边喊“借过借过”,咧嘴一笑:“吆,这不就是当年的我吗?”

AI 应用场景

餐厅送餐机器人

阶段:决策与导航

解决的问题:传统送餐机器人只按固定轨道或纯避障运行,在饭点高峰期的大堂里经常堵住过道、吓到顾客,甚至被服务员投诉“没有眼力见”。融入社会导航后,机器人能预测端着热汤走来的服务员轨迹,主动贴边让行,并在顾客身边保持 0.5 米以上的舒适距离再刹车。

具体案例:海底捞式火锅店的传菜机器人原本需要服务员频繁“人工解围”,改造成社会导航版本后,通过前置摄像头识别行人朝向与速度,配合代价函数规划绕行路线,高峰期传菜效率提升了约 30%,顾客与机器人的“尴尬相遇”大幅减少。

商场导购机器人

阶段:行人预测与行为规划

解决的问题:商场导购机器人需要主动走近顾客介绍商品,但“主动接近”与“冒犯个人空间”只有一线之隔。社会导航让机器人先远距离观察顾客的停留时间与视线方向,判断对方是否有咨询意图,再以平缓的弧线从侧面接近,并在顾客后退时立即停止前进。

具体案例:某家电卖场的导购机器人通过深度相机检测顾客的手部动作与面部朝向,当顾客在冰箱前驻足超过 5 秒才上前,全程保持 1.2 米开讲,讲完自动后退。顾客满意度调查显示,“不吓人”“知道分寸”成为高频好评词。

仓储物流人机混行

阶段:安全规划与控制

解决的问题:电商仓库里,搬运机器人与拣货员共用通道,传统避障会造成“机器人频繁急停、拣货员绕路”的双输局面。社会导航通过预测拣货员的移动方向,让机器人选择“跟随人流方向绕行”而非“逆流硬穿”,既保障安全又减少对拣货动线的干扰。

具体案例:某大型仓储中心在搬运机器人上部署了轻量化社会导航模块,将行人与机器人的最小间距从 0.3 米提升到 0.6 米,同时因急停导致的货物滑落事故减少了一半,人机混行区域的通行效率不降反升。

Python 演示

python62 行
import mathimport random  class SocialNavigator:    """势场法社会导航:目标产生引力,行人产生社交斥力。"""    def __init__(self, goal, pedestrians, k_att=2.0, k_rep=30.0, d0=1.5):        self.goal = list(goal)          # 目标点 (x, y)        self.peds = [list(p) for p in pedestrians]  # 行人列表        self.k_att = k_att              # 引力系数        self.k_rep = k_rep              # 斥力系数        self.d0 = d0                    # 个人空间半径        self.pos = [0.0, 0.0]           # 机器人当前位姿     def attract(self):        """目标点对机器人的引力分量。"""        dx = self.goal[0] - self.pos[0]        dy = self.goal[1] - self.pos[1]        return (self.k_att * dx, self.k_att * dy)     def repulse(self):        """所有行人的个人空间对机器人的斥力之和。"""        fx, fy = 0.0, 0.0        for px, py in self.peds:            dx = self.pos[0] - px            dy = self.pos[1] - py            d = math.hypot(dx, dy)            if d < self.d0:                strength = self.k_rep * (1.0 / d - 1.0 / self.d0)                fx += strength * dx / d                fy += strength * dy / d        return fx, fy     def step(self, dt=0.1):        """按合力方向前进一步。"""        ax, ay = self.attract()        rx, ry = self.repulse()        self.pos[0] += (ax + rx) * dt        self.pos[1] += (ay + ry) * dt        return self.pos.copy()     def run(self, steps=300):        """持续运动直到接近目标,返回完整轨迹。"""        trail = []        for _ in range(steps):            trail.append(self.step())            dist_to_goal = math.hypot(                self.goal[0] - self.pos[0],                self.goal[1] - self.pos[1])            if dist_to_goal < 0.1:                break        return trail  if __name__ == "__main__":    random.seed(42)    peds = [[3.0 + random.uniform(-0.5, 0.5),             0.8 + random.uniform(-0.3, 0.3)] for _ in range(4)]    nav = SocialNavigator(goal=[10.0, 0.0], pedestrians=peds)    trail = nav.run()    print("轨迹点数:", len(trail))    print("终点坐标:", [round(v, 2) for v in trail[-1]])
目的:用势场法实现一个极简社会导航——目标点产生“吸引”,行人个人空间产生“斥力”,机器人在合力下绕开行人到达终点,直观展示“舒适约束”如何改变路径。
  1. peds = [[3.0 + random.uniform(-0.5, 0.5), ...] for _ in range(4)]随机生成 4 个行人的初始位置,模拟真实人群的分散性。
  2. self.d0 = d0个人空间半径,相当于“隐形气泡”的大小;距离小于它才触发斥力。
  3. d = math.hypot(dx, dy)计算机器人到行人的欧氏距离,hypot 能避免大数平方溢出。
  4. strength = self.k_rep * (1.0 / d - 1.0 / self.d0)斥力强度:越靠近行人越大,临界处平滑降为 0,避免突变。
  5. self.pos[0] += (ax + rx) * dt用引力与斥力的合力更新位置,dt 模拟时间步长。
  6. dist_to_goal < 0.1判断是否已到达目标附近,决定是否提前结束循环。

常见误区

误区我感觉避障和社会导航是一回事,反正都是让机器人不撞墙不撞人,区别只是算法复杂一点。以前做扫地机器人也是这么绕来绕去的。

正解避障的底层逻辑是“行人是障碍物”,物理上绕开就行;社会导航的底层逻辑是“行人是有边界的社交个体”,不仅要绕开,还要绕得让人舒服。避障考虑的是几何碰撞,社会导航额外考虑个人空间、社会规范、行为可预测性。类比来说,避障是“别碰倒别人的杯子”,社会导航是“别吓到端杯子的人”。

为何常见:因为两者在代码上都表现为“路径绕行”,初学者看输出结果相似,就容易忽略输入差异——社交舒适度并不直接体现在最终路径上,而是体现在“绕行的弧度、距离、时机”里。

误区我觉得行人预测就应该上最厉害的模型,把注意力机制、图神经网络全用上,预测不准导航肯定做不好。恒速模型那么简陋,肯定不能用。

正解行人预测精度和社会导航整体表现不是简单的正比关系。预测得再准,规划层如果忽略社会规范,机器人照样会“开进人群又急刹车”。恒速模型在短时域内准确率足够高、延迟极低,适合实时避让;复杂模型预测时域虽长,但计算延迟可能让机器人反应变慢。工程上常用“短时恒速 + 长时意图”的混合策略,而不是盲目追求单一预测精度。

为何常见:深度学习在感知领域的大获成功让大家形成了“模型越大越好”的惯性思维,忽略了规划问题中“够用且快”远比“极致且慢”更符合实时性要求。

误区我觉得个人空间很好建模,给每个行人画一个半径 0.5 米的圆,机器人保证不进这个圆就够了。设个固定参数一劳永逸。

正解个人空间是动态变化的:低头看手机的人半径更大,匆忙赶路的人半径更小;同一个人静止站立和快步行走时的个人空间形态也不一样,甚至并非圆形——人在前进方向上的个人空间通常更长。固定半径会导致机器人要么过度保守(绕大远路),要么在某些场景下仍然冒犯行人。更合理的方式是用随速度和朝向变化的椭圆或高斯势场。

为何常见:因为“圆形 + 固定半径”是最容易用代码实现的直觉模型,初学者先跑通流程后就不愿再深究,而舒适度差异恰恰藏在那些“没用固定圆”的细节里。

误区我认为给机器人写上“靠右走、保持距离、减速礼让”这些规则,它就算懂社会导航了。规则都遵守了,还能有什么问题?

正解社会规范是“默认配置”,不是“万能钥匙”。真实场景中规范经常相互冲突:通道左边有人蹲下系鞋带,右边有人逆行,此时“靠右走”和“避让行人”不能同时满足。合格的社会导航需要在规范冲突时通过代价函数动态权衡,还要考虑行人是否理解机器人的意图——机器人若只顾自己守规则却让行人猜不透它下一步要干嘛,依然不算成功。

为何常见:因为我们习惯把社会规范理解为“交规”一样的刚性条文,而真实的人类社交默契是柔性的、可协商的、甚至是有例外的。

面试题

Q1. 社会导航与传统避障最本质的区别是什么?

单选题 · easy

  • A.社会导航使用了深度学习算法
  • B.社会导航把行人当社交个体对待← 正确答案
  • C.社会导航只适用于室内场景
  • D.社会导航不需要传感器支持

答案:B。传统避障把行人视为几何障碍物,绕开即可;社会导航额外关注个人空间与社会规范,把行人当作有边界、有预期的社交个体。深度学习只是可选工具,室内外场景与传感器都是影响因素,不是本质区别。好比老陈躲人不是躲柱子,而是“躲一个会生气的活人”。

Q2. 个人空间建模常用的数学形式是?

单选题 · easy

  • A.线性递增函数
  • B.指数衰减势场← 正确答案
  • C.常数阶跃函数
  • D.正弦周期函数

答案:B。指数衰减势场 \( \beta e^{-\alpha d} \) 能描述“越近压力越大、越远迅速消失”的心理感受,与人类社交距离直觉最吻合。线性或阶跃函数要么衰减太慢、要么在边界处突变,都不如指数形式自然。

Q3. 恒定速度模型预测行人位置 \( \hat{p}(t+\Delta t) \) 的公式是?

单选题 · mid

  • A.\( p(t) - v(t)\Delta t \)
  • B.\( p(t) + v(t)\Delta t \)← 正确答案
  • C.\( p(t) \times v(t)\Delta t \)
  • D.\( v(t) + p(t)\Delta t \)

答案:B。恒定速度模型假设行人在短时间 Δ t 内匀速运动,位置外推就是当前位移 p(t) 加上速度乘时间 v(t)Δt,方向和量纲都正确。其他选项要么方向反了,要么破坏了位置与速度的单位关系。

Q4. 社会导航代价函数 \( J = w_gJ_g + w_sJ_s + w_oJ_o \) 中,\( J_s \) 代表什么?

单选题 · mid

  • A.目标点吸引力代价
  • B.社交侵入代价← 正确答案
  • C.电池电量消耗
  • D.通信延迟代价

答案:B。\( J_s \) 对应社交代价,通常由个人空间势场叠加而成,衡量路径对行人舒适度的侵入程度。目标代价是 \( J_g \),障碍代价是 \( J_o \)。权重 \( w_s \) 调大,机器人表现得更礼貌、更爱绕远路。

Q5. 关于右侧通行约束,下列说法正确的是?

单选题 · mid

  • A.强制机器人永远靠右行驶
  • B.在代价函数中给左侧绕行加惩罚← 正确答案
  • C.只在十字路口生效的交通规则
  • D.让机器人沿道路中线行驶

答案:B。右侧通行在算法上不是硬性规则,而是软性代价——机器人从行人左侧通过时代价升高,从右侧通过时代价降低。软约束允许机器人在空间受限时仍灵活处理,而“强制靠右”反而会制造新的死局。

Q6. 社会导航工程实现中常用的感知传感器包括?

多选题 · mid

  • A.激光雷达← 正确答案
  • B.深度相机← 正确答案
  • C.惯性测量单元
  • D.土壤湿度计

答案:AB。激光雷达提供大范围高精度的行人位置与速度信息;深度相机补充行人朝向、姿态等社交线索。惯性测量单元(IMU)用于机器人自身的位姿估计而非行人感知,土壤湿度计与人体感知无关。

Q7. 社会导航面临的主要挑战包括?

多选题 · hard

  • A.多智能体之间互相影响← 正确答案
  • B.动态环境实时重规划← 正确答案
  • C.建立人机长期信任← 正确答案
  • D.降低机器人电池容量

答案:ABC。多智能体博弈(行人之间互相影响、机器人也被卷入其中)、动态环境中的突发变化、以及让人长期信任机器人的行为一致性,都是当前研究热点。电池容量属于硬件续航问题,不属于社会导航的核心挑战范畴。

Q8. 为什么个人空间模型常把行人前进方向上的空间建模得更大?

单选题 · hard

  • A.因为人走路时前方视野更宽
  • B.因为人对前方来物更敏感紧张← 正确答案
  • C.因为行人速度总是大于机器人
  • D.因为后方传感器精度更高

答案:B。人在前进方向上对靠近的物体更警觉,心理缓冲需求更大,所以个人空间呈“前长后短”的非对称形态。这与视野无关,与速度大小比较无关,更与传感器精度无关。建模时用椭圆或各向异性高斯场才能体现这一特点。

Q9. 评估社会导航系统时,用来衡量舒适度的常用指标是?

单选题 · mid

  • A.到达目标点的时间
  • B.全程最小侵入距离← 正确答案
  • C.机器人电机温度
  • D.路径总长度

答案:B。最小侵入距离反映机器人在整个导航过程中离行人最近到多少米,是舒适度的直接量化指标。到达时间和路径长度属于效率指标,电机温度属于硬件健康指标。

Q10. 社会导航代价函数中的权重参数 \( w_g, w_s, w_o \) 过大会分别导致什么后果?

多选题 · hard

  • A.\( w_g \) 过大导致路径过于激进← 正确答案
  • B.\( w_s \) 过大导致绕路过度← 正确答案
  • C.\( w_o \) 过大导致保守停滞← 正确答案
  • D.\( w_g \) 过大导致彻底无法到达

答案:ABC。\( w_g \) 过大会让机器人拼命奔目标、忽视行人;\( w_s \) 过大会因过度追求舒适而绕很远的路;\( w_o \) 过大会因对障碍过度敏感而在空旷处也畏首畏尾。三者都过大会让系统陷入不可用的极端,但“无法到达”通常是目标代价过小的结果,不是过大——这是典型的权重失衡问题。