一、相机的标定
1.1 相机包usb_cam
usb_cam功能包主要用于获取USB摄像头的图像数据,发布图像数据为ROS的标准消息类型sensor_msgs/Image,rostopic名称为 /usb_cam/image_raw
1.1.1 安装
usb_cam安装代码如下:
sudo apt-get install ros-noetic-usb-cam
tips:sudo apt-get install安装的包将会被安装到 /opt/ros/noetic/share 路径下
1.1.2 参数设置
在 /opt/ros/noetic/share/usb_cam/launch 文件中将会保存相机的相关参数:
用于指定发布的摄像头设备,笔记本自带摄像头默认为/dev/video0 这两个参数用于设置图像的分辨率
可以用ls指令查看摄像头的设备名称:
ls /dev/video*
1.1.3 使用
在主目录下的.bashrc文件中添加 source /opt/ros/noetic/setup.bash(因为usb_cam包被安装在/opt/ros/noetic/share路径下)
bash执行
roslaunch usb_cam usb_cam-test.launch
报错:cannot launch node of type [image_view/image_view]: image_view
原因:缺少image_view包
解决方法:
sudo apt-get install ros-noetic-image-view
1.2 标定包camera-calibration
1.2.1 安装
sudo apt-get install ros-noetic-camera-calibration
1.2.2 打开摄像头开始标定
- 准备棋盘格
摄像机的校准是以一个由黑白方块组成的棋盘为基准进行的,8×6的棋盘可在以下网站下载:
棋盘打印出来如下图所示。8x6棋盘横向有9个方块,所以有8个交叉点,而竖向有7个方块,有6个交叉点,所以它被称为8x6棋盘。
- 运行程序
roslaunch usb_cam usb_cam-test.launch #启动摄像头
rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam
- 第二条代码参数说明:
size:棋盘内交叉点的个数,行*列
square:一个格子的边长,单位是m
image:订阅摄像头发布的图像话题(rostopic)
camera:寻找相应的设备相机名
- 开始标定
在没有标定成功前,右边的按钮都为灰色,不能点击。为了提高标定的准确性,应该尽量让标定靶出现在摄像头视野范围内的各个区域,界面右上角的进度条会提示标定进度。上/下/左/右移动摄像头,等各个方向绿条满了之后,数据采集完成。
1)X:标定靶在摄像头视野中的左右移动。
2)Y:标定靶在摄像头视野中的上下移动。
3)Size:标定靶在摄像头视野中的前后移动。
4)Skew:标定靶在摄像头视野中的倾斜转动。
- 各个方向绿条满了之后,CALIBRATE会有颜色,点击它。
- 然后点击save,点击save 后,标定文件会自动保存在/tmp路径下,文件名为 calibrationdata.tar.gz 压缩包,解压缩该压缩包,可以看到相机标定数据被保存在ost.yaml文件中
- 再点击COMMIT,这时会自动保存标定文件,新标定的参数会自动更新主目录下 .ros/camera_info/head_camera.yaml文件中。从下图可以看到 head_camera.yaml 的内容与最新标定产生的 ost.yaml 的内容一致
至此完成相机的标定。