多传感器融合技术——基于Ubuntu Linux系统ROS平台的数据可视化

博主之前就简单写了当前手上传感器融合感知项目中的视觉感知部分,现在一方面自己在进一步学习深蓝学院多传感器融合技术的课程[课程相关git材料链接],另一方面,结合自己手上的融合感知型项目,自己就再简单写写融合感知算法相关环境的分享吧。我们服务器的操作系统是使用的Ubuntu系统,采用ROS软件平台进行融合感知算法实现,传感器的实时数据传到服务器端,再进行感知融合计算。 所以其实可以看出,服务器端需要支撑大量的数据处理和计算能力,所以都是配置上相应强大计算功能的显卡来满足的。我这里的分享,就简单基于自己的个人电脑来简单实现和介绍吧,主要是通过VMware虚拟机来安装Ubuntu,然后在ROS平台系统上做数据可视化的示例,数据集就直接采用开源的KITTI 数据集。以下为相应的环境配置:

VMware Workstation Pro 15.0
Ubuntu18.04
ROS Melodic

ROS具有不同的版本,并且每一种版本与特定的Ubuntu系统相关联。例如ROS Kinectic对应Ubuntu 16.04版本,ROS Melodic对应Ubuntu 18.04版本。

1. VMware下安装Ubuntu

Ubuntu(乌班图)是一个基于Debian的以桌面应用为主的Linux操作系统。但其实本人的电脑本身用的是windows系统,所以通过VMware虚拟机来实现Ubuntu系统的安装和使用。论坛及网上已经有很多这方面的博客及安装教程,我这里就不展开详述。个人实际安装配置过程中发现不同的问题,再针对性的去解决即可。就像在实际项目中一样,多台不同服务器的配置过程中,可能就有部分服务器配置情况问题有不一样,需要相应针对性排查解决。以下给出几个我认为不错的安装博文,供大家参考了:

使用虚拟机Ubuntu进行深度学习

虚拟机安装ubuntu

2. ROS平台

无人驾驶系统是由多种技术集成,包括了驾驶环境感知、路径规划和车辆控制等组件,每类组件由算法集合组成,一般基于各类分布式程序框架来构建,通过车载总线技术实现各组件 之间信息交互通信。机器人操作系统(ROS)是一个强大而灵活的机器人编程框架,是一种基于消息传递通信的分布式多进程框架,有很多知名的机器人开源函数库,quaternion的坐标转换、3D点云处理驱动、定位算法SLAM等都是开源贡献者基于ROS开 发的。可以说ROS是机器人学习和无人车学习最好Linux平台软件,资源丰厚。无人车的规划、控制算法通常运行在Linux系统上,各个模块通常使用ROS进行连接。
ROS最重要的特点就是:分布式、可移植和丰富的工具。支持分布式计算,这为实验提供了有利的条件。ROS的可移植行能够方便的实现代码的重用,减少重复开发工作。另外,ROS提供的丰富工具也在本实验记录数据、可视化调试提供了重要保证。所以其在机器人开发、自动驾驶领域应用十分广泛,百度研发的“阿波罗”自动驾驶操作系统就是基于ROS开发的。
下面我这里就给出Ubuntu 18.04环境下安装ROS Melodic的参考教程,供大家参考了:
ROS安装笔记

3. 数据集

其实在博主的机器学习系列博文中已经论述过,供给算法模型训练用的数据的质量是很关键的,这会影响算法训练的效果,进而影响实际场景的感知预测。博主上一篇也已经论述了融合感知所使用到的深度学习算法。在机器学习和深度学习算法中,有效准确的数据集是很重要的。实际训练数据集的获得,除了广泛的采集不同场景的数据,还需要做大量的标注工作,这其实是很大的工作量的事情。所以数据集相关的工作流如下:
1) 采集设备的联合调试,如摄像头和激光雷达等多传感器的时间同步和联合标定等工作
2) 数据采集工作开展,业务场景下的数据量要足够
3) 采集到的照片、点云数据都需要进行标注。
以上这些都是数据集相关的准备工作,有些公司可能有专门的数据采集和标注团队,有些标注工作或者外包出去,都是基于成本和进度方面的考量。标注这块每一帧的照片、点云数据都得标注,相关的标注目标物类型类型和规则也是要提前确定,毕竟根据不同业务关注点可能不需要涵盖所有目标物类型。点云标注简单示意如下:
在这里插入图片描述

其实目前开源的数据集很多,还是可以供大家了解学习的,如微软提供MS COCO数据集、百度提供的Apollo Scape 数据集、nu Tonomy 提供的nu Scenes数据集。作为介绍学习,博主这里就采用的是目前使用最多,也是自动驾驶研究领域最大的开源数据集 KITTI 数据集。KITTI数据集的下载,大家可以参考下面的博文:
从零开始做自动驾驶定位(二): 数据集

KITTI数据集的数据采集平台为一辆装满传感器的大众轿车。其中图像采集方面,搭载灰度相机、彩色相机各2个,点云采集方面,搭载Velodyne公司64线激光雷达一台;在位姿采集方面,搭载有GPS系统与IMU模块。这些传感器通过标定与同步后,以10Hz的频率进行采样。数据采集平台在实际交通道路中行驶并采集周围数据,包括市区、乡村、高速等多种常见场景。信息丰富多样而真实,一帧图片中可多达15辆车与30个行人,同时真实的反映出遮挡等问题。

4. 数据可视化

使用KITTI中的点云及图像数据作为输入传感器数据,同时使用 ROS作为基础软件平台。因此,首先要在ROS中使用KITTI的数据,将KITTI中传感器数据转换成ROS消息并通过话题发布出去,同时使用可视化工具RVIZ进行直观的显示,方便调试。
这里我们通过下载KITTI中的原始数据(raw_data),这些数据包括有左右相机的黑白图像、彩色图像、激光雷达点云、GPS与IMU数据。这些数据都有着对应时间顺序的编号,由于相机与激光雷达设置了相同的采样频率(10Hz),因此相同编号的图片与点云代表着同一帧的场景。其中每帧图片格式为 PNG 格式、对应的点云格式为 bin 文件(包含 x, y,z,r 四个信息,前三者代表空间坐标,后者代表激光雷达反射率)。
通过使用 kitti2bag 工具箱,将这些文件夹内的传感器数据,转换成ROS下可以播放的 rosbag类型。在ROS中通过rosbag play命令播放传感器信息。按照传感器的时间戳,将各个传感器的数据对应起来。原始数据中的相机、激光雷达、GPS 与 IMU 传感器数据变成 ROS 话题在 ROS 网络中广播,详见下表:

在这里插入图片描述
前面的准备工作都就绪,下面是ROS相关的具体的操作步骤如下:
1) 启动ros
打开终端,输入指令:
roscore
2) 启动rviz
再打开一个新终端,输入指令:
rviz -d display_bag.rviz
在这里插入图片描述

3) 播放bag
再打开一个新终端,cd到kitti数据的bag所在文件夹下,运行指令:
rosbag play kitti_2011_10_03_drive_0027_synced.bag

4) rviz设置
在rviz的Fixed Frame中选择base_link;
点击Add->By topic,选择下图中的PointCloud2添加雷达图像,点击ok;同样操作再选择下图中的Image添加左侧、右侧的彩色相机图像。
在这里插入图片描述

这样即可通过RVIZ可视化工具,将ROS网络中不断广播的传感器数据进行可视化,即在RVIZ中显示对应话题的信息(点云、图像)。这样通过RVIZ的可视化效果,如同播放电影一样,复现当时车辆周围的环境,中间部分为点云在三维空间内的可视化,左下角为图像的可视化。
在这里插入图片描述

以下为部分场景gif动图示意:

在这里插入图片描述
好了本次分享结束,小伙伴们如果对Linxu系统/常用命令,ROS相关知识感兴趣的话,我这里也给出一些链接,供大家参考学习了:
史上最全的Linux常用命令汇总

古月·ROS 21讲—视频教程

5.参考学习的书目及论文

  1. 《基于ROS的多传感器数据采集与处理》夏攀东 2021 硕士论文
  2. 《基于ROS的低速无人车环境感知与控制方法研究》曾帅康 2021 硕士论文
  3. 《基于激光雷达与相机融合的车辆检测技术研究》翟文轩 2020 硕士论文

=文档信息=
本学习笔记由博主原创整理编辑,仅供非商用学习交流使用
由于水平有限,错误和纰漏之处在所难免,欢迎大家交流指正
如本文涉及侵权,请随时留言博主,必妥善处置
版权声明:非商用自由转载-保持署名-注明出处
署名(BY) :zhudj
文章出处:https://zhudj.blog.csdn.net/

Logo

更多推荐