Bubble模块
=========================

:Authors: Ligcox
:Maintainers:
    Ligcox,
    HarryWen
:Contact: 
    ligcox@birdiebot.top,
    858601365@qq.com
:Last edit date: 2022/08/25
:Copyright: This document has been placed in the public domain.

.. contents:: 目录
   :depth: 2
   :local:

在Bubble中不同的任务和功能在不同仓库和功能包中维护,通过RMW实现机器人在RMU赛场中的不同功能。

通过改变特定模块中的内容,能够最大程度不改变其他模块和系统框架的前提下,添加或实现新的功能。

在该文档中,列出了不同任务模块所维护的内容,并简要介绍功能包实现的任务,对于功能包详细实现可以参阅 API doc。

.. note:: 随着功能包的维护,模块可能会发生小规模的变动。

Bringup模块
------------------------------
Bringup模块提供了Bubble系统最顶级的launch文件,通过该模块中的launch文件启动机器人需要的全部功能。

该模块在 `bubble_bringup <https://github.com/Birdiebot/bubble_bringup>`__  仓库中维护。

接口模块
--------------------------
包含了Bubble中通过RMW实现Node间的数据交互接口。在 `bubble_interface <https://github.com/Birdiebot/bubble_interface>`__ 仓库中维护。

接口模块包含了以下三个功能包:

* 比赛裁判系统数据
    - 由 ``bubble_interface/game_msgs`` 功能包实现
    - 定义上位机需要使用裁判系统的ROS数据类型
    - 原则上变量命名与 `RoboMaster裁判系统串口协议 <https://rm-static.djicdn.com/tem/17348/RoboMaster%202021%20%E8%A3%81%E5%88%A4%E7%B3%BB%E7%BB%9F%E4%B8%B2%E5%8F%A3%E5%8D%8F%E8%AE%AE%E9%99%84%E5%BD%95%20V1.0%EF%BC%8820210203%EF%BC%89.pdf>`__ 相同
* 控制数据
    - 由 ``bubble_interface/rmctrl_msgs`` 功能包实现
    - 定义了下位机执行控制指令的ROS数据类型
* 目标识别数据
    - 由 ``bubble_interface/bboxes_ex_msgs`` 功能包实现
    - 定义了目标识别器识别对象的ROS数据类型
    - 关于 ``bboxes_ex_msgs`` 功能包的更多信息,您可以参阅 ``相关项目`` 和 ``bboxes_ex_msgs的REAMDE文件``


图像流输入模块
--------------------------
包含了Bubble中使用的图像传感器数据。在 `bubble_camera <https://github.com/Birdiebot/bubble_camera>`__ 仓库中维护。

* 视频流
    - 由 ``main`` 分支维护
    - 通过预先录制的视频,在测试环境中实现功能开发
* 海康工业相机
    - 由 ``hikrobot_camera`` 分支维护
    - 提供了海康机器人工业相机的ROS功能包
    - 通过ROS的参数对相机参数进行调整
* 大恒图像工业相机
    - 由 ``gxusb_camera`` 分支维护
    - 提供了海康机器人工业相机的ROS功能包


MUC接口模块
--------------------------
包含了BCP相关功能实现。在 `bubble_core <https://github.com/Birdiebot/bubble_core>`__ 仓库中维护。该模块信息请参阅 `木鸢通讯协议 <../guide/木鸢通讯协议.html>`__。

* BCP的ROS封装
    - 由 ``bubble_protocol`` 功能包维护
    - BCP的ROS封装
* BCP的python封装
    - 由 ``bubble_protocol_py`` 维护
    - 提供了BCP的绝大部分功能,不在依赖ROS环境,可嵌入至其他程序中使用


识别器模块
--------------------------
对图像数据进行目标检测任务,该任务单独分维护。在 `bubble_detector <https://github.com/Birdiebot/bubble_detector>`__ 仓库中维护。

* BTP_DM项目装甲板识别器
    - 由 ``bubble_visual`` 功能包维护
    - 通过传统视觉方式对装甲板识别
    - 对BTP_DM的cpp实现,并进行了ROS封装
* CVRM装甲板识别器
    - 由 ``bubble_visual_SJTU`` 功能包维护
    - 通过神经网络的方式对装甲板识别
    - 对2021年上海交通大学哨兵机器人开源项目 `CVRM <https://github.com/Harry-hhj/CVRM2021-sjtu>`__ 进行的ROS封装
    - 需要TensorRT环境依赖
* RMUC2019-2022能量机关识别器
    - 由 ``bubble_rune`` 功能包维护
    - 通过传统视觉的方式对RMUC2019-2022能量机关进行识别

功能模块
------------------------------
功能模块实现了RMU赛场上的主要任务,在 `bubble_contrib <https://github.com/Birdiebot/bubble_contrib>`__  仓库中维护。

* 攻击模块
    - 由 ``bubble_aiming`` 功能包维护
    - 对RoboMaster机器人的发射机构自动控制
    - 机器人装甲板自动瞄准及预测
    - 机器人反小陀螺
    - 英雄机器人击打旋转装甲板
* 调试模块
    - 由 ``bubble_debuger`` 功能包维护
    - 通过rqt和rviz对调试信息进行可视化展示
* 决策模块
    - 由 ``bubble_decision`` 功能包维护
    - 通过简单的FSM对机器人数据进行决策
    - 该模块暂时放置在 ``bubble_contrib`` 模块中,后续单独分仓库维护

导航模块
------------------------------
导航模块实现了机器人SLAM的主要功能,在 `bubble_navigation <https://github.com/Birdiebot/bubble_navigation>`__  仓库中维护。

.. note:: 由于该模块大量功能未实际测试,该版本Bubble中删除了绝大部分该模块的内容,仅保留客机器人模型定义相关的部分。模块主体部分在后续版本中更新。

* 机器人状态发布
    - 由 ``bubble_state_publisher`` 功能包维护
    - 提供机器人模型urdf定义
    - 提供由BCP到TF Tree的转换