首页 > 编程语言 >局部路径规划(Local planning)算法之——TEB轨迹规划

局部路径规划(Local planning)算法之——TEB轨迹规划

时间:2024-10-24 10:33:36浏览次数:1  
标签:障碍物 机器人 TEB 路径 约束 planning vel Local

1 TEB算法原理

TEB全程为Time Elastic Band (时间弹力带),通过对给定的全局轨迹进行修正,从而优化机器人的局部运动轨迹。他是常用的局部路径规划方法之一。TEB是基于图优化的方法,以g2o优化框架实现,它以机器人在各个离散时间的位姿和离散时刻之间的时间间隔为顶点,通过多目标优化,包括但不限于:整体路径长度,轨迹运行时间,与障碍物的距离,通过中间路径点,以及机器人本身的动力学、运动学和几何约束的符合性。实现在各项约束下绕过障碍物最快到达目标点。

TEB源码:https://github.com/rst-tu-dortmund/teb_local_planner
TEB概念理解:https://www.leiphone.com/category/transportation/0TCtaBOIcFOIBN69.html
TEB参数理解:https://blog.csdn.net/weixin_44917390/article/details/107568507
img

  1. 列表项其中,起始点与目标点由全局规划器指定,中间插入N个控制橡皮筋形状的控制点(robot’s pose)
  2. 列表项在点与点之间定义运动时间Time。(点与点之间不是等距,而是等时间的)
  3. 这个路径可以变形,变形的条件就是将所有约束当作 一个橡皮筋 的外力
  4. 注意,每个目标函数只与elastic band的某几个连续状态有关,而非整条band

2.TEB 各项约束条件

定义机器人位姿:

其中$x_i$,$y_i$,$\beta_i$和分别对应机器人在map坐标系(或者世界坐标系)的位置和姿态,文章中称其为configuration。
则空间内configuration序列(如figure 1)记录如下:

跟随路径和避障约束

约束主要有两个目标:跟随已知的全局规划路径和避障。两个目标函数均十分相似,跟随路径施力将elastic bands拉向全局路径,而避障约束施力使得elastic bands远离障碍物。这种方法平衡了路径规划中的靠近与远离行为,确保了既定路径的遵循同时绕过障碍。

configuration序列与全局路径点序列或障碍物$z_{j}$的最近距离记为$d_{min,j}$,如figure 3所示。跟随路径目标以configuration距全局路径的允许最大距离$r_{p_{max}}$作为约束,避障目标以configuration距障碍物的允许最小距离$r_{o_{min}}$作为约束

图片名称 图片名称

速度/加速度约束

通过定义机器人姿态(robot pose)及相邻姿态间的时间差,利用差分法近似计算速度和加速度。这种方法允许对机器人的动态特性进行约束,确保其运动符合实际物理限制

运动学约束

实现平滑路径:通过组合若干弧线段形成平滑轨迹,避免车辆漂移现象。这通常通过控制车辆的速度和转向角来实现,如在ROS系统中,可以通过发布cmd_vel主题来控制Twist消息,从而精确调节车辆的运动。

差动机器人在平面运动只有两个自由度,其只能以朝向的方向直线运动或旋转。这种运动学约束使得机器人以有若干弧段组成的平滑的轨迹运动。相邻的两个configuration应在弧段的两端

图片名称 图片名称

最快路径约束

路径效率:目标函数旨在找到最快的路径,确保路径上的各个位置点在时间上均匀分布。重要的是,最快路径不总是最短路径,因为它还考虑了避障、速度和运动学约束。

目标函数即为最小化时间间隔序列的二次方。

图片名称 图片名称

TEB各项参数调节

  #轨道配置参数
  teb_autosize: True #优化期间允许改变轨迹的时域长度
  dt_ref: 0.45 #局部路径规划的解析度# minimum 0.01
  dt_hysteresis: 0.1 #允许改变的时域解析度的浮动范围, 一般为 dt_ref 的 10% 左右 minimum0.002
  global_plan_overwrite_orientation: False #覆盖全局路径中局部路径点的朝向
  max_global_plan_lookahead_dist: 3.0 #考虑优化的全局计划子集的最大长度
  feasibility_check_no_poses: 5 #检测位姿可到达的时间间隔 minimum 0


de_ref指的是两个pose之间的时间间隔,其他参数通常直接用默认即可,de_ref根据具体需求进行调参。de_ref设置的越小,会产生更多的位姿点,从而使路径更加精细和平滑。但位姿点的增加也会进一步导致所需要的计算量的增加,可能会导致计算资源的消耗和处理时间的延长。此外,de_ref太小也会导致过度优化,降低鲁棒性等。

 #机器人参数
 	max_vel_x: 0.5 #最大x前向速度,单位:m/s
  max_vel_y: 0.3 #最大y前向速度,单位:m/s,非全向移动小车需要设置为0
  max_vel_x_backwards: 0.5 #最大后退速度,单位:m/s
  max_vel_theta: 1.5  #最大转向角速度,单位:rad/s
  acc_lim_x: 0.2  #最大x向加速度,单位:m/s^2
  acc_lim_y: 0.2  #最大y向加速度,,单位:m/s^2,非全向移动小车需要设置为0
  acc_lim_theta: 0.3  #最大角加速度,单位:rad/s^2

  #阿克曼小车参数,非阿克曼小车设置为0
  min_turning_radius: 0.0 #机器人最小转弯半径
  wheelbase: 0.0 #机器人轴距,前轮与后轮的距离
  cmd_angle_instead_rotvel: False #true则cmd_vel/angular/z内的数据是舵机角度
                                  #无论是不是阿克曼小车都设置为false,因为我们的阿克曼机器人内部进行了速度转换

  #用于局部路径规划的机器人外形
  #机器人外形的类型可以为:point、circular、two_circles、line、polygon,默认为point类型
  
  
  footprint_model:    
  type: polygon
    vertices: [[-0.133, -0.125],[-0.133, 0.125],[0.133,0.125],[0.133, -0.125]] #多边形端点坐标 for mini_mec

  #目标点误差允许值
  xy_goal_tolerance: 0.2  #机器人到达目标点时附近时的弧度偏差允许量,在该偏差内认为已经到达目标点,单位为:m
  yaw_goal_tolerance: 0.1 #机器人到达目标点时附近时的弧度偏差允许量,在该偏差内认为已经到达目标点单位为:rad
  free_goal_vel: False    #允许机器人以最大速度驶向目的地

容忍度同样不建议设置的过小,容忍度过小会导致小车在目标点不断震荡。
free_goal_vel如果为Ture,小车则会在能加速的地方一直加速,当到达终点时,可能速度并不为0。

  #障碍物参数
  min_obstacle_dist: 0.1 #和障碍物最小距离,直接影响机器人避障效果
  include_costmap_obstacles: True #是否将动态障碍物预测为速度模型,
  costmap_obstacles_behind_robot_dist: 1.5 #限制机器人后方规划时考虑的局部成本地图障碍物
  obstacle_poses_affected: 15  #障碍物姿态受影响0~30
  costmap_converter_plugin: ""
  costmap_converter_spin_thread: True
  costmap_converter_rate: 5
  include_dynamic_obstacles: True 
  dynamic_obstacle_inflation_dist: 0.6

include_costmap_obstacles这个参数通常设置为真(只有这个参数设置为真,才能规避实时探测到的建图时不存在的地图)。至于其他参数,通常保持默认设置即可。


标签:障碍物,机器人,TEB,路径,约束,planning,vel,Local
From: https://www.cnblogs.com/binbin2002/p/18499087

相关文章

  • opencv - py_photo - py_non_local_means 非局部均值去噪
    文章目录图像去噪目标理论OpenCV中的图像去噪1.cv.fastNlMeansDenoisingColored()2.cv.fastNlMeansDenoisingMulti()其他资源图像去噪目标在本章中,您将了解非局部均值去噪算法,以去除图像中的噪声。您将看到不同的函数,如cv.fastNlMeansDenoising()、cv.fastN......
  • 写代码被大语言模型坑之使用LocalDateTime比较两个时间差了几天
    自从去年ChatGPT3.5发布后使用了几次,现在写代码基本上离不开它和它的衍生产品们了。一方面查资料很方便,快速提炼要点总结;另一方面想写什么样的代码一问就能生成出来,功能大差不差,稍微改改就能用,大大减少使用搜索引擎的时间,是新时代高阶版的Ctrl+C/V。不过大语言模型归根揭底是靠训......
  • HCI_LE_Read_Local_Supported_Features(0x0003)命令全面解析
    目录一、命令概述 二、命令格式2.1.HCI_LE_Read_Local_Supported_Features命令格式2.1.HCICommandComplete响应命令格式三、返回命令 HCICommandComplete参数说明3.1. Status3.2.LE_Features3.3.示例3.4.LE_Features字段中的特性位四、命令执行流程4.1.......
  • Local.ai: 在本地运行AI的开源解决方案
    local.aiLocal.ai:让AI在你的电脑上运行在人工智能快速发展的今天,越来越多的人希望能够亲自体验和使用AI技术。然而,大多数AI服务都依赖于云端,这不仅需要持续的网络连接,还可能引发隐私和安全方面的担忧。Local.ai应运而生,它是一个创新的开源项目,旨在让用户能够在自己的电脑......
  • LocalStorage和SessionStorage存储
    认识Storage◼WebStorage主要提供了一种机制,可以让浏览器提供一种比cookie更直观的key、value存储方式:cookie:服务器返回自动返回一个cooki,浏览器将cookie存储到本地,浏览器再发送请求自动把cooki传递过去localStorage:本地存储,提供的是一种永久性的存储方法,在关闭掉网页......
  • YOLO11改进-注意力-引入非局部注意力机制NonLocalBlockND 增强小目标、遮挡检测
                       本篇文章将介绍一个新的改进机制——NonLocalBlockND,并阐述如何将其应用于YOLOv11中,显著提升模型性能。首先,我们将解析NonLocalBlockND的工作原理,非局部注意力机制NonLocalBlockND通过在全局范围内捕捉特征图中所有位置的相互关系,提升......
  • JAVA拦截器配合JWT、ThreadLocal的登录校验
    @TOC拦截器配合JWT、ThreadLocal的登录校验关于为什么要写这篇文章,今天在做项目的时候发现配置了拦截器,但是不生效,最后排查半天发现引入包有问题,遂决定写一篇详细的拦截器的使用。举例也都是根据案例写的,可能会有些许阅读困难,这里面的示例的TOKEN是在请求头里面的。使用......
  • PointWeb: Enhancing Local Neighborhood Features for Point Cloud Processing——点
    此内容是论文总结,重点看思路!!文章概要本文研究如何有效聚合局部特征,提高点云数据的识别性能,提出了一种新的处理点云的方法PointWeb,旨在从局部邻域中提取上下文特征。与之前的方法不同,PointWeb通过密集连接局部邻域中的每个点,从而基于该区域的特性来调整每个点的特征。主要创......
  • ThreadLocal
    为何引入ThreadLocal​ThreadLocal​对象可以提供线程局部变量,每个线程Thread​拥有一份自己的副本变量,多个线程互不干扰.下面举例说明引入ThreadLocal的有优点.SimpleDateFormatprivateSimpleDateFormatf=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");publicvoidte......
  • ThreadLocal源码详解
    目录Thread、ThreadLocalMap、ThreadLocal关系ThreadLocal中的get、Set方法ThreadLocal内存泄露问题Thread、ThreadLocalMap、ThreadLocal关系从源码可以看出:Thread类中有成员变量ThreadLocalMap,ThreadLocalMap类中有成员变量Entry[]数组,每个Entry对象的key是Thread......