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

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

Java实现复杂查询优化的7个技巧小结

《Java实现复杂查询优化的7个技巧小结》在Java项目中,复杂查询是开发者面临的“硬骨头”,本文将通过7个实战技巧,结合代码示例和性能对比,手把手教你如何让复杂查询变得优雅,大家可以根据需求进行选择... 目录一、复杂查询的痛点:为何你的代码“又臭又长”1.1冗余变量与中间状态1.2重复查询与性能陷阱1.

Python内存优化的实战技巧分享

《Python内存优化的实战技巧分享》Python作为一门解释型语言,虽然在开发效率上有着显著优势,但在执行效率方面往往被诟病,然而,通过合理的内存优化策略,我们可以让Python程序的运行速度提升3... 目录前言python内存管理机制引用计数机制垃圾回收机制内存泄漏的常见原因1. 循环引用2. 全局变

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

MySQL中优化CPU使用的详细指南

《MySQL中优化CPU使用的详细指南》优化MySQL的CPU使用可以显著提高数据库的性能和响应时间,本文为大家整理了一些优化CPU使用的方法,大家可以根据需要进行选择... 目录一、优化查询和索引1.1 优化查询语句1.2 创建和优化索引1.3 避免全表扫描二、调整mysql配置参数2.1 调整线程数2.

Python利用GeoPandas打造一个交互式中国地图选择器

《Python利用GeoPandas打造一个交互式中国地图选择器》在数据分析和可视化领域,地图是展示地理信息的强大工具,被将使用Python、wxPython和GeoPandas构建的交互式中国地图行... 目录技术栈概览代码结构分析1. __init__ 方法:初始化与状态管理2. init_ui 方法:

Python中经纬度距离计算的实现方式

《Python中经纬度距离计算的实现方式》文章介绍Python中计算经纬度距离的方法及中国加密坐标系转换工具,主要方法包括geopy(Vincenty/Karney)、Haversine、pyproj... 目录一、基本方法1. 使用geopy库(推荐)2. 手动实现 Haversine 公式3. 使用py