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 的膨胀半径增大,同时将代价缩放因子调整到合适的参数,使得代价值能够平缓地在膨胀半径边缘降到最低。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

java-springmvc 01 补充 javaweb 三大组件Servlet,Filter、Listener(源码都是tomcat8.5项目中的)

01.JavaWeb三大组件指的是:Servlet、Filter、Listener,三者提供不同的功能 这三个在springmvc 运用很多 Servlet 01.Servlet接口: public interface Servlet {/*** 初始化方法* 实例化servlet之后,该方法仅调用一次 * init方法必须执行完…

【MySQL | 第九篇】重新认识MySQL锁

文章目录 9.重新认识MySQL锁9.1MySQL锁概述9.2锁分类9.2.1锁的粒度9.2.2锁的区间9.2.3锁的性能9.2.4锁的级别 9.3拓展:意向锁9.3.1意向锁概述9.3.2意向锁分类9.3.3意向锁作用(1)意向锁的兼容互斥性(2)例子1&#xff08…

C++ | Leetcode C++题解之第61题旋转链表

题目: 题解: class Solution { public:ListNode* rotateRight(ListNode* head, int k) {if (k 0 || head nullptr || head->next nullptr) {return head;}int n 1;ListNode* iter head;while (iter->next ! nullptr) {iter iter->next;n…

CTFHub-Web-SQL注入

CTFHub-SQL注入-WP 1.整数型注入 1.题目说输入1,先将1输入查看结果 2.接着输入4-1,发现输出的结果为4-1,判定存在整数型注入 3.查询字段数,出现了回显,判断这里的字段数为2 1 order by 24.判断注入点在2的位置&…

imx6ull启动方式和镜像文件烧写

文章目录 前言一、BOOT启动方式1.串行下载2.内部BOOT模式 二、内部BOOT模式详细流程1.启动设备的选择2.镜像烧写 总结 前言 💦 I.MX6Ull 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash等启动。用户可以根据实际情况&#x…

【docker】Docker开启远程访问

将构建的镜像自动上传到服务器。 需要开放 Docker 的端口,让我们在本地能连接上服务器的 Docker,这样,才能上传构建的镜像给 Docker。 开启远程访问 首先在服务器打开 Docker 的服务文件 vim /usr/lib/systemd/system/docker.service修改…

刷题《面试经典150题》(第九天)

加油! 学习目标:学习内容:学习时间:知识点学习内容:跳跃游戏 II - 力扣(LeetCode)H 指数 - 力扣(LeetCode)盛最多水的容器 - 力扣(LeetCode)矩阵置…

OpenHarmony 实战开发——智能指针管理动态分配内存对象

概述 智能指针是行为类似指针的类,在模拟指针功能的同时提供增强特性,如针对具有动态分配内存对象的自动内存管理等。 自动内存管理主要是指对超出生命周期的对象正确并自动地释放其内存空间,以避免出现内存泄漏等相关内存问题。智能指针对…

docker学习笔记4:CentOS7安装docker

文章目录 一、安装docker二、配置阿里云加速三、测试镜像安装本篇博客介绍如何在centos7里安装docker,关于CentOS7的安装可以查看本专栏的这篇博客: VmWare CentOS7安装与静态ip配置 centos7里安装docker步骤如下: 一、安装docker 先在终端输入su进入root用户,输入如下命…

linux 服务器利用阿里网盘API实现文件的上传和下载

文章目录 背景脚本初始化 阿里云盘API工具 aligo安装aligoaligo教程实战parse.py 演示上传文件上传文件夹下载文件下载文件夹 背景 最近在用ubuntu系统做实验,而ubuntu 系统的文件上传和下载操作很麻烦; 于是便打算使用阿里网盘的API 进行文件下载与上传…

ChatGPT 网络安全秘籍(四)

原文:zh.annas-archive.org/md5/6b2705e0d6d24d8c113752f67b42d7d8 译者:飞龙 协议:CC BY-NC-SA 4.0 第八章:事故响应 事故响应是任何网络安全策略的关键组成部分,涉及确定、分析和缓解安全漏洞或攻击。 及时和有效地…

推荐一个wordpress免费模板下载

首页大背景图,首屏2张轮播图,轮换展示,效果非常的炫酷,非常的哇噻,使用这个主题搭建的wordpress网站,超过了200个,虽然是一个老主题了,不过是经得起时间考验的,现在用起来…

IDEA 中 git fetch 验证报错 The provided password or token is incorrect

参考链接: 【GitLab】-HTTP Basic: Access denied.remote:You must use a personal access token_http basic: access denied. the provided password o-CSDN博客 idea使用gitLab报错:remote: HTTP Basic: Access denied_idea remote: http basic: acc…

C++编译器的程序转化

编译器在某些情况下会对程序进行转化,有些是编译器需要的,有些是出于性能考虑的,转化可能会产生出乎意料的结果 文章目录 明确的初始化操作参数的初始化返回值的初始化在使用者层面做优化在编译器层面做优化NRV 优化NRV优化的弊端 明确的初始…

在AndroidStudio创建Flutter项目并运行到模拟器

1.Flutter简介 Flutter是Google开源的构建用户界面(UI)工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台。Flutter 开源、免费,拥有宽松的开源协议,适合商…

基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于模糊PI控制算法的龙格库塔CSTR模型控制系统simulink建模与仿真。基于模糊PI控制算法的龙格-库塔(Runge-Kutta, RK)连续搅拌釜反应器(Co…

C语言.自定义类型:结构体

自定义类型:结构体 1.结构体类型的声明1.1结构体回顾1.1.1结构体的声明1.1.2结构体变量的创建和初始化 1.2结构体的特殊声明1.3结构体的自引用 2.结构体内存对齐2.1对齐规则2.2为什么存在内存对齐2.3修改默认对齐数 3.结构体传参4.结构体实现位段4.1什么是位段4.2位…

[附源码]SpringBoot+Vue网盘项目_仿某度盘

视频演示 [附源码]SpringBootVue网盘项目_仿某度盘 功能介绍 支持秒传支持视频音频播放、拖拽进度条、倍速播放等支持图片预览,旋转,放大支持多人一起上传,共享上传进度(例如a上传苍老师学习资料到50%,突然b也上传苍老…

PHP源码_最新Ai对话系统网站源码 ChatGPT+搭建教程+前后端

基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,真正像人类一样来聊天交流,甚至能完成撰写邮件、视频脚本、文案、翻译、代码,写论…

【MySQL精炼宝库】深度解析索引 | 事务

目录 一、索引 1.1 索引(index)概念: 1.2 索引的作用: 1.3 索引的缺点: 1.4 索引的使用场景: 1.5 索引的使用: 1.6 面试题:索引底层的数据结构(核心内容): 1.7 索引列查询(主…