IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 【ROS】usb_cam相机标定 -> 正文阅读

[人工智能]【ROS】usb_cam相机标定

1. 唠叨两句

当我们要用相机做测量用途时,就需要做相机标定了,不然得到的计算结果会有很大误差,标定的内容包括三部分:内参,外参还有畸变参数。所以标定的过程就是要求得上面这些参数。
以前弄这个事估计挺麻烦,需要做实验和计算才能得到,现在通过ros的开源包几分钟就能完成相机标定,感激!
具体的内外参和畸变系数的说明,可以看看Reference里面的第一个链接,写得很详细。

2. 准备工作

要准备三样东西:

  • usb_cam的ROS启动包
  • 相机标定的ROS包
  • 还有一个用于标定的棋盘格

1)usb_cam启动包
使用我上传的usb_cam版本,不知道为什么用GitHub下载的版本不行,这个usb_cam版本也是别人发的,很奇怪,之后有时间可以研究一下,看看有什么不同,它们两个包都可以打开摄像头,就是用GitHub的版本打开后,apriltag_ros不输出正确的数值。下载点这里

下载解压后,放到对应的work space中src文件里面,例如catkin_ws
然后用catkin_make编译
然后用ls /dev/video*看看usb摄像头的编号,如果

will@will-Dell-G15-5511:~/omni_ws$ ls /dev/video*
/dev/video0  /dev/video1  /dev/video2  /dev/video3

我的笔记本上有webcam又连了一个外接的摄像头,实际是两个摄像头有四个编号,其实只用0和2就行,分别对应webcam和usb cam,其他两个用不了,然后修改 usb_cam/launch/usb_cam-test.launch

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video0" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

主要就是修改里面的 <param name="video_device" value="/dev/video0" />这一项就行,默认是0,改成/dev/video2就行

然后启动roslaunch usb_cam usb_cam-test.launch

有图像出来就成功了。
usb_cam

2)ROS的相机标定包
很方便,直接apt-get就能下载使用:
sudo apt-get install ros-melodic-camera-cibration

3)打印棋盘格
可以到Google或Baidu上搜一个,像下面这样的
chess box
然后弄清楚两个事情就行:
第一个,就是这个棋盘格的size,比如上图这个是一个4x6的,就数四个格子的交点一行有几个,和一列有几个就行
第二个,确定格子的大小,要根据打印出来的结果进行测量,上面这张图,我用A4纸打印,打印出来的格子边长是0.026m,也就是2.6cm,还要量一下格子的长宽,看看是不是真的是正方形。
确定上面这两点很重要,后面的输入会用到

3. 开始标定

先启动相机,再启动标定程序
roslaunch usb_cam usb_cam-test.launch
rosrun camera_calibration cameracalibrator.py --size 4x6 --square 0.026 image:=/usb_cam/image_raw camera:=/usb_cam
上面第二条指令就是启动标定程序的,里面需要输入棋盘的size和square对应的就是上面提到的两个数值

然后就会看到如下的界面:
UI在标定程序的界面能看到右侧有X Y Size Skew 还有CALIBRATE, SAVE 和COMMIT的标识
X:表示标定板在视野中的左右位置
Y:表示标定板在视野中的上下位置
Size:表示标定板在视野中的尺寸大小,其实就是离相机的远近
Skew:表示标定板在视野中的倾斜角度

打开程序后,就可以开始调整标定板的位置,让它在相机视野中各个位置移动和转动,让X Y Size和Skew这四个值下面的长条变成绿色,然后就可以看到CALIBRATE这个按钮变成青色,点击就会开始计算相机的参数,这个过程需要等一会,耐心等待
calibrate
当计算完毕,就可以在terminal中看到如下数据
terminal
然后SAVE按钮也会变成青色,点击SAVE按钮就会把数据保存到默认的目录下.
save
这个目录在/tmp/calibrationdata.tar.gz

path
打开这个压缩包,里面有刚刚采集的图片,还有保存相机的参数,如下:
zip
把里面的这个ost.yaml解压放到usb_cam的src目录下,然后改下名字,比如camera_calibration20220531.yaml,我喜欢把这些配置文件放到一个文件夹里,然后记下路径

然后就是最后一步了,打开launch文件,加多一行导入相机参数:

<launch>
  <node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" >
    <param name="video_device" value="/dev/video2" />
    <param name="image_width" value="640" />
    <param name="image_height" value="480" />
    <param name="pixel_format" value="yuyv" />
    <param name="camera_info_url" value="package://usb_cam/camera_info/camera_calibration20220531.yaml"/>
    <param name="camera_frame_id" value="usb_cam" />
    <param name="io_method" value="mmap"/>
  </node>
  <node name="image_view" pkg="image_view" type="image_view" respawn="false" output="screen">
    <remap from="image" to="/usb_cam/image_raw"/>
    <param name="autosize" value="true" />
  </node>
</launch>

之后照常用roslaunch启动usb cam就可以了,然后可以对比一下标定前后的测量结果,会发现精度有了很大提升。

Reference

  1. Step1:模型 16个相机参数(内参、外参、畸变参数):
    https://blog.csdn.net/weixin_43206570/article/details/84797361
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-06-03 23:58:52  更:2022-06-04 00:00:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:36:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码