ROS摄像头的启动与参数标定

        市面上常见的一些二维摄像头(rgb),它的底层协议都是通用的,所以我们可以在ROS中用同一个驱动给它跑起来(常用传感器的ROS驱动可参考:http://wiki.ros.org/Sensors),如果摄像头支持,我们还可以在usb_cam功能包中对摄像头的一些参数进行修改。在ros有关于usb_camera的功能包,我们要先下载这个功能包,然后可以启动相应的launch文件来测试一下:

$sudo apt-get install ros-kinetic-usb-cam
$roslaunch usb_cam usb_cam-test.launch
$rqt_image_view

注:如果出现错误:[ERROR] [1667295079.427868713]: Cannot identify '/dev/video0': 2, No such file or directory——>原因可能是Ubuntu系统没有连接到笔记本的摄像头,关闭虚拟机,然后将usb控制器中的usb兼容性选到3.0并且勾选显示所有USB输入设备,开机之后就可以在虚拟机(M)->可移动设备中连接我们的笔记本摄像头了(我这里是Sunplus Innovation Integrated_Webcam_HD),然后再重新运行指令就可以了。
        启动成功后,使用以下命令可以查看当前系统中的图像话题消息:

$rostopic info /usb_cam/image_raw

        使用以下命令可以查看该图像消息的详细定义:

$rosmsg show sensor_msgs/Image

如果有Kinect深度相机,可以使用以下命令安装驱动,并且运行:

$sudo apt-get install ros-kinetic-freenect-*
$git clone https://github.com/avin2/SensorKinetic.git
$cd SensorKinect/Bin
$tar xvf SensorKinect093-Bin-Linux-x64-v5.1.2.1.tar.bz2
$sudo ./install.sh(在解压出来的文件夹路径下)

$roslaunch freenect_launch freenect.launch

如果是其他种的深度相机,那么驱动的方法还要去查询一下。

摄像头参数标定

        摄像头这种精密仪器对光学器件的要求较高,由于摄像头内部与外部的一些原因,生成的物体图像往往会发生畸变,为了避免数据源造成的误差,因此需要针对摄像头的参数进行标定。在ROS官方提供了用于双目和单目摄像头标定的功能包,输入以下指令即可安装:

$sudo apt-get install ros-kinetic-camera-calibration

        安装之后可以用黑白棋盘格图案用来标定

USB摄像头标定流程:

        启动USB摄像头:

$roslaunch robot_vision usb_cam.launch

        启动标定程序:

$rosrun camera_calibration cameracalibration.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam

        注:size:标定棋盘格的内部角点个数,这里使用的棋盘一共6行,每行有8个内部角点

                square:这个参数对应每个棋盘格的边长,单位是米

                image和camera:设置摄像头发布的图像话题

Kinect摄像头标定流程:

        启动Kinect:

$roslaunch robot_vision freenect.launch

        启动彩色摄像头:

$rosrun camera_calibration cameracalibration.py image:=/camera/rgb/image_raw camera:=/camera/rgb --size 8x6 --square 0.024

        标定红外摄像头:

$rosrun camera_calibration cameracalibration.py image:=/camera/ir/image_raw camera:=/camera/ir --size 8x6 --square 0.024

你可能感兴趣的:(ros1,机器人)