视觉进阶培训1-运动预测
视觉进阶培训1-运动预测
三维弹球,准确的来说有点像气体分子的运动,可以看成空间中有一个小球(无重力),以随机的速度在空间中游动,碰到边缘会反弹,而你要做的就是预测小球一定时间之后的位置。
依赖
1 | git clone https://github.com/newsun-boki/3dBall.git |
1 | roscore |
任务说明
必要知识
已知小球小球当前时刻的三维坐标,预测小球一定时间之后所处的位置(反弹部分不作要求)。节点图如下。
获取小球当前位置。
- 当运行
rosrun random_ball simu.py
后,通过rostopic list
可以查询到有小球当前位置话题/position
。 - 发送内容为
- 发送的消息格式为
geometry_msgs/PointStamped
,关于数据格式的了解见roswiki。 - 发送频率大概是450hz
这里需要重新写一个预测节点,并在节点内创建一个Subscriber
用于订阅/position
话题。
预测
使用各种卡尔曼滤波(如EKF)的手段进行预测。通过小球之前的位置预测小球一段时间之后的位置,具体预测多久可自行决定。这里需要你学习一些卡尔曼的相关知识,使用Eigen库辅助来完成一些数学运算,尽量不要使用opencv自带的卡尔曼滤波。推荐B站DR_CAN的卡尔曼滤波相关讲解视频.但注意简单的卡尔曼是线性的,所以需要用一些如扩展卡尔曼等。
虽然卡尔曼是一个滤波算法,但由于其方法特性同样可以用来做预测。还有一个卡尔曼用于预测小球的讲解视频(这个视频给了我这次任务灵感,虽然我并没有看)
RVIZ显示
这里你需要大概了解rviz的使用方法。rviz可以接受话题里的消息并将其显示出来,你需要做的就是将你预测的结果发布为PointStamped
格式并使用rviz显示,如果不了解结果可以参考simu.py
里的实现。将你的预测结果用换一个颜色的小球显示出来就好。
备注
rosrun random_ball simu.py
这个命令ctrl+c
似乎停不下来,你可以使用ctrl+z
将其挂到后台暂停它,然后通过jobs
查看后台任务,并使用kill %num
杀死它,num
为其在jobs
查看时任务对应的序号。- 由于物体是随机运动,所以预测一段之后的时间不能过长,当然也不能过短。至于是多少,你看着觉得多少合适就多少。
- 评价预测好坏主要有两个指标
- 收敛速度。包括当小球从静止到运动需要多久才能开始准确预测,以及当小球撞击边缘速度发生突变时尽量收敛到正确方向的时间(可以采取一些如当检测速度突变就reset卡尔曼的手段)
- 预测结果的稳定性。在实际控制当中,为了使电机不震颤,视觉的预测结果需要尽量的平滑稳定,即预测点不要乱抖。
- 如果你觉的这个弹球模型好玩,并且看懂了弹球代码,你可以编写
simu.py
程序自己往里面多加几个球并加上物理体积的碰撞。或者我一总觉得这个碰到边缘没有音效怪怪的,你可以自己往里面加点音效。 - 为了方便查看,这个README我也会发到博客上。
- Post title:视觉进阶培训1-运动预测
- Post author:newsun-boki
- Create time:2021-11-25 14:38:58
- Post link:https://github.com/newsun-boki2021/11/25/rm-train-1/
- Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.