视觉定位与感知期末大作业报告
一、作业要求
本课程大作业内容是使用自己的手机或相机,对同一个场景,分别在三个角度拍摄三张图像,最终获得三张图像拍摄时的姿态和位置,以及图像中特征点的三维坐标信息,并评估和验证所实现算法的正确性和精度性能。
二、准备工作
在实验开始前,我们需要准备如下东西:
- MATLAB R2018B:考虑到作业过程中部分题目需要自己手动实现,故用MATLAB来实现比较简单。
- OpenCV:OpenCV具有很多库函数,对于不需要自己实现的部分用起来十分便捷。
- ROS_Melodic:本来可以做很多东西的,但是在这里只是用来做摄像头标定,因为以前用过,所以选择直接用这个来标定摄像头,但是安装ros过程比较麻烦,没有的话也可以使用MATLAB或者OpenCV相应的包进行摄像头校准。
- 其他物件:USB摄像头,IPad(iPad就用来做棋盘标定板和aruco目标检测)。
三、实验步骤
1. 实现思路
算法实现的思路是,首先选择其中两张图像,通过特征点匹配基础矩阵的求解得到两个拍摄视角的相对位姿,然后使用三角化得到对应特征点的三维点云。对于第三张图,我们可通过相机位姿估算的方式求解其姿态和位置。最后我们可以采用非线性最小二乘法对稀疏三维点和三个相机 Pose 同时优化,得到最终结果。
2. 摄像头标定
本次作业使用ROS对USB摄像头进行标定,主要步骤如下:
- 安装usb_cam驱动,并编译完成
- 对usb_cam中的usb_cam-test.launch进行修改,具体是将 “”中的video0改成与所用usb_camera相对应的video序号,在我电脑中他的序号为video2,所以我把他改成了video2。
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video2" />
<param name="image_width" value="640" />
<param name="image_height" value="480" />
<param name="pixel_format" value="yuyv" />
<param name="camera_frame_id" value="usb_cam" />
<param name="io_method" value="mmap"/>
</node>
<node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
<remap from="image" to="/usb_cam/image_raw"/>
<param name="autosize" value="true" />
</node>
</launch>
- 检测usb_camera使用情况,正常的话弹出一个窗口,其中是摄像头图像。