当前位置: 首页 > news >正文

美国网站建设/央视新闻

美国网站建设,央视新闻,天津网站营销,wordpress dux1.3目录0 专栏介绍1 什么是D*算法?2 D*算法核心概念一览3 D*算法流程图4 步步图解:算法实例5 算法仿真与实现5.1 ROS C实现5.2 Python实现0 专栏介绍 🔥附C/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详…

目录

  • 0 专栏介绍
  • 1 什么是D*算法?
  • 2 D*算法核心概念一览
  • 3 D*算法流程图
  • 4 步步图解:算法实例
  • 5 算法仿真与实现
    • 5.1 ROS C++实现
    • 5.2 Python实现

0 专栏介绍

🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。

🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法


1 什么是D*算法?

动态A*(Dynamic A*, D*)算法是一种增量式路径规划算法,与A*算法相比,它最大的优势是可以同时兼容静态环境和存在未知动态变化的场景,曾被美国用于火星探测器寻路。如果还不了解A*算法,可以看路径规划 | 图解A*、Dijkstra、GBFS算法的异同(附C++/Python/Matlab仿真)

在这里插入图片描述

这里有一个概念——增量式,什么是增量式呢?与启发式搜索利用启发函数指导高效搜索不同,增量式搜索对曾经的规划信息进行综合再利用以减少搜索范围和时间。

D*算法实现增量式规划采用从目标点向起始点的反向搜索策略当既定路径被障碍阻塞时,障碍后各个节点到目标点的最短路径未被影响,只需在障碍附近重规划并更新起点到障碍处各节点的信息,当路径绕过障碍后即可重新利用曾经规划的到达目标位置的最短路径

所以动态障碍越靠近起点,能重复利用的信息越多,规划效率越高。当动态障碍靠近终点时,仍要更新整张地图节点信息,相当于应用反向A*算法进行重规划。

2 D*算法核心概念一览

D*算法的核心概念如下所示:

  • c(x,y)c\left( x,y \right)c(x,y):从节点xxx移动到节点yyy的代价,若xxxyyy间存在障碍则c(x,y)=infc\left( x,y \right) =\mathrm{inf}c(x,y)=inf

  • t(x)t\left( x \right)t(x):节点xxx表状态。有

    1. NEW——未被搜索过的点
    2. OPEN——正在搜索的待考察节点
    3. CLOSED——被搜索过的节点。

    为了适应动态环境,D*算法的OPENCLOSED状态允许相互转化,当节点扩展后从开节点表中移除时,状态从OPEN变为CLOSED;当节点传播动态障碍信息给邻域时,节点将再次加入开节点表,状态从CLOSED变为OPEN

  • h(x)h\left( x \right)h(x):从节点xxx到目标点的代价;

  • k(x)k\left( x \right)k(x):节点xxx的历史最小h(x)h\left( x \right)h(x)值,即
    k(x)={h(x),t(x)=NEWmin⁡{k(x),h(x)},otherwisek\left( x \right) =\begin{cases} h\left( x \right) \,\, , t\left( x \right) =\mathrm{NEW}\\ \min \left\{ k\left( x \right) ,h\left( x \right) \right\} , \mathrm{otherwise}\\\end{cases}k(x)={h(x),t(x)=NEWmin{k(x),h(x)},otherwise

    设置k(x)k\left( x \right)k(x)的目的在于加快障碍处局部路径重规划的效率。当某个路径点变为障碍时,其h(x)=infh\left( x \right) =\mathrm{inf}h(x)=infk(x)k\left( x \right)k(x)不变。若从开节点表中首选h(x)h\left( x \right)h(x)最小的点,则将最后考察障碍附近的点;而若从开节点表中首选k(x)k\left( x \right)k(x)最小的点,则将率先考察障碍附近的点,符合实际情况;

  • 节点xxx元状态:有

    1. RAISED——此时k(x)<h(x)k\left( x \right) <h\left( x \right)k(x)<h(x)说明节点xxx受到障碍影响
    2. LOWER——此时k(x)=h(x)k\left( x \right) =h\left( x \right)k(x)=h(x)说明节点xxx未受障碍影响;
  • process_state()\mathrm{process}\_\mathrm{state}\left( \right)process_state()核心函数,静态环境下可以更新各节点到达目标点的最短路径及节点连接关系,动态环境下可以传播受障碍影响后节点h(x)h\left( x \right)h(x)的变更信息到邻域;

  • insert(x,val)\mathrm{insert}\left( x,val \right)insert(x,val):将节点xxx插入开节点表,并令其h(x)=valh\left( x \right) =valh(x)=val,更新k(x)k\left( x \right)k(x)

  • modify_cos⁡t(x)\mathrm{modify}\_\cos\mathrm{t}\left( x \right)modify_cost(x):通过insert(x,h(x)+c(x,x.parent))\mathrm{insert}\left( x,h\left( x \right) +c\left( x,x.\mathrm{parent} \right) \right)insert(x,h(x)+c(x,x.parent))将处于CLOSED状态的节点xxx转换为OPEN状态

3 D*算法流程图

D*算法主函数流程如下所示

在这里插入图片描述
其中核心的process_state()\mathrm{process}\_\mathrm{state}\left( \right)process_state()算法流程如下

在这里插入图片描述
在将动态信息传播到邻域进行修正的过程中,分为两种情况讨论:

  • 节点xxx处于LOWER态。考虑到障碍的出现只可能让路径不变或更曲折,即让节点h(x)⩾k(x)h\left( x \right) \geqslant k\left( x \right)h(x)k(x),所以对处在LOWER态的节点,不存在更优路径,此时只需将节点 的最优信息更新到邻域即可;
  • 节点xxx处于RAISED态。与LOWER态节点不同,此时节点xxx处可能存在更优路径,即可能存在y∈neighbor(x)y\in \mathrm{neighbor}\left( x \right)yneighbor(x)使h(x)>h(y)+c(x,y)h\left( x \right) >h\left( y \right) +c\left( x,y \right)h(x)>h(y)+c(x,y)。对于y.parent=xy.\mathrm{parent}=xy.parent=x的情形RAISED态与LOWER态更新情况相同,以保持联结节点信息的同步。对于y.parent≠xy.\mathrm{parent}\ne xy.parent=x的情形,若h(y)>h(x)+c(x,y)h\left( y \right) >h\left( x \right) +c\left( x,y \right)h(y)>h(x)+c(x,y)则重新将节点xxx加入开节点表进行考察,因为xxx可能可以用更优的代价值来更新邻域;若h(x)>h(y)+c(x,y)h\left( x \right) >h\left( y \right) +c\left( x,y \right)h(x)>h(y)+c(x,y),考虑到h(y)⩽koldh\left( y \right) \leqslant k_{\mathrm{old}}h(y)kold的情形在S2处已考虑,因此只需包含h(y)>koldh\left( y \right) >k_{\mathrm{old}}h(y)>kold,更进一步,由于节点yyy处在CLOSED状态,所以通常h(y)=k(y)⩽koldh\left( y \right) =k\left( y \right) \leqslant k_{\mathrm{old}}h(y)=k(y)kold,但此处h(y)>koldh\left( y \right) >k_{\mathrm{old}}h(y)>kold说明节点yyy也受到了障碍影响导致价值升高,体现了将yyy重新纳入开节点表的必要性。

4 步步图解:算法实例

以下面的栅格地图为例,红色栅格表示起点,蓝色栅格表示终点,黄色栅格表示开节点表中的节点,绿色栅格表示闭节点表中的栅格

在这里插入图片描述
D*算法的静态规划阶段如下图所示

在这里插入图片描述

D*算法动态路径修正阶段如下所示

在这里插入图片描述

5 算法仿真与实现

5.1 ROS C++实现

double DStar::processState()
{if (open_list_.empty())return -1;double k_old = open_list_.begin()->first;DNodePtr x = open_list_.begin()->second;open_list_.erase(open_list_.begin());x->t = CLOSED;expand_.push_back(*x);std::vector<DNodePtr> neigbours;this->getNeighbours(x, neigbours);// RAISE state, try to reduce k value by neibhboursif (k_old < x->g_){for (DNodePtr y : neigbours){if (y->t != NEW && y->g_ <= k_old && x->g_ > y->g_ + this->getCost(y, x)){x->pid_ = y->id_;x->g_ = y->g_ + this->getCost(y, x);}}}// LOWER state, cost reductionsif (k_old == x->g_){for (DNodePtr y : neigbours){if (y->t == NEW || ((y->pid_ == x->id_) && (y->g_ != x->g_ + this->getCost(x, y))) ||((y->pid_ != x->id_) && (y->g_ > x->g_ + this->getCost(x, y)))){y->pid_ = x->id_;this->insert(y, x->g_ + this->getCost(x, y));}}}else{// RAISE statefor (DNodePtr y : neigbours){if (y->t == NEW || ((y->pid_ == x->id_) && (y->g_ != x->g_ + this->getCost(x, y)))){y->pid_ = x->id_;this->insert(y, x->g_ + this->getCost(x, y));}else if (y->pid_ != x->id_ && (y->g_ > x->g_ + this->getCost(x, y))){this->insert(x, x->g_);}else if (y->pid_ != x->id_ && (x->g_ > y->g_ + this->getCost(y, x)) && y->t == CLOSED && (y->g_ > k_old)){this->insert(y, y->g_);}}}return open_list_.begin()->first;
}

在这里插入图片描述

5.2 Python实现

def processState(self) -> float:# get node in OPEN set with min k valuenode = self.min_stateself.EXPAND.append(node)if node is None:return -1# record the min k value of this iterationk_old = self.min_k# move node from OPEN set to CLOSED setself.delete(node)  # k_min < h[x] --> x: RAISE state (try to reduce k value by neighbor)if k_old < node.h:for node_n in self.getNeighbor(node):if node_n.h <= k_old and node.h > node_n.h + self.cost(node, node_n):# update h_value and choose parentnode.parent = node_n.currentnode.h = node_n.h + self.cost(node, node_n)# k_min >= h[x] -- > x: LOWER state (cost reductions)if k_old == node.h:for node_n in self.getNeighbor(node):if node_n.t == 'NEW' or \(node_n.parent == node.current and node_n.h != node.h + self.cost(node, node_n)) or \(node_n.parent != node.current and node_n.h > node.h + self.cost(node, node_n)):# Condition:# 1) t[node_n] == 'NEW': not visited# 2) node_n's parent: cost reduction# 3) node_n find a better parentnode_n.parent = node.currentself.insert(node_n, node.h + self.cost(node, node_n))else:for node_n in self.getNeighbor(node):if node_n.t == 'NEW' or \(node_n.parent == node.current and node_n.h != node.h + self.cost(node, node_n)):node_n.parent = node.currentself.insert(node_n, node.h + self.cost(node, node_n))else:if node_n.parent != node.current and \node_n.h > node.h + self.cost(node, node_n):self.insert(node, node.h)else:if node_n.parent != node.current and \node.h > node_n.h + self.cost(node, node_n) and \node_n.t == 'CLOSED' and \node_n.h > k_old:self.insert(node_n, node_n.h)return self.min_k

在这里插入图片描述

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

相关文章:

路径规划 | 图解动态A*(D*)算法(附ROS C++/Python/Matlab仿真)

目录0 专栏介绍1 什么是D*算法&#xff1f;2 D*算法核心概念一览3 D*算法流程图4 步步图解&#xff1a;算法实例5 算法仿真与实现5.1 ROS C实现5.2 Python实现0 专栏介绍 &#x1f525;附C/Python/Matlab全套代码&#x1f525;课程设计、毕业设计、创新竞赛必备&#xff01;详…...

GraphCut、最大流最小割定理

G&#xff08;V&#xff0c;E&#xff09;&#xff1b;V为点集&#xff0c;E为边集&#xff1b; 节点集V中的节点分为&#xff1a; &#xff08;1&#xff09;终端节点。不包含图像像素&#xff0c;用S和T表示。S为源点&#xff0c;T为汇点。图像分割中通常用S表示前景目标&a…...

Word文档的密码忘记了怎么办?

Word文档可以设置两种密码&#xff0c;文件的“限制密码”和“打开密码”&#xff0c;今天来分享一下忘记这两种密码可以如何处理。 如果忘记的是Word文档的“限制密码”&#xff0c;文档就无法编辑及更改了&#xff0c;菜单目录中的相关选项也都是灰色状态&#xff0c;无法点…...

Java分布式事务(二)

文章目录&#x1f525;分布式事务处理_认识本地事务&#x1f525;关系型数据库事务基础_并发事务带来的问题&#x1f525;关系型数据库事务基础_MySQL事务隔离级别&#x1f525;MySQL事务隔离级别_模拟异常发生之脏读&#x1f525;MySQL事务隔离级别_模拟异常发生之不可重复读&…...

游戏项目中的程序化生成(PCG):算法之外的问题与问题

本篇讨论的是什么 从概念上讲&#xff0c;PCG&#xff08;程序化生成&#xff09;的含义很广&#xff1a;任何通过规则计算得到的内容&#xff0c;都可算作是PCG。但在很多游戏项目的资料&#xff0c;包括本篇&#xff0c;讨论PCG时特指是&#xff1a;用一些算法/工具(特别是H…...

【C++】位图+哈希切割+布隆过滤器

文章目录一、位图1.1 位图概念1.2 位图实现1.2.1 把x对应比特位0置11.2.2 把x对应比特位1置01.2.1 查看x对应比特位1.3 位图源码1.4 位图的应用二、哈希切割&#xff08;处理海量数据&#xff09;三、布隆过滤器3.1 布隆过滤器的概念3.2 布隆过滤器的应用场景3.3 布隆过滤器的实…...

python实现网络游戏NPC任务脚本引擎(带限时任务功能)

python实现NPC任务脚本引擎 一、简介二、简单示例三、实现任务限时的功能四、结合twisted示例一、简介 要实现面向对象的网络游戏NPC任务脚本引擎,可以采用以下步骤: 1.定义NPC类:该类应该包括NPC的基本属性和行为,如名字、位置、血量、攻击力等等。NPC还应该有任务的列表…...

C语言的原子操作(待完善)

文章目录一、什么是原子操作二、为什么需要原子操作三、API一、什么是原子操作 原子操作是不可分割的&#xff0c;在执行完毕之前不会被任何其它任务或事件中断&#xff0c;可以视为最小的操作单元&#xff0c;是在执行的过程中、不会导致对数据的并发访问的、最小操作&#x…...

JavaScript Boolean 布尔对象

文章目录JavaScript Boolean 布尔对象Boolean 对象Boolean 对象属性Boolean 对象方法检查布尔对象是 true 还是 false创建 Boolean 对象JavaScript Boolean 布尔对象 Boolean&#xff08;布尔&#xff09;对象用于将非布尔值转换为布尔值&#xff08;true 或者 false&#xff0…...

删除链表元素相关的练习

目录 一、移除链表元素 二、删除排序链表中的重复元素 三、删除排序链表中的重复元素 || 四、删除链表的倒数第 N 个结点 一、移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头…...

3DEXPERIENCE Works 成为了中科赛凌实现科技克隆环境的催化剂

您的企业是否想过实现设计数据的统筹管理&#xff0c;在设计上实现标准化&#xff0c;并把每位设计工程师串联起来协同办公?中科赛凌通过使用3DEXPERIENCE Works 实现了上述内容&#xff0c;一起来看本期案例分享吧!中科赛凌 通过其自主研发的单压缩机制冷技术实现零下190℃制…...

少儿编程 电子学会图形化编程等级考试Scratch一级真题解析(选择题)2022年12月

少儿编程 电子学会图形化编程等级考试Scratch一级真题解析2022年12月 选择题(共25题,每题2分,共50分) 1、小明想在开始表演之前向大家问好并做自我介绍,应运行下列哪个程序 A、 B、 C、 D、 答案:D...

【完整版】国内网络编译,Ambari 2.7.6 全部模块源码编译笔记

本次编译 ambari 2.7.6 没有使用科学上网的工具,使用的普通网络,可以编译成功,过程比 ambari 2.7.5 编译时要顺畅。 以下是笔记完整版。如果想单独查看本篇编译笔记,可参考:《Ambari 2.7.6 全部模块源码编译笔记》 该版本相对 2.7.5 版本以来,共有 26 个 contributors …...

HTML 颜色值

HTML 颜色值 颜色由红 (R)、绿 (G)、蓝 (B) 组成。 颜色值 颜色值由十六进制来表示红、绿、蓝&#xff08;RGB&#xff09;。 每个颜色的最低值为 0 (十六进制为 00 )&#xff0c;最高值为 255 (十六进制为 FF )。 十六进制值的写法为#号后跟三个或六个十六进制字符。 三位…...

RabbitMQ-消息的可靠性投递

文章目录0. 什么是消息的可靠性投递1. confirm机制2. return机制3. 总结0. 什么是消息的可靠性投递 在生产环境中&#xff0c;如果因为一些不明原因导致RabbitMQ重启&#xff0c;RabbitMQ重启过程中是无法接收消息的&#xff0c;那么我们就需要生产者重新发送消息。或者在消息…...

华为OD机试题 - 最小叶子节点(JavaScript)| 含思路

华为OD机试题 最近更新的博客使用说明本篇题解:最小叶子节点题目输入输出示例一输入输出示例二输入输出Code解题思路华为OD其它语言版本最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD…...

嵌入式系统硬件设计与实践(开发过程)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 如果把电路设计看成是画板子的&#xff0c;这本身其实是狭隘了。嵌入式硬件设计其实是嵌入式系统中很重要的一个部分。里面软件做的什么样&#xf…...

入门vue(1-10)

正确学习方式&#xff1a;视频->动手实操->压缩提取->记录表述 1基础结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"&…...

C#开发的OpenRA的游戏主界面怎么样创建3

继续游戏主界面创建的主题, 我们知道游戏的主界面上有很多部件,比如显示文本的标签(LabelWidget), 显示按钮(ButtonWidget)。那么这些部件又是如何创建在主界面上的呢? 其实这些部件是否显示,都是来源于文件yaml,在这里就是文件mainmenu.yaml, 在这个文件里定义了所有…...

秒懂算法 | 基于主成分分析法、随机森林算法和SVM算法的人脸识别问题

本文的任务与手写数字识别非常相似,都是基于图片的多分类任务,也都是有监督的。 01、数据集介绍与分析 ORL人脸数据集共包含40个不同人的400张图像,是在1992年4月至1994年4月期间由英国剑桥的Olivetti研究实验室创建。 此数据集下包含40个目录,每个目录下有10张图像,每个…...

QML Loader(加载程序)

Loader加载器用于动态加载 QML 组件。加载程序可以加载 QML 文件&#xff08;使用 source 属性&#xff09;或组件对象&#xff08;使用 sourceComponent 属性&#xff09; 常用属性&#xff1a; active 活动asynchronous异步&#xff0c;默认为falseitem项目progress 进度so…...

C++——类型转换

目录 C语言中的类型转换 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast 延伸问题 RTTI&#xff08;了解&#xff09; C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或…...

vue3:生命周期(onErrorCaptured)

一、背景 当项目如果发生报错&#xff0c;影响程序体验。如果能以捕获的方式得到错误信息&#xff0c;而且还能定位问题&#xff0c;这样就好了&#xff0c;本文介绍onErrorCaptured实现我们想要的效果。 vue2&#xff1a;errorCaptured。使用与vue3同理。 vue3&#xff1a;…...

vue过滤器

vue 过滤器 对要显示的数据进行特定格式化之后再显示 注册过滤器 Vue.filter(name,callback)new Vue({filters:{}}) 使用过滤器 {{ name | 过滤器名 }}v-band:属性“name | 过滤器名” 局部过滤器 <p>{{time | timeFormater }}</p> <!-- 过滤器可接受额外参…...

I/O模型

写在前面 前面聊完了IO方式, 也就意味着网络数据的收发通道是建立起来了。但业务场景中, 通道本身是不会发送数据的。在常见的网络应用中, server端会创建多个链接以服务更多client, 同时要求各个client尽可能互不影响。这是I/O模型(也就是IO方式线程模型)要解决的问题。由于加…...

前端必备技术之——AJAX

简介 AJAX 全称为 Asynchronous JavaScript And XML&#xff0c;就是异步的 JS 和 XML(现在已经基本被json取代)。通过 AJAX 可以在浏览器中向服务器发送异步请求&#xff0c;最大的优势&#xff1a;无刷新获取数据。AJAX 不是新的编程语言&#xff0c;而是一种将现有的标准组…...

MySQL数据库 各种指令操作大杂烩(DML增删改、DQL查询、SQL...)

文章目录前言一、DML 增删改添加数据修改数据删除数据二、DQL 查询基本查询条件查询聚合函数(count、max、min、avg、sum)分组查询(group by)排序查询(order by)分页查询(limit)DQL 语句练习三、SQLDCL 权限控制约束案例多表查询事务存储引擎字符串函数数值函数日期函数流程函数…...

Java分布式全局ID(一)

随着互联网的不断发展&#xff0c;互联网企业的业务在飞速变化&#xff0c;推动着系统架构也在不断地发生变化。 如今微服务技术越来越成熟&#xff0c;很多企业都采用微服务架构来支撑内部及对外的业务&#xff0c;尤其是在高 并发大流量的电商业务场景下&#xff0c;微服务…...

算法分析与设计之并查集详解

算法分析与设计之并查集1.前言2.并查集的基础2.1.关于动态连通性2.2.动态连通性的应用场景&#xff1a;2.3.对问题建模&#xff1a;2.4.建模思路&#xff1a;2.5.API2.7.Quick-Find算法&#xff1a;2.8.Quick-Union算法&#xff1a;3. 并查集的应用1.前言 本文主要介绍解决动态…...

Linux - 内存性能评估

文章目录概述free 命令指定的时间段内不间断地监控内存的使用情况通过watch与free相结合动态监控内存状况vmstat命令监控内存“sar –r”命令组合小结概述 内存的管理和优化是系统性能优化的一个重要部分&#xff0c;内存资源的充足与否直接影响应用系统的使用性能。在进行内存…...