ROS中阶笔记(五):机器人感知—机器视觉(上)

本文涉及的产品
资源编排,不限时长
简介: ROS中阶笔记(五):机器人感知—机器视觉

1 ROS中的图像数据


1.1 二维图像


1.1.1 安装安装usb_cam


步骤一,检测电脑是安装usb_cam还是应该安装uvc_cam


$ lsusb                         #查看usb摄像头


打开网址:http://www.ideasonboard.org/uvc/,查看与自己摄像头匹配的ID号。

如果有,就说明你的笔记本摄像头比较好,有他的厂商提供的linux驱动,是uvc_cam

没有匹配的ID,说明是usb_cam。


Bus 001 Device 002: ID 04f2:b6d9 Chicony Electronics Co., Ltd #摄像头

Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Bus 002 Device 004: ID 0e0f:0008 VMware, Inc.

Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub

Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub


步骤二,查看摄像头设备


$ ls /dev/video*                     #默认笔记本自带摄像头是video0


步骤三,测试您的网络摄像头;(虚拟机+ubuntu16.04)


$ sudo apt-get install cheese
$ cheese                                       # 启动cheese查看摄像头情况


步骤四,安装usb_cam


$ sudo apt-get install ros-kinetic-usb-cam    # 安装摄像头功能包
$ roslaunch usb_cam usb_cam-test.launch       # 启动功能包
$ rqt_image_view                              # 可视化工具


新版本的usb_cam包在launch文件夹下有自带的launch文件,名叫usb_cam-test.launch


1.1.2 显示图像数据


显示图像类型


$ roslaunch usb_cam usb_cam-test.launch     
$ rostopic info /usb_cam/image_raw


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNTA1MTk2MjYucG5n.png


查看图像消息


$ rosmsg show sensor_msgs/Image


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNTAzNDE5MTAucG5n.png


Header:消息头,包含消息序号,时间戳和绑定坐标系;

height:图像的纵向分辨率;

width:图像的横向分辨率;

encoding:图像的编码格式,包含RGB、YUV等常用格式,不涉及图像压缩编码;

is_bigendian:图像数据的大小端存储模式;

step:一行图像数据的字节数量,作为数据的步长参数;

data:存储图像数据的数组,大小为step*height个字节;


1080 * 720分辨率的摄像头产生一帧图像的数据大小是 3 * 1080 * 720=2764800字节,即2.7648MB


压缩图像消息


$ rosmsg show sensor_msgs/CompressedImage


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNTE5MTYwOTgucG5n.png


  • format:图像的压缩编码格式(jpeg,png,bmp)
  • data:存储图像数据数组


1.2 三维图像(kinect)


红外摄像头采集三维点云数据,采集的位置信息从xyz三个方向上描述,每一个方向上的数据都是一个浮点数;


一个浮点数占据的空间大小为4个字节。


显示点云类型


$ roslaunch freenet_launch freenect.launch      #启动kinect 
$ rostopic info /camera/depth_registered/points


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNTUyNTk0MDMucG5n.png


查看点云消息


$ rosmsg show sensor_msgs/PointCloud2



height:点云图像的纵向分辨率;

width:点云图像的横向分辨率;

fields:每个点的数据类型;

is_bigendian:数据的大小端存储模式;

point_step:单点的数据字节步长;

row_step:一列数据的字节步长;

data:点云数据的存储数组,总字节大小为row_step*height;


is_dense:是否有无效点;如果有无效点,考虑这一帧的图像数据是否保留或者舍弃。

点云单帧数据量也很大,如果使用分布式网络传输,需要考虑能否满足数据的传输要求,或者针对数据进行压缩。


2 摄像头标定


2.1 摄像头标定准备工作


图像数据采集之前,需要把摄像头进行一些标定,关于如何标定,我们需要外部工具:棋盘格标定靶


摄像头为什么要标定?


摄像头这种精密仪器对光学器件的要求较高,由于摄像头内部与外部的一些原因,生成的物体图像往往会发生畸变,为避免数据源造成的误差,需要针对摄像头的参数进行标定。


安装标定功能包


$ sudo apt-get install ros-kinetic-camera-calibration


2.2 摄像头标定流程


2.2.1 普通摄像头标定流程


1.启动摄像头


$ roslaunch robot_vision usb_cam.launch      # 启动摄像头功能包  
$ roslaunch usb_cam usb_cam-test.launch       # 启动摄像头功能包


2.启动标定包


$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.024 image:=/usb_cam/image_raw camera:=/usb_cam 
# 8x6,中间是x,而不是乘号;
# 启动标定包之后,把棋盘格标定靶放在摄像头的可视范围内;
# square 0.024 实际打印出来纸张的正方形边长,自己拿尺子测量;0.024米
- 1.size:标定棋盘格的内部角点个数,这里使用的棋盘一共有六行,每行有8个内部角点;
- 2.square:这个参数对应每个棋盘格的边长,单位是米;
- 3.image和camera:设置摄像头发布的图像话题;


3.标定过程


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNzA0NTI0MDcucG5n.png


X:标定靶在摄像头视野中的左右移动,变为绿色说明已经满足标定需求;

Y:标定靶在摄像头视野中的上下移动;

Size:标定靶在摄像头视野中的前后(远近)移动;

Skew:标定靶在摄像头视野中的倾斜转动;

CALIBRATE:标定之前是灰色;标定成功之后,变为深绿色,说明当前标定已经结束;点击它,界面好像未响应,这是因为它在后台进行数据运算,不要关闭;


后面两个灰色灰色按键SAVE、COMMIT变为深绿色,说明计算完成;


4.同时在终端中显示标定结果:


点击按键SAVE,在终端中显示标定的数据放在哪一个路径下面;


(‘Wrote calibration data to’, ‘/tmp/calibrationdata.tar.gz’)


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNzE5MTk3NDcucG5n.png


5.解压缩——找到标定文件


(‘Wrote calibration data to’, ‘/tmp/calibrationdata.tar.gz’)


找到calibrationdata.tar.gz文件,解压,里面有很多图片(在做标定的时候,采样图片,这些图片已经没用),我们需要只有一个文件ost.yaml文件,把这个文件拷贝到功能包(自己建的任务的功能包)下面;


image_width: 640
image_height: 480
camera_name: narrow_stereo
camera_matrix:
  rows: 3
  cols: 3
  data: [672.219498, 0.000000, 322.913816, 0.000000, 676.060141, 220.617820, 0.000000, 0.000000, 1.000000]
distortion_model: plumb_bob
distortion_coefficients:
  rows: 1
  cols: 5
  data: [-0.146620, 0.187588, 0.001657, 0.000009, 0.000000]
rectification_matrix:
  rows: 3
  cols: 3
  data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000]
projection_matrix:
  rows: 3
  cols: 4
  data: [655.937012, 0.000000, 323.001754, 0.000000, 0.000000, 665.393311, 220.554221, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]


2.2.2 Kinect标定流程


Kinect包含彩色摄像头和红外摄像头,我们需要针对两个摄像头分别做标定。


1.启动Kinect


$ roslaunch robot_vision freenect.launch


2.启动彩色摄像头


$ rosrun camera_calibration cameracalibrator.py image:=/camera/rgb/image_raw camera:=/camera/rgb --size 8x6 --square 0.024


3.标定红外摄像头


$ rosrun camera_calibration cameracalibrator.py image:=/camera/ir/image_raw camera:=


2.3 摄像头使用标定文件


2.3.1 普通摄像头如何使用标定文件?


在launch文件中加载标定文件,通过camera_info_url参数来进行加载;


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNzQ2Mjg3NDYucG5n.png


2.3.2 Kinect如何使用标定文件?


Kinect因为有两个标定文件,因此需要通过两个参数的加载来完成;把两个文件都加载在进来。


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNzUyMDEyMDIucG5n.png


2.3.3 使用标定文件时可能产生的错误


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTQwNzU2Mjc0NjgucG5n.png


原因:标定文件中camera_name参数与实际传感器名称不匹配


解决方法:按照警告提示的信息进行修改即可。


比如根据上图所示的警告,分别将两个标定文件.yaml中的camera_name参数修改为

“rgb_A70774707163327A”、“depth_A70774707163327A”即可。


相关实践学习
使用ROS创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
1月前
|
Ubuntu 机器人 Linux
|
10天前
|
存储 传感器 编解码
ROS机器视觉入门:从基础到人脸识别与目标检测
【11月更文挑战第9天】从本文开始,我们将开始学习ROS机器视觉处理,刚开始先学习一部分外围的知识,为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。
114 56
|
13天前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
18天前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
|
1月前
|
传感器 数据可视化 机器人
【ROS速成】半小时入门机器人ROS系统简明教程之可视化系统(三)
半小时入门机器人ROS系统简明教程之可视化系统
|
1月前
|
机器人
【ROS速成】半小时入门机器人ROS系统简明教程之安装测速(二)
半小时入门机器人ROS系统简明教程之安装测速
|
3天前
|
自然语言处理 算法 机器人
智能电话销售机器人源码搭建部署系统电话机器人源码
智能电话销售机器人源码搭建部署系统电话机器人源码
12 4
|
14天前
|
机器学习/深度学习 传感器 算法
智能机器人在工业自动化中的应用与前景###
本文探讨了智能机器人在工业自动化领域的最新应用,包括其在制造业中的集成、操作灵活性和成本效益等方面的优势。通过分析当前技术趋势和案例研究,预测了智能机器人未来的发展方向及其对工业生产模式的潜在影响。 ###
57 9
|
6天前
|
机器学习/深度学习 人工智能 运维
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
24 0
|
10天前
|
机器人 人机交互 语音技术
智能电销机器人源码部署安装好后怎么运行
销售打电销,其中90%电销都是无效的,都是不接,不要等被浪费了这些的精力,都属于忙于筛选意向客户,大量的人工时间都耗费在此了。那么,有这种新型的科技产品,能为你替代这些基本的工作,能为你提升10倍的电销效果。人们都在关心智能语音客服机器人如何高效率工作的问题,今天就为大家简单的介绍下:1、智能筛选系统:电销机器人目前已经达到一个真人式的专家级的销售沟通水平,可以跟客户沟通,筛选意向,记录语音和文字通话记录,快速帮助电销企业筛选意向客户,大大的节约了筛选时间成本和人工成本。2、高速运转:在工作效率上,人工电销员,肯定跟不上智能语音机器人,机器人自动拨出电话,跟客户交谈。电话机
86 0

推荐镜像

更多
下一篇
无影云桌面