当前位置:网站首页>了解CV和RoboMaster视觉组(五)运动建模与预测
了解CV和RoboMaster视觉组(五)运动建模与预测
2022-08-09 03:34:00 【HNU跃鹿战队】
5.3.2.预测方法
运动预测是自瞄击打装甲板的关键一步,如果没能预测目标的移动,那么我们的解算输出用于只会跟在目标的屁股后面,使得打出的弹丸始终落后于目标,扑向空气划过一道淡绿色的曲线。同时,运动预测和运动学建模也是目标跟踪领域的一个研究方向,利用此技术能够提出精确的区域提议,使得候选区域数目降低,加快处理速度。
我们这里将按照循序渐进的原则,介绍运动预测的发展和方法。
朴素方法:简单物理规律的应用
这种算法就如标题一样简单,我们直接根据物理规律对物体的运动进行预测。假设物体处于匀速直线运动或匀加速直线运动,利用两个时刻物体的位置差求差分得到速度,或进一步对速度求差分得到加速度,用此值乘上需要超前的预测时间(超前量),就可以得到目标物体在这段时间之后所处的位置了。
倘若只使用两帧之间的位置差分,噪声的影响可能会比较大,可以考虑使用多帧的滑窗进行直接平均、或EMA(指数加权平均)等加权平均方法,尽量降低噪声的影响。
从上面的描述就可以发现,这种模型只对运动状态变化较慢的目标有效,即使我们是算法处理帧率再高计算得到的差分再准确,那也只是基于匀速或匀加速模型得到的结果;虽然对于有任意速度或加速度的物体在短时间内我们都可以将其建模为CV或CA,然而一旦目标的运动状态变化速度超过了可以接受的上限值或预测的时间超过了上限值,准确率都会大幅度下降。(不过话说回来,所有预测方法都是有一定的约束的)

KF及其优化
使用卡尔曼滤波器或其他观测器,都是为了达到消除噪声从而获取更好的位置估计的目的,这样计算出来的差分和二阶差分等相对前一种方法会更加可靠。
若采用匀速模型,则在状态变量中加入速度,update步应该分为两部分:
- 使用于更新状态变量的状态转移矩阵中对应速度的位置的值为 Δ t \Delta t Δt,即两帧之间的时间差
- 增加一个新的状态转移矩阵,在对应的位置上设置的值为 Δ T \Delta T ΔT,这是需要超前的预测时间。
第一步得到的状态变量会一直继续使用下去,这将作为当前位置和速度的最优估计并不断保持更新,和前面朴素方法介绍的多帧平均的作用一致;而第二部分计算出来的值,是用来提供超前位置的,每次都根据第一步的结果重新计算。
对于协方差矩阵的设置,我们从两个极端入手考虑:若将预测值的速度协方差设定的非常大,则我们几乎只相信测量值,即两帧之间的差分值,那么这就不是一个匀速直线运动了,得到的融合结果可能会呈现锯齿状,需要稍微进行平滑以获得连贯一些的控制数据;将与预测值的协方差设定的很小的时候,那么我们会更相信预测值,认为其是一个近似的匀速直线运动。
当然,我们也可以把加速度加入状态变量中,用二阶差分来计算加速度,同样可以采用前面平均速度的方法来平滑加速度。不过二阶差分本身就会带来较大的噪声,从观测器的状态反馈权衡的角度考虑,相当于给了一个很大的增益,其带宽会扩展但是容易被高频噪声所干扰。
上述的方法本质上还是基于匀加速或匀速这种较好处理的模型,只不过采用观测器尽量减少噪声,还有一些稍微复杂一些的模型采用了不同的假设和约束,使得预测的效果更好。我们在此简要列出几个供读者进一步参考。
首先很容易想到的就是其他constant模型:既然有平动那肯定也有转动的匀速模型和匀加速模型吧?这就是Constant Turn和Constant Angular acceleration。那能不能把转动和平动结合起来?肯定能啊,这就有了CTRV、CSAV、CCA,这些模型在自动驾驶的运动学建模中都用得非常广泛。
再比如将加速度或速度建模为服从一定分布的思想也是很巧妙的。singer模型假设目标的加速度符合一个 [ − a m a x , a m a x ] [-a_{max},a_{max}] [−amax,amax]的均值分布,其服从一阶随机微分方程,可以用目标机动时间常数衡量一段时间内加速度的相关性。哈工威的视觉有一场圆桌介绍了他们的singer模型,参考:哈工大威海hero:神经网络优化与运动预测算法分享。而当前模型(current model)考虑了加速度的均值,不像前者将加速度均值设为零,其加速度是一个条件分布,将根据一段时间内观测到的加速度均值进行计算更新,因此又被成为均值自适应加速度模型。
最后就是不同模型的集大成者,可以看作机器学习中的集成方法——IMM(Interact multi model),它综合了多个单一模型(就是上述的那些),分为四步进行运动预测和更新,相信已经学习过卡尔曼滤波的你应该大概能猜想到他的流程,IMM最大的不同就是增加了第一步,让模型进行交互计算相互转移的概率:
- 模型交互,计算目标运动模型从一种模型 i i i切换到另一种模型 j j j的概率 μ i j μ_{ij} μij(一会看了后面三步会更加清晰),然后为所有模型两两计算转移概率并乘以每个模型的输出得到新一轮的初始状态。
- 以第1步得到的初始状态(1个)作为每个单一模型的输入,然后用各自的模型进行预测和量测更新。这一步和KF完全相同,而且实践中大部分单一模型的状态转移和融合都是使用EKF或UKF。
- 在第2步更新完之后,利用在更新时每个模型预测值和测量值的差值,计算每个单一模型的似然函数值进而得到该模型的置信度。也就是说,单一模型的预测值和真值(其实是测量值)差距越大,说明这个模型和实际情况相差的越远。
- 根据第3步得到的每个模型的置信度(权重),对所有模型的结果进行加权融合得到输出。
IMM实际上就像一个超大杯的KF,里面有许多小KF,小KF的输出又再次在大KF中进行融合,应该算是一种stacking ensemble,每个小模型的输出再投入一个模型中进行集成。比较巧妙的设计就是IMM的第一步,它没有直接用上一轮迭代中的输出值作为新一轮迭代的初始状态而是添加了一个模型转移概率,使得不同单一模型之间的交互更充分。归根到底,IMM也是一种贝叶斯方法,利用先验信息和后验估计来获取极大似然估计。若希望看到详细的数学推导,请自行查找相关的论文。

基于运动行为和环境交互
这种建模方法就是考虑更多的、约束性更强的先验信息,比如汽车在十字路口要么转弯要么直行,行人过马路会走斑马线(虽然有人不走);在比赛中的例子也有很多,机器人往公路区走肯定时要飞坡了;往环形高地走必然是要上坡了;检测到小陀螺状态,那就是处在对方机器人处于自转状态了…
对于这些先验信息,我们可以用状态机的方式进行建模,一旦判断进入某种状态,就采用一种应对方式。虽然看起来简单,但如何确定处于哪种特定的状态也是其编程难点。

RNN
虽然说遇事不决量子力学,但在算法的世界里,要是难以建模怎么办?神经网络呗!将目标的运动离散化,得到的就是在空间位置中的一个序列,那么我们只需要将之前位置的三维向量 [ x , y , z ] [x,y,z] [x,y,z]作为输入(也可以添加其他信息比如速度和加速度,但是笔者认为速度和加速度这么简单的、通过差分运算就能得到的信息,网络很容易就可以学习到),让网络输出一段时间后的位置即可。
我们也可以结合上一种方法,让RNN输出当前的运动行为和状态,然后再用模型的方法进行进一步的计算;或是反其道而行之,将可能的运动行为输入RNN中,使得RNN的预测输出更为精确。不过显而易见,想要融合更多信息,代价就是数据集获取和制作难度的上升和运算速度的下降。

边栏推荐
猜你喜欢
随机推荐
荣耀路由(WS831)做无线中继时LAN网段与WAN网段冲突解决方法
状态机使用小结
发明时代,「幂集创新」事关你我
23 Lectures on Disassembly of Multi-merchant Mall System Functions-Platform Distribution Level
【Redis底层解析】跳跃表
wift3.0 set the navigation bar, title, font, item color and font size
leetcode-23. Merge K ascending linked lists
项目中'说到做不到'的个人分析
leetcode 33/81. 搜索旋转排序数组
leetcode 2021春季挑战赛 1. 采购方案
leetcode 5709. 最大升序子数组和
Redis的过期策略和淘汰策略
redis的四种模式
How to resolve the conflict between LAN segment and WAN segment when Honor router (WS831) is used as wireless relay
作为常用的荧光标记试剂Cy5 亚磷酰胺(CAS号:182873-67-2)有哪些特点了?
MATLAB | 比生命游戏更自由的生命游戏
【图形学】20 基础纹理(一、单张纹理)
phpStdudy的下载和DVWA的搭建
hcip MPLS 实验
项目管理-挣值分析方法学习总结









