admin管理员组

文章数量:1569552


系列文章目录
实验一:Ubuntu系统中的USB设备绑定实验
第五章:常用传感器功能包与数据处理
第八章:ROS系统的视觉交互开发

第八章-ROS系统的视觉交互开发

  • 前言
  • 第一节 深度摄像机交互式原理认知
  • 第二节 在ROS中使用openCV处理图像实验(X)
    • 一、实验目的
    • 二、实验内容
    • 三、实验环境
    • 四、实验步骤
      • 任务 1:安装OpenCV库
      • 任务 2:编写ROS节点
      • 任务 3:加载图片
      • 任务 4:对图片进行处理
      • 任务 5:发布处理后的图片
      • 任务 6:运行节点
    • 五、注意事项
    • 六、拓展练习
  • 第三节 使用深度相机采集深度图像和 RGB 图像
    • 1)启动摄像头
    • 2)打开rviz
    • 3)插入可视化话题 rgb image
    • 4)插入可视化话题 depth image
    • 5)插入可视化话题 depth pointsCloud2
  • 第四节 使用深度相机结合激光雷达完成 3D-SLAM 建图
    • 1)通过虚拟机(ssh)启动小车底层
    • 2)通过虚拟机(ssh)启动深度相机及RTAB-MAP包:
    • 3)新建一个终端,启动 rviz:
  • 第五节 在三维地图中完成小车的自主导航
  • 第六节 使用摄像头完成沿车道线运动
  • 第七节 使用摄像头完成单线寻迹
  • 总结


前言


第一节 深度摄像机交互式原理认知

参考:
双目、结构光、tof,三种深度相机的原理区别看这一篇就够了!:
https://blog.csdn/oakchina/article/details/130703831


第二节 在ROS中使用openCV处理图像实验(X)

一、实验目的

1.认识opencv在图像转换的作用。
2.掌握ROS中使用opencv的方法

二、实验内容

ROS中集成了OpenCV库和相关的接口功能包,非常有利于机器视觉方面的快速开发。通过该功能包可以实现ROS中的图像数据和OpenCV格式的图像相互转换,从而实现便捷的图像处理和图像传输。
本实验的主要内容为使用OpenCV库修改已有图片的灰度。

三、实验环境

电脑笔记本,Vmware虚拟机,Ubuntu系统。

四、实验步骤

任务 1:安装OpenCV库

在ROS中使用使用以下命令安装OpenCV库: sudo apt-get install ros- -opencv3

任务 2:编写ROS节点

使用以下命令创建ROS包和节点:

mkdir -p ros_cv/src
cd ros_cv
catkin_make
cd ros_cv/src
catkin_create_pkg opencv_test rospy cv_bridge sensor_msgs  

任务 3:加载图片

使用以下代码加载图片:

import cv2 
from cv_bridge import CvBridge 
from sensor_msgs.msg import Image  
bridge = CvBridge() 
 
def image_callback(msg): 
    img = bridge.imgmsg_to_cv2(msg, desired_encoding='passthrough')

任务 4:对图片进行处理

python 
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

任务 5:发布处理后的图片

python 
img_msg = bridge.cv2_to_imgmsg(gray_img, encoding='passthrough') 
image_pub.publish(img_msg) 

任务 6:运行节点

五、注意事项

六、拓展练习


第三节 使用深度相机采集深度图像和 RGB 图像

参考手册(第十节)
智能车配备一个深度相机,其中可以获取小车前方的深度信息和 RGB 图像信息。

我们可以使用深度信息实现基于 3D 视觉的 SLAM 建图功能,也可以使用 RGB 图像完成图像处理的一系列功能。EPRobot 中提供了 RBG 图像和深度图像获取的测试程序,用户可以使用该信息进行后续的进阶功能。

由于出厂批次的不同,小车配置的深度相机型号略有不同,虽然参数基本一致,但驱动程序不同,所以手册涉及到摄相同功能的部分,运行 launch 文件的参数略有不同。
小车配备如下图所示的两种相机:

由于需要在 rviz 上直观测试,本节所有操作都在我们提供的虚拟机ubuntu18 上进行,具体操作步骤如下:

1)启动摄像头

打开小车,连接小车 WiFi。在虚拟机系统中新建一个终端,使用 ssh 命令远程连接小车(也可使用 Bitvise SSH Client 软件连接小车),启动 RGB 图像采集程序:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start astra_rgb_ir_depth.launch (A 型摄像头)
roslaunch astra_camera astra.launch (B 型摄像头)

2)打开rviz

新建一个终端,启动 rviz:

rviz

3)插入可视化话题 rgb image

在界面中新建可视化,选择“by topic”中的 rgb image 话题,如下图所示,即可看到 rgb 图像输出。

4)插入可视化话题 depth image

在界面中新建可视化,选择“by topic”中的 depth camera 话题,如下图所
示,即可看到深度图像输出。

5)插入可视化话题 depth pointsCloud2

在界面中新建可视化,选择“by topic”中的 depth pointsCloud2 话题,将 global option 中的 Fixed Frame 设置为 camera_link,并设置 pointsCloud2 的话题为 /camera/depth_registered/points ,如下图所示,即可看到深度点云输出。



可以尝试切换 pointsCloud2 中的 Color Transformer,来修改点云的显示效果。
在 pointsCloud2 中有很多选项,我们来详细说明各选项的作用。首先,Style 是指 Rendering mode to use, in order of computational complexity。选择要使用的渲染模式,按计算复杂度排序。选项为:Points、Squares、Flat Squares、Spheres、Boxes。分别为点、矩形、扁平化矩形、球形、立方体形。
Points 的效果:

Squares 的效果:

Flat Squares 的效果:

Spheres 的效果:

Boxes 的效果:

Size 是 Point size in meters。改变点云内点的尺寸。如果上方 Style 选择为点,则改变点的大小,其他 Style 则单位是米。
点形,Size 为 3:

点形,Size 为 9:

矩形,Size 为 0.01:

矩形,Size 为 0.02:

其他形状类似矩形。

  • Alpha 是 Amount of transparency to apply to the points. Note that this is experimental and does not always look correct。要应用于这些点的透明度的量,实验性的,有时会出错。无法改变其值。
  • Decay Time 是 Duration, in seconds, to keep the incoming points. 0 means only show the latest points。衰变时间,单位秒,输入的点的延迟,0 表示显示实时的点。
  • Position Transformer 是 Set the transformer to use to set the position of the points。设置位置变换,用于设置点的位置。只有 XYZ 选项可选。
  • Color Transformer 是 Set the transformer to use to set the color of the points。设置点的颜色,有 AxisColor、Flatcolor、Intensity、MONO8、RGB8 五个选项。

AxisColor 的效果:

Flatcolor 的效果:

Intensity 效果同上。

MONO8 的效果,灰度图:

RGB8 的效果,彩色图:

Queue Size 是 set the size of the incoming PointCloud2 message queue.

Increasing this is useful if your incoming TF data is delayed significantly from your PointCloud2 data, but it can greatly increase memory usage if the messages are big。
(译)设置输入的点云数据队列,如果 TF 数据明显延迟于点云数据,可以增加该数值,但是如果数据量过于大会明显增加内存使用量。

切记切记:完成内容,一定要在打开的终端中按下 Ctrl+C 结束程序!!!否则影响后续的程序功能!!!


第四节 使用深度相机结合激光雷达完成 3D-SLAM 建图

参考手册(第十一节)
智能车可以利用深度相机和激光雷达的结合,实现 3D-SLAM 建图的功能。当然,我们也可以选择不使用激光雷达,使用单一的深度相机完成 SLAM 建图。

智能车搭载了 RTAB-MAP 的 3D 建图算法包,其可以融合任何来源的里程计、深度图像、双目立体图像以及激光雷达数据。由于需要在 rviz 上直观测试,本节所有操作都在虚拟机的 ubuntu18 上进行,具体操作步骤如下:

1)通过虚拟机(ssh)启动小车底层

打开小车,连接小车 WiFi。在虚拟机系统中新建一个终端,使用 ssh 命令远程连接小车,并启动小车的底层驱动程序:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start EPRobot_start.launch

2)通过虚拟机(ssh)启动深度相机及RTAB-MAP包:

新建一个终端,使用 ssh 命令远程连接小车,并启动深度相机和 RTAB-MAP 功能包:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start astra_rgbd_mapping.launch 

注意:
如果是 A 型 摄 像 头 , 以 上 launch 文 件 的 第 60 行 应 为
( 路 径 为 ~/robot_ws/src/eprobot_start/launch ):

<include file="$(find eprobot_start)/launch/astra_rgb_ir_depth.launch" /> 

如果是 B 型摄像头,以上 launch 文件的第 60 行应为:

<include file="$(find astra_camera)/launch/astra.launch" />

3)新建一个终端,启动 rviz:

rviz

4)rviz 中新建可视化

在界面中的 Fixed Frame 选择 map,新建可视化,选择 “by display type” 中MapCloud 和 MapGraph 话题,并将 “Topic” 选择为仅有的话题,如下图所示,即可看到建立出来的 3D 地图和行动轨迹了。注意,请将 MapCloud 的“Style”选择 “Points”。


此时,我们通过启动上位机的 arbotix_gui 对小车进行控制,即可开始建图过程。小车在建图过程中不断移动和转向,3D 图像起初会比较模糊或者有重叠,但是由于RTAB-MAP 有回环检测功能,我们只需要控制小车多次跑完所有区域,地图便会不断精确。

小车使用深度相机和激光雷达扫描的地图会实时保存,构建时,地图就会实时保存到路径/home/EPRobot/.ros 文件夹中,rtabmap.db 即是由二维栅格数据和深度图像构成的地图库。建图之后,可以使用 Ctrl+C 随时退出。

注意:如果要进行导航测试,可以先不关闭该建图的终端。


第五节 在三维地图中完成小车的自主导航

参考手册(第十二节)

由于小车在 3D 地图和 2D 地图下的导航功能和操作基本一致,我们在此一并给出调出导航功能的命令,不再对导航环节的操作进行单独的介绍,相关操作可参考本书的第八节。
使用小车在建立好的 3D 地图下自主导航,具体操作步骤如下:
1)不关闭建图终端,再在虚拟机新建一个终端,使用 ssh 命令远程连接小车,并
启动导航功能包:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start astra_rgbd_navigation.launch

2)保留 rviz 中二维地图导航中的可视化元素,以及上一节加入的新元素,该导航
功能仍然使用 2D 导航中的规划算法。


第六节 使用摄像头完成沿车道线运动

参考手册(第十三节)
智能车的前置深度相机自带一个 RGB 摄像头,由于树莓派 4B 的性能局限性,可以通过编写相应的程序实现简单的图像处理和神经网络模型。

智能车中提供了一个图像处理方式的车道线检测程序,由于需要在 rviz 上直观测试,本节所有操作都在虚拟机的 ubuntu18 上进行,具体操作步骤如下:

1)打开小车,连接小车 WiFi。在虚拟机系统中新建一个终端,使用 ssh 命令远程
连接小车,并启动小车的底层驱动程序:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start EPRobot_start.launch

2)若小车为 B 型摄像头,新建一个终端,使用 ssh 命令远程连接小车,并启动摄像头:

ssh EPRobot@192.168.12.1
roslaunch astra_camera astra.launch

若小车为 A 型摄像头,忽略此步。
3)新建一个终端,使用 ssh 命令远程连接小车,并启动巡线程序:

ssh EPRobot@192.168.12.1
roslaunch track_detection Track_Detecation.launch

4)新建一个终端,启动 rviz:

rviz

在 rviz 中添加两个 image 消息,选择相应的话题名称就可以看到下面显示的图像数据,左边是原始彩色图像,右边是二值化图。调整小车的深度相机角度,使二值化图中的车道线最下方占据图像下方两个角,在二值化图中可以看到车道的中线。


当以上操作完成后,可以通过设置参数,来允许 EPRobot 沿中线移动。打开一个新的终端,连接小车,输入以下命令:

ssh EPRobot@192.168.12.1
rosparam set /Track_Detection_node/StartMove true

EPRobot 便开始沿着车道线移动。

  • 通过修改参数调整小车沿车道线移动的速度,将以下路径的 launch 文件打开,修改参数”HiBotSpeed”即可。
  • 通过修改GyraThreshold 参数来调整图片二值化的阈值,以适应不同颜色的车道线。

第七节 使用摄像头完成单线寻迹

参考手册(第十四节)

1)打开小车,连接小车 WiFi。在虚拟机系统中新建一个终端,使用 ssh 命令远程连接小车,并小车的底层驱动程序和摄像头节点。
文件启动后,会发布/camera/rgb/image_raw/compressed 消息话题。巡线节点会监听这个话题:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start EPRobot_camera.launch

2)若小车为 B 型摄像头,新建一个终端,使用 ssh 命令远程连接小车,并启动摄像头:

ssh EPRobot@192.168.12.1
roslaunch astra_camera astra.launch

若小车为 A 型摄像头,忽略此步。
3)新建一个终端,启动 rviz:

rviz

在 rviz 中添加两个 image 消息,选择相应的话题名称就可以看到下面显示的 2 个图像数据,左边是原始彩色图像,右边是二值化图。保证相机的角度为正向朝前。由于深度相机的 RGB 摄像头不在正中间,所以图像中用红线标注了视角中小车实际的正前方,红点表示黑线识别结果,小车沿着图片上显示的黑线运动。

4)当以上操作完成后,可以通过运行以下巡线指令来使小车完成巡黑线运动。在
虚拟机打开一个新的终端,连接小车,输入以下命令:

ssh EPRobot@192.168.12.1
roslaunch eprobot_start follower_line.launch

智能车便开始沿着黑线移动。还可以通过修改参数调整小车沿黑线移动的转弯程度。将以下路径的 launch 文件打开,修改参数” forward_velocity”调整小车的前进速度,修改参数” scale_diversion”调整小车的转弯程度。

如 果 巡 线 的 颜 色 有 所 变 化 , 可 以 通 过 修 改 源 文件/home/EPRobot/robot_ws/src/eprobot_start/follower_line.py 中的以下两组参数来调整:

这两组参数表示要筛除的颜色 hsv 值。lower_line 指的是图像中低于这个的值,图像值变为 0,upper_line 指的是图像中高于这个的值,图像值变为 0,而在 lower_line~upper_line 之间的值变成 255。


总结

以上就是今天要讲的内容,谢谢查阅,如有问题,及时反馈。

本文标签: 第八章视觉系统ros