问题描述:
在启动usb摄像头之后,像apriltag_ros等包需要读取摄像头的内参信息,但是usb-cam默认是没有内参信息发布的,需要自己填写或标定。
解决方案:
如果你有内参数据或者急于验证后续代码的逻辑正确性,那么直接在他要求的位置,添加一个内参文件即可:
touch ~/.ros/camera_info/head_camera.yaml
然后填上内参(注意camera_name需要为head_camera):
image_width: 640
image_height: 480
camera_name: head_camera
camera_matrix:
rows: 3
cols: 3
data: [438.783367, 0.000000, 305.593336, 0.000000, 437.302876, 243.738352, 0.000000, 0.000000, 1.000000]
distortion_model: plumb_bob
distortion_coefficients:
rows: 1
cols: 5
data: [-0.361976, 0.110510, 0.001014, 0.000505, 0.000000]
rectification_matrix:
rows: 3
cols: 3
data: [0.999978, 0.002789, -0.006046, -0.002816, 0.999986, -0.004401, 0.006034, 0.004417, 0.999972]
projection_matrix:
rows: 3
cols: 4
data: [393.653800, 0.000000, 322.797939, 0.000000, 0.000000, 393.653800, 241.090902, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]
如果需要追求精确性,那么就要标定一下相机,有三个工具推荐:
- MATLAB标定工具,比较方便,而且可以手动删除误差较大的图片,不想费事的推荐;
- camera_calibration,官方标定工具,有可视化界面,较为简单;
- kalibr,功能很多,包括单目、双目、摄像头-IMU联合标定,模型也比较多,可以选择更加精确的二维码标定板。
标定完成之后,依据上面的内参文件格式写到同样的位置即可。