# 算法组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