Bubble设计模式

Authors

Ligcox

Maintainers

Ligcox

Contact

ligcox@birdiebot.top

Last edit date

2022/08/25

Copyright

This document has been placed in the public domain.

RoboMaster机器人的软件系统主要包含了 感知决策控制 三个部分。

控制 部分接收来着遥控器、裁判系统或上位机的输入,通过控制算法,操纵实际的机械结构。控制部分主要由MUC负责,再本文档中不再赘述。

感知决策 部分是Bubble主要实现的内容。在RMU中,机器人所处的环境使得机器人需要执行各种不同的任务,这些任务在Bubble中以不同功能包的形式组织在一起。 通过对这些功能包的改变、组合,能够实现机器人在RoboMaster赛场上完成这些任务。

系统架构

系统的输入包括了感知数据(来自工业相机、深度相机的图像、激光雷达的点云、IMU测量的状态等),这些信息主要来自与机器人上的各种传感器。 输出信息主要为各类机械结构的控制信息,这些信息交由MUC处理产生机械结构的控制信号。 Bubble负责对输入的信息进行处理,产生输出信息,通过BCP发送至MUC,使机器人执行预期的行为。 Bubble的模块示意图如下:

../_images/模块划分.png

模块划分和功能包维护

面对RMU赛场复杂多变的任务,在Bubble将全部的逻辑分成了 任务功能 进行系统的结构。

不同的 功能 模块在不同的仓库中进行维护,在代码仓库中存在一个或多个 任务 模块,这些任务模块以ROS功能包的形式进行维护。

不同 任务 模块间通过RMW的进行数据的交互。在 任务 模块中还拆分成了若干个子任务,这些子任务通过python packages的形式存在于 任务 模块的功能包中。

总的来说,通过RMW将系统间不同的功能模块连接,并在功能模块内部实现功能的具体逻辑。

消息接口

Bubble中通过RMW实现Node间的数据交互。通常,绝大部分数据能够通过 ROS的内置类型 进行传递。

对于特殊数据类型,在 bubble_interface 模块中定义了Bubble Node间通讯的额外数据类型,这些数据类型包含了:

  • 比赛裁判系统数据
    • bubble_interface/game_msgs 功能包实现

    • 定义上位机需要使用裁判系统的ROS数据类型

    • 原则上变量命名与 RoboMaster裁判系统串口协议 相同。

  • 控制数据
    • bubble_interface/rmctrl_msgs 功能包实现

    • 定义了下位机执行控制指令的ROS数据类型

  • 目标识别数据
    • bubble_interface/bboxes_ex_msgs 功能包实现

    • 定义了目标识别器识别对象的ROS数据类型

    • 关于 bboxes_ex_msgs 功能包的更多信息,您可以参阅 相关项目bboxes_ex_msgs的REAMDE文件