Linux学习笔记(七)ROS摄像头标定

本篇是根据《ROS机器人编程》一文(作者:表允晳 赵汉哲 郑黎蝹 林泰勋),8.1-8.3节实验记录:
在这里插入图片描述 在这里插入图片描述
环境:VMware(PS.VirtualBox6.0对笔记本摄像头usb3.0支持不好,会绿屏)


一、安装uvc-cam(笔记本自带摄像头3.0)

版本:kinetic

sudo apt-get install ros-kinetic-uvc-camera

在这里插入图片描述

二、ROS图像显示

  • 声明环境
    roscore
    
  • 运行uvc_camera节点(新终端)
    rosrun uvc_camera uvc_camera_node
    
  • 查看话题消息(第三个终端)
    rostopic list
    
    以下话题消息显示正在发布相机信息(/camera_info)和图像信息(/image_raw)
    在这里插入图片描述
  • 打印出相机信息
    rostopic echo /camera_info
    

三、三种方式查看图像

  • 方法一:使用image_view节点查看图像

    rosrun image_view image_view image:=/image_raw
    

    在这里插入图片描述

    遇见问题:
    1、黑屏(没安装虚拟机扩展模块或者usb格式未选到3.0)
    [解决方法略过、事实证明virtualbox安装了也只会有其他错误-》绿屏]在这里插入图片描述
    2、在VirtualBox下cheese显示图像,但ros查看时显示绿屏(因为VirtualBox6.0对笔记本自带摄像头usb3.0格式不支持)
    在这里插入图片描述
    解决方法:这里我改用VMware移植镜像(前面一篇文章说过移植镜像方法),注意设置usb为3.0
    在这里插入图片描述 在这里插入图片描述

  • 方法二:用rqt_image_view节点检查

     rqt_image_view image:=/image_raw
    

    在这里插入图片描述

  • 方法三:用RViz查看

    rviz
    

    RViz运行后,先更改“Displays”选项。单击RViz左下方的[Add],在[By display type]选项卡中选择[Image],以此加载图像显示功能
    在这里插入图片描述
    然后将[Image] → [Image Topic]的值更改为“/image_raw”。则会如图所示显示图像。如果图像看起来很小,则可以用鼠标调整该image视图的边缘,以增加视图尺寸。
    在这里插入图片描述

四、摄像头标定

  • 安装校准包

    sudo apt-get install ros-kinetic-camera-calibration
    
  • 运行uvc_camera_node节点(两个终端)

    roscore
    rosrun uvccamera uvccameranode
    
  • 打印相机信息

    rostopic echo /camera_info
    

    注意相机原始信息D、K、R、P都为0
    在这里插入图片描述

  • 准备棋盘
    摄像机的校准是以一个由黑白方块组成的棋盘为基准进行的,如图8-8所示。从下面的
    地址下载8x6国际象棋棋盘,并打印出来后将其贴到一个平坦的纸箱。有时也会打印成超过1米的棋盘,但这里用的是A4纸。作为参考,8x6棋盘横向有9个方块,所以有8个交叉点,而竖向有7个方块,有6个交叉点,所以它被称为8x6棋盘。
    http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&do=view&target=check-108.pdf
    在这里插入图片描述

  • 运行校准程序包:

    rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/image_raw camera:=/camera
    

    在这里插入图片描述
    在校准过程中需要将棋盘对着相机朝着左/右/上/下/前/后移动,还需要倾斜棋盘。激活update;点击update,等待处理,激活SAVE;点击SAVE,
    在这里插入图片描述

  • 打开另一个新的终端,创建相机参数文件
    下面,我们来创建一个包含相机校准参数的相机参数文件(camera.yaml)。如下例
    所示,解压缩calibrationdata.tar.gz文件以查看图像文件(*.png)和记录了校准中使用
    的校准参数的ost.txt文件。

     cd /tmp
     tar -xvzf calibrationdata.tar.gz
    

    在这里插入图片描述
    在这里插入图片描述
    接下来,将ost.txt文件改名为ost.ini,并使用camera_calibration_parsers功能包
    的convert节点创建相机参数文件(camera.yaml)。创建完成后,将其保存在~/.ros/
    camera_info/目录中,则ROS中使用的相机相关功能包会引用此信息。

    mv ost.txt ost.ini
    rosrun camera_calibration_parsers convert ost.ini camera.yaml 
    mkdir ~/.ros/camera_info
    mv camera.yaml ~/.ros/camera_info/
    

    在这里插入图片描述

  • 重新运行相机节点,打印标定信息:

    rostopic echo /camera_info
    

    注意相机信息D、K、R、P都已被填充
    在这里插入图片描述
    标定完成!

猜你喜欢

转载自blog.csdn.net/cungudafa/article/details/89349324