P600旗舰款-视觉追踪系列的机载功能包放置于HOME目录,名字为p600_experiment

p600_experiment机载代码包

p600_experiment.png

  • 1、是工程编译生成的build文件
  • 3、是工程编译生成的devel文件
  • 2、可执行编译脚本
  • 4、README.md
  • 5、功能包源码src文件
  • 6、P600旗舰款-视觉追踪系列的机载代码放置路径

源码src文件

在源码src文件里面包含了所有的功能包,每一个功能包相对独立,只有无人机控制代码启动launch文件实际存放于该代码仓库中,其他视觉、吊舱以及Prometheus等模块均已git submodule形式引入到该软件项目中,方便代码版本控制。

image.png

  • 1、Prometheus子模块
  • 2、吊舱控制子模块
  • 3、圆X检测子模块
  • 4、SiamRPN检测子模块
  • 5、任务控制实现代码
  • 6、一键启动launch文件和参数配置文件

p600_experiment功能包

image.png

  • 1、mavros配置参数,分为室内参数和室外参数,默认加载室外参数,区分室内外
  • 2、Prometheus控制配置参数,分为室内控制参数和室外控制参数,默认加载室外控制参数。终端控制参数室内外使用一套
  • 3、Prometheus相机参数,包含相机的标定参数,编码配置参数一以及编码配置参数二,编码配置参数区分原始图像编码和检测图像编码
  • 4、打开rviz配置文件
  • 5、基本launch文件:包含g1吊舱启动文件,Q10f吊舱启动文件,h16通信启动文件,p600通信启动文件,p600室外gps机载启动文件,推流rtsp启动文件
  • 6、视觉检测launch文件:包含p600 G1圆X降落启动文件,p600 Q10f圆X降落启动文件,p600 G1 SiamRPN框选跟踪启动文件,p600 Q10f SiamRPN框选跟踪启动文件
  • 7、README.md:详细查看Wiki内容或者源码
  • 8、开机自启动文件:开机自启动通信节点,主要与Prometheus专业版地面站配合使用

mission功能包

image.png

  • 1、圆X降落控制代码实现:circlex_landing_gimbal.cpp
  • 2、打印提示代码实现:printf_utils.h
  • 3、SiamRPN框选跟踪控制代码实现:object_track.cpp

gimbal_control功能包

功能兼容性

Q10FAmov G1
自动旋转搜索支持支持
3轴混合控制支持支持
变焦缩放支持不支持
最高分辨率最高1080P 60fps4K@24/25/30/fps
2.7K@24/25/30/48/50/60fps
1080P@24/25/30/48/50/60/120fps
720P@24f/25/30/48/50/60/120/240fps
视频拍摄,拍照支持支持
数据反馈类型自动反馈、交互反馈自动反馈
支持获取Imu角速度支持不支持
吊舱跟踪支持支持
偏航跟随支持支持
姿态保持支持不支持
视频输出接口USB网口

gimbal_control功能包文件如下: image.png

  • 1、开发帮助文档
  • 2、README.md
  • 3、demo启动脚本:包含G1 KCF框选跟踪demo;包含Q10f KCF框选跟踪demo;包含G1 键盘控制demo;包含Q10f 键盘控制demo

吊舱控制相关代码如下: image.png

  • 1、用于启动rtsp视频推流的配置文件
  • 2、G1吊舱C++驱动
  • 3、启动ROS node所需要用到的头文件
  • 4、启动launch文件:包括另起终端下启动运行gimbal server节点;当前终端下启动运行gimbal server节点;启动rtsp视频推流,需要先启动gimbal server节点
  • 5、ROS话题的message消息定义:和吊舱相关的自定义消息
  • 6、Q10f吊舱C++驱动
  • 7、键盘控制python脚本,须先启动gimbal server节点
  • 8、吊舱ROS驱动
  • 9、KCF目标跟踪

开发帮助

// 原始图像话题
image_pub = it.advertise("image_raw", 1);
// 吊舱控制
ros::Subscriber sub_ctl = n.subscribe<prometheus_gimbal_control::GimbalControl>("control", 10, ctlCallback);
// 吊舱跟踪
ros::Subscriber sub_track = n.subscribe<prometheus_gimbal_control::VisionDiff>("track", 10, trackCallback);
// 拍照,如果订阅为空,图像以时间命名,非空则以传入的字符串命名
ros::Subscriber save_pic = n.subscribe<std_msgs::String>("get_pic", 100, picCallback);
// 发布吊舱状态
ros::Publisher pub_rpy = n.advertise<prometheus_gimbal_control::GimbalState>("state", 10);
// 吊舱自动旋转搜索
ros::ServiceServer srv_search = n.advertiseService("search", search);
// 视频录制,文件存放在机载电脑
ros::ServiceServer srv_video = n.advertiseService("record_video", videoRecord);
// 控制吊舱是否对接受到track数据,做出反应
ros::ServiceServer srv_track = n.advertiseService("stop_track", stopTrack);

ros::Rate rate(20);

// 视频流数据来源,如果是品灵吊舱使用"0","1"表示摄像头id,Amov G1使用ip地址如"192.168.144.64"
n.param<std::string>("camera_id", camera_id, "0");
// id用于标示吊舱
n.param<int>("uav_id", uav_id, 0); 
// 吊舱控制线所处于的端口
n.param<std::string>("tty_url", tty_url, "/dev/ttyUSB0");
// 读取的相机分辨率
n.param<int>("camera_width", camera_width, 640);
n.param<int>("camera_height", camera_height, 480);
// 拍照,视频录制所存放的路径
n.param<std::string>("save_path", save_path, "gimbal_video_data");
// 吊舱型号明
n.param<std::string>("gimbal_type", gimbal_type, "q10f");

相关约定: 视觉反馈发布话题通常命名为: /detection/image

siamprn_object_tracking功能包

image.png

SiamRPN相关原理介绍:SiamRPN算法概述-Prometheus使用手册

此代码由tensorrt官方example修改提取而来,读取pytorch导出的onnx文件,并在线解析转化为tensor Engine文件。由于改版本的tensorrt不支持动态卷积核权重,所以特征提取网络采用tensorrt加速,RPN区域建议网络仍然使用libtorch版本的torchscript进行推理计算,最终可以在720P的画质下达到40FPS帧率。

object_circlex_detection功能包

image.png

  • 1、头文件:包含自定义的VisionDiff.h
  • 2、一键安装依赖脚本
  • 6、launch文件:包含启动gimbal图像部分以及圆X检测部分相关的启动launch文件
  • 3、模型文件:下载bvlc_reference_caffenet.caffemodel模型
  • 4、Caffe深度学习框架源码
  • 5、圆X识别源码

Prometheus功能包

详细可查看PrometheusWiki使用手册 image.png

image.png

  • 1、编译脚本:包含编译所有Prometheus模块的脚本或者某个模块的脚本
  • 2、实验包:Prometheus提供的实验包位置,p600旗舰款-视觉追踪系列的实验包在机载端单独存放管理
  • 3、Prometheus功能模块包:包含通信模块,未来飞行器大赛模块,目标检测模块等等
  • 4、脚本文件
  • 5、仿真模块