<<<<<<< HEAD

Auto_aim_HDUS

=======

花椒步兵视觉开源方案 ReelSteel


华东交通大学2024赛季3V3对抗赛视觉开源框架

本开源参考:沈阳航空航天TUP2022,深大2019,上交2021,湖大2023开源

新手导向

1. 简介

  1. 硬件选型
  • 工业相机:海康威视MV-CS016-10UC +搭配镜头:8mm焦距镜头
  • 普通usb摄像头
  1. 功能:
  • 自瞄
  1. 未完成
  • 能量机关
  • 预测,反小陀螺
  1. 部署需要调节参数

    • 相机的曝光与增益,参数

    • 相机内参矩阵与外参矩阵XML路径更改

    • 相机坐标系到枪管坐标系水平(X,Y,Z)偏移量与旋转(Pitch,Yaw)偏移量

    • 传统视觉识别参数,如二值化阈值,灯条装甲板几何约束参数

    • USB虚拟串口设备名字

    • inference model 路径更改

    • 根据比赛场地调整曝光和增益,主要是曝光

    • 静止击打装甲板(调整bias_pitch和bias_yaw),如果近低远高就减小摩擦系数抬高pitch

    • 取消所有调试窗口,在debug.h头文件

    • 调整开火策略,决定自瞄发射的速度。

    • 反小陀螺调参,主要调延迟时间,要是角速度非常不准就重新适当调整曝光和增益

  2. 设计模式:

​ 生产者消费者模式

2. 环境配置

3.文件结构

.
├── AngleSolver          姿态解算        
│   ├── include
│   │   └── AngleSolver.h
│   ├── src
│   │   └── AngleSolver.cpp
│   └── XML
│       ├── out_camera_data1.xml
│       ├── out_camera_data_pre.xml
│       └── out_camera_data.xml
├── ArmorDetector        自瞄
│   ├── include
│   │   ├── armor.h
│   │   ├── detector.h
│   │   └── number_classifier.h
│   ├── model
│   │   ├── fc.onnx
│   │   ├── label.txt
│   │   └── mlp.onnx
│   └── src
│       ├── detector.cpp
│       └── number_classifier.cpp
├── CMakeLists.txt
├── data
│   └── README.md
├── debug.h              宏定义开关
├── docs
│   └── image.png
├── general
│   ├── general.cpp
│   └── general.h
├── HKCamera             相机
│   ├── include
│   │   ├── Camera.h
│   │   ├── CameraParams.h
│   │   ├── MvCameraControl.h
│   │   ├── MvErrorDefine.h
│   │   └── PixelType.h
│   ├── libs
│   │   └── linux
│   │       ├── libFormatConversion.so
│   │       ├── libMediaProcess.so
│   │       ├── libMvCameraControl.so
│   │       ├── libMVGigEVisionSDK.so
│   │       ├── libMVRender.so
│   │       └── libMvUsb3vTL.so
│   ├── src
│   │   └── Camera.cpp
│   └── XML
│       └── CameraParam.xml
├── main.cpp
├── README.md
├── SerialPort
│   ├── include
│   │   ├── CRC_Check.h
│   │   └── serialport.h
│   └── src
│       ├── CRC_Check.cpp
│       └── serialport.cpp
├── setup.sh
├── Thread
│   ├── thread.cpp
│   └── thread.h
├── ttyUSB.sh
└── WatchDDog.sh

4.通讯协议

Byte0 Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 Byte8 Byte9
0xA5 cmdID CRC8_Check pitch_data pitch_data pitch_data pitch_data yaw_data yaw_data yaw_data
Byte10 Byte11 Byte12 Byte13 Byte14 Byte15 Byte16 Byte17 Byte18 Byte19
yaw_data dist_data dist_data dist_data dist_data flag1 flag2 flag3 flag4 flag5
  • 0xA5 -帧头
  • cmdID : 8 bit int - 命令模式(0 不处理,1 为红色自瞄,2 为蓝色自瞄, 3 4 5 6 7 8 为大小符)
  • pitch_data : 32 bit float - 接收视觉解算出来的云台 pitch 值
  • yaw_data : 32 bit float - 接收视觉解算出来的云台 yaw 值
  • dist_data : 32 bit float - 接收视觉解算目标到相机的距离值
  • flag1 : 8 bit int - 是否瞄准到中心(大小符用) / 哨兵模式 (stm32 -> PC)
  • flag2 : 8 bit int - 是否找到目标(自瞄)/ 吊基地模式(stm32 -> PC)
  • flag3 : 8 bit int - 是否识别到大小符
  • flag4 : 8 bit int - 是否击打过大小符
  • flag5 : 8 bit int - 装甲板是否贴脸(已弃用)

5.自启动

WatchDog.sh自启动脚本

#!/bin/bash 

sec=2 
cnt=0 
name=auto_aim_HDUS
program_name=HDUS
cd /home/wpj/RM_Vision_code_US/auto_aim_HDUS/build/
#make clean && 
make -j12

/home/wpj/RM_Vision_code_US/auto_aim_HDUS/build/HDUS
while [ 1 ] 
do 
    count=`ps -ef | grep $program_name | grep -v "grep" | wc -l`
    echo "Thread count: $count" 
    echo "Expection count: $cnt" 
    if [ $count -ge 1 ]; then 
        echo "The $name is still alive!" 
        sleep $sec 
    else  
        echo "Starting $name..." 
        gnome-terminal -- bash -c "cd /home/wpj/RM_Vision_code_US/auto_aim_HDUS/build/;
        ./$program_name;exec bash;" 
        echo "$name has started!"   
        ((cnt=cnt+1)) 
        sleep $sec 
        if [ $cnt -gt 9 ]; then 
            echo "Reboot!" 
            #reboot 
        fi 
    fi 
done

如何添加自启动脚本(或者将 watchDog.sh 添加到 ubuntu 系统的 StartUp Applications 中就可以实现开机自启动程序):

  1. 完善rc-local.service服务
vi /lib/systemd/system/rc-local.service 

在结尾添加:
[Install]
WantedBy=multi-user.target  
Alias=rc-local.service

  1. 添加/etc/rc.local文件

    sudo vim /etc/rc.local
        
    添加自己的脚本:
    sh you_dir/auto_start.sh
        
  2. 给权限

    sudo chmod +x /etc/rc.local
    

6.总结与展望

  • 反小陀螺
  • 预测装甲板(敌方旋转与平移)EKF(扩展卡尔曼滤波)