ROS——Teb算法的优化

news2024/12/28 21:27:29

一、简介

 “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(向前规划距离)调小,可以使得局部路径较贴近全局路径并完成跑图,再慢慢调大找最佳值

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/442092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java 依赖注入(DI)

只要做过 Java 一段时间,基本上都会遇到这个问题。 Dependency Injection (DI)中文称之为依赖注入。 都说了 Spring 的关键部分就是 Dependency Injection (DI),但是什么是依赖,为什么要注入&…

AirServer2023最新免费苹果电脑投屏工具

AirServer是一个Mac专用投屏工具,功能强大,并且可以通过网络和其他平台同步视频内容。可以使用多个设备进行投屏,快速查看同一局域网内的视频。支持的设备:苹果系统。支持 Windows、 Mac、 Android、 iOS、 windows平台。 1、支持…

用腾讯轻联,打通草料二维码与其他应用的连接

一、功能介绍 腾讯轻联是腾讯云推出的“应用连接器”,无需编程,实现多应用的连接。草料二维码作为首批入驻腾讯轻联的合作伙伴和腾讯团队进行了深度协同,提供给用户以下能力: 1.快速对接主流应用 实现企业微信、钉钉、腾讯文档…

基于AT89C52单片机的电子密码锁设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87688544?spm=1001.2014.3001.5503 源码获取 主要内容: 设计一个简易的电子密码锁,并进行仿真实验,该系统能够进行密码输入功能、上锁功能、在锁合状态下通过输入密码进行…

Java并发编程 —— 延迟队列DelayQueue源码解析

一、什么是DelayQueue DelayQueue是一个支持并发的无界延迟队列,队列中的每个元素都有个预定时间,当线程从队列获取元素时,只有到期元素才会出队列,没有到期元素则阻塞等待。队列头元素是最快要到期的元素。因此DelayQueue可用于…

[java聊天室]多个客户端与服务器说话多线程(二)

多客户端链接 之前(java聊天室一)只有第一个连接的客户端可以与服务端说话。 原因: 服务端只调用过一次accept方法,因此只有第一个客户端链接时服务端接受了链接并返回了Socket,此时可以与其交互。 而第二个客户端建立链接时,由于服务端没有再次调用…

【Hello Linux】线程池

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍linux中线程池概念 线程池 Linux线程池线程池的概念线程池的优点线程池的应用场景线程池实现 Linux线程池 线程池的概念 线程池是一种线程…

PyTorch深度学习实战 | 高斯混合模型聚类原理分析

01、问题描述 为理解高斯混合模型解决聚类问题的原理,本实例采用三个一元高斯函数混合构成原始数据,再采用GMM来聚类。 1) 数据 三个一元高斯组件函数可以采用均值和协方差表示如表1所示: ▍表1 三个一元高斯组件函数的均值和协方差 每个高斯…

git的使用——操作流程

一、什么是git git是一个开源的分布式版本控制软件,能够有效并高效的处理很小到非常大的项目。 二、添加SSH公钥 安装下载后,会发现鼠标右击,会出现 Git Bash Here 这个选项,如图所示,点击进入 1.打开git窗口后&…

018:Mapbox GL加载Google地图(影像瓦片图)

第018个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载google地图。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共80行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:https://xia…

鉴智机器人重磅发布双目智驾解决方案,新一代全系智驾产品线亮相上海车展

4月18日,以「拥抱汽车行业新时代」为主题的2023上海车展正式拉开帷幕。以视觉3D理解为核心的下一代自动驾驶系统提供商鉴智机器人,携全新升级的智驾产品线首次亮相车展,重磅发布基于AI的双目立体视觉智驾方案。 凭借双目立体视觉系统的差异化…

智能洗地机好用吗?值得入手的洗地机推荐

洗地机是一款高效的地面清洁设备,不仅可以很好清理地面不同形态的干湿垃圾,还减少了人工和水资源的浪费,是我们日常生活中必不可少的清洁工具。作为以一位评测博主,很多朋友咨询我在选购洗地机时应该注意哪些要点,有哪…

记一次生产要我狗命的问题

问题起因:引入disruptor框架 简单理解就是生产消费者模式 用来支持高并发 先说问题和改正 再展开 问题:没有当时的截图了 直接描述吧 问题就是cpu占用过高 居高不下的那种 排查:就是看线程名字和占用的大概 再根据近期发布的东西 再根据本地…

学系统集成项目管理工程师(中项)系列08b_合同管理(下)

1. 项目变更约定 1.1. 合同生效后,当事人不得因姓名、名称的变更或者法定代表人、负责人、承办人的变动而不履行合同义务 2. 违约责任的承担方式 2.1. 继续履行 2.2. 采取补救措施 2.3. 赔偿损失 2.4. 支付约定违约金或定金 3. 注意事项 3.1. 当事人的法律资…

Linux FTP服务

FTP服务 作用 传输文件 端口 FTP服务器默认使用TCP协议的20、21端口与客户端进行通信 20端口用于建立数据连接,并传输文件数据 21端口用于建立控制连接,并传输FTP控制命令 模式 FTP数据连接分为主动模式和被动模式 主动模式:客户端告诉服务端…

电路原理-反激式电路

1、1反激式电路是小功率电源(150W以下)当中,最常用的电路,它的工作原理如下。 1、2如图1,变压器T1,标记红点的端,12、3、A为同名端,10、1、B为异名端。 当MOS管导通的时候,初级绕组N1、…

瑞吉外卖LinuxRedis

1、linux简介 Linux系统版本 Linux系统分为内核版和发行版 内核版: 由LinusTorvalds及其团队开发、维护 免费、开源 负责控制硬件 发行版: 基于Linux内核版进行扩展 由各个Linux厂商开发、维护 有收费…

C++类的理解与类型名,类的成员,两种定义方式,类的访问限定符,成员访问,作用域与实例化对象

面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 面向…

ETCD(三)操作指令

1. put put #将给定的key写入到存储 --ignore-lease[false] #使用当前租约更新key --ignore-value[false] #使用当前值更新key --lease"0" # 要附加到key的租约ID(十六进制) --prev-kv[false] # 返回修改前的上一个键值对2. get get #获取给…

无线洗地机哪款性价比高?高性价比的洗地机分享

虽说现在市面上清洁工具很多,但是要说清洁效果最好的,肯定非洗地机莫属。它集合了吸,洗,拖三大功能,干湿垃圾一次清理,还能根据地面的脏污程度进行清洁,达到极致的清洁效果,省时省力…