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

狭窄车位检测与自动垂直泊车路径规划混合A~*【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。
✅ 专业定制毕设、代码
如需沟通交流,查看文章底部二维码


(1)基于激光雷达‑视觉空间几何法的融合车位检测:

首先对激光雷达点云进行地面分割,采用基于栅格高度差的分割方法去除地面点,对剩余障碍物点云做欧氏聚类获得车辆轮廓。同时,利用YOLOv5s视觉模型检测两侧停放车辆的目标框,提取车轮接地点和车身边缘线。在决策层,基于加权平均法将两传感器的检测结果进行融合,激光雷达提供精确的距离和方位角,视觉提供语义类别和侧面轮廓,权重依据传感器的有效检测范围和置信度动态调整。在输出层,通过空间几何方法计算目标车辆的角点位置,进而运用最小外接矩形拟合和扩展卡尔曼滤波定位自车位置,解算出车位长度、宽度和倾角。在白天和黄昏场景下的实车试验中,融合检测方法对狭窄车位长度的平均误差分别为0.0076 m和0.0091 m,检测准确率分别达到99.3%和99.2%,为高精度的泊车规划提供了可靠的环境模型。

(2)逆向扩展混合A*与起始点泊车区域优选:

提出一种逆向着道的混合A*路径规划方法,将规划起点设定为目标车位内部,目标点设定为泊车通道的某个等待位置,利用混合A*在逆向空间中搜索路径,之后反转节点序列得到正向泊车轨迹。该方式使得路径扩展从狭窄空间向宽敞空间生长,显著降低了在狭窄车位内部进行复杂前向搜索的计算量。在节点扩展时,状态空间维度为(x, y, θ),动作空间为7种固定曲率的弧线,包括最大转向角内的均匀离散曲率和两段直线。为了进一步提高成功率,基于车位的宽度和通道尺寸构建起始区域可行性评估函数,以车位宽度减去车宽1.2倍作为边界,筛选出最优的泊车发起位置。100次随机垂直车位测试下,逆向混合A*的平均规划时间为0.38秒,路径长度比传统前向混合A*缩短15.6%,成功率从71%提升至93%,在5.0米宽狭窄车位中表现尤为突出。

(3)模型预测控制与单步多步连续位姿跟踪:

设计了一个基于运动学模型的模型预测控制器,用来跟踪逆向混合A*生成的泊车参考轨迹。预测时域设为40步,每步0.05秒,状态量为(x, y, θ),控制量为速度和前轮转角的速度变化率。为了应对狭窄空间中的位姿误差累积,在MPC的成本函数中增加了相对于车位边界的软约束项,通过指数函数对接近边界的预测位姿施加高额惩罚。此外,采用双线性插值在轨迹节点之间进行平滑,并引入末端代价,确保车辆最终位姿的横纵向误差均小于0.03 m。在Carsim‑Simulink联合仿真中,针对单步泊车(一次性倒入)和多步泊车(揉库)分别进行验证,单步泊车最大横向误差0.021 m,航向角误差0.017 rad;多步泊车最大横向误差0.024 m,航向角误差0.022 rad,完全满足泊车精度的工程要求。"

"import numpy as np

import cvxpy as cp

# 逆向混合A*状态扩展(简化)

def hybrid_astar_expand(state, goal, obstacles):

actions = [(-0.5, 5.0), (0.0, 5.0), (0.5, 5.0)] # (曲率, 弧长)

successors = []

for k, l in actions:

x, y, theta = state

if k != 0:

r = 1.0/abs(k)

cx = x - np.sin(theta)*r; cy = y + np.cos(theta)*r

dtheta = l/r

x_new = cx + np.sin(theta+dtheta)*r

y_new = cy - np.cos(theta+dtheta)*r

theta_new = theta + dtheta

else:

x_new = x + l*np.cos(theta); y_new = y + l*np.sin(theta)

theta_new = theta

if not collision((x_new, y_new), obstacles):

successors.append((x_new, y_new, theta_new))

return successors

# 空间几何车位检测

def detect_parking_slot(vehicle_corners, self_pose):

# vehicle_corners: 两侧车辆角点

left_car = vehicle_corners[0]; right_car = vehicle_corners[1]

# 计算车位宽度和深度

width = np.linalg.norm(np.array(right_car[0])-np.array(left_car[1]))

depth = np.linalg.norm(np.array(left_car[0])-np.array(left_car[3]))

# 转换到自车坐标系

rel_angle = np.arctan2(right_car[0][1]-left_car[1][1], right_car[0][0]-left_car[1][0])

return width, depth, rel_angle

# MPC跟踪控制器

def mpc_control(x_ref, current_state, dt, N=40):

n_state = 3; n_ctrl = 2

x = cp.Variable((n_state, N+1)); u = cp.Variable((n_ctrl, N))

cost = 0; constraints = [x[:,0] == current_state]

for k in range(N):

# 运动学模型约束

A = np.eye(3); B = np.diag([dt, dt, dt]) # 简化

constraints += [x[:,k+1] == A@x[:,k] + B@u[:,k]]

cost += cp.sum_squares(x[:,k+1] - x_ref[:,k+1]) + 0.1*cp.sum_squares(u[:,k])

prob = cp.Problem(cp.Minimize(cost), constraints)

prob.solve()

return u[:,0].value


如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

http://www.jsqmd.com/news/772597/

相关文章:

  • 保姆级教程:手把手教你用riscv-tests验证RISC-V指令集(附dump文件分析)
  • 观察使用 Taotoken 调用大模型进行数据处理的响应延迟与稳定性
  • 告别采集卡!用OBS NDI插件实现多机位无线串流(保姆级教程)
  • 从Faster R-CNN到YOLO:聊聊Anchor那些事儿,为什么说YOLOv2的k-means思路更聪明?
  • 核心组件大换血:Backbone与Neck魔改篇:YOLO26引入HGBlock(沙漏网络组件):人体姿态估计技术对检测任务的降维赋能
  • 别再死记硬背了!用“烤肉”和“点菜”的比喻,彻底搞懂AutoSar RTE的C/S接口同步异步
  • 基于Next.js与Notion API构建高性能静态博客全攻略
  • 暗黑破坏神2存档编辑器终极指南:d2s-editor让你的游戏体验全面升级
  • 从SENet到ECA-CBAM:图解注意力机制的轻量化演进与落地避坑指南
  • IMX6ULL串口驱动配置避坑指南:从DTS节点到/dev/ttymxc2的完整流程
  • RISC-V处理器可视化仿真终极指南:用Ripes轻松掌握计算机架构
  • OmniQuant:全方位校准实现大语言模型高效量化与移动端部署
  • Origin语言切换总失败?试试这个被忽略的注册表修改法(附详细步骤)
  • 在Ubuntu 20.04上为ARM开发板交叉编译Qt 5.14.2(含QtWebEngine完整依赖清单)
  • 告别虚拟机!在Win10上原生安装ROS Melodic/Foxy的保姆级避坑指南(含VS2022适配)
  • 百度网盘秒传脚本三步部署与零基础使用指南
  • 六自由度机械臂避障路径与轨迹规划【附代码】
  • Cellpose-SAM:超越通用细胞分割的视觉Transformer架构深度解析
  • 手把手教你用MATLAB Profile Generator为AD9371生成myk.c配置文件(Zynq平台实战)
  • ESP32-E22与ESP32-H21芯片解析与物联网应用指南
  • 多功能冲剪机厂家推荐天马机械厂——多功能冲剪机厂家怎么选? - 好物推荐官
  • 3个步骤掌握Windhawk:免费开源的Windows程序定制工具完全指南
  • 拆解紫光展锐ROM:从prodnv到userdata,每个img/bin文件到底存了啥?
  • 除了.cpu(),还有哪些方法能把PyTorch CUDA Tensor数据弄到CPU上处理?(附性能对比)
  • GPT4Free开源项目解析:聚合AI接口的技术实现与实战指南
  • 小米手表表盘制作神器Mi-Create:零基础打造个性化表盘
  • 不用微调!用LangChain+ChatGLM-6B搭建垂直领域问答系统(附避坑指南)
  • 给程序员讲线性代数:用NumPy和几何动画理解基底与线性变换
  • Chrome浏览器Markdown阅读革命:如何用markdownReader插件解决本地文档阅读四大痛点
  • 保姆级教程:手把手在Gazebo仿真中调试PX4悬停油门参数