2.3 OpenCV 标定
2.3.1 绪论
主要介绍OpenCV自带标定例子的使用方法。
OpenCV包含两种标定文件:
calibration.cpp:是通过用户输入可选参数进行相机标定的程序;
calibration_artificial.cpp:是用程序模拟相机标定的过程,用程序创建棋盘然后自主标定。
通常,由相机采集棋盘格图像后进行标定,本文以calibration.cpp为例介绍标定方法。
2.3.2 方法步骤
1.标定文件路径:calibration.cpp 和 calibration_artificial.cpp位于opencv下sources/samples/cpp文件下;将所需的标定图像放在同一文件夹下。
2.生成标定图像列表
OpenCV自带imagelist_creator.cpp文件生成xml/yaml图像列表;
因此,首先采用imagelist_creator.cpp将棋盘格标定图像生成imagelist.yaml文件。
具体步骤:
①新建项目,在cpp文件夹中添加文件imagelist_creator.cpp,编写CMakeLiats.txt:
新建build文件夹,cmake编译得到imagelists可执行文件;
②打开命令窗口,找到build文件路径
输入命令:https://www.bilibili.com/read/imagelist imagelist.yaml left-0001.png left-0002.png left-0003.png left-0004.png ……left-0093.png
③回车执行,生成imagelist.yaml文件。如下:
3.标定步骤:
①移除imagelist_creator.cpp,添加calibration.cpp标定程序;将图片放在当前cpp目录下;
②打开calibration.cpp,将mode=DETECTION改成mode=CALIBRATED;
③cmake编译得到标定可执行文件calibration
④打开命令窗口,输入命令: ,开始标定………
⑤输出out_camera_data.yml 文件,得到标定文件;
3 新建RGBD数据集
3.1 准备工作
1.首先下载源码:git clone https://github.com/MRwangmaomao/KinectV2_dataset_make
2.修改get_image.cpp源码:
(1)定位保存路径:
(2)定义保存文件:
(3) 订阅正确的图像话题:
3.定位到Data文件夹,新建rgb和depth两个文件夹。
4.编译源码
3.2 运行节点
1.运行Astra相机节点:roslaunch astra_camera astrapro.launch
2.运行数据采集节点 : rosrun dataset_make get_image_node #程序中默认500张自动停止,可根据自己需要调整
3.手动移动Astra相机,进行图像采集,新建了三个数据集mydata1/mydata2/mydata3, 一个室外,两个室内。最后得到四个结果:rgb图像、depth图像、rgb.txt、depth.txt。
4.把功能包下的associate.py复制到Data/mydatax,使用命令:
以生成association.txt
4 相机运行实验
4.1 相机运行实际场景
4.1.1 配置相机标定内参
1.由于相机本身存在畸变,需要进行相机标定,减轻其的影响,在第三节中已经详细地介绍了相机标定的步骤,分别生成了红外相机和彩色相机的内参文件rgb.txt、depth.txt,将它们复制到Astra相机的ROS驱动包ros_astra_camera下面的cfg文件夹中。
2.为了在启动launch文件时调用内参文件,需要对其进行修改。
此处使用gedit编辑器打开launch文件并修改其25、26行内容,将内参文件的地址填写入内。
随后向下,找到第84行修改为如下内容:
3.在ROS工作空间的主目录下启动节点,进行相机的实际场景运行
【注意】这里的Asus.yaml文件实际上是一个相机内参数文件,理论上应该与相机驱动包内的相机内参数文件保持一致,如果效果不好,可保持默认的官方参数文件。
4.2 相机运行实际场景数据集
与运行数据集相似,需要启动相机驱动节点,进入ORB_SLAM2的主目录,之后输入命令:
即可完成数据集的运行。
(完结)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/181661.html