在路径跟踪控制的论文中,我们常会看到判断精确性的指标,即横向误差和航向误差,那么横向误差和航向误差如何获得?

在前几期代码详解中,参考路径和实际轨迹均由To Workspace模块导出,如图所示:

那么怎么利用这些量计算误差?

计算横向误差最简单的方案,当然是sqrt((x1-x0)^2+(y1-y0)^2),但是这样计算出来的值是行驶轨迹上的点与参考路径上的点之间的距离,并非车辆与参考路径上距离车辆最近的点之间的距离,也就不符合横向误差的定义。而且如果参考路径和行驶轨迹的采样间隔不同,这样的计算方式就更加不可靠。比较不幸的是前几期代码中,To Workspace模块采用的都是默认采样间隔,即圈中的项为-1,这种情况下参考路径和行驶轨迹的采样间隔就是不同的。

(所有To Workspace的采样间隔都建议改成控制系统的采样间隔,在前几期代码中,该值为0.05,我之前忘记改了)

横向误差的定义可见:

Bai G, Liu L, Meng Y, et al. Path tracking of wheeled mobile robots based on dynamic prediction model[J]. IEEE Access, 2019, 7: 39690-39701.

在此给出计算横向误差的代码:

for i=1:1:15507 %该数值为行驶轨迹点的数量,可在workspace查看

xr0=x1(i,1);

yr0=y1(i,1);

xrdd=10000;

xrdk=0;

for ir=1:1:986 %该数值为参考路径点的数量,可在workspace查看

xrd(ir)=abs(sqrt((x0(ir,1)-xr0)^2+(y0(ir,1)-yr0)^2));

if xrd(ir)

xrdd=xrd(ir);

xrdk=ir;

xr1=x0(ir,1);

yr1=y0(ir,1);

end

end

if xrdk>1&&xrdk<986

xprd21=xrd(xrdk-1);

xprd22=xrd(xrdk+1);

if xprd21

xr2=x0(xrdk-1,1);

yr2=y0(xrdk-1,1);

else

xr2=x0(xrdk+1,1);

yr2=y0(xrdk+1,1);

end

elseif xrdk==1

xr2=x0(xrdk+1,1);

yr2=y0(xrdk+1,1);

else

xr2=x0(xrdk-1,1);

yr2=y0(xrdk-1,1);

end

an=(yr2-yr1);

bn=(xr2-xr1);

cn=bn*yr1-an*xr1;

e(i,1)=abs(an*xr0-bn*yr0+cn)/sqrt(an^2+bn^2);

if xrdk<986

Tmp=(y0(xrdk,1)-y0(xrdk+1,1))*xr0+(x0(xrdk+1,1)-x0(xrdk,1))*yr0+x0(xrdk,1)*y0(xrdk+1,1)-x0(xrdk+1,1)*y0(xrdk,1);

else

Tmp=(y0(xrdk-1,1)-y0(xrdk,1))*xr0+(x0(xrdk,1)-x0(xrdk-1,1))*yr0+x0(xrdk-1,1)*y0(xrdk,1)-x0(xrdk,1)*y0(xrdk-1,1);

end

if Tmp<=0

e(i,1)=-e(i,1);

end

end

源码下载

计算结果:

对于航向误差,则需要对仿真系统进行修改,且待下期分解。

sift计算描述子代码详解_代码详解——如何计算横向误差?相关推荐

  1. sift计算描述子代码详解_浅谈SIFT特征描述子

    SIFT是我接触最早的图像局部特征描述子之一,其实最初,始终觉得局部特征描述子是些非常玄虚的东西.对于SIFT,这种感觉更是尤为强烈,"尺度空间""拉普拉斯高斯算子(Lo ...

  2. sift计算描述子代码详解_SIFT解析(三)生成特征描述子

    以上两篇中检测在DOG空间中稳定的特征点,lowe已经提到这些特征点是比Harris角点等特征还要稳定的特征.下一步骤我们要考虑的就是如何去很好地描述这些DOG特征点. 下面好好说说如何来描述这些特征 ...

  3. sift匹配描述子距离判断选择更好的匹配点

    opencv中自带的sift函数,就不过多解释了. 网上太多的大咖,已经都快写烂了,各种函数调用很简单的啦.下面我说一种关于,描述子匹配时,距离判断从而选择更加优良的点! #include<op ...

  4. java二叉树详解_二叉树详解

    树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.本篇 ...

  5. java 代码整洁快捷方式_代码整洁之道:你的代码是否足够优雅、整洁、易懂?...

    普通的工程师堆砌代码,优秀的工程师优雅代码,卓越的工程师简化代码.如何写出优雅整洁易懂的代码是一门学问,也是软件工程实践里重要的一环.下面从注释.命名.方法,并发等视角简单给出了部分最佳实践.相信每一 ...

  6. java 代码书写规范_代码书写规范和命名规范

    上一篇给大家分享了一下,关于文档编写的几个概念.这篇文章阐述如果编写代码书写规范以及命名规范文档.[以java语言为例] 1.代码书写规范 代码书写规范,能够让不同的人,写出相同风格的代码.很多人都看 ...

  7. java 代码坏味道_代码中的坏味道

    前言 在日常生活中,当我们买的水果放久了之后会发出一种难闻的气味("坏味道"),这个时候我们就应该把它扔掉.同样,代码也有"坏味道",当然确定什么是和不是代码& ...

  8. python代码自动格式化_代码的自动格式化

    代码格式化是一个在软件开发过程中值得一提的话题. 所谓代码格式化就是说,程序员在书写代码的过程中或者完成代码开发后对代码书写格式排版的调整,使得已经完成的代码变的更美观整洁也更具有可读性,也能增加完成 ...

  9. java代码重构工具_代码重构什么意思 Java代码重构的几种模式

    指对软件代码做任何更动以增加可读性或者简化结构而不影响输出结果. 软件重构需要借助工具完成,重构工具能够修改代码同时修改所有引用该代码的地方.在极限编程的方法学中,重构需要单元测试来支持. 在软件工程 ...

最新文章

  1. java 关键字(面试题)
  2. 【Groovy】map 集合 ( map 集合操作符重载 | + 操作符重载 | 代码示例 )
  3. 恢复删除的Linux文件
  4. linux设备驱动归纳总结(八):1.总线、设备和驱动【转】
  5. 使用echarts(四)定时刷新图表
  6. nyoj-488-素数环
  7. 使用nrm管理npm源的切换
  8. jenkins+ansible+gitlab
  9. 把 14 亿人拉到一个微信群,如何实现?
  10. 程序带来这些新的机会,创业新浪潮才刚开始!
  11. 《Processing SPARQL queries over distributed RDF graphs》——读书笔记
  12. (1) 微信公众号注册
  13. seurat质控Warning: Feature names cannot have underscores (‘_‘), replacing with dashes (‘-‘)
  14. c语言日历时钟编程,基于DS1302的日历时钟(1602液晶显示DS1302时钟)C语言程序设计...
  15. uni-app运行在手机或模拟器上(使用雷电模拟器)
  16. [ Java学习 ] 包语句 package等语句的汇总整理
  17. 单片机 怎调用显示屏字库_51单片机示波器制作(12864显示带字库)
  18. 如果格局决定了人生,那么到底什么决定了格局?
  19. 阿里巴巴/招行信用卡中心21届实习面试知识点汇总
  20. 酷狗音乐Top500榜单爬取

热门文章

  1. php中接口调用方法的区别,phpcms常用接口调用方法
  2. esxi安装ghost win7_针对Win7远程桌面的攻击实践(完美)
  3. 鸿蒙 github harmony,鸿蒙HarmonyOS之AbilitySlice间导航
  4. linux编译部署,linux下编译并部署Apache Apollo
  5. python cookbook 豆瓣_备受好评的20本python图书,不用到处找了!
  6. linux的每次IO大小控制,linux文件io缓冲
  7. NPM使用淘宝NPM镜像的使用方法汇总
  8. linux之cut命令详解
  9. LISP 圆孔标记_lisp使用说明
  10. alibaba cloud 打包_阿里也上VS Code船了,发布Alibaba Cloud Toolkit插件