#ifndef OMNIPERCEPTION__DECIDER_HPP #define OMNIPERCEPTION__DECIDER_HPP #include // 必须在opencv2/core/eigen.hpp上面 #include #include #include #include "detection.hpp" #include "io/camera.hpp" #include "io/command.hpp" #include "io/usbcamera/usbcamera.hpp" #include "tasks/auto_aim/armor.hpp" #include "tasks/auto_aim/target.hpp" #include "tasks/auto_aim/yolo.hpp" namespace omniperception { class Decider { public: Decider(const std::string & config_path); io::Command decide( auto_aim::YOLO & yolo, const Eigen::Vector3d & gimbal_pos, io::USBCamera & usbcam1, io::USBCamera & usbcam2, io::Camera & back_cammera); io::Command decide( auto_aim::YOLO & yolo, const Eigen::Vector3d & gimbal_pos, io::Camera & back_cammera); io::Command decide(const std::vector & detection_queue); Eigen::Vector2d delta_angle( const std::list & armors, const std::string & camera); bool armor_filter(std::list & armors); void set_priority(std::list & armors); //对队列中的每一个DetectionResult进行过滤,同时将DetectionResult排序 void sort(std::vector & detection_queue); Eigen::Vector4d get_target_info( const std::list & armors, const std::list & targets); void get_invincible_armor(const std::vector & invincible_enemy_ids); void get_auto_aim_target( std::list & armors, const std::vector & auto_aim_target); private: int img_width_; int img_height_; double fov_h_, new_fov_h_; double fov_v_, new_fov_v_; int mode_; int count_; auto_aim::Color enemy_color_; auto_aim::YOLO detector_; std::vector invincible_armor_; //无敌状态机器人编号,英雄为1,哨兵为6 // 定义ArmorName到ArmorPriority的映射类型 using PriorityMap = std::unordered_map; const PriorityMap mode1 = { {auto_aim::ArmorName::one, auto_aim::ArmorPriority::second}, {auto_aim::ArmorName::two, auto_aim::ArmorPriority::forth}, {auto_aim::ArmorName::three, auto_aim::ArmorPriority::first}, {auto_aim::ArmorName::four, auto_aim::ArmorPriority::first}, {auto_aim::ArmorName::five, auto_aim::ArmorPriority::third}, {auto_aim::ArmorName::sentry, auto_aim::ArmorPriority::third}, {auto_aim::ArmorName::outpost, auto_aim::ArmorPriority::fifth}, {auto_aim::ArmorName::base, auto_aim::ArmorPriority::fifth}, {auto_aim::ArmorName::not_armor, auto_aim::ArmorPriority::fifth}}; const PriorityMap mode2 = { {auto_aim::ArmorName::two, auto_aim::ArmorPriority::first}, {auto_aim::ArmorName::one, auto_aim::ArmorPriority::second}, {auto_aim::ArmorName::three, auto_aim::ArmorPriority::second}, {auto_aim::ArmorName::four, auto_aim::ArmorPriority::second}, {auto_aim::ArmorName::five, auto_aim::ArmorPriority::second}, {auto_aim::ArmorName::sentry, auto_aim::ArmorPriority::third}, {auto_aim::ArmorName::outpost, auto_aim::ArmorPriority::third}, {auto_aim::ArmorName::base, auto_aim::ArmorPriority::third}, {auto_aim::ArmorName::not_armor, auto_aim::ArmorPriority::third}}; }; enum PriorityMode { MODE_ONE = 1, MODE_TWO }; } // namespace omniperception #endif