usb_cam功能包及ROS中的图像数据类型
usb_cam功能包
usb_cam是针对V4L协议USB摄像头的ROS驱动包, 核心及诶但是usb_cam_node
下载:
sudo apt-get install ros-kinetic-usb-cam
运行:roslaunch usb_cam usb_cam-test.launch
也可以运行:roscore
rosrun usb_cam usb_cam_node
rqt_image_view
rqt是一个基于qt开发的可视化工具, 拥有可扩展性好, 灵活以用, 跨平台等特点, 主要作用和RViz一致都是可视化, 但是和RViz相比, rqt要高级一个层次
ROS中的图像数据类型
查看二维图像
rostopic info /usb_cam/image_raw
rosmsg show sensor_msgs/Image
ROS也设计了压缩图像消息类型(JEPG, PNG, BMP)
rosmsg show sensor_msgs/CompressedImage
除了普通USB摄像头, 很多场景下会使用RGB-D摄像头来获取更丰富的环境细腻(Kinect, 微软XBOX360体感周边外设)
查看三维点云数据:
rosmsg show sensor_msgs/PointCloud2
除此之外还有激光雷达:
rosmsg show sensor_msgs/LaserScan
摄像头标定
摄像头这种精密仪器对光学器件的要求较高, 由于摄像头内部与外部的一些原因, 生成的图像往往会发生畸变
为了避免误差, 需要针对摄像头的参数进行标定
- 相机标定第一步, 准备一张标定板, 打印出来
标定板为8x6, 我用A4纸打印出来为, 用直尺量square边长为24.5mm, 即0.0245m, 作为标定输入参数- roslaunch usb_cam usb_cam-test.launch
运行摄像头- 下载摄像头标定功能包camera_calibration
sudo apt-get install ros-kinect-camera-calibration- 运行矫正窗口
rosrun camera_calibration cameracalibrator.py –size 8x6 –square 0.0245 image:=/usb_cam/image_raw camera:=/usb_cam- 采集样本数据
没有标定成功前, 按钮均为灰色
x: 左右移动
y: 上下移动
size: 前后移动
skew: 倾斜转动
不断移动标定靶, 到按钮变色
CALIBRATE按钮: 计算标定参数
SAVE: 保存到显示的默认路径
COMMIT: 提交并退出程序
- 解压(tar xzf 标定生成的文件.tar.gz)得到yaml格式的配置文件
- 标定摄像头生成的配置文件是yaml格式的, 可以在启动摄像头的launch文件中进行加载
摄像头人脸与物体识别
ROS为开发者提供了OpenCV接口的功能包:
cv_bridge
开发者通过该功能包将ROS中的图像数据转成OpenCV格式的图像, 并调用OpenCV库进行各种图像处理
或者将OpenCV处理后的数据转化成ROS图像, 并通过话题发布