写在最前:我发现PointGrey 相机ROS驱动有问题。一旦用双目,我就没办法采数据,一采数据相机就停了。现已弃坑,赶紧换相机。想做ROS双目,就别用PointGrey相机,坑特别多。

调了一阵子ORB SLAM,不知道放到真的相机里效果好不好。所以想先放到另一个小一点的机器人身上跑跑看。结果发现这机器人身上装备的是两个PointGrey相机,还没双目校正过。所以今天来玩点花活,在ROS里校正一对相机,方便后面的算法使用。

######################################## 安装 pointgrey ROS 驱动包 #####################################

这部分暂时跟校正无关,可以直接看下一部分,我就随手做个记录而已。

ROS wiki 是提供了PointGrey相机的安装包的:

http://wiki.ros.org/pointgrey_camera_driver

但是我怕他给我搞乱了系统配置,所以去github抓了他们的源码下来编译。过程倒也十分简单,见了一个workspace然后编译:

cd ~/point_grey_ws/src

git clone https://github.com/ros-drivers/pointgrey_camera_driver.git

cd ..

catkin_make

记得先在camera.launch里面设置一下相机的序列号,比如:

<arg name="camera_serial" default="16456235" />

然后用这个命令就能跑单目了:

cd ~/point_grey_ws

. ./devel/setup.bash

roslaunch pointgrey_camera_driver camera.launch

双目的话也是要是在stereo.launch文件里面设置一下相机的序列号,比如:

 <arg name="left_camera_serial" default="16456235" />

 <arg name="right_camera_serial" default="16456234" />

然后再运行双目的launch文件:

roslaunch pointgrey_camera_driver stereo.launch

没校正的时候其实也只能看到/camera/image_raw这个话题里面有图像,其他的话题都是读不出东西的。所以我们来到下一章,相机校正。

############################################## ROS里做相机校正 ##########################################

校正分为两种,单目校正和双目校正。单目校正顾名思义,没有太多需要说的。双目校正在ROS里最后并不会给你fundamental matrix 或者Essential matrix.但双目校正会把图片的极线对齐,也就是y坐标对齐。然后给你一个与baseline有关的量。那么我把单目和双目分开说吧。

单目校正:

举个例子,/camera/image_color 这个话题里的图片没有校正,那我们就用这个ROS自带的程序校正一下:

rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.0625 image:=/camera/image_color camera:=/camera

上面的9x6是标定板的黑白相间的连接点的数量。打个比方

这个标定板就是7x5

然后--square 0.0625是每个小正方形的边长。其他的不细说了,具体细节在这里:http://wiki.ros.org/camera_calibration

接下来就是慢慢移动标定板,确保图像清晰一点,直到“X”, “Y”, “Size”, “Skew” 底下的长条都变绿了,就可以点击“CALIBRATE”了。计算过程可能需要几分钟,要耐心等一等。

然后就可以点“SAVE”了, 会在这个路径下生成一个yaml文件: ~/.ros/camera_info

所用到的图片SAVE之后会保存到这里,但是不太重要:  /tmp/calibrationdata.tar.gz

然后点击 “COMMIT”.在我这里其实有报错,但是没什么影响啊,不管了 。

最后重启一次launch文件,再去rqt里面看看,现在校正后的图像应该有了:/camera/image_rect_color

同样的步骤可以在另一个相机里重复。但是如果要知道两个相机的相对关系,可以不做单目校正,直接进行双目校正。

双目校正:

先运行双目的launch文件,同时开启两个相机:

roslaunch pointgrey_camera_driver stereo.launch

然后,双目校正之前是并不需要做单目校正的。

由于开启双目校正的时候会检查service的状况,然后报错。所以我加了几个flag。话不多说,直接贴代码:

rosrun camera_calibration cameracalibrator.py --size 9x6 --square 0.0625 right:=/camera/right/image_color left:=/camera/left/image_color right_camera:=/camera/right left_camera:=/camera/left --no-service-check --approximate=0.1

和单目一样,确保上面的参数没错就能慢慢移动标定板了。确保图像清晰一点,直到“X”, “Y”, “Size”, “Skew” 底下的长条都变绿了,就可以点击“CALIBRATE”了。计算过程可能需要几分钟,要耐心等一等。

然后就可以点“SAVE”了, 会在这个路径下生成一个yaml文件: ~/.ros/camera_info

所用到的图片SAVE之后会保存到这里,但是不太重要:  /tmp/calibrationdata.tar.gz

双目这里同时读取两个相机的时候,原ros node可能会报错。我分析是内存不够。所以如果机器人自带的电脑太水了,就只能在别的电脑上校正好,再把yaml文件拷贝到机器人身上去。

由于双目其实是对齐了的,所以不用fundamental matrix,可以直接拿camera.bf进行计算。这里的camera.bf是baseline乘以fx。详细解释嘛就是这样:

When using the camera_calibration package for stereo camera calibration the images of right and left camera are rectified and adjusted to become "ideal" stereo images. That means that corresponding points in left and right image have the same value in y (i.e. the epipoles are infinite, epipolar lines are parallel to the x-axis).

In this setting, no fundamental matrix but the baseline (distance from left to right camera center) is needed for 3D triangulation. This information is found in the CameraInfo message of the right camera. Please have a look at the CameraInfo message and at corresponding documentation.

所以最后ORB SLAM2会要你填一些参数,其实都在结果里有了。其中 :

distortion = [k1, k2, p1, p2, k3]

camera matrix =

[fx 0.0 cx

0.0 fy cy

0.0 0.0 1.0]

注意,ROS这个校正程序是把右相机作为默认的,所以填参数的时候要注意看清楚bf和-bf。

projection =

[fx'   0.0 cx'   -bf

0.0  fy' cy'  0.0

0.0 0.0  1.0 0.0]

好了,希望采到的数据效果会好。

在ROS中实现双目相机校正(以PointGrey为例)相关推荐

  1. OpenCV4每日一练day13:双目相机校正

    一.双目相机校正说明--<OpenCV4快速入门> 二.双目相机校正 文件准备: 运行结果: 附代码: #include <opencv2\opencv.hpp> #inclu ...

  2. ROS+Opencv的双目相机标定和orbslam双目参数匹配

    本文承接ROS调用USB双目摄像头模组 目录 先完成单目标定 双目标定 生成可用于ORB-SLAM2的yaml文件 生成可用于ORB-SLAM3的yaml文件 参考 按照上面链接配置好后,执行 ros ...

  3. Nvidia Jetson Agx Xavier 在Ros中调用GMSL2相机

    一.背景 在ros中调用GMSL2摄像头,刚开始是通过修改官方驱动包ros-meloidc-usb-cam,可能是修改的地方不对,一直报错,调用失败,要是有大佬修改成功,希望能交流一下. 后来借鉴了一 ...

  4. ZED2双目相机内参标定

    前言 一个 8x6 的棋盘标定板,边长 10.8 cm,因为标定用的是内部角点,所以实际打印出是 9x7 大小 保证一个 5m X 5m 的无遮挡环境 一个发布了左右图像到 ROS 中的双目相机 标定 ...

  5. zed相机拆机_机器人技术:ZED 双目相机内参标定方法

    今天在家总结了下标定 ZED 相机的步骤,方便开学后直接开整. 一.准备工作 一个 8x6 的棋盘标定板,边长 10.8 cm,因为标定用的是内部角点,所以实际打印出是 9x7 大小 保证一个 5m ...

  6. basler相机 ip linux,Linux环境中连接Basler相机(Pylon软件的安装),ROS环境中连接Basler相机...

    一 .在Linux操作系统中安装Pylon软件 1.Pylon下载,到官网中下载Pylon软件https://www.baslerweb.com/cn/support/downloads/softwa ...

  7. 双目相机计算稠密深度点云(一)

    双目相机计算稠密深度点云 1.双目立体匹配原理 1.1 图像矫正 1.2 视差计算 2.elas_ros 包运行 3.KITTI数据集运行 3.1 kitti数据集转换为rosbag 3.2 运行KI ...

  8. 双目相机 -- IMU联合标定

    声明:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅!!! 目录 **声明**:一些图片是不该有水印的,CSDN把图片链接的格式改了,暂时还不知道怎么去掉,请见谅! ...

  9. 双目相机标定以及立体测距原理及OpenCV实现

    转载 双目相机标定以及立体测距原理及OpenCV实现 http://blog.csdn.net/dcrmg/article/details/52986522?locationNum=15&fp ...

最新文章

  1. Sad Angel (悲伤的天使)-Игорь Крутой
  2. C#实现局域网UDP广播--
  3. 容器编排技术 -- Kubernetes Pod 优先级和抢占
  4. docker安装redis【网易镜像方式】
  5. word怎么恢复自动保存_如何使用自动恢复自动保存Word文档并恢复丢失的更改
  6. 杭州滨江不久将不复存在,新杭州主城8区规划调整出炉!
  7. android 横屏转竖屏,(转)Android强制设置横屏或竖屏
  8. Kafka ETL 之后,我们将如何定义新一代实时数据集成解决方案?
  9. 【渝粤题库】陕西师范大学209008 教师伦理学 作业
  10. VirtualBox 启动错误
  11. TypeScript实战-04-TS枚举类型
  12. 计算机表格中如何计算数据透视表,如何在EXCEL数据透视表中进行计算 |
  13. 【洛谷P5514】永夜的报应【模拟】
  14. 120W快充!Redmi Note 11系列1199元起
  15. 2020江苏选调考察体检环节的记录
  16. 供独立游戏开发者参考的2D美工教程(九)
  17. ①lvs负载均衡集群 详解
  18. Python中关于Matplotlib数据可视化的简单总结
  19. java计算机毕业设计医院门诊挂号系统源程序+mysql+系统+lw文档+远程调试
  20. English:怎样辨别英语中 表语 宾语 定语 状语 等结构

热门文章

  1. c语言实参和形参占用存储单元_C语言程序中,当调用函数时实参和形参各占一个独立的存储单元。...
  2. css的论文,css
  3. 外贸邮件群发,如何群发邮件?
  4. 代自序 财富寓言:羊、狼、狮子与大象(1)
  5. 如何去掉Mac窗口截图自带的阴影呢?教程来了不要错过哦
  6. 解决诺顿卸载密码的问题【转】
  7. 一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)
  8. 一个轻巧高效的多线程c++stream风格异步日志(一)
  9. 订单系统——提交订单
  10. 《怪诞行为学》读书笔记