rmcs repository

rmcs repository

rmcs repository

Repository Summary

Checkout URI https://github.com/alliance-algorithm/rmcs.git
VCS Type git
VCS Version main
Last Updated 2025-03-18
Dev Status UNMAINTAINED
CI status No Continuous Integration
Released UNRELEASED
Tags No category tags.
Contributing Help Wanted (0)
Good First Issues (0)
Pull Requests to Review (0)

Packages

Name Version
rmcs_bringup 0.0.0
rmcs_core 0.0.0
rmcs_description 0.0.0
rmcs_executor 1.0.0
rmcs_msgs 0.0.0
rmcs_utility 1.0.0

README

RMCS

RoboMaster Control System based on ROS2.

Development

Pre-requirements:

Step 1:获取镜像

下载开发镜像:

docker pull qzhhhi/rmcs-develop:latest

也可自行使用 Dockerfile 构建,参见 镜像构建指南

Step 2:克隆并打开仓库

克隆仓库,注意需要使用 recurse-submodules 以克隆子模块:

git clone --recurse-submodules https://github.com/Alliance-Algorithm/RMCS.git

在 VSCode 中打开仓库:

code ./RMCS

Ctrl+Shift+P,在弹出的菜单中选择 Dev Containers: Reopen in Container

VSCode 将拉起一个 Docker 容器,容器中已配置好完整开发环境,之后所有工作将在容器内进行。

如果 Dev Containers 在启动时卡住很长一段时间,可以尝试 这个解决方案

Step 3:配置 VSCode

在 VSCode 中新建终端,输入:

cp .vscode/settings.default.json .vscode/settings.json

这会应用我们推荐的 VSCode 配置文件,你也可以按需自行修改配置文件。

在拓展列表中,可以看到我们推荐使用的拓展正在安装,你也可以按需自行删减拓展。

Step 4:构建

在 VSCode 终端中输入:

build-rmcs

将会运行 .script/build-rmcs 脚本,在路径 rmcs_ws 下开始构建代码。

构建完毕后,基于 clangdC++ 代码提示将可用。此时可以正常编写代码。

Note: 用于开发的所有脚本均位于 .script 中,参见 开发脚本手册(TODO)。

Step 5 (Optional):运行

编写代码并编译完成后,可以使用:

launch-rmcs

在本机上运行代码。在首次运行代码前,需要调用 set-robot 脚本设置机器人类型。

确认设备接入

可以使用 lsusb 确定 下位机 是否已接入,若已接入,则 lsusb 输出类似:

Bus 001 Device 004: ID a11c:75f3 Alliance RoboMaster Team. RMCS Slave v2.1.2

在 WSL2 下,需要 使用 usbipd 对设备进行转接

确认权限正确

在主机(不要在 docker 容器)的终端中输入:

echo 'SUBSYSTEM=="usb", ATTR{idVendor}=="a11c", MODE="0666"' | sudo tee /etc/udev/rules.d/95-rmcs-slave.rules &&
sudo udevadm control --reload-rules &&
sudo udevadm trigger

以允许非 root 用户读写 RMCS 下位机,此指令只需执行一次。

Deployment

Pre-requirements:

Step 1:获取镜像

下载部署镜像:

docker pull qzhhhi/rmcs-develop:latest

如果不方便在 MiniPC 上配置代理,可以在开发机上下载镜像后,使用

docker save qzhhhi/rmcs-runtime:latest > rmcs-runtime.tar

然后使用任意方式(如 scp)将 rmcs-runtime.tar 传送到 MiniPC 上,并在其上执行:

docker load -i rmcs-runtime.tar

即获取部署镜像。

Step 2:启动容器

在 MiniPC 终端中输入:

docker run -d --restart=always --privileged --network=host -v /dev:/dev qzhhhi/rmcs-runtime:latest

即可启动部署镜像,此后镜像将保持开机自启。

Step 3:远程连接

在开发容器终端中输入:

set-remote <remote-host>

其中,remote-host 可以为 MiniPC 的:

  1. IPv4 / IPv6 地址 (e.g., 169.254.233.233)

  2. IPv4 / IPv6 Link-local 地址 (e.g., fe80::c6d0:e3ff:fed7:ed12%eth0)

  3. mDNS 主机名 (e.g., my-sentry.local)

参见 网络配置指南(TODO)。

接下来在开发容器终端中继续输入:

ssh-remote

即可在开发容器中,ssh 连接到远程的部署容器。

RMCS 的所有代码更新和调试,都基于从开发容器向部署容器的 ssh 连接。

部署容器会监听 TCP:2022 端口作为 ssh-server 端口,请注意保证端口空闲。

参见 容器设计思想(TODO)。

Tip: GUI 可以从部署容器中穿出,尝试在 ssh-remote 中打开 rviz2。

Step 4:同步构建产物

新启动的部署容器内是没有代码的,需要由开发容器上传。

在开发容器中构建完成后,可以执行指令:

sync-remote

这将拉起一个同步进程,自动将开发容器中的构建产物同步到部署容器。

同步进程除非主动使用 Ctrl+C 结束,否则不会退出,其会监视所有文件变更,并实时同步到部署容器。

Tip: 由于 build-rmcs 采用 symlink-install 方式构建,因此对于配置文件和 .py 文件,直接修改其源文件,无需编译即可触发同步。

Step 5:重启服务

RMCS 在部署容器中以服务方式启动 (/etc/init.d/rmcs)。

确认构建产物同步完毕后(以出现 Nothing to do 为标志),进入 ssh-remote,输入:

set-robot <robot-name>

设置启动的机器人类型(例如 set-robot sentry)。

接下来继续输入:

service rmcs restart

如果一切正常,其将会输出:

Successfully stopped RMCS daemon.
Successfully started RMCS daemon.

这证明 RMCS 已成功在部署容器中启动,并会随以后的每次容器启动而启动。

接下来可以使用:

service rmcs attach

查看 RMCS 的实时输出。

需要注意的是,service rmcs attach 本质上是连接到了一个 GNU screen 会话,因此任何按键都会被忠实地转发至 RMCS。例如,当键入 Ctrl+C 时,RMCS 会接到 SIGINT,从而停止运行。

如果希望退出对实时输出的查看,可以键入 Ctrl+A ,然后按 D

如果希望向上翻页,可以键入 Ctrl+A ,然后按 Esc

更多快捷键组合参见 Screen Quick Reference

Step 6:糖

指令 ssh-remote 后可以添加参数,参数内容即为建立链接后立即执行的指令。

例如:

ssh-remote service rmcs restart

可以在开发容器端快速重启部署容器中的 RMCS。

又如:

ssh-remote service rmcs attach

可以在开发容器端快速查看部署容器中 RMCS 的实时输出。

实际上,可以使用指令:

attach-remote

作为前者的替代(其实现就是前者)。

进一步的,还可以使用:

attach-remote -r

作为 ssh-remote "service rmcs restart && service rmcs attach" 的替代。

其在重启 RMCS 守护进程后,自动连接显示实时输出。

更进一步的,指令间还可以组合,例如:

build-rmcs && wait-sync && attach-remote -r

可以触发 RMCS 构建,wait-sync 等待文件同步完成,接下来重启 RMCS 守护进程后,显示实时输出。

CONTRIBUTING

No CONTRIBUTING.md found.

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository

rmcs repository