启明办公

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 87|回复: 0

ROS传感器之Camera实践

[复制链接]

1

主题

7

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2022-11-18 15:44:33 | 显示全部楼层 |阅读模式
. Camera接口类型

在自动驾驶领域,Camera常用接口有USB和网络接口,本文以USB接口为例。
二. Camera驱动
大部分USB相机可以直接在Ubuntu上直接使用,将相机USB口接入电脑后,会自动生成设备文件,一般在/dev目录下,文件名为videoX,X是相机接入序号,从0开始。
如果是嵌入式设备,或者特殊USB相机,可能需要厂家提供平台驱动。驱动安装之后,接入相机,看到设备文件/dev/videoX后,可以使用相机。
三. image_pipeline metapackage
metapackage即元包,包含多个ros package,具体概念可以参考ROS传感器之LIDAR实践一,image_pipeline metapackage基于opencv而实现,其对camera驱动输出的元数据做预处理,便于后续算法使用,可以支持单目、双目以及深度相机;支持校验、图像处理以及显示等,本篇介绍image_publisher package。image_publisher可以直接从图片、视频或者camera驱动读取数据,封装为ros数据格式发布出来。
四. 编译image_pipeline
更新编译代码:
cd ~/workspace/ros_program_melodic/catkin_ws/
git pull
catkin_make五. image_pipeline metapackage结构
执行以下指令:
cd src/drivers/camera/image_pipeline
tree -L 1执行效果如图




image_pipeline metapackage包括以下ros package:
image_publisher:从源读出图像数据,封装为sensor_msgs/Image和sensor_msgs/CameraInfo格式,发布出来。源包括图片、视频和相机。
image_proc:处理单目相机图像数据,订阅sensor_msgs/Image和sensor_msgs/CameraInfo格式数据,进行图像校验处理,发布处理前后的数据。
stereo_image_proc:处理双目相机图像数据,订阅两路sensor_msgs/Image和sensor_msgs/CameraInfo格式数据,进行图像校验处理,发布处理前后的数据。
depth_image_proc:处理深度相机图像数据,与image_proc类似,可以将处理之后的图像数据转化为点云数据,发布出来。
camera_calibration:使用棋盘格校准目标方法,校验单目和双目相机。
image_rotate:旋转图像数据。
image_view:显示图像数据。
wiki_files目录不是ros包,存放一些wiki网站使用的图片。
本篇介绍image_publisher节点,这是运行其他节点的基础,对其他节点感兴趣的同学,可以自行学习,这里不做介绍。
六. 运行image_publisher节点
image_publisher节点可以读取图片、视频和摄像头数据,封装为ros message后,发布出来。这里以图片为例,介绍节点使用方式。
1. 启动节点
执行以下指令:
roscore
rosrun image_publisher image_publisher /opt/ros/melodic/share/rviz/images/splash.png只要安装了ros melodic版本,都会有splash.png这个文件,且路径一致。
2. 查看节点发布的topic名字
执行以下指令:
rostopic list执行结果如图




3. 使用image_view显示图像数据
执行以下指令:
rosrun image_view image_view image:=/image_publisher_1603025741590002479/image_raw执行效果如图




注意,这里的image参数值需要与第2步保持一致,匿名节点每次启动节点名会有一个随机值。
4. 使用rviz显示图像数据
执行以下指令:
rosrun rviz rviz然后点击add按钮,选择topic中的image项,即可显示,具体可以参考演示视频。


https://www.zhihu.com/video/1554959374065569792


5. 查看节点话题流程
执行以下指令:
rqt_graph执行效果如图:




可以参考操作演示视频。

七. 源码
和激光雷达类似,图像属于大数据类型,image_pipeline中的节点使用nodelet实现,关于nodelet可以参考:ROS Nodelet介绍篇。
image_pipeline源码链接:https://github.com/ros-perception/image_pipeline
在源码基础之上,添加部分中文注释部分,感兴趣的小伙伴,可以结合的代码,深入学习,链接:https://github.com/ahuer2435/ros_program_melodic/tree/master/catkin_ws/src/drivers/camera/image_pipeline
如果下载了ros_program_melodic工程,只需要更新下仓库即可获得,即执行
git pull八. 其他数据
1. 读取视频文件
将参数改为视频文件即可,执行以下指令:
rosrun image_publisher image_publisher  /xxx/1.mp42. 读取摄像头数据
将参数改为摄像头设备号或者设备文件,执行以下指令:
rosrun image_publisher image_publisher  0与以下指令等价:
rosrun image_publisher image_publisher  /dev/video0九. 其他数据包
image_pipeline元包基于Opencv实现,支持多种类型摄像头,对图像数据进行前处理,转化为ros数据发布出来。如果不支持Opencv的设备,可以考虑使用usb_cam包,此包使用V4L2直接实现。
十. 小结
本篇介绍如何使用image_pipeline元包,对图像、视频和相机做处理,并对源码做了必要的注释,建议大家实际跑跑代码,加深理解。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|天恒办公

Copyright © 2001-2013 Comsenz Inc.Template by Comsenz Inc.All Rights Reserved.

Powered by Discuz!X3.4

快速回复 返回顶部 返回列表