# 算法组2026自瞄代码
**Repository Path**: ucas-sas-robot-team/RMVision-2026
## Basic Information
- **Project Name**: 算法组2026自瞄代码
- **Description**: 2026赛季算法组自瞄部分代码
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-11-29
- **Last Updated**: 2025-11-30
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 2026年自瞄 RMVison-2026
> 君瞄+四点模型。感谢开源社区。
点击前方三角形展开基础知识简介 Preliminary - Click to expand some basic concept of our robot design concerning this project.
> 给初来乍到的新队员们看的,清晰地掌握基础知识,正确认识概念,是理解系统的基础。
> 路线:
> 1. 根据基础教程学习基础知识,熟悉C/C++/CMake/ROS等。可以选择高质量的教程,例如经典教材或者官方的Tutorial。
> 2. 根据README编译好整个系统,追踪启动过程,大致理解系统运作流程
> 3. 往系统里添加功能,加深对系统的理解
## NUC, NVIDIA NX
- NUC(Next Unit of Computing). NUC 是英特尔推出的一种迷你计算平台。它常被用于机器人开发中,作为主控计算机,用于运行复杂的算法和操作系统。它搭载Intel 桌面处理器,x86架构,类似一个小型电脑主机。
- NVIDIA NX. NVIDIA Jetson Nano(通常简称为 NVIDIA NX)是 NVIDIA 的一款嵌入式计算平台,专为边缘计算和机器人应用设计。它配备了高性能 NVIDIA GPU,适合运行深度学习和计算机视觉任务。NX搭载ARM架构CPU。
## C/C++, CMake
- C/C++ . C 和 C++ 是两种广泛使用的编程语言,尤其在机器人开发中。C++ 提供了面向对象编程的能力,适合开发复杂的系统软件和算法。C 语言则以其高效性和对硬件的直接操作能力,常用于底层驱动开发。C是C++的子集。
- CMake. CMake 是一个跨平台的构建系统生成器,用于管理 C/C++ 项目的编译过程。它通过编写 CMakeLists.txt 文件来配置编译环境,支持多种编译器和操作系统,是 ROS 和 ROS2 项目中常用的构建工具。ROS 和 ROS2地构建工具在CMake构建系统的基础上提供了又一层包装,能够更加方便地管理依赖和编译。
## Git
是一种分布式代码版本管理工具。介绍请看[Git 介绍【腾讯文档】1_E02-Git基础知识分享-v0.8-2023年3月3日.pptx](https://docs.qq.com/document/DV0RMV094RWZ3SWhw)
我们将会在开发中大量使用Git命令。
## Ubuntu 操作系统
操作系统管理硬件设备,调度程序执行,提供方便的接口。Ubuntu 是一种开源 Linux 操作系统发行版,以桌面版和服务器版两种形式广泛应用于个人电脑、服务器和云计算环境。Windows操作系统是一种闭源的操作系统。
请学习[使用Linux](https://www.runoob.com/linux/linux-tutorial.html)
## ROS 与 ROS2
- **ROS (Robot Operating System)** 是一个用于机器人应用开发的中间件、库和工具的集合,提供服务如硬件抽象、底层设备控制、常见功能实现等。ROS指代的是ROS1,最后一个ROS1版本是ROS1 Noetic,运行于Ubuntu 20.04。大量历史遗留导航代码基于ROS1 Noetic.
- **ROS2** 是 ROS1 的升级版本,具有更好的实时性、安全性,支持多机器人系统和跨平台开发。新版Ubuntu都有对应的ROS2 版本。在Ubuntu 20.04上,ROS2的版本是Foxy。
- 虽然名字里有“操作系统”,ROS/ROS2 不是计算机传统意义上的操作系统,而是在Ubuntu或Windows系统上的一整套软件包。
- 我们希望队员能够静下心来根据官方Tutorial学习ROS/ROS2的基本概念,其中,[ROS2 Foxy版本的Tutorial在此](https://docs.ros.org/en/foxy/Tutorials.html),[ROS1 版本的Tutorial 在此](https://wiki.ros.org/ROS/Tutorials)
- 兴趣和实践是最好的老师,建议大家把教程仔细阅读一边,把代码全部自己写一遍,理解设计机理。
## 相机
- 相机是视觉系统的核心组件,用于捕捉图像并提供装甲板识别、目标定位等功能所需的视觉数据。
- 常用的相机类型包括 RGB 相机和 RGBD 相机。我们使用的Intel Realsense是一种深度相机。我们也会使用MindVision等厂家生产的单目工业相机。
## IMU
- **IMU (Inertial Measurement Unit)** 是惯性测量单元,用于测量机器人在三维空间中的加速度和角速度。六轴 IMU 包含三轴加速度计和三轴陀螺仪。九轴 IMU 还包含三轴磁力计。
- 在 RoboMaster 中,IMU 数据可用于姿态估计、运动控制和导航。我们在一个惯性系中建模子弹运动。当相机坐标系旋转起来时,近似惯性系所带来的误差非常大,所以我们需要IMU来校正。而对于比赛的场景,在平动方向上,我们近似认为是惯性系。代码中的Odom坐标系是一个原点随云台平动,而不随云台旋转的惯性系。这对于理解自瞄代码至关重要。
## 通信机制
### 串口通信协议
- 串口通信是一种常见的通信方式,用于机器人与外部设备(如传感器、控制器)之间的数据传输。
- 在 RoboMaster 中,裁判系统可通过串口与电控组负责的MCU通信。在SAS 2025年版本的机器人里,算法组通过串口获取专用IMU的数据。
- 连线上,串口正常的双向传输至少需要三根线,分别是TX、RX和GND。串口的波特率、数据位、校验位和停止位等参数需要双方设备保持一致。假设A与B相连,A的TX与B的RX相连,A的RX与B的TX相连,A的GND与B的GND相连。此外,4pin的接口一般还有一个VCC,可以用于提供电源。
### CAN总线协议
- **CAN (Controller Area Network)** 总线是一种高效的通信协议,适用于多节点的实时通信。
- 在机器人系统中,CAN 总线常用于连接多个电机驱动器、传感器等设备,实现快速、可靠的数据交互。
- CAN 总线传输有两根信号线,分别是CAN_H和CAN_L,用于差分信号传输。CAN 总线的通信速率可达数百 kbps 至数 Mbps,具有较高的抗干扰能力。注意usbCAN模块上的接口和MCU上接口的对应关系。所有CAN_H接口相连,所有CAN_L接口相连。
- 我们的NUC通过usbCAN模块与电控组的MCU通信,实现自瞄数据收发。这个设计直接原因是历史遗留问题:2024年哨兵双云台的无下位机控制要求NUC直接取得电机回传数据,当时为了简化系统硬件结构,直接将自瞄信息也通过CAN总线传输,因此{NUC、相机、IMU}与{MCU、电机}两个系统之间只通过两根线相连。
## 君瞄
- **君瞄** 是华师的陈君开源的一套自瞄算法工程,在ROS2上开发,基于传统装甲板识别算法、PnP解算测距。在RM社区有极高的知名度。
## 四点模型
- 四点模型是上海交通大学开源的一个深度神经网络模型。可鲁棒地直接识别装甲板的灯条关键点在图片中的位置、装甲板兵种类型、颜色。在RM社区有极高的知名度。
## 队伍机器人自瞄系统结构
所有机器人共用一套自瞄代码和电控代码。自瞄代码通过修改运行时加载的config文件来适配不同的机器人。电控代码通过编译时的宏定义选择机器人。
点击前方三角形展开本系统软件架构简介 Architecture - Click to expand the project's description.
## 起源
本套自瞄软件基于2022年华南师范大学陈君开源的一套代码。我们在他的代码的基础上,增加了反小陀螺等功能,并为了适配我们的多台机器人增加了CAN总线通信、IMU通信和解算,并移植了上海交通大学2021年开源的四点模型作为装甲板检测包作为自瞄的Baseline。
原系统核心设计可以参考陈君的[毕业设计论文](https://docs.qq.com/pdf/DV1ZwTHNHTEhoQmV4?)和[原开源仓库](https://github.com/chenjunnn/rm_vision)的README。但理解代码还是需要大家RTFSC、STFW、RTFM。如今,也许还有ATFG(Ask the friendly GPT)
## 结构
本介绍结合老队员RTFSC和WTFSC(write the friendly source code)的体会,介绍整个系统的结构。部分笔记参见[【阅读笔记】自瞄-开源代码阅读笔记](https://docs.qq.com/doc/DV1BrSWNUc2loY1Fm)
> 阅读代码的方式是:把代码跑起来,然后沿着启动的过程,理解系统设计。中途遇见不懂的就查阅资料理解。
> 具体来说,按照本README给出的过程配置好环境,编译好系统,然后启动便捷启动脚本。根据脚本中的命令,递归地搜寻整个系统的启动过程使用了哪些文件。如果完全无法理解,可能是基础知识不够清楚,可以追问GPT相关的命令是什么意思,所涉及的基础知识有哪些。
自瞄的总体的逻辑是:相机、IMU传感器获取环境图像和自身运动数据,识别装甲板,解算装甲板的坐标,预测装甲板的位置,根据自身发射系统的特性,计算控制信息,并向MCU控制系统发送上述信息。
为了完成上述功能,系统启动ROS2 多个节点。ROS系统各个节点通过消息传递机制传递信息。
### 主要功能节点
- 相机节点。使用相机驱动,与相机硬件通信。把获取的图像数据发送到`/camera/color/image_raw`话题中。我们可以根据config文件选择启动realsense 或者mindvision相机。
- IMU节点。使用IMU串口接收IMU的数据,计算云台的运动状态,发布云台姿态。
- 识别器节点。接受相机图像数据和相机内参数据,识别装甲板四个角点并求解PnP计算装甲板在三维空间中的位置。把识别到的装甲板发送出去。可以根据config文件选择启动传统识别算法或者YOLO模型算法。
- 追踪器节点。接收装甲板信息,通过拓展卡尔曼滤波算法估计对方机器人整体运动状态。
- 反小陀螺节点。接受地方机器人状态,估计一段时间后的机器人装甲板位置,决定瞄准策略,根据机器人瞄准系统参数,通过CAN总线接口发送到MCU控制开火。
### 辅助功能节点
- 启动节点。包含一些机器人启动配置文件。可以在配置文件中选择机器人类型。
## 启动流程
阅读便捷启动脚本中的代码,追踪整个系统的启动过程。常识性问题可以问GPT。
你现在在比赛现场吗?点击[Useful Utilities](#useful-utilities) 直达便捷启动脚本。
## 让我们快速开始
### 硬件要求
- Intel realsense (或者用我们录制的 bags 进行调试)
- ttyUSB 模块 (用于相机的 IMU)
- usbCAN 模块 (用于与 MCU 通信)
### 环境配置
- Ubuntu 20.04 桌面版并安装桌面环境
- ROS2 foxy
- Intel realsense SDK 及其 ros2 包装器
### IMU 串口设置
在 ros2 foxy 和 humble 中,串口库没有提供,所以我们需要手动安装它
```bash
# 确保已经导入了您的 ros2 环境
cd
git clone https://gitee.com/ucas-sas-robot-team/serial.git # github 上 ros2 serial 仓库的镜像
cd serial
mkdir build
cd build
cmake ..
sudo make install
```
### 系统配置
#### ROS 依赖项安装
```bash
cd
git clone https://gitee.com/ucas-sas-robot-team/tailored-target-jun-for-2024
cd tailored-target-jun-for-2024
sudo apt-get update && rosdep install --from-paths src --ignore-src -r -y
```
```bash
sudo apt install libgeometry-msgs-dev # 用于 #include
sudo apt install ros-foxy-xacro*
```
#### 神经网络推理模型环境配置
根据所在的硬件平台,选择不同的推理环境。
> [选择时考虑的问题](src/rm_auto_aim/rm4p_inference/yolo/README.md)
##### NUC
需要配置 LD_LIBRARY_PATH。我们自瞄使用编译好的 onnx 动态链接库,所以需要配置 LD_LIBRARY_PATH,使得程序启动时操作系统能够找到这个库。我们提供一键配置脚本,向 `.bashrc` 中添加 LD_LIBRARY_PATH 的配置。
```bash
./setup_auto_LD_LIBRARY_PATH.sh ./
```
使用 OpenVINO 推理,[官网安装环境教程](https://docs.openvino.ai/2025/get-started/install-openvino.html?PACKAGE=OPENVINO_BASE&VERSION=v_2024_6_0&OP_SYSTEM=LINUX&DISTRIBUTION=APT),也可用 `install_openvino.sh` 中的指令安装。[官方 C++ 集成教程](https://docs.openvino.ai/2025/openvino-workflow/running-inference/integrate-openvino-with-your-application.html)
```bash
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo apt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
# use ubuntu 20.04
echo "deb https://apt.repos.intel.com/openvino/2024 ubuntu20 main" | sudo tee /etc/apt/sources.list.d/intel-openvino-2024.list
sudo apt update
apt-cache search openvino
sudo apt install openvino-2024.6.0
```
##### NVIDIA NX
NVIDIA NX 上使用的是 TensorRT 推理环境。
```bash
sudo apt install tensorrt
sudo apt install libfmt-dev
```
或者用 local 的 deb 包下载 [官网](https://developer.nvidia.com/nvidia-tensorrt-8x-download)
[适用于 Jetson 边缘计算设备 Ubuntu 20.04+CUDA11.4 的 TensorRT8.2.4](https://developer.nvidia.com/compute/machine-learning/tensorrt/secure/8.2.4/local_repos/nv-tensorrt-repo-ubuntu2004-cuda11.4-trt8.2.4.2-ga-20220324_1-1_arm64.deb)
在 Jetson 上,我们用的是 ARM 核心 Ubuntu 20.04+CUDA11.4,所以选择了 8.2.4 版本
NVIDIA nx foxy 上 rosbridge 和自带 opencv 版本不兼容问题的[解决方案](https://funnywii.com/archives/1730188190314)
```bash
cd
sudo apt-get remove ros-foxy-cv-bridge
git clone https://gitee.com/ucas-sas-robot-team/vision_opencv -b foxy
# 编译的时候指定安装路径(ros2安装的目录下,我的ros2安装目录:/opt/ros/foxy)
cd vision_opencv/cv_bridge
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/ros/foxy ..
sudo make -j install
```
----------------
### 项目编译
#### 配置机器人类型
在 `src/rm_vision/rm_vision_bringup/config/robot_type.yaml` 目录下,选择机器人类型。IMU、相机、等结构的安装方位将会在启动时装载。
> 注意:我们当前这套代码用的是 realsense 相机,因此在 `src/mindvision_camera` 目录下,有一个 `COLCON_IGNORE` 文件,用于忽略 mindvision 相机相关的编译。使用 realsense 的原因主要是我们现存的前年的 MV 相机不太好用,而手边刚好有去年的 realsense:
点击前方三角形展开为什么使用realsense相机 - Click to expand why we use realsense camera.
> 原因如下
> 1. 曝光-帧率问题:我们现有mv相机增益不够大,只有8,远达不到一般使用的64。导致室内光环境下,需要提升曝光时间才能看清装甲板,而这又会进一步降低帧率,增加运动模糊。昨(2025.3.16)夜实际测试下来,曝光-运动模糊使得这个方案在我们的反小陀螺自瞄框架下用起来很困难。
> 2. 对焦问题:mv相机是类似单反相机的镜头,手动对焦,需要螺丝固定,景深很小,对方机器人运动一会儿远一会儿近,有的区间会模糊。而realsense相机是类似手机镜头的小镜头,程序控制自动对焦,景深覆盖范围大
> 3. 稳定性:昨夜实测我们的mv相机不稳定,更换线、usb接口之后,时而能启动,时而无法获得图像,在赛场环境是致命问题。mv相机当前软件不支持热插拔。然而realsense相机有比较方便的debug工具链,且比较稳定(Intel出品啊)。
> 4. 去年整个软件栈是按照realsense相机开发的,tf树依赖realsense ros接口。时间戳、坐标系等都以realsense的接口构建。而mv相机的厂商没有这样的接口,只提供了硬件驱动,重新开发适配,虽然已经完成了一些部分,但还有很大工程量和较多bug。
>
> 综上,主要考虑到自瞄系统的整体效果:识别效果和稳定性,我们还是回去用realsense
#### 编译
```bash
# 假设您已经在工作空间 RMVision-RM4P 的根目录下
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```
如果您想在没有缓存文件的情况下重新构建项目,比如说,您已经大幅更改了一些文件,您可以使用
```bash
colcon build --cmake-clean-cache --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
```
### 运行
有多种方式可以启动项目。
1. 无硬件模式。此模式设计用于在没有机器人的情况下专注于软件开发时的调试。在这种情况下,可以启动主线程而不需要 IMU 和相机,并播放一个用于调试的 ros bag
2. 硬件模式,连接所有相机、IMU、usbCAN。此模式支持 IMU 和 usbCAN 的热插拔,也就是它会待 IMU 和 usbCAN 连接
确保 IMU 是 ttyUSBimu,并且 can_serial 端口是 ttyUSBcan。如果不是,需要在配置文件中更改端口
#### 手动启动
可以使用多个终端手动启动项目。
串口端口现已固定
在一个窗口中(启动节点)
```bash
source install/setup.bash
ros2 launch rm_vision_bringup all.launch.py
```
在另一个窗口中(设置参数)
```bash
ros2 param set /camera/camera rgb_camera.auto_exposure_priority false
ros2 param set /camera/camera rgb_camera.enable_auto_exposure false
ros2 param set /camera/camera rgb_camera.exposure 30
```
启动 serial 节点,只通过 all.launch.py 启动,而不通过 serial_driver.launch 启动
这是因为有枪口矫正系数写在 shoot_caliberate.yaml 里
目前,按照代码里的逻辑,得先插 IMU,再插 CAN USB 接口。保证 IMU 是 ttyUSBimu,CAN_USB 是 ttyUSBcan
##### 无硬件模式,使用我们的 bag
在一个窗口中
```bash
source install/setup.bash
ros2 launch rm_vision_bringup no_hardware.launch.py
```
在另一个窗口中
从[百度网盘链接](https://pan.baidu.com/s/1IdKN-XNSiF6MLV-Dg0wDOg?pwd=w6fw)下载我们的 bags 并解压,然后导航到包含解压后的 848x480x60_30_mid_trans 的文件夹并使用
```bash
ros2 bag play 848x480x60_30_mid_trans
```
来播放 bag。
项目目录的一种可能安排如下:
```shell
# 这是您的项目目录
data
└── 848x480x60_30_mid_trans
├── 848x480x60_30_mid_trans_0.db3
├── 848x480x60_30_mid_trans_0.db3-shm
├── 848x480x60_30_mid_trans_0.db3-wal
└── metadata.yaml
src
└── ...
build
└── ...
...
```
##### 使用硬件
###### 一体化启动
```bash
source install/setup.bash
ros2 launch rm_vision_bringup all.launch.py
```
###### 分开启动
在一个窗口中
```bash
source install/setup.bash
ros2 launch rm_vision_bringup no_hardware.launch.py
```
在另一个窗口中
```bash
ros2 launch realsense2_camera rs_launch.py camera.profile:=848x480x60
```
我们将相机曝光设置为 30
启动 IMU
```
source install/setup.bash
ros2 launch fdilink_ahrs odom_tf.launch.py
```
##### 可视化
使用 rviz2 来可视化结果。
```bash
# 进入工作空间的根目录
source install/setup.bash
rviz2 -d src/rm_vision/rm_vision_bringup/rviz/visualize.rviz
```
使用 rqt 查看关系树和 tf。
```
rqt
```
##### 注意事项(常见问题)
如何设置相机曝光:
```
ros2 param get /camera/camera rgb_camera.exposure
ros2 param set /camera/camera rgb_camera.exposure 30.0
```
如何更改参数:
1. ```ros2 param set xxx```
2. 在 node_params.yaml 中更改参数
3. 在代码中更改比例
如何解决 "/dev/ttyUSB0 permission denied.":
```
sudo usermod -a -G dialout $USER
```
然后重启
### 实用工具
厌倦了启动命令?有几个实用工具可以帮助你。
- 启动无硬件模式,播放 bag,并可视化结果。
```bash
cd <你的项目目录>
./run_in_one_no_hardware_with_bag_and_vis.sh ./
```
- 在比赛现场启动完整系统(这也是由 `crontab` 添加的实际任务)
```bash
cd <你的项目目录>
./run_in_one_on_the_field.sh ./
```
- 在比赛现场启动完整系统并打开可视化窗口(这在准备比赛时的调试中很有用)
```bash
cd <你的项目目录>
./run_in_one_on_the_field_with_vis.sh ./
```
如果不幸需要在损坏的 NUC 上重新安装整个操作系统,可以使用以下脚本重新安装整个系统。
```bash
cd <你的项目目录>
./setup_ros2.sh
./setuprealsense.sh
sudo usermod -a -G dialout $USER
# 然后重启系统
./setup_project_env_and_build.sh
./setup_autolaunch.sh ./
./setup_auto_LD_LIBRARY_PATH.sh ./
```
## Configuration for NUC on the field
在比赛现场,我们需要配置NUC上电启动所有的节点。需要
1. 修改NUC的BIOS,使其在上电后自动开启
2. 关闭桌面登录密码,关闭自动锁屏,禁止自动休眠
3. 为NUC添加启动项目。可用`crontab -e`添加启动项,非常简洁方便。
> 1. `crontab -e`
> 2. 添加`@reboot sleep 10 && /run_in_one_on_the_field.sh ` 其中``是本工程目录的绝对路径。其中`sleep`是为了等待系统把其他的任务启动完成。
## 设计
### 坐标系变换
我们使用两种方式创建坐标系。\
我们总共设置了五个坐标系:odom(惯性系)、gimbal_link、gun_link、imu、camera_color_optical_frame\
只有当数据被放入惯性系中时,我们才能使用 EKF 获得正确的姿态估计。所以我们设置了一个位于 PTZ 中心且没有旋转的 odom 坐标系。(这意味着我们将旋转视为非惯性,但我们将平移视为惯性。)\
请注意,我们不能仅使用 imu 来创建里程计!!!!!!
1. 创建一个节点 \
特性:\
它可以设置静态和动态坐标系。但每次更改后,我们需要重新构建。\
参考文档:\
https://docs.ros.org/en/foxy/Tutorials/Intermediate/Tf2/Adding-A-Frame-Cpp.html\
用途:我们只设置一个父坐标系为 odom、子坐标系为 gimbal_link 的变换,用于记录 PTZ 的旋转。
要把无下位机的控制程序写完
## 未来工作(待办事项列表)
1. 添加哨兵双云台全部在NUC上启动的流程
2. 编写参数标定的README
3. 编写上场工作流程,调节红色和蓝色的识别
4. 测试IMU热插拔流程
如此定义机器人的串口和IMU
对于步兵和英雄机器人,can口是/dev/ttyUSBcan,IMU是/dev/ttyUSBimu
对于哨兵机器人,can口是/dev/ttyUSBcan,IMU是/dev/ttyUSBimuup和/dev/ttyUSBimudown
为了启动哨兵机器人的两个节点,需要启动:
两组:姿态解算,装甲板识别,目标追踪
一组:串口收发
一组:无下位机控制
如果按照现在的结构,一切的launch file将会变得比较混乱。这是因为在launch file中根据某一字符串确定读取的参数,导致没有办法从高层级的python launch把字符串发给更低层级的 python launch,这是因为参数在运行时确定,而launch file只是生成了参数的"description"。
为了快速完成任务,保留英雄和步兵的launch方式:直接启动。而对于哨兵双云台同时启动的情况,我们从头直接编写launch 文件,而不考虑现有launch file的复用,以尽可能少地修改代码,将精力聚焦于更重要的事情上。
现在必须要让自瞄和串口收发剥离开来了,先跑通单个机器人的代码。
# TODO
## 四点模型求解
1. 改config
2. 根据config启动不同的节点做解算。
# FAQ
[foxy rviz2 “rviz_common/Time“报错问题](https://blog.csdn.net/HeavenMo/article/details/134748867)
realsense 相机应该禁用红外光,因为它会影响颜色。
```bash
/home/ucas-sasnx1/RMVision-RM4P-2025/src/mindvision_camera/src/mv_camera_node.cpp:8:10: fatal error: camera_info_manager/camera_info_manager.hpp: No such file or directory
8 | #include
```
```bash
sudo apt install ros-foxy-camera-info-manager
sudo apt install ros-foxy-rcutils
https://www.mindvision.com.cn/category/software/sdk-installation-package/
sudo apt install ros-foxy-compressed-*
sudo apt install cron
```
还有的问题:
贴脸识别不出来。kse说解决方案可以是缩小图像。可以尝试一下。
1. 新建一个vision_test包,用于发布读取文件夹下的图片,发布/camera/color/image_raw的话题。
2. 修改代码识别的核心逻辑。如果连续3帧都识别不出任何装甲板,就缩小图像,再识别——方法是以中心为缩放点,缩小到原图长宽的1/4,送入识别器,得到的装甲板坐标要根据缩放的变换变回原图的识别结果,3帧之后重置状态,恢复原来的识别方法。
完成了,效果挺好。我们新加了一个测试脚本`run_in_one_no_hardware_with_image_and_vis.sh`,用于测试这个功能。你可以修改`src/rm_auto_aim/rm4p_inference/include/rm4p_inference/rm4p_inference.hpp`中的`#define RESIZE_WHEN_MISSING`来控制是否使用这个功能。可以明显看到识别的区别。
这里只能用状态机来建模。
为了简单,只用两个状态
状态转换,写在函数最后
- 如果自己是resizing 态,则设置状态为normal 态
- 如果自己是normal态,且没找到任何装甲板,则设置自己为resizing态
行为规则:
- 如果自己是resizing态,则识别变小的图像
- 如果自己是normal态,则识别原图像
cron启动很慢,可能还是得改回去用service启动。
权宜之计:哨兵识别
模型处理哨兵有点问题:2025年落地哨兵的装甲板和以前的固定轨道哨兵装甲板朝向不一样。
考虑直接把图片旋转180度,然后粘贴到原图像下方,合成一张新的大图,然后送入模型识别。——等价于batchsize为2