在上一个ROS教程视觉文章中,我们使用usb_cam包读入并发布了图像消息,但是图像没有被标定,因此存在畸变。ROS官方提供了用于单目或者双目标定的camera_calibration包。这个包是使用opencv里的张正友标定法,所以如果你有使用opencv标定的经验,可以直接标定,而不使用官方的程序。

官方也给出了单目的标定教程和双目视觉的标定教程。本教程基于usb_cam  package 读取图像,然后使用官方例程进行标定。

1.使用usb_cam 读取图像,launch文件如下:

<launch><arg name="device" default="/dev/video0" /><node name="usb_cam_node" pkg="usb_cam" type="usb_cam_node" output="screen"><param name="video_device" value="$(arg device)" /><param name="image_width" value="640" /><param name="image_height" value="480" /><param name="framerate" value="30" /><param name="brightness" value="128" /><param name="contrast" value="128" /><param name="saturation " value="70" /></node>
</launch>

2.检查usb_cam package发布的消息:

$ rostopic list

看是否有如下消息,并记住名称

  • /usb_cam_node/camera_info
    /usb_cam_node/image_raw

3.启动标定程序:

$ rosrun camera_calibration cameracalibrator.py --size 11x8 --square 0.03 image:=/usb_cam_node/image_raw camera:=/usb_cam_node

其中参数size 11x8 注意是字母x,他是棋盘内部角点个数,如下图所示。square为棋盘正方形边长,注意刚刚开始标定的时候,CALIBRATE按钮是灰色的。

4.标定程序使用方法:

为了得到一个好的标定结果,应该使得标定板尽量出现在摄像头视野的各个位置里:

如标定板出现在视野中的左边,右边,上边和下边,标定板既有倾斜的,也有水平的,。

界面中的x:表示标定板在视野中的左右位置。

y:表示标定板在视野中的上下位置。

size:标定板在占视野的尺寸大小,也可以理解为标定板离摄像头的远近。

skew:标定板在视野中的倾斜位置。

还要有棋盘占住大部分视野的图片,如下图所示:

按着上述方式不断移动标定板,直到CALIBRATE按钮变亮,点击该按钮就会进行标定。标定过程将持续一两分钟,并且标定界面会变成灰色,无法进行操作,耐心等待即可。

标定完成以后,你将看到如下图所示的窗口,窗口中的图像为标定后的结果,纠正了畸变

并且,摄像机的各个参数会出现在标定程序的终端窗口中,如下:

如果对标定结果满意,点击COMMIT按钮将结果保存到默认文件夹,在usb_cam窗口中可以看到如下信息,说明标定结果已经保存在相应文件夹下下次启动usb_cam节点时,会自动调用。

(转载请注明作者和出处:http://blog.csdn.net/heyijia0327 未经允许请勿用于商业用途)

reference:

1.ROS官方:单目标定

ROS 教程之 vision: 摄像头标定camera calibration相关推荐

  1. ROS 教程之 vision : 用各种摄像头获取图像

    可能有很多人想在ROS下学习视觉,先用摄像头获取图像,再用opencv做相应算法处理,可是ROS下图像的采集可不像平常的read一下那么简单,需要借助外部package的使用.而摄像头即可以用笔记本自 ...

  2. matlab棋盘格标定角点,相机标定(Camera calibration)Matlab——棋盘格标定原理,流程...

    计算机视觉----相机标定 相机标定概念:图像测量过程以及计算器视觉中,为确定空间物体某点的三维几何关系位置与其在图像中对应点之间的相互关系,必须建立相机成像的几何模型,模型的参数就是相机的参数.求解 ...

  3. ROS 教程之 navigation : 用 move_base 控制自己的机器人(2)

    在这一篇文章中,将主要介绍如何将DSP上采集到的速度转化为Odom,即左右轮速度转化为机器人离起点的x,y坐标和机器人的朝向角yaw,让move_base可以订阅到这个信息并做出相应的路径规划.在wi ...

  4. 相机标定(Camera calibration)

    前言:非测量相机 用于摄影测量的相机总体上可分为量测相机和非量测相机.对于专门为测量而设计的量测相机,具有已知的内方位元素.焦距.较小的镜头畸变以及定向设备,能达到相当高的精度:相对于价格较贵且设备复 ...

  5. ROS 教程之 navigation :在 catkin 环境下创建costmap layer plugin

    在做机器人导航的时候,肯定见到过global_costmap和local_costmap.global_costmap是为了全局路径规划服务的,如从这个房间到那个房间该怎么走.local_costma ...

  6. ROS 教程之 network:多台计算机之间网络通信(2)

    在上一篇文章中我们已经搭建好了两台计算机间通信的条件,但是每次都需要在新的终端里输入一长串export ROS_MASTER_URI之类的.实际弄起来的时候也不方便,因此在本文中,我们更进一步,简化两 ...

  7. ROS 教程之 network:多台计算机之间网络通信(1)

    LZ在实验室环境下要实现一台台式主机和移动机器人上的笔记本通信.台式机作为主机,用rviz监控和无线操作移动机器人,笔记本上通过ROS实现移动机器人的自主定位和路径规划等程序.主机上用的虚拟机装的ub ...

  8. ROS 教程之 navigation : 用 move_base 控制自己的机器人(1)

    前言: 相信大家在用<ROS by example>学习ROS的过程中,基本上都是使用书本中的例程,在终端输入几行别人已经写好的代码,看看仿真效果.可是这样一来,笔者在跟着书本初略过了一遍 ...

  9. OpenCV-Python相机标定:Camera Calibration

    1.概述: 在使用相机拍照片时,大多数人会考虑拍的好不好看,关注相机中物体坐标的并不多,但是对于地信学科来说,如果能从照片中获取物体的真实位置,对地理信息获取大有帮助,在这里面,十分关键的一步就是相机 ...

最新文章

  1. 手机蓝牙如何减少延时_如何使用车载蓝牙播放手机音乐的方法
  2. hive中建立“按天分区“的外表+存储为ORC文件+指定元数据
  3. c++类对象的创建方式
  4. python获取视频时长方法
  5. 刘敏华:2013年网络营销行业展望
  6. 高德地图api中的adcode城市编码
  7. 曼切斯特编码波特率和比特率的关系
  8. 智能穿戴设备进入主动健康管理赛道
  9. java多人聊天_java编程实现多人聊天室功能
  10. windows server 12 r2用Hyper-v安装centos7
  11. 湖北武汉劳务员培训劳务管理五条新举措建筑七大员培训
  12. Android 仿QQ登录动态背景
  13. linux基础-- 桌面系统如何切换命令窗口
  14. k8s调试工具--busybox
  15. Markdown格式
  16. TS 如何解决已声明“XXX”,但从未读取其值
  17. ISO三标体系认证是什么?企业应该如何来通过三体系认证
  18. swapidc如何销售服务器,swapidc对接云服务器
  19. 人工智能、机器学习和认知计算入门指南
  20. 推荐一个Arduino学习模拟器: 123D Circuites

热门文章

  1. oracle不停机迁移数据库,Oracle 12.2 使用datagurd技术极短停机时间内快速迁移数据库方案步骤...
  2. python使用正则表达式删除字符串中的数字
  3. pytorch使用Ray-tune对原有训练模型的代码改写,自动调参(一)
  4. ssm mysql增删改查_SSM配置并实现简单的数据库增删改查操作
  5. Splay伸展树入门(单点操作,区间维护)附例题模板
  6. [10.2模拟] book
  7. HTML5为输入框添加语音输入功能
  8. java APIs for database -------- JDBC (1)connection
  9. HDU2191 多重背包或者01背包 xingxing在努力
  10. Oracle学习(四)_SQL函数