ros使用相机usb_cam标定内参
为了得到一个好的标定结果,应该使得标定板尽量出现在摄像头视野的各个位置里:标定板出现在视野中的左边,右边,上边和下边,标定板既有倾斜的,也有水平的,离得近的远的都要有,最好保证所有的进度条都是绿色满格的。查看自己的的订阅名,我使用的是USB摄像机,因此用的是上面的命令,如果是其他相机先查阅一下订阅名,修改相应的。: 为当前标定板的大小(如果你的棋盘格的小方格的个数是9x7,那么我们这里就写–siz
ros使用相机usb_cam标定内参
如果你使用anconda虚拟环境,则在进行以下操作前,切换到ros兼容的python环境,参考这篇文章
1. 下载安装usb_cam包
- 下载安装
//安装usb_cam包
sudo apt-get install ros-[换成你的ros版本]-usb-cam
//测试打开相机
roslaunch usb_cam usb_cam-test.launch
出现以下画面:
- 查看摄像头设备名
ls /dev/video*
选择自己需要显示的设备,再修改launch文件,就可以使用。
如果需要更换相机显示,则下载usb_cam源码修改launch文件
- 下载usb_cam源码
cd 工作空间的src目录下
git clone https://github.com/ros-drivers/usb_cam.git
cd .. //回到工作空间
catkin_make //编译
source devel/setup.bash
查看相机接口信息
v4l2-ctl -d 0 --all
参考相机接口信息修改usb_cam-test.launch文件,文件原内容如下
<launch>
<node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
<param name="video_device" value="/dev/video0" />
<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>
运行修改后的launch文件即可
roslaunch usb_cam xxx.launch //xxx为你修改后的launch文件
2. 使用笔记本内置相机 / usb相机进行内参标定
- 打印标定板
- 打开相机
roslaunch usb_cam usb_cam-test.launch
如果你没有标定过的话,你会发现打开相机时会有一条警告
- 打开标定窗口
一般来说正常安装ros都是包含了camera_calibration,输入下面命令检查一下
rosdep install camera_calibration
#All required rosdeps installed successfully
之后执行相机标定py文件
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw camera:=/usb_cam
弹出display窗口
其中:
(1)--size 8x6
: 为当前标定板的大小(如果你的棋盘格的小方格的个数是9x7,那么我们这里就写–size 8x6)
(2)--square 0.108
:为每个小棋盘格的边长,单位是米,上面打印的标定版尺寸
(3)image:=/usb_cam/image_raw
:标定当前订阅图像来源自名为/usb_cam/image_raw
的topic
(4)camera:=/usb_cam
:为摄像机名
注意:
你需要使用rostopic list
查看自己的的订阅名,我使用的是USB摄像机,因此用的是上面的命令,如果是其他相机先查阅一下订阅名,修改相应的image
和camera
参数,eg:
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/camera/image_raw camera:=/camera
- 开始标定
为了得到一个好的标定结果,应该使得标定板尽量出现在摄像头视野的各个位置里:标定板出现在视野中的左边,右边,上边和下边,标定板既有倾斜的,也有水平的,离得近的远的都要有,最好保证所有的进度条都是绿色满格的 。
界面中的
x
:表示标定板在视野中的左右位置。
y
:表示标定板在视野中的上下位置。
size
:标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近。
skew
:标定板在视野中的倾斜位置。
(1) 通过不停的移动标定板:直到X、Y、Size、Skew四个都变成绿色
(2) 当四个都变绿色时,此时点击CALIBRATE
开始标定,过程大约1,2分钟
(3) 点击COMMIT
将结果保存到电脑路径:/home/sun/.ros/camera_info/head_camera.yaml
,再次启动相机时就不会有Camera Calibration文件找不到的警告了
head_camera.yaml
标定好的参数如下:
image_width: 640
image_height: 480
camera_name: head_camera
camera_matrix:
rows: 3
cols: 3
data: [517.5903341153015, 0, 323.3090435751261, 0, 517.7724331237808, 255.469742969125, 0, 0, 1]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [-0.05426751481755746, -0.03837743589544444, -0.002732448183023058, 0.007057077502912143, 0]
rectification_matrix:
rows: 3
cols: 3
data: [1, 0, 0, 0, 1, 0, 0, 0, 1]
projection_matrix:
rows: 3
cols: 4
data: [502.5735473632812, 0, 328.3470488253988, 0, 0, 511.0068969726562, 254.9924938559434, 0, 0, 0, 1, 0]
参数意义:image_height
、image_width
代表图片的长宽 camera_name
为摄像头名camera_matrix
规定了摄像头的内部参数矩阵distortion_model
指定了畸变模型distortion_coefficients
指定畸变模型的系数rectification_matrix
为矫正矩阵,一般为单位阵projection_matrix
为外部世界坐标到像平面的投影矩阵
到此相机内参标定完成
更多推荐
所有评论(0)