目的是在VIO导在航系统中加入CNN目标检测功能,简单起见,并没有把CNN检测结果放入BA中进行优化,也就是说CNN只借用VIO的定位结果而不对定位做贡献。思路如下:
1.通过ROS的message_filters::Synchronizer(ApproximateTime)同步接收如下topics:
A."/vins_estimator/keyframe_point",包含关键帧特征点在图像内坐标;
B."/vins_estimator/keyframe_point_camera",专门创建的topic,存储关键帧特征点在相机坐标系下的三维坐标;
C."/global_fusion/global_odometry",全局位姿,这里用了VINS-Fusion的global_fusion模块进行全局位姿融合,当然也可以换成pose_graph等的位姿;
D."/darknet_ros/bounding_boxes",darknet程序的detection结果;
E."/vins_estimator/extrinsic",相机到IMU的外参。
2.遍历当前所有bounding_boxes,对每一个b_box取其中点像素,记为点C。
3.取图像内所有特征点里到C最近的3个点,判断C是否在3个点形成的三角形之中,若是跳转到步骤4,若否选取第4个点继续尝试。
4. 计算C点到周围三点的距离作为权重, 加权平均计算C在相机系下三维坐标,再结合相机外参与全局位姿转换到世界坐标系,记为点c,通过ROS的MarkerArray在Rviz中点c的相应位置实时显示字符。
试验效果如下:
https://www.zhihu.com/video/1243310960330342400
这种方法比较容易实现,缺点是得到的Marker位置并不精确,只能作为粗估。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)