当前位置: 首页 > news >正文

运动规划实战案例 | 基于行人社交模型的移动机器人动态避障(附ROS C++仿真)

目录

  • 1 社会规范化导航
  • 2 行人社交距离模型
  • 3 算法仿真
    • 3.1 社会性成本地图建模
    • 3.2 基于社交模型的动态避障

1 社会规范化导航

区别于普通的动态障碍,行人的行为及其社交空间内包含丰富的社交信号,例如人际关系、潜在意图等。在人机共存环境中的导航不能仅限于安全和效率,出于对人类更高层次的社交需求的考虑,机器人需要具备更完善的社会属性。如图所示,社会规范化导航(Social-aware Navigation)提出了

  • 自然性(Naturalness)
  • 舒适性(Comfort)
  • 社会性(Sociability)

三个主要目标。,使机器人的行为更符合人类逻辑,提升服务水平。社会规范的融入,不仅对改善规划性能很重要,也有助于提高人机交互的信任感。

在这里插入图片描述

本文聚焦于社会规范化导航中的舒适性指标,建模移动机器人的动态避障策略

2 行人社交距离模型

如图所示为基于社会工程学和心理学提出的距离空间模型,主要包括以人为中心的四个层次:

  • 私密空间:通常用于如家庭成员等最亲密的关系中,在这一距离内,人的肢体接触和非言语交流较为频繁;
  • 个人空间:通常用于熟悉的朋友之间;
  • 社交空间:通常用于较为正式的场合,如商业谈判或与不太熟悉的人交往等,保持一定的社交距离有助于体现尊重和职业性;
  • 公共空间:通常用于公众场合,如演讲、讲座等,适合大规模的交流和信息传播。

对距离空间的建模,是理解和尊重他人社交需求的重要一环。距离空间的形状通常是不对称的,且不同文化和社会背景中的人们对于这些空间距离的理解和使用会有所不同。例如,在西方文化中,人们通常倾向于使用较大的个人空间,而在一些亚洲文化中,人与人之间的空间距离可能较小。此外,个人空间的大小还会根据行走速度以及其他因素发生变化

在这里插入图片描述

为了更灵活地表示行人社交空间中的不对称性,通过拼接两个二维高斯函数的半曲面来进行建模。具体而言,设以第iii个行人中心(xih,yih)\left( x_{i}^{h},y_{i}^{h} \right)(xih,yih)为坐标原点,其正方向θih\theta _{i}^{h}θihxxx轴的局部坐标系的权重分布为

Ni(x,y)={N(x,y),∣vih∣=0Nifront(x,y),∣vih∣>0andx⩾0Niback(x,y),∣vih∣>0andx<0\mathcal{N} _i\left( x,y \right) =\begin{cases} \mathcal{N} \left( x,y \right) \,\, , \left| v_{i}^{h} \right|=0\\ \mathcal{N} _{i}^{\mathrm{front}}\left( x,y \right) , \left| v_{i}^{h} \right|>0 \mathrm{and} x\geqslant 0\\ \mathcal{N} _{i}^{\mathrm{back}}\left( x,y \right) , \left| v_{i}^{h} \right|>0 \mathrm{and} x<0\\\end{cases}Ni(x,y)=N(x,y),vih=0Nifront(x,y),vih>0andx0Niback(x,y),vih>0andx<0

其中速度绝对值为零,即行人静止时为标准二维正态分布。行人运动时,其前向权重分布为

Nifront(x,y)=Ahexp⁡(−((dcos⁡(θ−θih)2σ0)2+(dsin⁡(θ−θih)2vih⋅σ0)2))\mathcal{N} _{i}^{\mathrm{front}}\left( x,y \right) =A^h\exp \left( -\left( \left( \frac{d\cos \left( \theta -\theta _{i}^{h} \right)}{\sqrt{2}\sigma _0} \right) ^2+\left( \frac{d\sin \left( \theta -\theta _{i}^{h} \right)}{\sqrt{2}v_{i}^{h}\cdot \sigma _0} \right) ^2 \right) \right) Nifront(x,y)=Ahexp(2σ0dcos(θθih))2+(2vihσ0dsin(θθih))2

后向权重分布为

Niback(x,y)=Ahexp⁡(−((vih⋅dcos⁡(θ−θih)2σ0)2+(dsin⁡(θ−θih)2σ0)2))\mathcal{N} _{i}^{\mathrm{back}}\left( x,y \right) =A^h\exp \left( -\left( \left( \frac{v_{i}^{h}\cdot d\cos \left( \theta -\theta _{i}^{h} \right)}{\sqrt{2}\sigma _0} \right) ^2+\left( \frac{d\sin \left( \theta -\theta _{i}^{h} \right)}{\sqrt{2}\sigma _0} \right) ^2 \right) \right) Niback(x,y)=Ahexp(2σ0vihdcos(θθih))2+(2σ0dsin(θθih))2

这里AhA^hAh为行人中心权重峰值;σ0\sigma_0σ0是标准差;vihv_i^hvih是行人速度;中心距离d=(x−xih)2+(y−yih)2d=\sqrt{\left( x-x_{i}^{h} \right) ^2+\left( y-y_{i}^{h} \right) ^2}d=(xxih)2+(yyih)2;中心角θ=atan⁡2(y−yih,x−xih)\theta =\mathrm{a}\tan 2\left( y-y_{i}^{h},x-x_{i}^{h} \right)θ=atan2(yyih,xxih)。如图所示为该距离空间模型的可视化,由于人类的前进方向包含视觉信号等更丰富的特征,因此设置比后向范围更广的分布。

在这里插入图片描述

如下图所示为多个行人场景下的社会性成本地图

在这里插入图片描述

3 算法仿真

3.1 社会性成本地图建模

核心算法如下所示:

const double direction = speed > 1e-3 ? std::atan2(person.vy(), person.vx()) : 0.0;
double rel_x = dx * std::cos(direction) + dy * std::sin(direction);
double rel_y = -dx * std::sin(direction) + dy * std::cos(direction);if (rel_x >= 0)
{double ellipse_value =(rel_x * rel_x) / (ellipse_major * ellipse_major) + (rel_y * rel_y) / (ellipse_minor * ellipse_minor);if (ellipse_value <= 1.0){return (1.0 - ellipse_value) * costmap_2d::LETHAL_OBSTACLE;}else{return 0.0;}
}
else
{double distance = std::sqrt(rel_x * rel_x + rel_y * rel_y);if (distance <= circle_radius_){return (1.0 - distance / circle_radius_) * costmap_2d::LETHAL_OBSTACLE;}else{return 0.0;}
}

在这里插入图片描述

在这里插入图片描述

3.2 基于社交模型的动态避障

以下是一个应用行人社交距离模型进行局部规划与动态避障的案例。可以看到,当机器人接近行人时,会优先考虑从行人的身后绕行,避免对行人产生心理压迫,符合社会规范化导航的原则

在这里插入图片描述

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
http://www.dtcms.com/a/360735.html

相关文章:

  • Linux Tun/Tap 多队列技术
  • 【STM32】贪吃蛇 [阶段2](嵌入式进阶方向)
  • 【含文档+PPT+源码】基于SpringBoot+微信小程序的饮水健康之净水器保养管理系统设计与实现【包运行成功】
  • 【Linux】模拟实现Shell(下)
  • 打开模板打印
  • Ajax笔记(下)
  • 《探索C++11:现代C++语法的性能革新(上篇)》
  • 医疗AI时代的生物医学Go编程:高性能计算与精准医疗的案例分析(八)
  • Redis 核心概念解析:从渐进式遍历、数据库管理到客户端通信协议
  • 《C++进阶之STL》【红黑树】
  • C语言数据结构之双向链表
  • 基于 DNA 的原核生物与微小真核生物分类学:分子革命下的范式重构​
  • 【JavaWeb】之HTML(对HTML细节的一些总结)
  • Notepad++近期版本避雷
  • 【golang长途旅行第35站】Redis
  • Objective-C 的坚毅与传承:在Swift时代下的不可替代性优雅草卓伊凡
  • 云市场周报 (2025.09.01):解读腾讯云向量数据库、阿里云西安节点与平台工程
  • 从零开始的云计算生活——第五十五天,黑云压城,kubernetes模块之网络组件和CoreDNS组件
  • 数组(3)
  • Proteus8 仿真教学全指南:从入门到实战的电子开发利器
  • GitHub 热榜项目 - 日榜(2025-09-01)
  • 基于YOLOv11的脑卒中目标检测及其完整数据集——推动智能医疗发展的新机遇!
  • MySQL下载及安装(Windows 11)
  • 【LeetCode】3524. 求出数组的 X 值 I (动态规划)
  • 【LeetCode 155】—最小栈 - 详解与实现
  • 阿里Qoder怎么样?实测对比TRAE SOLO 和 CodeBuddy IDE
  • 保健品跨境电商:如何筑牢产品质量与安全防线?
  • 数据库事务隔离级别与 MVCC 机制详解
  • 机器学习(四)KNN算法-分类
  • 哈希表-1.两数之和-力扣(LeetCode)