ZY笔记
ROS相关操作
2、ros创建工作空间流程指令:
roscore source /opt/ros/melodic/setup.bash mkdir -p ~/workspace/rosWork/src cd ~/workspace/rosWork catkin_make cd ~/workspace/rosWork/src catkin_create_pkg rosFowarding std_msgs rospy roscpp geometry_msgs mavros mavros_msgs cd ../ cd build cmake .. make make install cd ../
3、查看ros结构体rosmsg show 结构体名字
视屏流相关处理
QGC Code抓取
1、参考https://dev.qgroundcontrol.com/master/en/getting_started/,进入QGC的gitHub仓库地址。
2、配置本机电脑GitHub,创建本地文件夹。
3、通过GitHub抓取code,进入QGC的gitHub仓库,点击Code->SSH->复制地址
4、执行指令:
git clone git@github.com:mavlink/qgroundcontrol.git //下载完成后
git submodule sync //同步子模块
git submodule update --init --recursive //更新子模块
初次编译问题
1、提示F:\QGCSourceCode\qgroundcontrol\src\Settings\AppSettings.cc:1: error: C2220: 以下警告被视为错误
修改方法:通过即使本打开F:\QGCSourceCode\qgroundcontrol\src\Settings\AppSettings.cc,然后将内容拷贝到新文件,将新文件的保存格式为ASNI,替换原来的文件
QGC打包
Windows:
- 准备Git环境拉取code,使用Y:\软件\PSP软件汇总\PixHawk\其他\Git-2.11.0-64-bit.exe软件,参考Windows下搭建基于ssh的git服务器_windows使用openssh搭建git_webfrogs的博客-CSDN博客进行安装。官网提供抓取code的方式为HTTPS,可以使用SSH,在GitHub上,点击Code->SSH
- 编译环境Visual Studio 2019+Qt 版本:5.15.2
- 编译出现报错情况,参考:Git使用笔记客处理配置好GitHub的私钥后,依旧报错,待确认处理方法
- 建过程中构建到出现QGC编译报错error C2220异常,在编辑中选择编码GB2312 保存重新构建即可,构建成功后运行。遇到AppSettings.cc文件报错,修改编码格式或者将原文件复制粘贴后,建立新文件
- eigen、libevents、nlohmann_json、ParameterRepository、PX4-GPSDrivers、qmdnsengine、shapelib、v2、xz-embedded 这些代码(使用Git抓取code没有报fail可以忽略此条信息)
- 程序打包参考:https://blog.csdn.net/qq_17239003/article/details/51298510,出现QGroundControl在后台运行。将Release\staging中的文件覆盖到对用的打包目录中,可以解决后台运行问题
- 下载NSIS软件:https://sourceforge.net/projects/nsis/,将打包程序发布出来。
- 将Windows下抓取的code放入到Linux中
- 使用在线工具安装Qt包
- 解决Linux下面Qt无法正常编译程序问题
Linux
sudo usermod -a -G dilout $USER
sudo apt-get remove mdemanager
sudo apt-get install build-essential libgl1-mesa-dev
QGC功能开发总结
Qt加载翻译文件异常
参考https://zhidao.baidu.com/question/1703077485640222620.html。
1、首先要修改.pro工程文件,比如在app.pro里加入
TRANSLATIONS+=app_en.ts app_zh_CN.ts app_zh_TW.ts #后面你可以加你想要翻译的各种版本
CONFIG += localize_deployment
SYMBIAN_SUPPORTED_LANGUAGES += zh_CN
SYMBIAN_LANG.zh_CN = 31
注:其中SYMBIAN_SUPPORTED_LANGUAGES
,SYMBIAN_LANG.zh_CN 两行是localize_deployment.prf
中缺少的两行,简体中文qs 文件只使用语言代号zh时 与系统解析的" 语言_区域"区域格式不符,请先这样设置。
然后在shell, 里执行如下语句( 在Qt SDK 中请打开Qt for Desktop的命令行,目前lupdate 命令没有为Qt for symbian生成的版本)
$lupdate app.pro #进入文件对应的文件夹
$linguist app_zh_CN.ts#进入文件对应的文件夹
$linguist app_zh_TW.ts #进入文件对应的文件夹
$lrelease *.ts #进入文件对应的文件夹
QGC增加自定义固件自动烧写功能
修改见:https://github.com/w-x-me/MyQGC/commit/ba6cf1ff6494917aaf0f8cdf0afd8ff5f633b9d8
QGC插件模块扩展
QGC添加gstreamer
1、下载gstreamer,
需要安装在同一个目录
2、配置环境变量以及加入到QGC中,在cmd使用gst-inspect-1.0 coreelements指令,测试是否安装成功, QT测试案例
3、提示 C2220解决方法
4、关于gstreamer中文介绍文档
5、无法解析的外部符号 __imp_gst_audio_info_set_format时,在对应的.pro中添加:LIBS += -L库的路径 -l库的名字,本地修改:LIBS += -LE:/QtCode/GstreamerTest/gstreamer/1.0/msvc_x86_64/lib/ -lgstaudio-1.0
6、 通过VLC将本地视屏流转换为RTSP流(转UDP测试)进行测试,测试步骤:
- 使用本地文件生成RTSP打开VLC->点击媒体->点击流->点击文件->点击添加(选择自己的文件)->在下拉框中选择串流(见图1)后点击->点击下一个->点击文件下拉框选择RTSP(在添加按钮旁边,见图2) ->点击添加(设置RTSP端口和地址,见图3)点击下一个->选择配置文件(和播放视屏码流格式一样,否则无法解码成功,播放MP4格式文件选择Video-H.264+MP3(MP4))->点击下一个->点击流
- 获取生成RTSP流的服务器地址,打开cmd,输入ipconfig获取本机IP地址(实际测试:IPv4 Address. . . . . . . . . . . : 192.168.71.1)。rtsp://本机IP地址:端口/地址,例如:192.168.71.1:8554/123
- 打开VLC->点击媒体->点击网络->在请出入网络URL下面输入rtsp://本机IP地址:端口/地址(例如:192.168.71.1:8554/123)->选择播放(在取消按钮旁边)点击,播放生成的流。
- 打开QGC,Application Settings->视屏设置->source 选则RSTSP Video Stream->RTSP URL输入rtsp://本机IP地址:端口/地址(如192.168.71.1:8554/123)->长宽比使用默认或实际值->File Format选择MP4(必选本地视屏格式一致,否会导致显示等待视屏中)->解码优先级可选->选择低延迟模式(如果显示等待视屏中,可以尝试反复点几次,直到log打印D3D11 WARNING: Live ID3D11Context at 0x0000017727E8C040, Refcount: 4, IntRef: 1 [ STATE_CREATION WARNING #2097226: LIVE_CONTEXT])表示成功,见图4
![]()

图4
QGC增加显示共享内存图像数据
QGC 文件说明
- 关于source选择操作:GeneralSettings.qml-》_videoSettings.videoSource
- FlyViewVideo.qml关于视频显示相关窗口UI
- VideoManager.cc主要与显示UI进行交互管理
- C++中寻找对应的QML文件,见 QGCCorePlugin.cc中的createRootWindow
- 参考https://mavlink.io/en/messages/common.html,对应F:\WorkData\ProjectQGC\qgroundcontrol\libs\mavlink\include\mavlink\v2.0\common\common.h文件,F:\WorkData\ProjectQGC\qgroundcontrol\libs\mavlink\include\mavlink\v2.0\ASLUAV\ASLUAV.h
- 关于QGC使用MavLink相机逻辑见关键词:PhotoVideoControl
QGC自动下载日志功能开发
QGC文件说明
- 日志下载逻辑:LogDownloadController.cc中download-》downloadToDirectory-》__receivedAllData-》 _requestLogData 46080 调用UDPLink.cc中_writeBytes
- 日志管理界面LogDownloadPage.qml。日志刷新方法:LogDownloadController.cc中refresh(void)-> _requestLogList-> mavlink_helpers.h中的mavlink_finalize_message_chan(对消息进行签名)
-
函数调用逻辑:UDPLink::readBytes发送bytesReceived信号-》MAVLinkProtocol::receiveBytes中mavlink_parse_char解析数据包,然后发送messageReceived-》Vehicle::_mavlinkMessageReceived-》UAS::receiveMessage判断message.msgid信息为MAVLINK_MSG_ID_LOG_DATA发送logData信号(点击下载按钮一直在发送)-》LogDownloadController.cc中_logData经过分析判断,只有部分消息符合要求,则调用-》_requestLogData
-
日志下载调用逻辑:
首先:LogDownloadPage.qml:161-》LogDownloadPage.qml:167的logController.download(file)-》LogDownloadController.cc download(QString path)-》downloadToDirectory(const QString& dir)-》_receivedAllData()中调用_prepareLogDownload()创建日志文件大小,调用_requestLogData请求获取日志
线程0x7bc8:UDPLink::readBytes发送bytesReceived信号-》线程0x7ea4:MAVLinkProtocol::receiveBytes中mavlink_parse_char解析数据包,然后发送messageReceived-》Vehicle::_mavlinkMessageReceived 程序启动,设备连接后一直被调用-》UAS::receiveMessage判断message.msgid信息为MAVLINK_MSG_ID_LOG_DATA发送logData信号(点击下载按钮一直在发送)-》LogDownloadController.cc中_logData经过分析判断,只有部分消息符合要求,则调用 点击下载按钮后一直被调用
-》_requestLogData
- 位置信息跟随飞机位置显示
- QGC建立通讯协议逻辑
常用工具
- 打开ULG日志方法,参考PX4 ulg文件转换csv。在ubuntu上安装好后,运行. ./~/.local/bin/ ulog2csv *.ulg
QGC二次开发学习笔记
1、MainRootWindow.qml为UI的初始根界面,所有UI以此qml为头。
2、MainToolBar.qml显示页面切换按钮栏,AppSettings.qml是application Setting页面,SetupView.qml是Setup页面,PlanView.qml是plan页面,FlightDisplayView.qml是飞行页面;AnalyzeView.qml是Anlyze页面
3、主界面组件都是基于FlyViewWidgetLayer.qml上绘制
QGC学习资料
1、QGC二次开发 # 视频流代码分析


浙公网安备 33010602011771号