Bubble开发规范
- Authors
 Ligcox
- Maintainers
 Ligcox, HarryWen
- Contact
 - Last edit date
 2022/08/14
- Copyright
 This document has been placed in the public domain.
开发者参与Bubble开发时,遵循的规范在该文档中阐述。
1 代码风格规范
1.1 代码规范
Bubble代码风格原则上使用 ROS2的代码风格和语言版本
对于实现逻辑的函数、回调函数使用蛇形命名法(snake_case)命名。例如:
send_data()、data_callback()对于实现具体功能的函数,使用小驼峰命名法(dromedary case)命名。例如:
algImplement对于类名、结构体名,采用大驼峰命名法(Pascal case)命名。例如:
class MyClass、struct DataType
1.2 文件注释模板
Bubble项目中使用的 koroFileHeader 自动生成代码文件模板。 配置字段具体功能介绍可参考 配置文档
代码模板配置为:
{
    "fileheader.customMade": {
    "custom_string_obkoro1": "Copyright (c) 2022 Birdiebot R&D Department\nShanghai University Of Engineering Science. All Rights Reserved",
    "custom_string_obkoro2": "License: GNU General Public License v3.0.\nSee LICENSE file in root directory.",
    "custom_string_obkoro3": "",
    "Author": "your name your email",
    "Date": "Do not edit",
    "FilePath": "Do not edit",
    "LastEditors": "your name your email",
    "LastEditTime": "Do not edit",
    },
    "fileheader.cursorMode": {
        "Description": "\n\t",
        "Parameters": "",
        "------------": "",
        "param": "",
        "":"",
        "Returns": "",
        "-----------": "",
    },
    "fileheader.configObj": {
        "autoAdd": true,
        "wideSame": false,
        "writeLog": false,
        "useWorker": false,
        "moveCursor": true,
        "headDesign": false,
        "autoAlready": true,
        "createHeader": false,
        "designAddHead": false,
        "CheckFileChange": false,
        "showErrorMessage": true,
        "openFunctionParamsCheck": true,
        "wideNum": 13,
        "functionWideNum": 0,
        "autoAddLine": 10000,
        "throttleTime": 60000,
        "prohibitAutoAdd": [
            "json",
            "md",
            "yaml"
        ],
        "prohibitItemAutoAdd": [
            "项目的全称禁止项目自动添加头部注释, 使用快捷键自行添加"
        ],
        "folderBlacklist": [
            "launch"
        ],
        "headInsertLine": {
            "php": 2,
            "py": 0,
        },
        "switch": {
            "newlineAddAnnotation": true
        },
        "atSymbol": [
            "@",
            "@"
        ],
        "colon": [
            ": ",
            ""
        ],
        "filePathColon": "/",
        "functionTypeSymbol": "*",
        "typeParamOrder": "param",
        "headDesignName": "random",
        "functionParamAddStr": ": ",
        "NoMatchParams": "no show param",
        "dateFormat": "YYYY-MM-DD HH:mm:ss",
        "colonObj": {},
        "atSymbolObj": {},
        "afterAnnotation": {},
        "customHasHeadEnd": {},
        "beforeAnnotation": {},
        "functionBlankSpaceAll": {"python":4},
        "cursorModeInternalAll": {"python":true,"c11":true},
        "supportAutoLanguage": [],
        "functionParamsShape": ["",": "],
        "language": {
            "h/hpp/cpp": {
                "head": "/*** ",
                "middle": " * @",
                "end": " */"
            },
            "py": {
                "head": "\"\"\"",
                "middle": "",
                "end": "\"\"\"",
            },
        }
    },
    "annotationStr": {
        "head": "/*",
        "middle": " * @",
        "end": " */",
        "use": false
    },
}
文件头模板为:
'''
Author: your name
Date: YYYY-MM-DD HH:MM:SS
FilePath: your code path
LastEditors: your name
LastEditTime: YYYY-MM-DD HH:MM:SS
License: GNU General Public License v3.0. See LICENSE file in root directory.
Copyright (c) 2022 Birdiebot R&D Department
Shanghai University Of Engineering Science. All Rights Reserved
'''
/*
* @Author: your name
* @Date: YYYY-MM-DD HH:MM:SS
* @FilePath: your code path
* @LastEditors: your name
* @LastEditTime: YYYY-MM-DD HH:MM:SS
* License: GNU General Public License v3.0. See LICENSE file in root directory.
* Copyright (c) 2022 Birdiebot R&D Department
* Shanghai University Of Engineering Science. All Rights Reserved
*/
函数模板为:
"""
Description
Parameters
------------
Returns
-----------
"""
/*
TODO
*/
2 坐标系定义
Bubble中的坐标系定义原则上使用 REP105 移动平台的坐标系 定义的规范, 坐标系中出现的单位,使用 REP103 标准测量单位和坐标约定 定义的标准单位。
特殊地,对于除RMUA及全自动步兵机器人外的绝大部分机器人,实际对移动关系不敏感,做以下额外地约定:
不设置
earth坐标系对于考虑相对位置的机器人
map frame原点设置在机器人初始位置对于不考虑相对位置的机器人不设置
map、odom坐标系base_link坐标系原点与底盘坐标系chassis重合认为相机关节坐标系
camara frame、相机坐标系camara_optical frame、云台坐标系gimbal frame为同一个坐标系gimbal frame,原点位于摩擦轮两点连线中点(即弹丸发射的初始位置)处使用rpy形式的欧拉角(euler angle)进行旋转表述,而不是四元数(quaternion)
3 文件结构
3.1 功能包结构
Bubble中的功能包以 bubble_ 前缀命名,结构原则上使用 ROS2功能包layout 定义的规范。
bubble_python_pkg
    ├─bubble_python_pkg # 源码目录
    ├─launch            # launch文件目录
    ├─script            # 脚本文件路径
    ├─setup.py
    ├─setup.cfg
    ├─package.xml
    ├─LICENSE
    └─README.md
bubble_c_pkg
    ├─config     # 配置文件目录
    ├─include    # 头文件目录
    ├─launch     # launch文件目录
    ├─script     # 脚本文件路径
    ├─src        # 源码目录
    ├─CMakeLists.txt
    ├─package.xml
    ├─LICENSE
    └─README.md
3.2 代码仓库
不同的功能包应当放置在相应的代码仓库下,当一个代码仓库仅有一个功能包时,它可以选择位于仓库的根目录中。
4 文档及注释
考虑到代码的可读性和维护
Bubble的文档使用sphinx进行书写,各功能模块应保留必要的注释,配置模板头后,直接使用koroFileHeader生成,并导出到文档中。
Bubble的文档及注释做以下约定:
内容,推荐类型,语言,备注  | 
|||
|---|---|---|---|
文档  | 
ReStructuredText/rst  | 
中文  | 
为便于文档维护,文档主要使用中文进行维护  | 
API文档  | 
ReStructuredText/rst  | 
英语  | 
API文档使用Sphinx生成,内容与源码保持一致  | 
主项目自述文件  | 
MarkDown/md  | 
英语、中文  | 
提供中文和英语的自述文件,在必要部分使用html语法调整格式  | 
模块自述文件  | 
MarkDown/md  | 
英语  | 
各模块自述文件仅使用英文书写,在必要部分使用html语法调整格式  | 
代码注释  | 
Python/C/C++  | 
英语  | 
代码中使用英文解释必要的函数、模块和功能逻辑  |