目录
一、ROS中使用摄像头
1.1 验证摄像头设备可用
1.2 安装cheese
1.3 测试
二、获取摄像头驱动包
2.1 usb_cam
2.1.1 rosrun方式运行
2.1.2 roslaunch方式运行
三、摄像头标定(camera calibration)
3.2 标定前准备
3.2.1 标定板
3.2.2 摄像头调焦
3.3 标定摄像头
参考
一 . 参考网上资料,在ROS中完成一个机器小车的模型创建,传感器配置,仿真环境的设置,并控制机器小车进行运动。
参考:
【Autolabor初级教程】ROS机器人入门 【Autolabor初级教程】ROS机器人入门_哔哩哔哩_bilibili
Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程
Scout mini 仿真指南 松灵学院 | Scout mini 仿真指南_松灵开发社区-CSDN博客
二. 参考课件资料,在ROS中利用ROS工具完成你手机广角津贴(畸变较为严重)的标定,写出详细过程和输出结果。
三. 在ROS下,下载编译orbslam2代码,并在kitti数据集的一个序列图像中进行实验。
一、ROS中使用摄像头
在ROS中使用摄像头的前提是,摄像头在Linux系统下是可识别的,通常来说UVC协议的USB摄像头都可以正常使用,大部分笔记本电脑自带的摄像头都是UVC协议的,所以也是可以直接使用的。
对于一些具有CSI或者MIPI接口的嵌入式板卡,在接入对应接口的摄像头后可能也可以使用,但不是绝对的。
例如树莓派接入CSI摄像头后启用bcm2835-v4l2驱动可以正常使用,但是JetsonNano使用CSI摄像头就不可以通过本文的方法驱动。
1.1 验证摄像头设备可用
使用命令 ls /dev/
检查当前设备列表
如果设备列表中有video*设备,则摄像头设备在当前系统中有被正确的识别。
如果使用虚拟机,需要将摄像头设备连接到虚拟机中。
博主使用的是Ubuntu20.04的版本,点击 虚拟机->可移动设备->,根据你的设备进行选择
检查有video设备后可以使用Ubuntu下的拍照软件cheese进一步验证
1.2 安装cheese
sudo apt install cheese
1.3 测试
输入 cheese
命令成功打开摄像头,拍照软件能显示摄像头画面就基本稳了
二、获取摄像头驱动包
ROS下摄像头的驱动包有多款,这里以常用的两款为例:
2.1 usb_cam
usb_cam可以通过apt方式直接安装二进制包,如果使用其他版本的ROS,自行替换命令中的noetic字段
sudo apt install ros-noetic-usb-cam
2.1.1 rosrun方式运行
先启动roscore,然后运行驱动节点usb_cam_node
roscore
rosrun usb_cam usb_cam_node
启动节点后终端中可能会报如下的警告,可以忽略,实测不影响使用
摄像头启动后启用rqt工具查看图像
rqt_image_view
选择正确的话题即可预览到摄像头的画面
2.1.2 roslaunch方式运行
usb_cam包中提供了一个launch文件例程usb_cam-test.launch
roslaunch usb_cam usb_cam-test.launch
在这个launch文件中除了启动usb_cam_node节点外还会包含一个image_view用于预览摄像头画面
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
三、摄像头标定(camera calibration)
3.1 为什么要标定
普通相机成像误差的主要来源有两部分,第一是相机感光元件制造产生的误差,比如成
像单元不是正方形、歪斜等;第二是镜头制造和安装产生的误差,镜头一般存在非线性的径
向畸变。
在对相机成像和三维空间中位置关系对应比较严格的场合(例如尺寸测量、视觉 SLAM等)就需要准确的像素和物体尺寸换算参数,这参数必须通过实验与计算才能得到,求解参数的过程就称之为相机标定。
3.2 标定前准备
3.2.1 标定板
在执行摄像头标定前,需要先准备一块标定板。
标定板有两种获得方法,第一种是采购成品的标定板,A4纸大小的标定板通常价格在300~400的样子。
如果不想采购,可以使用打印机将下面的文件按照1:1打印在A4纸上,然后贴在一块纯平的版上,例如亚克力板。
打印的标定板缺点在于,第一打印机的精度有限,边缘可能会产生模糊,另外就是在粘贴时很难做到极高的平整度,这两项都会对标定结果产生一定的影响,但是优点时便宜易得。
3.2.2 摄像头调焦
标定只针对手动对焦的相机,自动对焦的相机由于焦距变化,难以形成固定的标定参数。
相机在标定前,需要调整好焦距(拧镜头),使成像清晰,并将当前焦距固定住,防止焦距产生变化。
3.3 标定摄像头
标定需要用到camera_calibration功能包,可以通过apt方式安装。
sudo apt install ros-noetic-camera-calibration
安装完成后启动相机
roscore
rosrun usb_cam usb_cam_node
拿着标定板放在相机视野内,标定板上出现彩色线条则为有效图像,反之无效,需要调整标定板位置。
分别在左右移动(X),直到标定界面上X下方的精度条为绿色,然后依次在上下(Y),远近(Size),倾斜(Skew)方向移动,移动过程尽量缓慢,避免大幅度的移动使相机成像产生拖影。持续移动直到所有的进度条都为绿色。
点击”CALIBRATE”按钮之后等待一会,标定就完成了,如下图所示。
可以看到窗口中的”SAVE”和”COMMIT”按钮都变绿了。并且终端中也输出了标定好的相关参数。我们点击”SAVE”按钮,稍微等待几秒,即可保存标定好的结果。标定结果默认保存在/tmp/calibrationdata.tar.gz
,我们手动拷贝出来即可。内容包含参数文件和标定用到的影像,如下图所示。
另外说一下”COMMIT”按钮,一般情况下不太用的到,顾名思义,它是将标定好的结果“提交”。可以理解为把参数发布,给其它的Topic用于校正。
最后再简单说一下Ubuntu下tmp
文件夹的问题。顾名思义,tmp
文件夹是用来保存临时文件的地方,而这个临时文件多长时间被清空,就是个问题了。对于Ubuntu,系统会在每次启动的时候自动清理临时文件夹。因此,在标定得到结果以后,一定要记得在关机之前把结果拷贝出来,不然下次开机的时候就被清空了。
参考
Ubuntu20.04在ROS中使用摄像头标定-CSDN博客