smac 路径优化器分析——距离成本和代价地图成本分析

2024-05-01 02:44

本文主要是介绍smac 路径优化器分析——距离成本和代价地图成本分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考

泰勒级数直观详解

前向差分,后向差分,中心差分

相关文章

smac 路径优化器分析——平滑度成本分析

smac 路径优化器分析——曲率成本分析

距离成本

距离成本函数

用优化后的点与原路径点的欧氏距离的平方作为成本。

下图中蓝色原点是原路径点,红色原点是优化后路径点。

fig.1 距离成本示意图

距离成本函数为:

Cost_{distance}=\overrightarrow{(p_i-x_i)} \cdot \overrightarrow{(p_i-x_i)}

p_i 是优化后的路径点,x_i 是原路径点。

距离成本梯度函数

距离成本函数表示为:

Cost_{distance}=\overrightarrow{(p_i-x_i)} \cdot \overrightarrow{(p_i-x_i)}= (p_{ix}-x_{ix})^2+(p_{iy}-x_{iy})^2

偏导数可以得到:

\frac{\partial{p_i}}{\partial x}=2*(p_{ix}-x_{ix})

\frac{\partial{p_i}}{\partial y}=2*(p_{iy}-x_{iy})

代价地图成本

代价地图成本函数

Smac 直接使用路径点所在的 costmap2D 地图栅格的代价值的平方作为代价地图成本。
下图中黄色圆点表示路径点,背景是 costmap2D 地图。

fig.2 代价地图成本示意图

代价地图成本函数为:

Cost_{costmap}=(costmap.getCost(p_{ix}, p_{iy}))^2

代价地图成本梯度函数

按源码提示是根据泰勒级数展开计算的,但是我颠来倒去都推导不出源码的公式。゚(TヮT)゚。

如果是使用中心差分法,那么 Δh 步进越小,计算得到的梯度才越精确。在栅格地图中最小自变量偏移是 1 个栅格。

令 f(x)=costmap.getCost(x),那么代价地图成本为 c(x)=f(x)^2,根据中心差分法,在点 a 处对 x 求偏导有

\begin{aligned} \frac{\partial c(x,y)}{\partial x} &= \frac{\partial f(x_a,y_a)^2}{\partial x} \\ &= 2*f(x_a,y_a)*f'(x_a,y_a) \\ &=2*f(x_a,y_a) \frac{f(x_a+1,y_a)-f(x_a-1,y_a)}{2} \\ &=f(x_a,y_a)(f(x_a+1,y_a)-f(x_a-1,y_a)) \end{aligned}

同理,在点 a 处对 y 求偏导有

\frac{\partial c(x,y)}{\partial y}=f(x_a,y_a)(f(x_a,y_a+1)-f(x_a,y_a-1))

代价地图梯度函数优化对比

smac 的 smoother 路径平滑器仅打开代价地图成本和距离成本函数和成本梯度函数的优化对比。
绿色路径是随机生成的路径,红色路径是 smac 源码优化后的路径,黄色路径是使用本文代价地图成本梯度函数优化后的路径。由于路径的起点和终点并不参与优化过程,所以起点和终点的位置始终不会变,这里的路径发布我去掉了优化后路径的终点。

新旧对比代价梯度-红旧黄新


为了观察清楚代价地图成本优化效果,costmap2d 的膨胀半径增大,同时将代价缩放因子调整到合适的参数,使得代价值能够平缓地在膨胀半径边缘降到最低。

这篇关于smac 路径优化器分析——距离成本和代价地图成本分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/950543

相关文章

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

MySQL表锁、页面锁和行锁的作用及其优缺点对比分析

《MySQL表锁、页面锁和行锁的作用及其优缺点对比分析》MySQL中的表锁、页面锁和行锁各有特点,适用于不同的场景,表锁锁定整个表,适用于批量操作和MyISAM存储引擎,页面锁锁定数据页,适用于旧版本... 目录1. 表锁(Table Lock)2. 页面锁(Page Lock)3. 行锁(Row Lock

MySQL9.0默认路径安装下重置root密码

《MySQL9.0默认路径安装下重置root密码》本文主要介绍了MySQL9.0默认路径安装下重置root密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录问题描述环境描述解决方法正常模式下修改密码报错原因问题描述mysqlChina编程采用默认安装路径,

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

Deepseek使用指南与提问优化策略方式

《Deepseek使用指南与提问优化策略方式》本文介绍了DeepSeek语义搜索引擎的核心功能、集成方法及优化提问策略,通过自然语言处理和机器学习提供精准搜索结果,适用于智能客服、知识库检索等领域... 目录序言1. DeepSeek 概述2. DeepSeek 的集成与使用2.1 DeepSeek API

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)

《解读Redis秒杀优化方案(阻塞队列+基于Stream流的消息队列)》该文章介绍了使用Redis的阻塞队列和Stream流的消息队列来优化秒杀系统的方案,通过将秒杀流程拆分为两条流水线,使用Redi... 目录Redis秒杀优化方案(阻塞队列+Stream流的消息队列)什么是消息队列?消费者组的工作方式每