基于ROS(机器人操作系统)的数据展示系统

tips:请在使用该系统前安装好相应的库文件(详见附录二),并在不同控制台分别运行roscore(ros操作系统内核)、rosbag play –loop –pause all.bag(ros数据包展示)和rosrun gmapping slam_gmapping(任务四建图处理进程)

该系统程序名为final_system,使用以下命令克隆git仓库:

1
git clone https://github.com/Asgard-Tim/ROS-Coding.git

安装好相关库文件后可通过以下命令运行系统程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
//项目构建

cd /home/ubuntu/project/catkin_ws

catkin_make

//程序运行

source /home/ubuntu/project/catkin_ws/devel/setup.bash

cd /home/ubuntu/project/catkin_ws

rosrun final_system final_system

完整代码已上传至Github平台,URL地址:Asgard-Tim/ROS-Coding: 重庆大学明月科创实验班软件设计课程作业 (github.com)

Bilibili同步上传系统演示视频Demo,链接:重庆大学明月科创实验班软件设计作业–ROS数据展示系统_哔哩哔哩_bilibili

程序主要结构与算法分析

在**main()**函数中:

  • 创建ROS节点和节点句柄。

  • 调用**initialize()**函数显示初始菜单:提示用户选择登录、注册或退出系统。

  • 定义一个user类,用于保存用户的用户名和密码信息;根据用户选择执行不同的操作:

    • 登录:要求用户输入用户名和密码,然后检查是否匹配存储在文件中的用户信息。
    • 注册:要求用户输入新的用户名和密码,然后将用户信息保存到文件中。
    • 退出系统:结束程序运行。
  • 如果登录成功,调用**systeminitialize()**函数显示登录成功后的菜单:提示用户选择不同的数据可视化选项或退出系统。

  • 根据用户选择执行不同的数据可视化操作:

任务一:用命令行窗口显示小车的IMU和里程计(odometry)数据
    • IMU数据:订阅IMU数据的ROS话题,将数据传递给回调函数callback1进行处理。

    • 回调函数callback1,处理IMU数据:

      • 从接收到的IMU消息中获取线性加速度和角速度信息。
      • 使用std::cout打印出线性加速度和角速度信息。
    • 里程计数据:订阅里程计数据的ROS话题,将数据传递给回调函数callback2进行处理。

    • 回调函数callback2,处理里程计数据:

      • 从接收到的里程计消息中获取位置和姿态信息。
      • 使用std::cout打印出位置和姿态信息。
任务二:用图形界面显示颜色相机和深度相机的数据(利用OpenCV库)
    • 颜色相机数据:订阅颜色相机数据的ROS话题,将数据传递给回调函数callback3进行处理。

    • 回调函数callback3,处理颜色相机数据:

      • 将接收到的彩色图像消息转换为OpenCV的图像格式。
      • 使用OpenCV的窗口显示彩色图像。
    • 深度相机数据:订阅深度相机数据的ROS话题,将数据传递给回调函数callback4进行处理。

    • 回调函数callback4,处理深度相机数据:

      • 将接收到的深度图像消息转换为OpenCV的图像格式。
      • 使用OpenCV的窗口显示深度图像。
任务三:用图形界面显示激光雷达的点云数据(利用PCL库)
    • 点云数据:订阅点云数据的ROS话题,将数据传递给回调函数callback5进行处理。

    • **pcl::visualization::CloudViewer viewer(“Cloud Viewer”);**:创建一个PCL点云可视化器。

    • 回调函数callback5,处理点云数据:

      • 将接收到的点云消息转换为PCL的点云格式。
      • 使用PCL的可视化器显示点云。
任务四:自行选择一种高级算法(例如语义分割、三维重建、导航定位(SLAM)等),实现该算法(可以直接利用第三方库),将其集成到系统中
    • 选择Gmapping算法(一个基于2D激光雷达使用RBPF(Rao-Blackwellized Particle Filters)算法完成二维栅格地图构建的SLAM算法)
    • 占据栅格地图数据:订阅占据栅格地图数据的ROS话题,将数据传递给回调函数callback6进行处理。
    • 回调函数callback6,处理占据栅格地图数据:
        • 从接收到的占据栅格地图消息中获取分辨率、宽度和高度等信息。
        • 创建一个OpenCV的图像对象,用于绘制地图。
        • 遍历地图的每个栅格,根据栅格的值绘制不同的颜色圆点。
        • 使用OpenCV的窗口显示地图。

各功能部分构建过程与实现效果

1.系统界面
(1)登录界面

1

(2)功能选择界面

2

2.各部分功能

整体架构思路(以imu数据显示为例,其余任务基本一致):

(1)在运行rosbag后利用rostopic list指令查看当前开放的所有话题

3

(2)找到所需数据所对应的话题(如imu数据对应的是/imu/data_raw这一topic),利用rostopic info指令查看其消息类型(如图中Type所示)

阅读更多