Skip to content
deemoe edited this page Aug 26, 2024 · 36 revisions

Project Architecture

出于对不同功能模块单独测试的需要,开发过程中通常会涉及到多个可执行文件的管理。因此,本项目分为两部分:

  • lib 部份由根目录下的 CMakelists.txt 管理,其负责两个 lib 的生成,分别为 rmcvrmcv_hardware。其中 rmcv 不包含任何与平台或硬件相关的代码(例如非 Unix 标准的串口波特率宏定义、仅支持 Linux 平台的相机驱动等等),以方便在任意操作系统上对项目的其他部份进行编译。
  • 'execs' 部份由 \executable 目录下的 CMakelists.txt 管理,其负责定义所有的可执行文件。
graph LR
    subgraph Part1["lib - \CMakelists.txt"]
        lib_rmcv[rmcv]
        lib_rmcv_hardware[rmcv_hardware]
    end

    subgraph Part2["execs - executable\CMakelists.txt"]
        executables[Executables]
    end

    3rd_party_libs[3rd Party Libs]

    lib_rmcv --> executables
    lib_rmcv_hardware --> executables
    3rd_party_libs --> executables
Loading

关于 lib 部份的代码说明会以 Doxygen 格式写在注释中,不定期编译到 GitHub Pages 中。而可执行文件的代码说明则包含在相应源文件的注释中。

Deployment

Getting build dependences

  1. OpenCV

部署本项目依赖带有 FFMPEG 编译的 OpenCV。位于仓库根目录的 vcpkg.json 文件指明了所有编译本项目所需的依赖,具体实践可根据您使用的开发环境参考其官方提供的详细说明,例如:

当然,采用 vcpkg 作为包管理器的主要考量是避免污染系统的包管理器(例如在 macOS 上,使用 brew 安装 OpenCV 将会引入大量无用依赖)。若部署环境对这类行为不敏感,通过系统包管理器来安装依赖也是不错的选择。

  1. gxiapi

gxiapi 是驱动大恒相机所需的外部库文件,通过运行大恒官方提供的一键部署脚本可以将其添加到 /usr/lib 中(Linux)。该一键部署脚本可通过在大恒图像官网选择对应的相机参数进行下载,解压后根据其中包含的 README 指引执行安装步骤即可。

本项目中的大恒相机驱动基于 Galaxy Linux SDK V1.5.2303 进行开发。

由于该自动化脚本并为对头文件做特殊处理,仅仅是将其解压缩到脚本运行目录中,因此 cmake 无法自动发现该头文件的路径。为避免在 CMakeLists.txt 中包含绝对路径引起的不必要的麻烦,本项目将 gxiapi 对应的两个头文件复制在 hardware/include/daheng 目录下。

Contribution

我们对所有有意愿提供帮助的你表示感谢!但目前由于人手不足,我们仅接受来自项目合作者的代码提交或来自外部的 issues

若您为合作者之一,请在提交修改时遵守以下规范(分支规则参考自A successful Git branching model):

  1. 由于同时对项目做出修改的合作者数量可能不止一位,通过创建分支来将您的修改与其他合作者隔离开来永远不会显得多余。此外,对于每个新创建的分支,请尽可能保证它们的命名唯一。本仓库推荐的命名方式为 "branch_type/description",例如:
    • 新增功能:`feature/end-to-end-model`
    • 漏洞修复:`fix/#1145`
    • 文档调整:`docs/short-description`
  2. 在一般情况下,新的分支应该从 development 创建而非 master,除非该改动在正式比赛期间发生并且需要立即应用。
  3. 对代码所做的修改应确保其注释部份遵循 Doxygen 格式。
gitGraph
   commit
   branch develop
   checkout develop
   branch feature/end-to-end-model
   checkout feature/end-to-end-model
   commit
   commit
   checkout develop
   branch feature/anti-missile
   commit
   commit
   checkout develop
   merge feature/end-to-end-model
   checkout main
   branch hotfix/endless-loop-cam-faile
   checkout hotfix/endless-loop-cam-faile
   commit
   commit
   checkout main
   merge hotfix/endless-loop-cam-faile
   checkout develop
   merge hotfix/endless-loop-cam-faile
   checkout feature/anti-missile
   commit
   commit
   commit
   commit
   checkout develop
   merge feature/anti-missile
   checkout main
   merge develop
Loading

在您准备好提交代码更改后,一个可供参考的步骤如下。

关于在 VS Code 和 CLion 中 git 集成的详细说明,请参阅它们相对应的官方文档:

git Bash

  1. Clone the Repository
git clone https://github.com/deemoe404/rmcv.git
  1. Create a Branch
git checkout -b feature/your-feature-name
  1. Commit & Push Your Changes
git add .
git commit -m "Add feature to allow ..."

git push origin feature/your-feature-name
  1. Create a Pull Request (PR) on GitHub

VS Code

  1. Clone the Repository

    • 使用快捷键 `Ctrl + Shift + P` 打开 command palette(在 macOS 上为 `Cmd + Shift + P`
    • 输入命令 Git: Clone 并粘贴本仓库的地址 https://github.com/deemoe404/rmcv.git
  2. Create a Branch

    • 使用快捷键 `Ctrl + Shift + G` 或在vscode左边活动栏中找到源代码管理
    • 导航至栏源代码管理储存库,选择其中的 `master`
    • 选择 `Create new branch`
    • 输入分支名称,如 feature/your-feature-name,然后创建分支。
  3. Commit & Push Your Changes

    • 打开源代码管理,导航至更改
    • 选择需要暂存更改的文件
    • 输入提交信息,例如 "Add feature to allow ..."
    • 点击 提交 旁边的更多操作,选择 提交和推送 完成上传。
  4. Create a Pull Request (PR) on GitHub

Clion

  1. Clone the Repository

    • 在 CLion 窗口中,导航至 File > New Project from Version Control
    • 在新打开的窗口中选择 Git 并粘贴本仓库的地址 https://github.com/deemoe404/rmcv.git
  2. Create a Branch

    • 在 CLion 中,导航至 Git > Branches
    • 点击 New Branch
    • 输入分支名称,如 feature/your-feature-name,然后创建分支。
  3. Commit & Push Your Changes

    • 导航至 Git > Commit...
    • 选择你要提交的更改。
    • 输入提交信息,例如 "Add feature to allow ..."。
    • 点击 Commit 按钮完成提交。
    • 导航至 Git > Push
    • 确认推送的分支,然后点击 Push 按钮将更改推送到远程仓库。
  4. Create a Pull Request (PR) on GitHub

Clone this wiki locally