一、简介

“TEB”全称Time Elastic Band(时间弹性带)Local Planner,该方法针对全局路径规划器生成的初始轨迹进行后续修正(modification),从而优化机器人的运动轨迹,属于局部路径规划。

关于eletic band(橡皮筋)的定义:连接起始、目标点,并让这个路径可以变形,变形的条件就是将所有约束当做橡皮筋的外力

二、说明

局部路径规划之Teb

起始点、目标带你状态由全局规划,中间插入N个控制节点来改变橡皮筋的状态控制点,在点与点之间定义运动时间Time。

这个路径可以变形,变形的条件就是将所有约束当做橡皮筋的外力

注意每个目标函数只与几个连续状态有关,而非整条band。

当我们设置目标时,小车的目的地是靠近障碍物的,但是如果我们小于我们的障碍物距离最小距离,我们就需要往外拉,这就是我们的类橡皮筋过程

约束目标函数:

优化问题:

Teb优化问题实质上是一个优化问题,大多数目标是基于局部的,只与一小部分参数相关,因为他们只依赖于几个连续的机器人

TEB生成的局部轨迹由一系列带有时间信息的离散位姿组成,g2o算法优化的目标就是这些离散的位姿,同时设计一条时间最短,距离最短,远离障碍物等目标,同时限制速度与加速度使轨迹满足机器人运动学。

整体的规划为:

全局路径————加入约束————g2o优化————速度指令

参数:

# Trajectory

teb_autosize: True #优化期间允许改变轨迹时域长度

dt_ref: 0.3 #局部路径规划解析度(0.01~1.0) 默认为0.3 (两个相邻位姿之间的时间_时间分辨率)

(可以设置0.45,其他保持默认)

dt_hysteresis: 0.1 #允许浮动范围

global_plan_overwrite_orientation: True #覆盖全局路 径中局部路点朝向

max_global_plan_lookahead_dist: 3.0 #全局优化子集最大长度

feasibility_check_no_poses: 2 # 检测位姿可达到的时间间隔

# Robot _ 下面的这些参数就会切实的影响规划

max_vel_x: 0.7  #最大前进速度 x  (可以设置成0.5尝试)
 max_vel_x_backwards: 0.3 #最大后退速度 x 这个值不能为0或者负数,否则会错误

(无法阻止倒车,就算比例很大,在迫不得已的情况下)
 max_vel_y: 0.0 # y方向最大速度 阿克曼形是没有的
 max_vel_theta: 0.50 #最大转向角速度

acc_lim_x: 0.15 # 最大加速度

acc_lim_theta: 0.20 #最大角加速度,不建议很大,会导致震荡

min_turning_radius: 0.35 #最小转弯半径

这个参数的设置是非常影响转弯时的路径规划的

footprint_model: # types: "point", "circular", "two_circles", "line", "polygon"
   type: "line" # 设置机器人模型——可以为上面几种
   line_start: [0.05, 0.0] # for type "line" #线的起点
   line_end: [0.10, 0.0] # for type "line" #线的终点
(这种线的模式适用于阿克曼小车,设置线的起点和终点)

# GoalTolerance 目标容忍度

前两个比较重要,但不介意设置的很小

xy_goal_tolerance: 0.2 #xy目标偏移度
 yaw_goal_tolerance: 0.2 #目标角度偏移容忍度
 free_goal_vel: True #允许机器人以最大速度前往目的地,True的话就会在可以加速的过程中加速
 complete_global_plan: True #完成目标点

# Obstacles 障碍物
    
 min_obstacle_dist: 0.30 # 与障碍物最小距离(整个线的头 中间 尾)

这个参数的设置决定了和障碍物约束的距离

测试之后不建议设置的很小,因为我们的车模本身就是小的,而且地面有凸起,所以离得远点

inflation_dist: 0.30 # 障碍物膨胀距离
 include_costmap_obstacles: True # 局部地图中的实时障碍物是否考虑
 costmap_obstacles_behind_robot_dist: 0.3 #代价地图考虑后方的障碍物(因为是有倒车的)
 obstacle_poses_affected: 7 #障碍物姿态影响,影响不是特别大
 
 dynamic_obstacle_inflation_dist: 0.6 #动态障碍物膨胀范围
 include_dynamic_obstacles: True #是否将为速度模型
 
 costmap_converter_plugin: "" #一般不使用这个插件
 costmap_converter_spin_thread: True
 costmap_converter_rate: 5

#Optimization 优化参数

no_inner_iterations: 5 # 被外循环调用后内循环执行次数
 no_outer_iterations: 4 # 执行外循环优化次数
 optimization_activate: True # 激活优化过程
 optimization_verbose: False # 打印优化过程

penalty_epsilon: 0.1 # 对硬约束近似

这个参数会为速度约束,也就是达到最大速度前,会有个惩罚,会让他提前减速达到缓冲效果
 obstacle_cost_exponent: 4
 weight_max_vel_x: 2 # 最大速度权重
 weight_max_vel_theta: 1 # 最大角速度权重
 weight_acc_lim_x: 1 # 最大加速度权重
 weight_acc_lim_theta: 1 # 最大角速度权重

(上面的参数主要起综合作用,确定是高速还是低速)

weight_kinematics_nh: 1000 
 weight_kinematics_forward_drive: 500 #抑制倒车的权重,正常设置1
 weight_kinematics_turning_radius: 1 #最小转弯半径,我们没必要最小转弯
 weight_optimaltime: 500 #优化时间参数,让小车多走直线和内道
 weight_shortest_path: 0
 weight_obstacle: 50 # 优化过程中和障碍物最小距离权重
 weight_inflation: 0.2 # 膨胀区域权重
 weight_dynamic_obstacle: 10 # 动态障碍物最小距离权重
 weight_dynamic_obstacle_inflation: 0.2 # 动态障碍物膨胀区域权重
 
 weight_viapoint: 1 #路径采样点距离权重

上面的这些参数是我们修改比较多,也是影响比较大的参数

注意点:

1.当小车在某些位置卡住不敢走(还没撞)时,考虑膨胀半径是否应该调小,和weight_optimaltime是否应该调大。

2.刚开始调,可以速度调慢点,max_global_plan_lookahead_dist(向前规划距离)调小,可以使得局部路径较贴近全局路径并完成跑图,再慢慢调大找最佳值


目前状况:

我把时间最优设置到最大的情况下,小车很喜欢走直线,但是不知道是不是建图的问题,也有小车本身的问题,他很容易被赛道杆子下面那一块卡住,直接导致雷达扫描出问题,路径规划有时候会出错,这个情况我初步认为是建图问题,建图有点歪,赛道附和到一起,导致规划异常。

但比较致命的问题是,小车总喜欢卡弯道,太贴合内弯,之前设置的静态障碍物最小距离和膨胀距离起的作用不大,我不太理解,然后再更换一下雷达,提高一下扫描的精度,接着就是转弯角的问题,不需要设置的太大,这个我们在调建图的过程慢慢寻找合适的转弯角度。

我认为现在主要的问题是需要把膨胀的范围拉大,让小车尽量不走小路,还有就是代价地图的设置,这个和上面的膨胀都是由关系的,所以我们首要就是要把这个设置好,现在的最短路径不需要太考虑,尽量远离障碍物。

可以尝试调搞附近的范围

把局部地图范围提高到4*4,

下面为common文件,是全局和局部代价地图所共有的参数

#---(in meters)---
footprint: [ [-0.035,-0.1], [0.18,-0.1], [0.18,0.1], [-0.035,0.1] ] #设置小车大小
#这个可以根据实际设计,但是我认为可以更大一点,给小车预留一些空间transform_tolerance: 0.2obstacle_layer:enabled: trueobstacle_range: 2.5raytrace_range: 3.0inflation_radius: 0.05track_unknown_space: falsecombination_method: 1observation_sources: laser_scan_sensorlaser_scan_sensor: {data_type: LaserScan, topic: scan, marking: true, clearing: true}inflation_layer:enabled:              truecost_scaling_factor:  10.0  # exponential rate at which the obstacle cost drops off (default: 10)inflation_radius:     0.1  # max. distance from an obstacle at which costs are incurred for planning paths.static_layer:enabled:              truemap_topic:            "/map"

根据上面我们注意以下参数

 inflation_radius: 0.05

这个是障碍物膨胀半径,应该设置为和障碍物之间的最小距离,让小车不要走小路,但是为了防止卡住小车的路径(障碍物在中间,膨胀过大导致和左右膨胀重合,导致无法过去),太小了会导致走小路和拐弯出现问题,这个是我们需要注意的,所以目前设置为0.30

global_costmap需要遵循的配置
global_costmap_params.yaml
global_costmap:
global_frame: /map
robot_base_frame: base_link
update_frequency: 5.0
static_map: truelocal_costmap需要遵循的配置
local_costmap_params.yaml
local_costmap:
global_frame: odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency: 2.0
static_map: false
rolling_window: true
width: 6.0
height: 6.0
resolution: 0.05

接下来尝试修改:

inflation_radius: 0.30 在common文件下

max_vel_x: 0.7
 max_vel_x_backwards: 0.2
 max_vel_y: 0.0
 max_vel_theta: 0.40 # 防止过大震荡
 acc_lim_x: 0.2
 acc_lim_theta: 0.2

min_turning_radius: 0.375        # 最小转弯角度,这个还需要慢慢调试

xy_goal_tolerance: 0.5
 yaw_goal_tolerance: 0.4   # 位置和角度的容忍度开大没有关系
 free_goal_vel: True # 可以自由冲刺

min_obstacle_dist: 0.30 # 与障碍物最小距离(整个线的头 中间 尾)

# 我好奇的是一个小问题,障碍物膨胀和地图本身难道是没有关系的吗,还是说这个是独立计算的,具体还需要再尝试

weight_kinematics_nh: 1000 
 weight_kinematics_forward_drive: 500 #抑制倒车的权重,正常设置1
 weight_kinematics_turning_radius: 1 #最小转弯半径,我们没必要最小转弯
 weight_optimaltime: 500 #优化时间参数,让小车多走直线和内道
 weight_shortest_path: 0
 weight_obstacle: 50 # 优化过程中和障碍物最小距离权重
 weight_inflation: 1 # 膨胀区域权重    忘记最大是多少,这些避开障碍物稍微调大一点
 weight_dynamic_obstacle: 10 # 动态障碍物最小距离权重
 weight_dynamic_obstacle_inflation: 0.2 # 动态障碍物膨胀区域权重

ROS——Teb算法的优化相关推荐

  1. TEB算法详解 参数详解

    teb算法的基本思路之前已经看完了,今天主要看一下teb算法的参数配置文件,分析一下每个配置参数的作用: teb的参数主要可以包含以下几个部分: 1.Trajectory Trajectory的参数顾 ...

  2. 深度科普:拆解让机器人走路更「丝滑」的TEB算法

    导航模块,是实现机器人移动功能的重要能力,主要包括全局路径规划和局部路径规划.本文将带大家深度认识局部路径规划,以及TEB算法的规划原理和参数配置. 01 机器人局部路径规划 当我们旅游迷路了,想必大 ...

  3. TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(3))

    第一章主要分析了teb算法的准备条件,包括获取当前位姿与速度.对全局路径的裁减以获取局部路径等以及局部地图的获取等.第二章主要讲述了在获取前置条件后,如何根据前置条件进行位姿优化,teb的路径优化主要 ...

  4. TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(1))

    "TEB"全称Time Elastic Band(时间弹性带)Local Planner,该方法针对全局路径规划器生成的初始轨迹进行后续修正(modification),从而优化机 ...

  5. TEB算法详解(TebLocalPlannerROS::computeVelocityCommands(2))

    上一章主要研究了一下teb算法中局部路径规划之前的处理,包括了局部地图的处理.初始位姿.机器人当前速度以及从全局路径中如何提取出局部路径等内容.这一章继续看一下teb算法中对于局部路径规划的运动部分处 ...

  6. 十三、冒泡排序算法及其优化

    一.基本介绍 **冒泡排序(Bubble Sorting)的基本思想是:**通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部, ...

  7. 计算机算法对程序设计的作用,计算机编程中数学算法的优化策略

    李钰 摘要:在计算机编程中,合理地运用数学算法所拥有的优势不但可以完好地针对所拥有的问题进行总结分类归纳,还可以将其归纳作为基础从而进行针对性的统一计算,并且能够将非常复杂的问题进行整体的简化并且将其 ...

  8. 用进化算法来优化SVM的参数C和Gamma——利用SCOOP库进行分布式加速计算

    该案例展示了如何利用SCOOP库进行分布式加速计算Geatpy进化算法程序, 本案例和soea_demo6类似,同样是用进化算法来优化SVM的参数C和Gamma, 不同的是,本案例选用更庞大的数据集, ...

  9. Pytorch框架的深度学习优化算法集(优化中的挑战)

    个人简介:CSDN百万访问量博主,普普通通男大学生,深度学习算法.医学图像处理专攻,偶尔也搞全栈开发,没事就写文章,you feel me? 博客地址:lixiang.blog.csdn.net Py ...

最新文章

  1. linux rm 提示io异常,Hadoop异常 java.io.IOException: Job status not available
  2. 首个全球智慧城市在线社区启动 将锁定对城市发展构成挑战的困难
  3. 注意Class类的特殊性
  4. 增强的Java FTP工具----扩展免费版的edtftpj
  5. 前端flv.js设置缓冲时间和大小_不可不知的 WEB 前端网站优化 —— 雅虎 34 条军规...
  6. 排序数组中的两个数字之和
  7. View 绘制体系知识梳理(4) 绘制过程之 Layout 详解
  8. 问卷调查模块实现的过程中的历程
  9. linux系统man命令空白键,man查看帮助命令
  10. Kindle PaperWhite 3 5.8.10越狱成功!
  11. 【内网穿透路由器】外网环境下使用Frp内网穿透路由器,实现后台的远程访问
  12. C# TCP/IP通讯协议的整理(二)附带——与欧姆龙PLC通讯
  13. 360全景倒车影像怎么看_360全景影像和倒车影像有什么区别
  14. Ansible 进阶 | 动态 Inventory
  15. outlook默认签名设置_如何将默认签名添加到Outlook会议请求
  16. 洛谷 P1413 坚果保龄球
  17. UE4 虚幻发光材质避免黑色渐变
  18. jQuery+CSS3炫酷机械键盘js特效
  19. 多分类问题OVR和OVO----机器学习
  20. java课外兴趣小组管理系统_课外兴趣小组计划

热门文章

  1. Ubuntu安装ROS详细教程
  2. Python爬取热门微博,并存储到MySQL中
  3. 软件开发专业需要学习多少年
  4. 服务器sas卡的作用,英特尔IOP34x处理器介绍
  5. 如何将图片转换成字符画
  6. jwt 的 token 被获取怎么办
  7. 如何通俗的理解beam search?
  8. 【Hive】Hive基本操作
  9. airpodspro窃听模式_AirPodsPro怎么切换模式
  10. 安卓7.0以后如何开启手电筒