ROS——Teb算法的优化
一、简介
“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(向前规划距离)调小,可以使得局部路径较贴近全局路径并完成跑图,再慢慢调大找最佳值
相关文章:

ROS——Teb算法的优化
一、简介 “TEB”全称Time Elastic Band(时间弹性带)Local Planner,该方法针对全局路径规划器生成的初始轨迹进行后续修正(modification),从而优化机器人的运动轨迹,属于局部路径规划。 关于eletic band(橡…...

java+ssm 社区超市网上商城果蔬(水果蔬菜)管理系统
在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括超市果蔬管理系统的网络应用,在外国超市果蔬管理系统已经是很普遍的方式,不过国内的超市果蔬管理系统可能还处于起步阶段。超市果蔬管理系统具有果蔬管…...
igh主站搭建过程(e1000e 网卡/ generic网卡)
1、下载igh源码 garyjxes:~$ git clone https://gitlab.com/etherlab.org/ethercat.git 2、配置(可参考官方文档) garyjxes:~/Xenomai/xenomai-v3.2.1$ sudo cp …/…/ethercat/ . -r garyjxes:~/Xenomai/xenomai-v3.2.1/ethercat$ sudo ./bootstrap to…...
K8S第一讲 Kubernetes之Secret详解
Secret详解 secret用来保存小片敏感数据的k8s资源,例如密码,token,或者秘钥。这类数据当然也可以存放在Pod或者镜像中,但是放在Secret中是为了更方便的控制如何使用数据,并减少暴露的风险。 用户可以创建自己的secre…...
每周一算法:高精度减法
高精度减法 高精度减法是采用模拟算法对上百位甚至更多位的整数进行减法运算,其基本思想是模拟竖式计算,一般分为下面几步: 首先,使用数组存储大整数的每一个位然后,判断被减数和减数的大小关系: 如果被减数大于等于减数,结果为非负数,直接计算差否则,结果为负数,先…...

Session使用和原理分析图与实现原理-- 代码演示说明 Session 的生命周期和读取的机制代码分析
目录 Web 开发会话技术 -Session —session 技术 session 基本原理 Session 可以做什么 如何理解 Session Session 的基本使用 session 底层实现机制 原理分析图 代码演示 CreateSession.java 测试 Session 创的机制, 注意抓包分析编辑 ReadSession.j…...

在win10系统中安装anaconda
1、 Anaconda的下载 你可以根据你的操作系统是32位还是64位选择对应的版本到官网下载,但是官网下载龟速。 建议到清华大学镜像站下载 :Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source MirrorIndex of /anaconda/archiv…...

【菜鸡读论文】Cross-domain Named Entity Recognition via Graph Matching
【菜鸡读论文】Cross-domain Named Entity Recognition via Graph Matching 最近到了研一下学期,很多身边的同学也开始有了成果,但本菜鸡一点成果都没有【大哭】所以也没什么好写的。虽然菜鸡口头上不说,但内心也感受到非常之焦虑。最近读论…...

代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452. 用最少数量的箭引爆气球
文章目录 860.柠檬水找零406.根据身高重建队列452. 用最少数量的箭引爆气球:star: 860.柠檬水找零 链接:代码随想录 5美元相当滴珍贵 解题思路: 情况一:账单是5,直接收下。 情况二:账单是10,消耗一个5,增加…...

爬虫为什么需要多线程
多线程爬虫是一种同时运行多个线程来提高爬取速度的爬虫方式。通过将大量的工作分配给不同的线程,可以减少爬虫的运行时间,提高效率。不过需要注意的是,在爬取过程中需要合理的管理线程数,以避免对被爬取的网站造成过大的负荷。 …...

下一代智能座舱风口下,“超级”Tier 1强势崛起
智能座舱进入全新周期,强者愈强的趋势会快速显现。 可以观察到,智能座舱功能日趋多元化。从多屏互动到舱内全场景多元交互,到更多娱乐平台的上线,智能座舱已经从最初的重多功能转变成重体验。 从架构层面来看,各个功…...

第 三 章 UML 类图
文章目录 前言一、依赖关系(虚线箭头)二、泛化关系:继承(实线空心箭头)三、实现关系(虚线空心箭头)四、关联关系(一对一为实线箭头,一对多为实线)五、聚合关系…...

java版工程项目管理系统 Spring Cloud+Spring Boot+Mybatis+Vue+ElementUI+前后端分离 功能清单
Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下: 首页 工作台:待办工作、消息通知、预警信息,点击可进入相应的列表 项目进度图表:选择(总体或单个)项目显示…...

内网穿透实现在外远程连接RabbitMQ服务
文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 转载自远控源码文章:无公网IPÿ…...

抖音数字人主播app
抖音数字人主播app是指一款利用计算机生成的虚拟数字人,在抖音平台上进行实时音视频传输和互动的应用程序。该软件可以让用户创建自己的虚拟数字人,并在抖音平台上进行实时互动和交流。 抖音数字人主播app通常需要包含以下功能: 3D建…...
亚马逊平台使用API接口通过关键字搜索商品
亚马逊公司(Amazon,简称亚马逊;NASDAQ:AMZN),2022年营收为5140亿美元, 是美国最大的一家网络电子商务公司,位于华盛顿州的西雅图。是网络上最早开始经营电子商务的公司之一ÿ…...

《花雕学AI》用ChatGPT创造猫娘角色:人工智能角色扮演聊天对话的风险与对策
出于好奇心,我以“ChatGPT,调教猫娘”为题,开始了解ChatGPT角色扮演提示语的用法。ChatGPT给出的介绍是,调教猫娘是一种利用ChatGPT的角色扮演功能,让模型模仿一种类似猫的拟人化生物的行为和语言的活动,并…...

软件测试常规测试过程模型——V模型与X模型
一、V模型简单介绍及讲解 V模型是软件测试过程模型中最广为人知的模型,尽管很多富有实际经验的测试人员还是不太熟悉V模型,或者其它的模型。V模型中的过程从左到右,描述了基本的开发过程和测试行为。V模型的价值在于它非常明确地标明了测试过…...
feign-starter
使用说明 功能 自动装配 设置客户端不主动重试日志打印客户端负载均衡json 转换使用 JacksonUtil 如何引入 com.hete.support xx-feign-starter 如何配置 超时时间 ⚠️ 默认值比较大,需要手动根据实际场景设置 feign: client: config: # 默认配置,…...

FVM初启,Filecoin生态爆发着力点在哪?
Filecoin 小高潮 2023年初,Filecoin发文分享了今年的三项重大变更,分别是FVM、数据计算和检索市场的更新,这些更新消息在发布后迅速吸引了市场的广泛关注。 特别是在3月14日,Filecoin正式推出了FVM,这一变革使得Filec…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

Linux中《基础IO》详细介绍
目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改,实现简单cat命令 输出信息到显示器,你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...