我有一个关于视觉SLAM的大学生创新项目,原本打算使用Kinect或者双目摄像头作为采集装置,但是学校太抠门,只给一点点经费,无奈只得用单目摄像头。由于申报的课题是《基于视觉SLAM的室内导航小车》,在经费有限的情况下,打算使用ros系统,把树莓派作为下位机,让树莓派携带摄像头采集图像,传给上位机;让上位机处理图像并给下位机发送指令控制小车运动。
最开始的工作是标定相机,以获取相机的内参。
1.安装ROS系统的PC机一台。
(ROS系统安装教程:https://blog.csdn.net/qq_31733915/article/details/79825122 )
2.USB摄像头一个。
3.打印一个黑白相间的棋盘格,并贴在硬板纸上。
1.打开Ubuntu,打开终端,输入:
$ roscore
此时ROS系统就运行起来了。
2.打开另一个终端,输入:
$ rosdep install camera_calibration
从而获取依赖项并编译驱动程序。
3.输入:
$ cd catkin_ws/src
$ git clone https://github.com/bosch-ros-pkg/usb_cam.git
$ cd ..
$ catkin_make
从而安装驱动。
4.由于本人使用的是PC,默认打开的摄像头是电脑自带的摄像头;为了打开usb摄像头,需要修改launch文件。使用vim将video0改为video1,然后保存退出。
$ cd src/usb_cam/launch
$ vim usb_cam-test.launch
$ roslaunch usb_cam usb_cam-test.launch
如果打不开且出现三行红字,大意是找不到usb_cam-test.launch,输入以下指令来运行相关脚本文件:
$ source devel/setup.bash
$ roslaunch usb_cam usb_cam-test.launch
$ rostopic list
发现下列两行信息。
/usb_cam/camera_info
/usb_cam/image_raw
然后就可以输入设置标定指令:
$ camera_calibration cameracalibrator.py --size 8x6 --square 0.029 image:=/usb_cam/image_raw camera:=/usb_cam
其中size 8x6代表棋盘大小,square 0.029代表正方形边长为0.029米。
7.尽量将摄像头画面中每一处都拍摄到棋盘。等到calibrate按键亮起,按下该按键完成标定。
8.按下SAVE保存标定文件。终端上会自动显示保存的路径,最后就得到摄像头的内参了。
参考文献
[1]: 胡春旭.《ROS机器人开发实践》. 北京:机械工业出版社, 2018.5.