0%

机器人操作系统ROS_4_机器人视觉

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要高级一个层次

usb_cam中的节点, 话题和参数

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

摄像头标定

摄像头这种精密仪器对光学器件的要求较高, 由于摄像头内部与外部的一些原因, 生成的图像往往会发生畸变
为了避免误差, 需要针对摄像头的参数进行标定

ROSwiki相机矫正的官方文档

  1. 相机标定第一步, 准备一张标定板, 打印出来
    标定板为8x6, 我用A4纸打印出来为, 用直尺量square边长为24.5mm, 即0.0245m, 作为标定输入参数
  2. roslaunch usb_cam usb_cam-test.launch
    运行摄像头
  3. 下载摄像头标定功能包camera_calibration
    sudo apt-get install ros-kinect-camera-calibration
  4. 运行矫正窗口
    rosrun camera_calibration cameracalibrator.py –size 8x6 –square 0.0245 image:=/usb_cam/image_raw camera:=/usb_cam
  5. 采集样本数据
    没有标定成功前, 按钮均为灰色
    x: 左右移动
    y: 上下移动
    size: 前后移动
    skew: 倾斜转动
    不断移动标定靶, 到按钮变色
    CALIBRATE按钮: 计算标定参数
    SAVE: 保存到显示的默认路径
    COMMIT: 提交并退出程序

5. 采集样本数据

  1. 解压(tar xzf 标定生成的文件.tar.gz)得到yaml格式的配置文件
  2. 标定摄像头生成的配置文件是yaml格式的, 可以在启动摄像头的launch文件中进行加载

使用标定的参数

摄像头人脸与物体识别

ROS为开发者提供了OpenCV接口的功能包: cv_bridge
开发者通过该功能包将ROS中的图像数据转成OpenCV格式的图像, 并调用OpenCV库进行各种图像处理
或者将OpenCV处理后的数据转化成ROS图像, 并通过话题发布

Thank you for your reward !