diff --git a/README.md b/README.md
index 32924cc..d7795e6 100644
--- a/README.md
+++ b/README.md
@@ -13,3 +13,12 @@ RMUA2021战队技术答辩视频链接:[RoboMaster 2021高校人工智能挑
|robot_sentry|哨岗识别模块|
|robot_decision|决策模块|
|robot_detection|装甲识别模块|
+|robot_omni|车端全向感知模块|
+|robot_msgs|自定义的ros消息类型|
+
+## 编译及运行
+哨岗识别模块自成一体,不与其他模块一起编译。
+
+决策模块、装甲识别模块和全向感知模块均依赖`robot_msgs`,编译时务必包含在内。
+
+具体编译步骤参考各个模块的README。
diff --git a/robot_detection/README.md b/robot_detection/README.md
index 0daef6f..67e9603 100755
--- a/robot_detection/README.md
+++ b/robot_detection/README.md
@@ -189,9 +189,11 @@ robot_detection
单独运行测试:进入工作空间,运行节点,播放rosbag
```bash
-source devel/setup.bash
catkin_make
+source devel/setup.bash
roslaunch robot_detection robot_detection.launch
rosbag play test.bag
```
+## 4、网盘链接
+网盘中提供了用于演示功能的rosbag。链接:[https://pan.baidu.com/s/1EDhP30KD0Ao7wxOlbpj_VQ](https://pan.baidu.com/s/1EDhP30KD0Ao7wxOlbpj_VQ?pwd=ft9k),提取码:ft9k。
diff --git a/robot_msgs/CMakeLists.txt b/robot_msgs/CMakeLists.txt
new file mode 100644
index 0000000..555be98
--- /dev/null
+++ b/robot_msgs/CMakeLists.txt
@@ -0,0 +1,84 @@
+cmake_minimum_required(VERSION 3.1)
+project(robot_msgs)
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR})
+
+find_package(catkin REQUIRED COMPONENTS
+ std_msgs
+ nav_msgs
+ geometry_msgs
+ actionlib
+ message_generation
+)
+
+add_action_files(
+ DIRECTORY action
+ FILES
+)
+
+add_message_files(
+ DIRECTORY msg
+ FILES
+ IMUParam.msg
+ TOFdata.msg
+)
+
+add_message_files(
+ DIRECTORY msg/net
+ FILES
+
+ ZMQdata.msg
+)
+
+add_message_files(
+ DIRECTORY msg/robot
+ FILES
+ ArmorDetection.msg
+ ChassisParam.msg
+ CornerDetection.msg
+ GimbalAngle.msg
+ OdomGoalMsg.msg
+ RobotFlag.msg
+ RobotPose.msg
+ TwistAccel.msg
+ RobotLocation.msg
+ GlobalMap.msg
+)
+
+add_message_files(
+ DIRECTORY msg/referee
+ FILES
+ GameZone.msg
+ GameBuff.msg
+ GameResult.msg
+ GameRobotHP.msg
+ GameStatus.msg
+ RobotDamage.msg
+ RobotStatus.msg
+)
+
+add_message_files(
+ DIRECTORY msg/wireless
+ FILES
+ SentryData.msg
+ SharePath.msg
+ TeamInfo.msg
+ WirelessParam.msg
+)
+
+add_service_files(
+ DIRECTORY srv
+ FILES
+)
+
+generate_messages(
+ DEPENDENCIES
+ std_msgs
+ geometry_msgs
+ nav_msgs
+)
+
+catkin_package(
+ CATKIN_DEPENDS
+ message_runtime
+)
diff --git a/robot_msgs/msg/IMUParam.msg b/robot_msgs/msg/IMUParam.msg
new file mode 100644
index 0000000..db2fd49
--- /dev/null
+++ b/robot_msgs/msg/IMUParam.msg
@@ -0,0 +1,5 @@
+# imu param
+float32 temperature
+float32 gyro_bias_x
+float32 gyro_bias_y
+float32 gyro_bias_z
\ No newline at end of file
diff --git a/robot_msgs/msg/TOFdata.msg b/robot_msgs/msg/TOFdata.msg
new file mode 100644
index 0000000..c8b8ea4
--- /dev/null
+++ b/robot_msgs/msg/TOFdata.msg
@@ -0,0 +1,6 @@
+uint8 id1
+uint8 id2
+uint8 status1
+uint8 status2
+float64 distance1
+float64 distance2
\ No newline at end of file
diff --git a/robot_msgs/msg/net/ZMQdata.msg b/robot_msgs/msg/net/ZMQdata.msg
new file mode 100644
index 0000000..70185d9
--- /dev/null
+++ b/robot_msgs/msg/net/ZMQdata.msg
@@ -0,0 +1,4 @@
+# ZMQ data
+int16[8] robot_pose_x
+int16[8] robot_pose_y
+
\ No newline at end of file
diff --git a/robot_msgs/msg/referee/GameBuff.msg b/robot_msgs/msg/referee/GameBuff.msg
new file mode 100644
index 0000000..ff8bcb4
--- /dev/null
+++ b/robot_msgs/msg/referee/GameBuff.msg
@@ -0,0 +1,12 @@
+# game zone array
+GameZone[6] zone
+
+# game robot bullet
+uint16 red1
+uint16 red2
+uint16 blue1
+uint16 blue2
+
+# lurk_mode
+uint8 lurl_mode
+uint8 res
\ No newline at end of file
diff --git a/robot_msgs/msg/referee/GameResult.msg b/robot_msgs/msg/referee/GameResult.msg
new file mode 100644
index 0000000..de3f8d7
--- /dev/null
+++ b/robot_msgs/msg/referee/GameResult.msg
@@ -0,0 +1,5 @@
+#game result
+uint8 DRAW=0
+uint8 RED_WIN=1
+uint8 BLUE_WIN=2
+uint8 result
diff --git a/robot_msgs/msg/referee/GameRobotHP.msg b/robot_msgs/msg/referee/GameRobotHP.msg
new file mode 100644
index 0000000..5183c5f
--- /dev/null
+++ b/robot_msgs/msg/referee/GameRobotHP.msg
@@ -0,0 +1,5 @@
+#game robot hp
+uint16 red1
+uint16 red2
+uint16 blue1
+uint16 blue2
diff --git a/robot_msgs/msg/referee/GameStatus.msg b/robot_msgs/msg/referee/GameStatus.msg
new file mode 100644
index 0000000..1290a41
--- /dev/null
+++ b/robot_msgs/msg/referee/GameStatus.msg
@@ -0,0 +1,12 @@
+#game status
+uint8 PRE_MATCH = 0
+uint8 SETUP = 1
+uint8 INIT = 2
+uint8 FIVE_SEC_CD = 3
+uint8 ROUND = 4
+uint8 CALCULATION = 5
+uint8 game_status
+uint16 remaining_time
+
+
+
diff --git a/robot_msgs/msg/referee/GameZone.msg b/robot_msgs/msg/referee/GameZone.msg
new file mode 100644
index 0000000..9783032
--- /dev/null
+++ b/robot_msgs/msg/referee/GameZone.msg
@@ -0,0 +1,10 @@
+#game zone
+uint8 RED_HP_RECOVERY=1
+uint8 RED_BULLET_SUPPLY=2
+uint8 BLUE_HP_RECOVERY=3
+uint8 BLUE_BULLET_SUPPLY=4
+uint8 DISABLE_SHOOTING=5
+uint8 DISABLE_MOVEMENT=6
+
+uint8 type
+bool active
diff --git a/robot_msgs/msg/referee/RobotDamage.msg b/robot_msgs/msg/referee/RobotDamage.msg
new file mode 100644
index 0000000..020fb7a
--- /dev/null
+++ b/robot_msgs/msg/referee/RobotDamage.msg
@@ -0,0 +1,14 @@
+#robot damage
+uint8 ARMOR = 0
+uint8 OFFLINE = 1
+uint8 EXCEED_SHOOT_SPEED = 2
+uint8 EXCEED_SHOOT_HEAT = 3
+uint8 EXCEED_CHASSIS_POWER = 4
+uint8 OBSTACLE_COLLISION = 5
+uint8 damage_type
+
+uint8 FORWARD = 0
+uint8 LEFT = 1
+uint8 BACKWARD = 2
+uint8 RIGHT = 3
+uint8 damage_source
diff --git a/robot_msgs/msg/referee/RobotStatus.msg b/robot_msgs/msg/referee/RobotStatus.msg
new file mode 100644
index 0000000..b389fdf
--- /dev/null
+++ b/robot_msgs/msg/referee/RobotStatus.msg
@@ -0,0 +1,13 @@
+#robot status
+uint8 id
+uint8 level
+uint16 remain_hp
+uint16 max_hp
+
+uint16 heat_cooling_rate
+uint16 heat_cooling_limit
+uint16 heat_speed_limit
+
+bool gimbal_enable
+bool chassis_enable
+bool shooter_enable
diff --git a/robot_msgs/msg/robot/ArmorDetection.msg b/robot_msgs/msg/robot/ArmorDetection.msg
new file mode 100644
index 0000000..a8e6a85
--- /dev/null
+++ b/robot_msgs/msg/robot/ArmorDetection.msg
@@ -0,0 +1,7 @@
+#armor detected msg
+Header header
+uint8 id
+bool detected_enemy
+float64 enemy_x
+float64 enemy_y
+float64 distance
diff --git a/robot_msgs/msg/robot/ChassisParam.msg b/robot_msgs/msg/robot/ChassisParam.msg
new file mode 100644
index 0000000..e87ff36
--- /dev/null
+++ b/robot_msgs/msg/robot/ChassisParam.msg
@@ -0,0 +1,3 @@
+uint8 robot_id
+uint16 wheel_pwm
+float32 voltage
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/CornerDetection.msg b/robot_msgs/msg/robot/CornerDetection.msg
new file mode 100644
index 0000000..8b03aaa
--- /dev/null
+++ b/robot_msgs/msg/robot/CornerDetection.msg
@@ -0,0 +1,12 @@
+uint8 camera_id # 相机id号
+uint8 num_find # 相机找到机器人的数量
+
+uint8 robot_id_1
+float64 position_x_1
+float64 position_y_1
+float64 angular_theta_1
+
+uint8 robot_id_2
+float64 position_x_2
+float64 position_y_2
+float64 angular_theta_2
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/GimbalAngle.msg b/robot_msgs/msg/robot/GimbalAngle.msg
new file mode 100644
index 0000000..e9bcef5
--- /dev/null
+++ b/robot_msgs/msg/robot/GimbalAngle.msg
@@ -0,0 +1,13 @@
+#gimbal feedback angle data
+Header header
+bool yaw_mode
+
+float64 yaw_gyro
+float64 yaw_angle
+float64 yaw_ecd_angle
+float64 pitch_angle
+float64 yaw_original
+float64 bullet_speed
+
+uint16 armor_angle
+uint16 distance
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/GlobalMap.msg b/robot_msgs/msg/robot/GlobalMap.msg
new file mode 100644
index 0000000..fe1f8c3
--- /dev/null
+++ b/robot_msgs/msg/robot/GlobalMap.msg
@@ -0,0 +1,5 @@
+#GlobalMap
+Header header
+RobotLocation[] robots
+RobotLocation[6] msg2decision #0->red1 1->red2 2->blue1 3->blue2 4->gray1 5->gray2
+bool is_sentry_on
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/OdomGoalMsg.msg b/robot_msgs/msg/robot/OdomGoalMsg.msg
new file mode 100644
index 0000000..a50c3aa
--- /dev/null
+++ b/robot_msgs/msg/robot/OdomGoalMsg.msg
@@ -0,0 +1,4 @@
+float64 x
+float64 y
+float64 yaw
+uint8 mode
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/RobotFlag.msg b/robot_msgs/msg/robot/RobotFlag.msg
new file mode 100644
index 0000000..03b1e6e
--- /dev/null
+++ b/robot_msgs/msg/robot/RobotFlag.msg
@@ -0,0 +1 @@
+bool flag
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/RobotLocation.msg b/robot_msgs/msg/robot/RobotLocation.msg
new file mode 100644
index 0000000..11faf89
--- /dev/null
+++ b/robot_msgs/msg/robot/RobotLocation.msg
@@ -0,0 +1,5 @@
+#Robot_location
+uint8 id
+float32 x #单位m
+float32 y
+float64 yaw #单位弧度 ==100表示无效
diff --git a/robot_msgs/msg/robot/RobotPose.msg b/robot_msgs/msg/robot/RobotPose.msg
new file mode 100644
index 0000000..0170332
--- /dev/null
+++ b/robot_msgs/msg/robot/RobotPose.msg
@@ -0,0 +1,8 @@
+float32 robot0_x
+float32 robot0_y
+float32 robot1_x
+float32 robot1_y
+float32 robot2_x
+float32 robot2_y
+float32 robot3_x
+float32 robot3_y
\ No newline at end of file
diff --git a/robot_msgs/msg/robot/TwistAccel.msg b/robot_msgs/msg/robot/TwistAccel.msg
new file mode 100644
index 0000000..14b1cca
--- /dev/null
+++ b/robot_msgs/msg/robot/TwistAccel.msg
@@ -0,0 +1,3 @@
+uint8 mode
+geometry_msgs/Twist twist
+geometry_msgs/Accel accel
\ No newline at end of file
diff --git a/robot_msgs/msg/wireless/SentryData.msg b/robot_msgs/msg/wireless/SentryData.msg
new file mode 100644
index 0000000..bcee48d
--- /dev/null
+++ b/robot_msgs/msg/wireless/SentryData.msg
@@ -0,0 +1,7 @@
+# sentry data
+Header header
+uint8 id
+uint8[4] lable
+uint16[4] x # mm
+uint16[4] y # mm
+int16[4] yaw # rad*100
\ No newline at end of file
diff --git a/robot_msgs/msg/wireless/SharePath.msg b/robot_msgs/msg/wireless/SharePath.msg
new file mode 100644
index 0000000..5f4775f
--- /dev/null
+++ b/robot_msgs/msg/wireless/SharePath.msg
@@ -0,0 +1,6 @@
+# 机器人路径规划共享
+Header header
+uint8 id
+
+uint16[7] pos_x
+uint16[7] pos_y
diff --git a/robot_msgs/msg/wireless/TeamInfo.msg b/robot_msgs/msg/wireless/TeamInfo.msg
new file mode 100644
index 0000000..3d9a926
--- /dev/null
+++ b/robot_msgs/msg/wireless/TeamInfo.msg
@@ -0,0 +1,14 @@
+Header header
+uint8 id
+
+uint8 attack_enemy #正攻击敌方机器人id
+uint8 being_attacked #受攻击方向
+uint8 to_buff #要去的buff点
+uint16 pose_x_teammate
+uint16 pose_y_teammate
+uint16 pose_x_enemy
+uint16 pose_y_enemy
+
+bool teammate_retreat #队友是否撤退
+uint8 team_mode #主攻还是辅助的标志
+uint8 decision_enemy_id #决策选择的进攻目标
diff --git a/robot_msgs/msg/wireless/WirelessParam.msg b/robot_msgs/msg/wireless/WirelessParam.msg
new file mode 100644
index 0000000..9ca801c
--- /dev/null
+++ b/robot_msgs/msg/wireless/WirelessParam.msg
@@ -0,0 +1,14 @@
+# wireless param
+
+uint8 id
+
+# freq range: 0~127
+uint8 freq_tx
+uint8 freq_rx1
+uint8 freq_rx2
+
+uint8 SPEED_250K = 0
+uint8 SPEED_1M = 1
+uint8 SPEED_2M = 2
+uint8 speed
+
diff --git a/robot_msgs/package.xml b/robot_msgs/package.xml
new file mode 100644
index 0000000..fc5fdd3
--- /dev/null
+++ b/robot_msgs/package.xml
@@ -0,0 +1,32 @@
+
+ robot_msgs
+ 1.0.0
+
+ The robot msgs package provides all the messages for RoboMaster AI Robot
+
+ RoboMaster
+ RoboMaster
+ GPL 3.0
+ https://github.com/RoboMaster/RoboRTS
+
+ catkin
+
+ actionlib
+ std_msgs
+ geometry_msgs
+ nav_msgs
+ sensor_msgs
+ message_generation
+
+
+ actionlib
+ std_msgs
+ geometry_msgs
+ nav_msgs
+ sensor_msgs
+ message_runtime
+
+
+
+
+
\ No newline at end of file
diff --git a/robot_omni/CMakeLists.txt b/robot_omni/CMakeLists.txt
new file mode 100644
index 0000000..d737d2c
--- /dev/null
+++ b/robot_omni/CMakeLists.txt
@@ -0,0 +1,53 @@
+cmake_minimum_required(VERSION 3.5)
+project(omni_detect)
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_BUILD_TYPE Release)
+
+find_package(catkin REQUIRED COMPONENTS
+ cv_bridge
+ image_transport
+ roscpp
+ sensor_msgs
+ std_msgs
+ roslib
+ robot_msgs
+)
+catkin_package()
+
+include_directories(
+ "/usr/include/eigen3"
+ include/robot_detector
+ ${catkin_INCLUDE_DIRS}
+)
+
+set(CUDA_GEN_CODE "-gencode=arch=compute_75,code=sm_75")
+set(CUDA_TOOLKIT_ROOT_DIR "/usr/local/cuda-11.3")
+set(CUDNN_DIR "/usr/local/cuda-11.3/lib64")
+set(TENSORRT_DIR "/home/rmua3/TensorRT-8.0.1.6") #需要修改为本地TensorRT路径
+
+find_package(CUDA REQUIRED)
+find_package(OpenCV 4 REQUIRED)
+
+include_directories(
+ ${OpenCV_INCLUDE_DIRS}
+ ${CUDA_TOOLKIT_ROOT_DIR}/include
+ ${TENSORRT_DIR}/include
+ ${CUDNN_DIR}/include
+)
+
+link_directories(
+ ${TENSORRT_DIR}/lib
+ ${CUDA_TOOLKIT_ROOT_DIR}/lib64
+ ${CUDNN_DIR}/lib
+)
+
+add_subdirectory(src)
+
+add_executable(robot_detector_node
+ src/robot_detector_node.cpp
+ )
+target_link_libraries(robot_detector_node
+ robot_detector_lib
+ ${catkin_LIBRARIES}
+ )
+
diff --git a/robot_omni/README.md b/robot_omni/README.md
new file mode 100644
index 0000000..5d9fef9
--- /dev/null
+++ b/robot_omni/README.md
@@ -0,0 +1,82 @@
+# 机器人端全向感知模块
+
+## 目录
+
+- [软件功能介绍](#软件功能介绍)
+- [依赖环境及运行方式](#依赖环境及运行方式)
+
+## 软件功能介绍
+
+机器人端全向感知模块通过安装在机器人上的四个相机,搭配广角镜头可以获取机器人周围的全向视野,通过检测周围的机器人和装甲板,可以辅助规划和决策模块完成动态避障,防绕后等行为。由于通信受限等原因,机器人可能无法稳定地接收来自哨岗的信息,这时候机器人的自主感知能力就显得尤为重要。全向感知模块的检测功能与哨岗类似,但它可以让机器人在不依赖外界信息输入的条件下仍具备一定的自主感知能力,使其更加智能化。另外,由于增加了一个检测信息来源,在机器人接收到的哨岗信息出现明显错误时,可以利用机器人端的全向感知模块及时进行纠正,使整个感知系统更加稳定可靠。
+
+
+
+
+
+
+
+### 1 全向感知系统流程
+
+全向感知系统的整个流程可以大致分为两部分:前端目标检测和后端信息整合。在前端,使用4个subscriber分别订阅四个相机图像话题,在这四个回调函数里分别对图像进行检测,使用tensorRT部署YOLO v5s目标检测模型,把当前图像的时间戳和检测结果保存下来。对四个图像的时间戳进行同步判断,保证四个相机的检测结果是近似同一时间获得的。对检测结果中的信息进行整合,提取出真实的机器人结果并对其进行位置估计,最后把多个相机中检测到的重复机器人结果滤除掉,得到最终的自身周围信息并发布。
+
+
+
+### 2 YOLO v5检测算法的训练与部署
+
+我们制作了包含600张样本的数据集,标注了机器人和装甲板类别。使用YOLO v5s模型训练,参考了开源项目[tensorRT_Pro](https://github.com/shouxieai/tensorRT_Pro)的部署方案。我们的机载计算设备为nuc幻影峡谷11代i7+2060独显,在实际测试中,对于640×640的输入图片,使用FP16精度tensorRT加速后推理一张图片仅耗时2.8ms,可以满足实时性的要求。
+
+### 3 机器人信息匹配
+
+把检测结果中的robot和armor分离,如果是真实的机器人,那么一定是一个robot框内包含若干个armor框的形式,我们根据这一先验知识对结果进行筛选匹配,获得检测结果中的所有真实机器人。
+
+### 4 目标位置估计
+
+根据前面的目标检测与机器人信息匹配,我们得到了每个机器人在图像中的位置,即边界框。我们取机器人边界框的中心点像素坐标,根据相机坐标系到像素坐标系的公式,相机内参已知,只要获得机器人在相机坐标系下的深度Z,我们就能反推得到其X、Y坐标。
+
+$$
+\left\{\begin{array}{l}
+u=f_{x} \frac{X}{Z}+c_{x} \\
+v=f_{y} \frac{Y}{Z}+c_{y}
+\end{array}\right.
+$$
+
+那这个深度Z如何获得呢,我们采用了一种Rough but Effective的办法:分段线性插值。我们很容易知道检测得到的边界框大小和目标离相机的距离是负相关的,即目标距离越近,边界框越大;目标距离越远,边界框越小。我们取机器人边界框的高度作为自变量,到相机的距离作为输出,在不同距离下进行采样,得到一条分段线性插值曲线,理论上分的段数越多这个曲线拟合越精准,但这里我只采样了5个点。有了这条曲线后,我们输入任意一个边界框高度都能得到一个近似的距离估计值,也就是深度Z。于是由上面这个公式就能得到机器人在相机坐标系下的XYZ坐标,再通过外参转换到Body系下,就获得了近似的目标位置估计。
+
+
+
+## 依赖环境及运行方式
+
+### 1 依赖环境
+
+- CUDA 11.3
+- cuDNN 8.2.1
+- TensorRT 8.0.1.6
+- OpenCV 4.2.0
+- Eigen 3
+
+### 2 运行方式
+
+把omni_detect功能包拷贝至您的工作空间下并编译,可以在config/robot_detector.yaml文件中修改您需要的相机话题名称,也可以直接使用我们提供的rosbag进行测试。
+
+如果您使用我们提供的rosbag:
+
+(1)首先启动roscore,然后设置参数 /use_sim_time
+
+```
+rosparam set /use_sim_time true
+```
+
+(2)然后再启动 rosbag play 节点,加上参数 --clock以发布时钟信息,-l 用于循环播放
+
+```
+rosbag play omni_detect_test.bag --clock -l
+```
+
+(3)启动全向感知节点
+
+```
+roslaunch omni_detect robot_detector_node.launch
+```
+
+## 网盘链接
+网盘中提供了用于演示功能的rosbag。链接:[https://pan.baidu.com/s/1X3mPbuscPGmnNs8ye1JiMA](https://pan.baidu.com/s/1X3mPbuscPGmnNs8ye1JiMA?pwd=neye),提取码:neye。
diff --git a/robot_omni/YoloModel/RD_final.FP16.trtmodel b/robot_omni/YoloModel/RD_final.FP16.trtmodel
new file mode 100644
index 0000000..97fe6c7
Binary files /dev/null and b/robot_omni/YoloModel/RD_final.FP16.trtmodel differ
diff --git a/robot_omni/YoloModel/RD_final.onnx b/robot_omni/YoloModel/RD_final.onnx
new file mode 100644
index 0000000..39a38f9
Binary files /dev/null and b/robot_omni/YoloModel/RD_final.onnx differ
diff --git a/robot_omni/config/robot_detector.yaml b/robot_omni/config/robot_detector.yaml
new file mode 100644
index 0000000..c27a97b
--- /dev/null
+++ b/robot_omni/config/robot_detector.yaml
@@ -0,0 +1,58 @@
+img1_topic_name: "/mvsua_cam/image_raw2"
+img2_topic_name: "/mvsua_cam/image_raw3"
+img3_topic_name: "/mvsua_cam/image_raw4"
+img4_topic_name: "/mvsua_cam/image_raw5"
+yolo_model_path: "/YoloModel/RD_final"
+cof_threshold: 0.65
+nms_area_threshold: 0.5
+Heights: [58, 66, 84, 118, 236, 400]
+Distances: [5.0, 4.0, 3.0, 2.0, 1.0, 0.5]
+imshow: true
+
+
+In1:
+ [ 551.388706, 0.000000, 622.656311,
+ 0.000000, 551.536582, 190.223500,
+ 0.000000, 0.000000, 1.000000]
+Dis1: [-0.005405, -0.006993, -0.000466, 0.000419, 0.000000]
+Ex1:
+ [-0.707107, -0.707107, 0.0000, -0.0219,
+ 0.0000, 0.0000, -1.0000, 0.1300,
+ 0.707107, -0.707107, 0.0000, -0.2454,
+ 0.0000, 0.0000, 0.0000, 1.0000]
+
+
+In2:
+ [ 551.816816, 0.000000, 569.960497,
+ 0.000000, 551.736399, 94.749160,
+ 0.000000, 0.000000, 1.000000]
+Dis2: [-0.006035, -0.007303, -0.000733, 0.000238, 0.000000]
+Ex2:
+ [0.707107, -0.707107, 0.0000, -0.0219,
+ 0.0000, 0.0000, -1.0000, 0.1300,
+ 0.707107, 0.707107, 0.0000, -0.2454,
+ 0.0000, 0.0000, 0.0000, 1.0000]
+
+
+In3:
+ [ 549.305354, 0.000000, 640.951863,
+ 0.000000, 549.178482, 146.327399,
+ 0.000000, 0.000000, 1.000000]
+Dis3: [-0.005144, -0.007835, 0.000271, -0.000686, 0.000000]
+Ex3:
+ [0.707107, 0.707107, 0.0000, -0.0219,
+ 0.0000, 0.0000, -1.0000, 0.1300,
+ -0.707107, 0.707107, 0.0000, -0.2454,
+ 0.0000, 0.0000, 0.0000, 1.0000]
+
+
+In4:
+ [ 550.911025, 0.000000, 629.604206,
+ 0.000000, 550.845787, 165.814740,
+ 0.000000, 0.000000, 1.000000]
+Dis4: [-0.006915, -0.006944, -0.000547, -0.000318, 0.000000]
+Ex4:
+ [-0.707107, 0.707107, 0.0000, -0.0219,
+ 0.0000, 0.0000, -1.0000, 0.1300,
+ -0.707107, -0.707107, 0.0000, -0.2454,
+ 0.0000, 0.0000, 0.0000, 1.0000]
\ No newline at end of file
diff --git a/robot_omni/images/robot.png b/robot_omni/images/robot.png
new file mode 100644
index 0000000..080e063
Binary files /dev/null and b/robot_omni/images/robot.png differ
diff --git "a/robot_omni/images/\345\210\206\346\256\265\347\272\277\346\200\247\346\217\222\345\200\274.png" "b/robot_omni/images/\345\210\206\346\256\265\347\272\277\346\200\247\346\217\222\345\200\274.png"
new file mode 100644
index 0000000..0abfbbd
Binary files /dev/null and "b/robot_omni/images/\345\210\206\346\256\265\347\272\277\346\200\247\346\217\222\345\200\274.png" differ
diff --git "a/robot_omni/images/\346\274\224\347\244\272\346\225\210\346\236\234.gif" "b/robot_omni/images/\346\274\224\347\244\272\346\225\210\346\236\234.gif"
new file mode 100644
index 0000000..872212c
Binary files /dev/null and "b/robot_omni/images/\346\274\224\347\244\272\346\225\210\346\236\234.gif" differ
diff --git "a/robot_omni/images/\350\275\257\344\273\266\346\265\201\347\250\213\345\233\276.png" "b/robot_omni/images/\350\275\257\344\273\266\346\265\201\347\250\213\345\233\276.png"
new file mode 100644
index 0000000..ef1fbe5
Binary files /dev/null and "b/robot_omni/images/\350\275\257\344\273\266\346\265\201\347\250\213\345\233\276.png" differ
diff --git a/robot_omni/include/robot_detector/RobotDetector.h b/robot_omni/include/robot_detector/RobotDetector.h
new file mode 100644
index 0000000..06c6d27
--- /dev/null
+++ b/robot_omni/include/robot_detector/RobotDetector.h
@@ -0,0 +1,90 @@
+#ifndef ROBOT_DETECTOR_H
+#define ROBOT_DETECTOR_H
+#include
+#include
+#include
+#include "simple_yolo.hpp"
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace robot_detector
+{
+ using namespace std;
+
+ class RobotDetector
+ {
+ public:
+ typedef struct
+ {
+ float confidence;
+ int class_id;
+ cv::Rect box; //left_top(x,y), width, height
+ } Object;
+
+ struct Robot
+ {
+ cv::Rect m_rect;
+ int m_number;
+ int m_color;
+ int m_armornums;
+ float m_color_prb;
+ float m_number_prb;
+ int m_id; //1-red1 2-red2 3-blue1 4-blue2 5-grey 0-unknown
+ cv::Point3f XYZ_camera;
+ cv::Point3f XYZ_body;
+ Robot()
+ {
+ m_number = 0;
+ m_color = 0;
+ m_armornums = 0;
+ m_color_prb = 0.0;
+ m_number_prb = 0.0;
+ m_id = -1;
+ XYZ_camera = {0.0, 0.0, 0.0};
+ XYZ_body = {0.0, 0.0, 0.0};
+ }
+ };
+
+ RobotDetector();
+ ~RobotDetector();
+
+ bool init(const string &model_name, SimpleYolo::Mode precision, const double cof_threshold, const double nms_threshold,
+ const std::vector heights, const std::vector distances);
+ void load_camera_params(const std::vector> intrinsics,
+ const std::vector> extrinsics,
+ const std::vector> discoeffs);
+ bool process_frame(cv::Mat inframe, vector