0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

纯跟踪算法用于无人车自动泊车

新机器视觉 来源:CSDN 2023-01-05 15:29 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


	

目的

使用简单的“纯跟踪算法”实现无人车自动泊车或者位姿调整。在泊车或者工业场景,如果空间不够,那么车辆经常需要做一些大角度的转向或者倒车,例如叉车。

这些场景与一般的道路行驶场景可能有所区别,道路行驶一般只考虑前进方向的高速行驶,并且转向曲率不会太大。泊车场景恰好相反,曲率大、速度慢,而且伴随行驶方向的变化。

道路行驶下的跟踪已经被研究的比较深入了,那么道路行驶使用的跟踪算法还适用于倒车场景吗?本文我们来研究一下这个问题。

c58d945a-8cc9-11ed-bfe3-dac502259ad0.gif

c5f85ef2-8cc9-11ed-bfe3-dac502259ad0.gif

Reeds-Sheep曲线

假设无人车的运动路径是已知的,笔者使用 https://github.com/hbanzhaf/steering_functions 中提出的曲率连续的改进Reeds-Sheep曲线生成路径。

程序输出的路径是一系列离散的点,点之间的距离可以自定义,笔者选择每5毫米一个点,程序中设置DISCRETIZATION=0.005。

路径采用nav_msgs::Path消息发出。

纯跟踪算法

纯跟踪算法(Pure Pursuit)首先要指定一个被跟踪的目标点。

原始版本的纯跟踪算法只讨论了跟踪无人车前方的点,对于Reeds-Sheep曲线这种包含运动方向变化的曲线,无人车既需要前进也需要后退,但是想实现后退也非常简单。

笔者将被跟踪的目标点称为局部目标(local goal)无人车真正最终的静态目标点则称为全局目标(global goal)。

纯跟踪需要无人车的定位,仿真时假设这个定位信息由ROS中的/base_pose_ground_truth消息给出。局部目标的计算方式是,遍历路径,找到第一个离无人车≥ d l 的路径点。

d l 就是前视距离,d l 越小跟踪精度越高,但是越容易导致震荡。机器人在运动时,这个局部目标也会更新。

如果找到的局部目标落在了无人车的后方,此时意味着无人车需要后退,只需要将速度取负值即可,前轮转角不用变。

出现的问题

1.转折点

在仿真时出现了一些问题。首先,最困难的是对于尖点(cusp)怎么处理。因为很多情况下,Reeds-Sheep曲线都包含尖点,在尖点处车辆会改变运动方向。

如果使用纯跟踪算法跟踪这个路径,那么在尖点处会出现一个问题。因为纯跟踪算法总要指定一个跟踪点,这个跟踪点一般在车辆前方或者后方一定距离(d l )处。

在向尖点运动时,车辆不会正好处于尖点上,而是提前离开。下图中的d l = 0.2后面也采用这一数值。

图中的黄点是被跟踪的局部目标,红色点表示无人车后轮轴中心处的实时位置。

c62a08f8-8cc9-11ed-bfe3-dac502259ad0.png

这就导致车辆没有完全位于路径上,进而导致后面的跟踪出现横向偏差(如下图所示),即使采用曲率连续的Reeds-Sheep曲线版本也没有用。

c63d0d5e-8cc9-11ed-bfe3-dac502259ad0.png

这是纯跟踪算法本身的问题吗?不是,纯跟踪算法完全可以跟得上,我们为了安全通常把输出角度给限幅了,如果解除限幅你就会发现纯跟踪算法完全可以准确的跟踪。

但是实际使用时我们又不可能解除限幅,所以怎么解决这个问题呢?

一种是直接增大一点Reeds-Sheep曲线的最小转向半径,令其略大于车辆的真实最小转向半径,笔者尝试增加了约10%,跟踪情况如下图。

另一种方法是增加尖点(cusp)部分的长度,这可以通过改变主程序(steering_functions_node.cpp)中的sigma_max_变量实现,sigma_max_越小,过渡部分越长,最好大于d l 试验发现取sigma_max_=0.5左右就可以。

c6605dae-8cc9-11ed-bfe3-dac502259ad0.png

控制指令如下图所示。

c677c1ba-8cc9-11ed-bfe3-dac502259ad0.jpg

速度单独进行规划,然后叠加到路径上,如下图所示。

c68636fa-8cc9-11ed-bfe3-dac502259ad0.png

c69db97e-8cc9-11ed-bfe3-dac502259ad0.gif

c6b5e92c-8cc9-11ed-bfe3-dac502259ad0.jpg

2.定位误差

前面的控制都假设定位是完美的,不存在定位误差。如果加入定位误差,纯跟踪算法的表现会怎么样呢?

我们用随机数来模拟定位误差,定位误差一般是正太分布的,因此用正态分布函数std::normal_distribution生成随机数,均值总是取0,标准差决定了误差的范围。

首先取小的标准差—— 1mm,无人车的表现如下图所示,无人车的跟踪效果比较好。

c6c589cc-8cc9-11ed-bfe3-dac502259ad0.png

但是前轮转角的变化却非常剧烈,如下图所示。这还仅仅是1mm左右的误差,这在实际中是几乎不可能达到的。

c6e30466-8cc9-11ed-bfe3-dac502259ad0.png

标准差为1cm时的表现如下图所示,已经产生了明显的横向跟踪偏差。

c6ff45f4-8cc9-11ed-bfe3-dac502259ad0.png

此时前轮转角已经惨不忍睹了,如下图所示,这还是1cm左右的误差,实际中无人车的定位要达到1cm也是很困难的。

c72033ae-8cc9-11ed-bfe3-dac502259ad0.png

标准差为5cm时的表现如下图所示,这个误差是一般室外卫星定位的误差范围,也就是常见的误差,此时无人车彻底无法跟踪。

c731056c-8cc9-11ed-bfe3-dac502259ad0.png

不仅前轮转角更疯狂了,而且由于横向偏差已经超过了前视距离d l ,局部目标已经出现在无人车侧面了,导致无人车完全无法跟踪了,如下图所示。

这说明纯跟踪算法对定位误差是极其敏感的,在实际应用时这是个非常严重的问题。

c74351f4-8cc9-11ed-bfe3-dac502259ad0.png

算法理解

为了易于理解纯跟踪算法,笔者用Mathematica设计了一个小程序,你可以用鼠标拖动目标点(绿色点),并观察前轮的转角,如下图。

目标点是纯跟踪算法中的核心概念,这个目标点是人为设计或者选择的。跟踪性能的好坏不仅取决于控制参数的选择,目标点的选择也起到重要的作用。

当目标点选取的不好时,例如距离无人车当前位置过近,则会出现控制量剧烈变化。

c752bedc-8cc9-11ed-bfe3-dac502259ad0.gif

你也可以用鼠标拖动无人车的参考点,观察前轮的转角,如下图。从图中可以发现,在距离目标比较近时,纯跟踪算法的表现很糟糕,参考点位置有一点点改变都会导致前轮转角剧烈变化。

但是无人车的定位本身是必然存在偏差的,所以纯跟踪算法在前视距离短时稳定性并不好。

c8880c8a-8cc9-11ed-bfe3-dac502259ad0.gif

cuboid[center_: {0, 0}, dim_, radius_: 0] := Rectangle[center - dim/2, center + dim/2, RoundingRadius -> 0.01];
move2D[shape_, pose_] := Translate[Rotate[shape, pose[[3]], {0, 0}], pose[[1 ;; 2]]];
L = 1.64; 
[Delta]max = 25 Degree ;
bicycle[pose_, [Delta]_] := {
  rearWheel = cuboid[{0, 0}, {0.4, 0.1}, 0.1];
  frontWheel = move2D[rearWheel, {L, 0, [Delta]}];
  trunk = cuboid[{L/2, 0}, {L, 0.02}, 0.1];
  move2D[{Blue, frontWheel, rearWheel, Black, trunk, Red, Circle[{L, 0}, 0.22, {0, [Delta]}]}, pose]
  };
Manipulate[
 pose = Flatten@{p, [Theta]};
 dirvec = AngleVector[[Theta]];
 vertvec = {-dirvec[[2]], dirvec[[1]]};
 p1 = p + L*dirvec;
 dl = Norm[goal - p];
 [Alpha] = VectorAngle[goal - p, {1, 0}] - [Theta];
 [Delta] = ArcTan[2*L*Sin[[Alpha]]/dl];
 R = Abs[dl/2/Sin[[Alpha]]];
 c = p + Sign[[Alpha]]*R*vertvec;
 a1 = -VectorAngle[p - c, {1, 0}];
 a2 = -VectorAngle[goal - c, {1, 0}];
 Graphics[{bicycle[pose, [Delta]], Point[c], AbsoluteThickness[1], 
  Line[{p1, p1 + AngleVector[[Theta] + [Delta]]*0.3}], AbsoluteDashing[{6, 3}], Black, Line[{p, p1 + dirvec*0.3}], Gray, Line[{p, c}], Line[{c, goal}], Line[{goal, p}], Line[{c, p1}], Orange, Circle[c, R(*,{a1,a2}*)], AbsolutePointSize[8], White, Point[p], Red, Point[c], Darker@Green, Point[goal], Red, Text[Style[ "[Delta]=" <> ToString@Round[[Delta]*180/Pi, 0.01] <> "[Degree]", FontSize -> 16], p1 + dirvec*0.5], Text["!(*SubscriptBox[(d), (l)])=" <> ToString@Round[dl, 0.01], (p + goal)/2 + {0, 0.1}]}, 
 ImageSize -> 600, PlotRange -> 1.5 {{-1.5, 1.5}, {-0.5, 1.5}}, 
 Axes -> False], {{p, {0, 0}}, Locator, Appearance -> Graphics@Point[{0, 0}]}, {{goal, {0.16, 0.12}}, Locator, Appearance -> Graphics[{Green, Point[{0, 0}]}]}, {{[Theta], Pi/6}, 0, 2 Pi, 0.01}, TrackedSymbols :> True, Initialization :> {goal = {0.16, 0.12}}]

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 跟踪算法
    +关注

    关注

    0

    文章

    41

    浏览量

    13221
  • 自动泊车
    +关注

    关注

    0

    文章

    106

    浏览量

    14300
  • 无人车
    +关注

    关注

    1

    文章

    316

    浏览量

    37612

原文标题:纯跟踪算法用于无人车自动泊车

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    基于FD-SST 的无人机目标跟踪系统的设计与实现|技术集结

    应用实现功能1.本应用基于睿擎派,实现了对无人机目标的实时跟踪,并将跟踪结果用于驱动两轴转台完成自动指向。主要功能包括:使用FD-SST
    的头像 发表于 12-10 19:32 372次阅读
    基于FD-SST 的<b class='flag-5'>无人</b>机目标<b class='flag-5'>跟踪</b>系统的设计与实现|技术集结

    文远知行瑞士业务再突破:Robotaxi获无人牌照,2026年将面向公众开放服务

    是瑞士颁发的首张无人Robotaxi牌照。根据许可,文远知行Robotaxi将作为iamo(Intelligent Automated Mobility)智能自动化出行试点项目的重要组成部分开展
    的头像 发表于 11-20 17:48 491次阅读
    文远知行瑞士业务再突破:Robotaxi获<b class='flag-5'>纯</b><b class='flag-5'>无人</b>牌照,2026年将面向公众开放服务

    看似简单的自动泊车需要哪些技术支撑?

    [首发于智驾最前沿微信公众号]要实现自动泊车,背后需要哪些技术作为支撑?自动泊车作为现在很多车主应用非常多的一项功能,看似只是简单的入库操作,但想要完美入库,其实需要非常多的技术支持。
    的头像 发表于 10-30 09:09 480次阅读
    看似简单的<b class='flag-5'>自动</b><b class='flag-5'>泊车</b>需要哪些技术支撑?

    新能源汽车自动泊车超声波传感器铝电解电容供电稳定

    新能源汽车的自动泊车系统作为智能化驾驶的重要功能,其稳定性和可靠性直接影响用户体验。而超声波传感器作为自动泊车系统的核心感知部件,其供电稳定性尤为关键。铝电解电容因其优异的电气性能和成
    的头像 发表于 10-28 16:25 397次阅读
    新能源汽车<b class='flag-5'>自动</b><b class='flag-5'>泊车</b>超声波传感器铝电解电容供电稳定

    易控智驾推动超450台无人矿卡落地

    在山东邹城,超过20台无人矿卡已持续稳定运行超过900天,作为国内首批规模化落地“电”与“无人化”融合的项目,它标志着易控智驾开启了矿山运输绿色智能变革的新篇章。
    的头像 发表于 09-04 12:31 1019次阅读

    【开发实例】基于GM-3568JHF开发板安装OpenCV并使用视频目标跟踪 ( CamShift)

    在计算机视觉领域,视频目标跟踪是一个非常重要的任务。视频目标跟踪广泛应用于监控、自动驾驶、人机交互等多个领域。OpenCV提供了多种目标跟踪
    的头像 发表于 09-02 08:04 474次阅读
    【开发实例】基于GM-3568JHF开发板安装OpenCV并使用视频目标<b class='flag-5'>跟踪</b> ( CamShift)

    智能无人不跑偏的核心是什么?

    为智能无人提供可靠支持,推动自动驾驶实用化。     均衡性能:无人的经济适用型控制核心   智能
    的头像 发表于 08-19 14:31 382次阅读

    比亚迪推L4级智能泊车!企业兜底,技术碾压竞对?

    电子发烧友网报道(文 / 吴子鹏)日前,比亚迪汽车在官方微博宣布,在全球率先实现媲美 L4 级的智能泊车,官方承诺为安全兜底。   智能泊车,更多企愿意称之为自动
    的头像 发表于 07-11 00:27 5822次阅读

    同步电机在位置随动系统中跟踪误差的分析与研究

    跟踪最终位置过程的不确定性和传统PID控制器超调量大,调节时间长的缺点,设计了Fuzzy-LQR-PD控制算法来提高位置跟踪精度,通过Matlab软件对该算法进行仿真,并由STEP7编
    发表于 06-23 07:07

    无人机低延时目标跟踪识别智算系统

    进入道理模式,方便安装在无人无人船、机器狗等多种载具。 跟随模式:在水平方向,云台自动跟随飞行棋方向同步转动, FPV模式:云台随飞行器翻滚的方向同步转动,获得第一人称飞机视角,输
    发表于 03-06 15:48

    建智慧仓储物流,除了无人叉车,还要四向,才会更好?

    一、应用场景 无人叉车 能够7*24小时不间断作业,物流搬运效率得到提升。 四向 用于仓库托盘货物的自动搬运和输送,自动存取货、
    的头像 发表于 02-07 16:38 626次阅读
    建智慧仓储物流,除了<b class='flag-5'>无人</b>叉车,还要四向<b class='flag-5'>车</b>,才会更好?

    迅为瑞芯微RK3562开发板/核心板应用于人脸跟踪、身体跟踪、视频监控、自动语音识别

    可应用于人脸跟踪、身体跟踪、视频监控、自动语音识别(ASR)、图像分类驾驶员辅助系统(ADAS)、车牌识别、物体识别等。 iTOP-3562开发板/核心板采用瑞芯微RK3562处理器,
    发表于 01-18 10:45

    华为乾崑智驾泊车代驾VPD全球首个机场商用试点发布

    近日,深圳机场自主泊车代驾启动测试发布仪式暨自主泊车规模化应用技术研讨会隆重举行。本次是华为乾崑智驾泊车代驾VPD(ValetParking Driver)在全球首个机场的商用试点,旨在通过智能驾驶技术提升机场停车、找
    的头像 发表于 01-14 11:04 1392次阅读

    华为乾崑VPD泊车代驾深圳机场商用试点发布

    试点正式落地深圳机场。 华为乾崑VPD泊车代驾系统作为智能驾驶技术的重要应用之一,旨在通过先进的算法和传感器技术,实现车辆的自主泊车和找功能。此次在深圳机场的商用试点,不仅是对该系统
    的头像 发表于 01-14 10:36 1071次阅读

    端到端在自动泊车的应用

    与城市环境的复杂性和高速公路驾驶的风险相比,停车场景的特点是低速、空间有限和高可控性。这些特点为在车辆中逐步部署端到端自动驾驶能力提供了可行的途径。最重要的是自动泊车对时间不敏感,而自动
    的头像 发表于 12-18 11:38 1492次阅读
    端到端在<b class='flag-5'>自动</b><b class='flag-5'>泊车</b>的应用