《SVO: Fast Semi-Direct Monocular Visual Odometry》
一、摘要
- semi-direct 半直接
- 减小了特征提取的量
- 匹配的运动估计更鲁棒
- 直接从pixel intensities(像素强度)操作
- 在高帧速率下得到subpixel precision(亚像素精度)
- models outlier measurements (建模异常值来估计异常点)
二、引言
- 将基于特征的方法(跟踪多个特征、并行跟踪和映射、关键帧选择)的优点因素与直接方法的准确性和速度相结合。
- 介绍了目前视觉里程计分为两类:基于特征的方法(提取图像特征,在连续的帧中使用不变特征描述子)和直接法(从图像中的强度值估计结构和运动,对图像的强度值进行操作,因此可以节省特征检测和不变描述子计算的时间)。
- svo是在基于特征的方法上加入了直接法中的局部强度梯度幅值和方向。
用自己的摄像头运行SVO
用自己的摄像头跑一下。
对摄像头进行标定:https://blog.csdn.net/u013004597/article/details/51965940
https://github.com/ethz-asl/ethzasl_ptam(下载atan模型源码)
将标定好的数据代替param里的数据
cam_model: ATAN
cam_width: 640
cam_height: 480
cam_fx: 0.924472
cam_fy: 1.23685
cam_cx: 0.528626
cam_cy: 0.48276
cam_d0: 1.04981
启动launch文件(catkin_ws/src/rpg_svo/svo_ros)
<?xml version="1.0"?>
<launch>
<include file="$(find openni2_launch)/launch/openni2.launch" />
<node name="image_proc" pkg="image_proc" type="image_proc" ns="camera">
<remap from="image_raw" to="/usb_cam/image_raw" />
<remap from="camera_info" to="/usb_cam/camera_info" />
<remap from="image_mono" to="/mono_image" />
</node>
<node pkg="svo_ros" type="vo" name="svo" clear_params="true" output="screen">
<!-- Camera topic to subscribe to -->
<param name="cam_topic" value="/mono_image" type="str" />
<!-- Camera calibration file -->
<rosparam file="$(find svo_ros)/param/camera_atan.yaml" />
<!-- Default parameter settings: choose between vo_fast and vo_accurate -->
<rosparam file="$(find svo_ros)/param/vo_fast.yaml" />
</node>
</launch>
打开rviz:
rosrun rviz rviz -d catkin_ws/src/rpg_svo/svo_ros/rviz_config.rviz
效果不好,具体来说就是刚开始的特征点很多,初始化没问题,但是一旦开始移动相机 特征点就会明显减小甚至没有,rviz中显示相机跟丢,轨迹不再更新。
1.初始化没问题
2.在特征点多的视角下缓慢移动也没问题,可以出现轨迹3.一旦转移视角,特征点变少,不再更新位姿,相机根丢。
svo应该没法落地,另寻其他的VO吧