ROS机器人小车建模仿真与SLAM(5)

server/2024/9/24 8:07:26/

目录

一、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博客


http://www.ppmy.cn/server/20381.html

相关文章

解决eureka服务注册名报错

解决eureka服务注册名报错 解决eureka服务注册名报错简介正文使用RestTemplate.getForObject( url,Class)方法中,url直接使用服务注册名进行拼接后无法正常远程调用。如下 报错404,说明没访问到我的解决方法:换依赖版本原来的版本…

c++11 标准模板(STL)本地化库 - 平面类别(time_get) - 从输入字符序列中解析时间/日期值到 std::tm 中(一)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析,以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 从输入字符序列中解析时间/日期值到 std::tm 中 std::time_get …

C++:this指针

this 是一个指向当前对象的指针,它可以在类的成员函数中使用。它是每个类的非静态成员函数的隐含参数;当你在类的成员函数中使用 this 时,它指向调用该函数的对象。主要作用是让类的成员函数能够访问对象的成员变量和其他成员函数。因为每个对象都有自己…

Docker——数据管理和网络通信

目录 一、Docker的数据管理 1.数据卷 2.数据卷容器 3.容器互联 二、Docker镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于Dockerfile 创建 3.1联合文件系统(UnionFS) 3.2镜像加载原理 3.3为什么Docker里的Centos大小才200M 4.Dcok…

ZooKeeper 搭建详细步骤之一(单机模式)

搭建模式简述 ZooKeeper 的搭建模式包括单机模式、集群模式和伪集群模式,分别适用于不同的场景和需求,从简单的单节点测试环境到复杂的多节点高可用生产环境。在实际部署时,应根据系统的可用性要求、数据量、并发负载等因素选择合适的部署模式…

广州大学《软件工程》实验报告一需求分析

广州大学学生实验报告(一) 开课学院及实验室: 学院 年级/专业/班 姓名 学号 实验课程名称 软件工程导论实验 成绩 实验项目名称 需求分析 指导老师 一、实验目的 掌握需求建模技术,能够撰写需求规格说明文…

vscode 、eslint、prettier 的孽缘

今天在配置一个新项目的时候,被一个新项目搞得头痛。 我准备配置 prettier 来格式代码,然后把 prettier 添加到 eslint 规则中,这样控制台就能很好的展示那些代码格式有问题。可是控制台的错误和 vscode 显示的错误一直不一样,无…

Redis篇:缓存雪崩及解决方案

1.何为缓存雪崩 缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。 2.缓存雪崩的解决方案 解决方案: 给不同的Key的TTL添加随机值 利用Redis集群提高服务的可用性 给缓存业务添加降级…