2025哨兵步兵自瞄,该项目在原FYT2024 Vision Project项目上修改了部分串口通信、能量机关识别模型,添加了海康相机驱动。
├── README.md ├── rm_auto_aim (自瞄算法) │ ├── armor_detector (装甲板识别) │ ├── armor_solver (装甲板结算) │ ├── README.md │ └── rm_auto_aim ├── rm_bringup (启动及参数文件) ├── rm_hardware_driver │ ├── rm_camera_driver (大恒相机驱动) │ ├── rm_serial_driver (串口驱动) │ ├── rm_vision_ros2_galaxy_camera (独立线程的大恒相机驱动) │ └── ros2_hik_camera (海康相机驱动) ├── rm_interfaces (自定义消息类型) ├── rm_robot_description (机器人urdf文件,坐标系的定义) ├── rm_rune (打符算法) └── rm_utils (工具包) │ ├── math (包括PnP解算、弹道补偿等) │ └── logger (日志库)
- Ubuntu 22.04
- ROS2 Humble
- 大恒相机驱动
- opencv
sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev sudo apt-get install python3-dev python3-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev mkdir build && cd build cmake .. && make -j8 sudo make install
验证:cd /home/usr/opencv-4.6.0/samples/cpp/example_cmake cmake . && make -j8 ./opencv_example_project 出现hello opencv即可
-
ceres-solver
-
Eigen库
-
pybind11
-
fmt库
sudo apt install libfmt-dev
-
Sophus库 (G2O库依赖)
git clone https://github.com/strasdat/Sophus cd Sophus mkdir build && cd build cmake .. make -j sudo make install
-
G2O库 (优化装甲板Yaw角度)
sudo apt install libeigen3-dev libspdlog-dev libsuitesparse-dev qtdeclarative5-dev qt5-qmake libqglviewer-dev-qt5 git clone https://github.com/RainerKuemmerle/g2o cd g2o mkdir build && cd build cmake .. make -j sudo make install
-
OpenVINO库 (能量机关识别)
参考OpenVINO官方文档,建议同时安装GPU相关依赖
-
Ceres库 (能量机关曲线拟合)
sudo apt install libceres-dev
本文档中可能有缺漏,如有,可以用rosdep安装剩下依赖
rosdep install --from-paths src --ignore-src -r -y
修改rm_bringup/config/launch_params.yaml,选择需要启动的功能和对应的相机类型。
# 编译
colcon build --symlink-install --parallel-workers 4 #本仓库包含的功能包过多,建议限制同时编译的线程数
# 运行
source install/setup.bash
ros2 launch rm_bringup bringup.launch.py默认日志和内录视频路径为~/nbut2025-log/
使用的日志库是用fmt的,不是ros2的日志库
-可以参考auto-aim.sh脚本
https://flowus.cn/lihanchen/share/02a518a0-f1bb-47a5-8313-55f75bab21b5
将标定得到的数据在 /rm_bringup/config/camera_info.yaml 中修改。 相机标定的参数对PNP解算的影响较大,测量实际相机到装甲板的距离与解算出的结果相比不能偏差过大。
自瞄后续的解算部分需要通过串口接受到的gimbal姿态将机器人自身状态与目标物体的运动分离。因此在调解算前,需确保串口能够正常接收下位机发送的gimbal姿态,单位方向标准与视觉能对应上,imu的数据相对较稳定。
根据代码中ekf部分,我们可以通过观测值来计算出观测协方差系数(具体的观测值自己挑选)
计算公式: 稳定观测量$Z$,匀速摇晃云台观测偏移量$\Delta Z$
那么$r=\frac{(\frac{\Delta Z}{4})^2}{Z}$
算出来之后在parms修改相对应的观测协方差系数(注意小数点),调完之后,保持云台不动,动靶车,使其小陀螺以及平移,观察可视化部分的整车观测是否准确,以及输出值是否正确
在确保以上部分没有大问题的情况下,再开始加补偿才是有意义的。首先,可以根据静止靶的落点修改 /rm_bringup/config/launch_params.yaml 中的odom2camera参数,弹速在 /rm_bringup/config/armor_solver_params.yaml 中修改
其他的一些具体参数,如相机曝光增益,识别的限制条件等 上场时必须关闭debug和foxglove,关闭后帧率能得到明显的提升。
该版的自瞄,PNP解算测距经过一系列的图像处理优化,5m测距误差在8-10cm左右,识别解算帧率在80帧左右。识别部分比较稳定,同时鲁棒性也不错,最大的问题还是在于火控方面,小陀螺基本只能泼水的效果。
改进方向
- 增加判断条件,区别处理静止和小陀螺装甲板,现有的代码所有情况都安装小陀螺预测来计算。
- 优化视觉的火控部分。但是自瞄是一个综合的项目,机械弹道弹速的稳定性,电控的跟随响应频率都会影响自瞄的最终效果,因此需要综合多方面来优化。
本项目是在众多开源资料和队内学长学姐传承的基础上完成的,特别感谢学姐学长留下的车车,视觉组学长们无私的技术传承和经验分享,视觉群的群友们提供了宝贵的建议与解决方法,以及机械组和电控组的队友们一起联调完善优化。 最后,祝New Legends视觉组越来越好!