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

本文详细解释了如何在SIFT计算描述子的上下文中计算横向误差,这是路径跟踪控制的一个关键指标。通过比较行驶轨迹与参考路径上的点,找到最近点并运用几何公式来精确计算误差。代码示例展示了在MATLAB中实现这一过程,涉及对参考路径和行驶轨迹点的迭代搜索以及边界条件处理。此外,还讨论了采样间隔对计算可靠性的影响,强调了将其设置为控制系统采样间隔的重要性。
摘要由CSDN通过智能技术生成

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

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

4f6e90a149a03b478dc8130b168631b7.png

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

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

8cf3d12158ab2a7dd6e253260f42dc9b.png

(所有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

源码下载

计算结果:

8a9295a64b97d3df78f6ed38e65f5ea2.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值