【一看就会】路径规划算法【二】——RRT,RRT*

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

这是路径搜索算法的第二篇,上一篇讲了广度优先,深度优先,Dijkstra、A*、D*,本篇讲述另外两种常见路径搜索算法:RRT,RRT*。

本篇尽量用简单的文字描述,帮助大家理解RRT和RRT*的原理。


一、RRT的原理

Dijkstra、A*、D*可以说都是广度优先搜索算法的变种。

A*等一系列的算法就是从起点开始,从内到外一圈一圈的扫描,直到扫描到终点为止,然后加上一些权重,一些成本之类的,让其有个大概的方向。

而RRT则是一套全新的搜索算法,它向外探索的行驶,不是规律的一圈一圈的,而是随机的。
这个是不是很神奇,因为随机的探索怎么能保证时间最优和路径最优呢?
不能!对,就是不能,RRT没法保证这些。

关于RRT的原理理解,推荐另一位博主写的文章,被誉为csdn上RRT的第一启蒙文章,写的真好,推荐大家学习过程中,将知识都理解到这个地步:RRT算法原理图解

RRT是随机探索算法,虽然只要时间足够长,总会找到一条可行路径。
但是这条路径无法保证最优,并且时间要消耗多长也有很大风险,运气好的话时间很短,运气差的话那有可能时间会长到离谱。

于是,为了解决这些问题,便有了RRT*。

二、RRT*的原理

每个讲RRT的都会先说:RRT引入了重写和重联机制。
重写:当生成一个新的节点(Xnew)时,算法会在一定范围内(通常是一个以新节点为中心的圆形或球形区域)搜索所有可能的父节点。然后,算法会选择一个使得从起点到新节点的路径成本最小的父节点作为新节点的父节点。这个过程称为重写

重联:在找到新节点的最佳父节点后,RRT*算法会检查新节点周围的邻近节点。如果通过新节点连接这些邻近节点能够降低它们的路径成本,算法会重新连接这些节点,以优化路径

原理太干了,举个例子,来说明RRT和RRT*的区别:

问题:假设在一个二维平面迷宫中,机器人需要从起点(S)到终点(G)。迷宫中有多个障碍物,需要找到一条从起点到终点的可行路径。

解答:
1.RRT算法运行
从起点出发,随机采样点,并不断扩展树,直到找到终点或达到最大迭代次数。
例如,在某次随机采样中,生成了点P1,找到距离P1最近的父节点P0,然后生成新节点P2,并连接P0和P2。然后继续这个过程,直到路径到达终点。
路径特点:路径可能比较曲折,存在许多冗余节点和无效分支。
2.RRT算法运行
同样从起点开始,但在每次生成新节点时,会引入重写和重新连接机制。
例如,当生成新节点P2时,RRT
算法不仅考虑P0作为其父节点,还会在一定范围内搜索其他可能的父节点,比如P1、P3等,并选择使得路径成本最小的节点作为父节点。
在连接新节点后,算法还会检查周围节点,如P4、P5等,如果通过新节点连接能够降低这些节点的路径成本,就会重新连接它们,从而优化路径。
路径特点:路径经过优化,更加平滑,冗余节点较少,路径长度接近最优。

这个例子基本能够很好的说明RRT较RRT的改进,也说明了为什么RRT能找到最优路径。(这里说的最优路径是指在RRT*随机探索出来的路径中最优,并不是你心里想的那个“最优”。)


总结

除了上述的RRT之外,还有各种RRT的变种,包括双向RRT(RRT-Connect),加入启发函数的RRT(Informed-RRT)等等。

### 腾讯云 DeepSeek 集成使用指南 腾讯云 TI 平台为用户提供了个便捷的方式来进行 DeepSeek-R1 大模型的私有化部署和调用。通过该平台,用户不仅可以获得免费体验的机会,还能享受到开放的 API 接口服务,便于将此先进的人工智能技术融入自身的业务环境中[^2]。 #### 获取访问权限 为了开始集成工作,首先需要注册并登录到腾讯云账户,在 TI 平台上申请获取 DeepSeek 的使用权以及相应的开发工具包 (SDK) 和 API 文档链接。 #### 准备环境配置 确保本地开发环境已经安装 Python 解释器及相关依赖库,并按照官方给出的操作手册完成必要的设置步骤,比如创建虚拟环境、激活许可证等操作。 #### 实现接口对接 下面是个简单的 Python 代码片段用于展示如何调用 DeepSeek 提供的服务: ```python import requests def call_deepseek_api(text_input): url = "https://api.tencentcloud.com/deepseek" headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer YOUR_ACCESS_TOKEN' } payload = {"text": text_input} response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: result = response.json() return result['output'] else: raise Exception(f"Error calling API: {response.text}") ``` 上述函数 `call_deepseek_api` 可以用来发送请求给远程服务器处理输入文本数据,并返回经过分析后的结果字符串。需要注意的是这里的 URL 地址应当替换成为实际使用的端点地址;同样地,“YOUR_ACCESS_TOKEN”也需要替换成有效的认证令牌。 对于更加全面的学习资料和技术支持,建议参考 LangChain 官方文档以及其他在线资源如 GitBook 或 GitHub 上关于 LangChain 的教程和案例研究,这些都将极大地促进开发者们更好地理解和运用这项强大的自然语言处理能力[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不断学习加努力

俺会努力的,一直免费的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值