Hybrid A*:算法概念详解

        在之前,我们一起学习了A*算法,A* 是一种用于在图或网格中寻找最短路径的启发式搜索算法。然而A*算法得到的最优路径为折线,在实际机器人的运动中,我们更希望追踪的路径为平滑的曲线。

        Hybrid A*(混合 A*)是一种用于连续空间、具有非完整约束的运动规划算法,尤其适用于自动驾驶车辆或移动机器人

A*算法:启发式寻路核心解析-ZEEKLOG博客


1 核心思想

        Hybrid A* 将 A* 的启发式搜索思想与连续状态空间的运动模型结合起来。

        与普通 A* 不同,Hybrid A* 的搜索节点不仅包括位置坐标 (x,y) ,还包括车辆朝向 θ 。因此每个节点是一个三维状态:n=(x,y,θ)

        这使得搜索考虑了车辆的运动学约束,即在寻找下一个搜索节点时不能单纯以相邻节点为搜索目标,要根据预先设定的采样步长,考虑转弯半径限制、不能原地旋转等因素,采样运动轨迹,并判断轨迹是否会与障碍物发生碰撞,选择满足车辆运动条件的轨迹为待选的搜索节点。

2 主要特点

2.1 实际代价函数 g

      混合A*的实际代价函数g,例如Apollo中实际代价函数是一个由多目标代价线性组成的满足车辆运动学约束的值(由运动代价(包括路径弧长、转向惩罚和换挡惩罚组成)、行为代价、约束惩罚、加权合成。)

2.2 预估代价函数 h

      混合A*的预估代价函数h,一般有以下几种计算方式:

      1.无障碍物的非完整性约束(考虑运动学约束不考虑障碍物):使用Reed-Sheep(RS)或 Dubins曲线连接目标点,即可得到一条考虑运动学约束但不考虑障碍物的最短路径。

      2.有障碍物的完整性启发(考虑障碍物但不考虑约束):曼哈顿距离或者迪杰斯特拉(Dijkstra)(Apollo中即采用该方法)

Dubins 距离:对于一辆只能前进、最小转弯半径为 R 的车辆,从初始状态(xs,ys,θs)到目标状态(xg,yg,θg)满足转向约束的最短路径。

Reeds–Shepp 路径:允许前后倒车、具有最小转弯半径的车辆的最短可行路径。

3 搜索流程

3.1初始化起点与目标点状态

      设定 (xstart,ystart,θstart)(xgoal,ygoal,θgoal)

3.2 定义可行控制集

      一般包括一组离散转向角(如 -δmax,0,+δmax )与运动方向(前进/后退)。

3.3 扩展节点

      对每个当前节点,使用运动学模型(如简化自行车模型)计算下一个状态。:

3.4 代价计算与启发式估计、

      使用与 A* 类似的 f=g+h ,其中 g 由控制输入长度累积,h  通常为到目标点的 Dubins/Reeds-Shepp 距离。

3.5 终止条件与路径回溯

      当节点足够接近目标点(在一定容差范围内)时,停止搜索并回溯路径。

4 Hybrid A* 与 A* 的区别对比

注意:

      混合A*算法不一定能找到到达终点的路径,这是因为经典A*算法的搜索空间可以是全空间,但是混合A*算法的搜索空间需要满足车辆动力学,无法保证遍历所有节点。

5 参考资料

[1] 03 车辆运动规划控制常用算法---混合A* - 知乎

[2]混合A*算法详解 - 知乎


都看到这里了,如果有所帮助,点个赞再走吧~~

不断学习,持续成长,欢迎大家一起交流学习!

Read more

ωK算法(ωKA)原理及推导

一、简介 ω-K(omega-K、Ω-K)算法又称波数域算法或距离徙动算法(RMA),是一种基于二维频域精确处理的合成孔径雷达成像算法。其核心思想是通过波数域映射,将球面波前转换为平面波前,实现距离徙动与方位调频的精确解耦。 算法流程主要分为六个步骤:首先对原始回波进行距离向傅里叶变换,转换到距离频域。随后进行方位向傅里叶变换,得到二维频域信号,此时目标的相位历程表现为包含平方根项的耦合形式。接着,乘以参考函数完成距离压缩并补偿参考距离的相位,使残余相位仅与目标距离差相关。最关键的是Stolt插值(变换),通过坐标变换将数据从球面域重采样到平面域,将非线性相位转换为线性相位。最后,进行二维逆傅里叶变换,直接输出聚焦良好的复图像。 该算法的最大优势在于其理论精确性,通过一次频域插值统一校正所有距离徙动,无需任何近似假设,特别适用于大斜视、宽波束和高分辨率场景。虽然Stolt插值计算量较大,但算法在成像精度方面具有显著优势,成为星载SAR高精度成像的标准选择之一。 二、推导 1. 信号模型 合成孔径雷达(SAR)采用线性调频信号(chirp),平台沿直线运动,速度为  。设

By Ne0inhk
使用 QWebChannel 实现 JS 与 C++ 双向通信(超详细 + 踩坑总结 + Demo)

使用 QWebChannel 实现 JS 与 C++ 双向通信(超详细 + 踩坑总结 + Demo)

使用 QWebChannel 实现 JS 与 C++ 双向通信(超详细 + 踩坑总结 + Demo) 在基于 QWebEngine 的项目中,要让 前端 JavaScript 与 后端 C++ 互相通信,是非常关键的能力。 Qt 官方提供的方案就是 QWebChannel,它能让你像调用本地对象一样从 JS 访问 C++,并且支持信号/槽、异步回调等。 但实际项目中常见各种问题: * JS 侧无法拿到对象? * 信号不触发? * 跨线程导致闪退? * 对象销毁后 JS 仍然在调用? * Page/Page再创建导致 channel 失效? 本文将带你彻底搞懂 QWebChannel 的机制,避坑,并给出可运行的 Demo。 一、

By Ne0inhk
IDEA/WebStorm 切换分支(超简单)

IDEA/WebStorm 切换分支(超简单)

IDEA/WebStorm 切换分支 * 1、git命令方式切换分支 * 1.1、 切换至本地已`存在`的分支A * 1.2、 切换至本地`不存在`的新分支A * 2、idea/webstorm 右键项目 切换分支 * 3、idea/webstorm 右下角状态栏 切换分支 * 4、idea/webstorm git面板 切换分支 1、git命令方式切换分支 1.1、 切换至本地已存在的分支A git checkout A 1.2、 切换至本地不存在的新分支A * -b表示创建并切换分支 git checkout -b A 2、idea/webstorm 右键项目

By Ne0inhk

WebMCP:浏览器AI交互新范式_20260213114222

一、WebMCP是什么 1. 基本定义 WebMCP(Web Model Context Protocol)是Google与Microsoft在W3C框架下联合推动的浏览器原生Web API,Chrome 146已推出早期预览版本,核心目标是让网页主动将自身能力封装为结构化工具,供AI Agent直接调用,解决当前Agent操作网页的稳定性与效率问题。 2. 核心思想 把交互从UI层搬到语义层:不再依赖按钮点击、坐标定位或DOM解析,而是让网页直接暴露"提交请假"“搜索航班”“加入购物车"等业务动作,形成结构化工具契约,Agent按契约调用而非"猜UI”。 3. 关键特性 * 双轨API设计:声明式API(HTML表单属性)+ 命令式API(JavaScript注册),兼顾易用性与灵活性 * 浏览器内运行:纯客户端实现,网页本身就是"工具服务器",天然继承用户登录态与权限上下文 * 结构化上下文:

By Ne0inhk