Rviz2 摄像头视频采集与图像标定
Rviz2 摄像头视频采集与图像标定
准备摄像头
有摄像头的可以直接设置虚拟机的 USB 兼容性来设置即可,但是由于我们的设备没有摄像头,所以这里我们要安装一些摄像头驱动来通过手机摄像头做外设进行使用
如果电脑在 Ubuntu 环境下而且没有摄像头,又需要使用摄像,那该怎么办?
最简单的办法就是在手机和电脑上同时安装 DroidCam ,可以通过 WiFi/LAN 或 USB 连接手机作为摄像驱动而使用
DroidCam 驱动官网:dev-47
安装可以直接参考官网教程,注意这里在使用虚拟摄像头的时候,一定要通过 USB 进行连接
这里 ROS2 使用的是 v4l2_camera 功能包,不同于 ROS1 的 USB_CAM,所以我们要进行安装:
sudo apt install ros-<ros2-distro>-camera-calibration-parsers
sudo apt install ros-<ros2-distro>-camera-info-manager
sudo apt install ros-<ros2-distro>-launch-testing-ament-cmake# 查看摄像头
lsusb
#ros2-cam驱动安装
sudo apt-get install ros-humble-usb-cam
# cv2安装
pip install opencv-python
# 启动
ros2 launch usb_cam demo_launch.py
使用 Rviz2
首先我们通过可视化打开 Rviz2:
ros2 run rviz2 rviz2
然后我们添加摄像头画面,并进行配置:
可以使用ROS 2的内建相机视频图像发布节点,即v4l2_camera软件包的v4l2_camera_node节点,具体运行命令如下:
ros2 run v4l2_camera v4l2_camera_node
运行上述命令后,会发布以下几个与相机视频图像相关的话题:
/camera_info
/image_raw
/image_raw/compressed
/image_raw/compressedDepth
/image_raw/theora
从中可以看出,v4l2_camera_node 节点不仅可以发布一般的视频图像数据(即 /image_raw 话题),还可以发布压缩的视频数据和压缩的深度相机视频数据(发布压缩视频数据需要安装 ros-perception/vision_opencv 和 image_transport_plugins 等依赖包)
这里我们需要通过运行 ROS 2 的软件包 image_transport 的 republish 节点对视频数据解压缩并进行重新发布,解压缩后视频数据话题名称为 image_raw/uncompressed:
ros2 run image_transport republish compressed in/compressed:=image_raw/compressed out:=image_raw/uncompressed
当然,也可以使用用户自定义的软件包及其节点进行相机视频图像发布:
ros2 run spreader_camera_pubsub images_publisher
这样,会发布以下两个与吊具相机视频图像相关的话题:
/camera_info
/image_raw
如果使用用户自定义的软件包及其节点进行相机视频图像发布,必须在发布的类型为 sensor_msgs/msgs/Image 消息变量(如image_msg)中填充其 header 字段的相关信息,包括时间戳(stamp)和坐标系名称(frame_id),如下 Python 代码所示:
image_msg.header.stamp = self. get_clock().now().to_msg()
image_msg.header.frame_id = 'camera'
如果不填充这两个头信息,由于发布的消息其 frame_id 为空,也没有时间戳,就不能正确配置其固定坐标系,也就不能在 RViz2 中显示该话题发布的视频图像数据了
刚开始我们是看不到我们的相机图像的:
为解决这个问题,需要对该视频图像话题的固定坐标系(Fixed Frame)和话题名称(Topic Name)进行配置。对于该话题的固定坐标系,可以通过两种方式进行配置:一是直接将 “Displays” 面板顶部固定坐标系(Fixed Frame)的值由默认的“map”修改为“camera”。注意,对于使用自定义软件包节点发布的视频图像话题来说,坐标系名称有可能并不是 “camera”,而是其它 frame_id,这就需要运行以下命令来查看该视频图像话题的 frame_id:
ros2 topic echo /image_raw --no-arr
这样就会看到如下所示的消息:
header:
stamp:
sec: 1639564328
nanosec: 59671685
frame_id: camera
height: 480
width: 640
encoding: rgb8
is_bigendian: 0
step: 1920
data: '<sequence type: uint8, length: 921600>'
当固定坐标系和话题名称被正确配置后,就可以在“Displays”面板底部的“Image”窗口中正常显示相机视频图像了,如下图所示:
相机标定
首先需要使用包管理器安装软件包:
sudo apt install ros-<ros2-distro>-camera-calibration-parserssudo apt install ros-<ros2-distro>-camera-info-managersudo apt install ros-<ros2-distro>-launch-testing-ament-cmake
需要在工作空间中从源代码构建 Image Pipeline 软件包:
git clone – b <ros2-distro> git@github.com:ros-perception/image_pipeline.git
启动的步骤如下:
在GUI中启动一个终端
启动所使用相机的ROS驱动程序。
确保相机正在通过ROS发布图像。这可以通过运行来测试:
ros2 topic list
- 这将显示你所有发布的话题,确保里面有一个图像话题 /camera/image_raw。确保image_raw话题是一个真实的话题且正在发布图像,需要检查该话题的发布频率:
···shell
ros2 topic hz /camera/image_raw
···
- 启动摄像机标定节点
···shell
ros2 run camera_calibration cameracalibrator --size 7x9 --square 0.20 image:=/my_camera/image_raw camera:=/my_camera
···
这里我们使用棋盘进行标定:
按保存按钮后可以查看到结果。数据保存到 "/tmp/calibrationdata.tar.gz"
要使用该相机标定结果的文件,请执行以下命令解压缩该文件(calibration.tar.gz)
最后我们在标定结果文件夹中,可以看到用于标定的所有图像以及 “ost.yaml” 和 “ost.txt”文件。您可以使用包含相机驱动程序的校准参数的yaml文件。
参考资料
使用Rviz完成摄像头(camera)的视频采集
ROS2相机内参标定
Rviz2 摄像头视频采集与图像标定相关推荐
- ROS安装与Rviz的摄像头视频采集与标定
文章目录 一.ROS的安装与配置 1.添加 ROS 软件源,将下列命令输入到 Ubuntu 的终端执行 2.添加密钥,将下列命令输入到 Ubuntu 的终端执行 3.安装desktop-full 4. ...
- 摄像头视频采集压缩及传输
摄像头视频采集压缩及传输 引言: 摄像头基本的功能还是视频传输,那么它是依靠怎样的原理来实现的呢?所谓视频传输: 就是将图片一张张传到屏幕,由于传输速度很快,所以可以让大家看到连续动态的画面,就像放电 ...
- 摄像头视频采集压缩及传输 1
引言 : 摄像头基本的功能还是视频传输,那么它是依靠怎样的原理来实现的呢?所谓视频传输: 就是将图片一张张传到屏幕,由于传输速度很快,所以可以让大家看到连续动态的画面,就像放电影一样.一般当画面的传输 ...
- FPGA USB FX2 ov5640摄像头视频采集 驱动CY7C68013A实现 提供2套工程源码和技术支持
目录 1.前言 2.我这儿已有的 FPGA USB 通信方案 3.CY7C68013A芯片解读和硬件设计 FX2 简介 SlaveFIFO模式及其配置 4.工程详细设计方案 5.vivado工程 6. ...
- linux下基于qt和v4l2驱动的usb摄像头视频采集与显示,用v4l2和framebuffer实现usb摄像头视频采集并显示...
Windows程序是基于消息的,不管其封装形式如何,最后都要包含如下代码MSG msg;while(GetMesssage(msg)){TranslateMessage(msg);DispatchMe ...
- Linux 下摄像头视频采集与显示
说明: 1.本文所提及的摄像头不是zc0301p,使用的API不是V4L,显示所使用的上位机不是QT,特此说明. 2.UVC只是一个驱动,如果它能成功驱动摄像头,会在/dev目录下出现video(或v ...
- linux 远程挂载摄像头_如何实现嵌入式Linux下USB摄像头视频采集
展开全部 在linux下所e5a48de588b662616964757a686964616f31333337613134有设备都是文件.所以对摄像头的操作其实就是对文件的操作.USB摄像头的设备文件 ...
- V4L2+Qt5实现摄像头视频采集以及参数控制
这一段时间在做摄像头控制方面的工作,需要在Linux下实现对摄像头名称和分辨率的获取,同时对亮度.对比度.曝光值等参数进行控制,同时还需要对获取的帧画面进行处理.目前除了图像处理方面,简单的使用V4l ...
- Linux下Qt5: QMediaRecorder的问题,以及使用QCamera相关类进行摄像头视频采集
版本信息: Qt 5.8.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 5.3.1 20160406 (Red ...
最新文章
- 超越谷歌MobileNet!华为提出端侧神经网络架构GhostNet|已开源
- python 内置函数 eval()函数 (用来执行一个字符串表达式,并返回表达式的值)
- 您是否敢更改HashMap实现?
- Nessus进行漏洞扫描的过程
- 1、.Net Core 基础
- potplayer 多个进程_什么是进程
- (day9)357. 计算各个位数不同的数字个数
- java创新创业比赛项目教程_java毕业设计_springboot框架的大学生创新创业项目管理...
- 2010年翡翠岛露营
- html中svg修改背景颜色,如何更改SVG图像中的背景颜色?
- 汽车软件行业工程师详细介绍?(中)
- Python-元祖-字典
- 中南民族大学 计算机科学学院,中南民族大学 计算机科学学院 蒋天发老师简介 联系方式 手机电话 邮箱...
- 程序员学金融-日本(2)- 高负债风险
- 电脑软件:推荐八款图片处理工具,值得收藏
- 如何学C语言,新手必看!
- 武大2018计算机排名,厉害了大武汉!2018年有5所高校上榜世界大学500强,华科排名超武大...
- You may need an additional loader to handle the result of these loaders
- 新年寄语 给自己吧
- 截取手机号的前三位与后四位