痛并快乐着的研究生学习生涯(2)-8.29

今日心语:遇到困难不抱怨,遇到奇葩不争论!

学习目标:

(1)一个月内学会QGC地面站开发;
(2)今年结束之前发表一篇文章;
(3)半年内解决多无人机分布式控制问题。


今日学习工作内容:

  1. QGC地面站使用介绍和开发接口
  2. 阅读ROS机器人编程实践
  3. 中午练习演讲–会做事也要会讲话!
  4. 整理版面费报销材料
  5. 跑步三公里

1、 QGC地面站使用介绍和开发接口 -1

QGC地面站前期已有一定的使用基础,但当前地面站无法同时连接多架无人机进行控制,所以开发具有多机同时控制的地面站对于后续多机分布式控制具有重要意义。本学习内容主要参考B站UP主胡萝卜科技的视频教程,但愿学习过程顺利!

QGC地面站界面主要由三大部分组成:菜单栏任务栏、主显示区域,如下图所示:
在这里插入图片描述

图1 QGC地面站界面组成

其中:

  • 菜单栏:File用于使能日志回放功能及手动退出操作,Widget包含了HIL(硬件在环仿真),和MAVLink INspector(mavlink数据波形显示)等控件功能。
  • 任务栏:实现地面站的日志回放。
  • 主显示区域: 支持不同的页面进行展示(左上角是页面切换按钮)。

对于主显示区域,由左上角的五个功能按钮来切换功能显示区域:
主要功能按钮


图2 QGC地面站主要功能按钮

包含所有切换按钮的顶部一行称为主工具栏(MainToolBar),五个功能按钮从左至右依次为:

  • AppSettings:App Settings页面,用于设置页面色彩、通讯连接、离线地图等软件设置功能,如下图所示:
    appsetting页面

    图3 QGC地面站AppSetting页面
  • SetupView: Setup页面,用于机架选择、固件下载、参数修改、传感器校准等功能:如下图所示:
    系统设置页面

    图4 QGC地面站系统设置页面
  • PlanView:飞行规划页面,用于规划飞行航线:
  • 飞行规划页面

    图5 QGC地面站飞行规划页面
  • FlightDisplay: 飞行状态显示页面
    飞行状态显示页面

    图5 QGC地面站飞行状态显示页面
  • AnalyzeView: 分析页面,用于下载飞行日志、控制台调试等:
    分析页面

    图5 QGC地面站AnalyzeView页面

这些页面包括工具栏均由qml文件绘制生成的,即: AppSettings.qml、SetupView.qml、PlanView.qml、FlightDisplay.qml、AnalyzeView.qml、MainToolBar.qml,统一在MainRootWindow.qml文件中加载:

    //-------------------------------------------------------------------------
    /// Settings
    Loader {
        id:             settingsWindow
        anchors.fill:   parent
        visible:        false
        source:         "AppSettings.qml"
    }

    //-------------------------------------------------------------------------
    /// Setup
    Loader {
        id:             setupWindow
        anchors.fill:   parent
        visible:        false
        source:         "SetupView.qml"
    }
    //-----------------
    /// Fly View  似乎没有单独的qml文件,直接调用MainToolBar.qml创建的界面
    FlyView {
        id:             flightView
        anchors.fill:   parent
    }

    //-------------------------------------------------------------------------
    /// Plan View
    Loader {
        id:             planViewLoader
        anchors.fill:   parent
        visible:        false
        source:         "PlanView.qml"
    }

    //-------------------------------------------------------------------------
    /// Analyze
    Loader {
        id:             analyzeWindow
        anchors.fill:   parent
        visible:        false
        source:         "AnalyzeView.qml"
    }
 //-------------------------------------------------------------------------
    /// Toolbar
    header: ToolBar {
        height:         ScreenTools.toolbarHeight
        visible:        !QGroundControl.videoManager.fullScreen
        background: Rectangle {
            color:      qgcPal.globalTheme === QGCPalette.Light ? QGroundControl.corePlugin.options.toolbarBackgroundLight : QGroundControl.corePlugin.options.toolbarBackgroundDark
        }
        Loader {
            id:             toolbar
            anchors.fill:   parent
            source:         "qrc:/toolbar/MainToolBar.qml"
            //-- Toggle Full Screen / Windowed
            MouseArea {
                anchors.fill:   parent
                enabled:        !ScreenTools.isMobile
                onDoubleClicked: {
                    if(mainWindow.visibility === Window.Windowed) {
                        mainWindow.showFullScreen()
                    } else {
                        mainWindow.showNormal()
                    }
                }
            }
        }
    }

MainToolBar.qml文件中,我们可以发现不同界面切换的功能代码:

         ...
            QGCToolBarButton {
                id:                 planButton
                Layout.fillHeight:  true
                icon.source:        "/qmlimages/Plan.svg"
                visible:            currentButton.icon.source !== icon.source
                onClicked: {
                    if (_viewButtonClicked(this)) {
                        mainWindow.showPlanView()
                    }
                }
            }
            ....

上述代码中icon source调用了相应页面对应的图标,onClicked的内容表示用鼠标单击后,主界面会显示规划界面(即mainWindow.showPlanView(),该函数位于MainRootWindow.qml文件中)。

初次接触qml文件,许多东西理解起来较为困难,进度稍慢,今日花费半天功夫才学习至此。因有其它工作需要完成,关于QGC地面站学习只能明天继续,加油!

2、 阅读学习《ROS机器人编程实践》

  • rosrun用于运行一个ros节点,如运行talker和listener:
rosrun rospy_tutorials talker
-----------------------------
rosrun rospy_tutorials listener
  • roslaunch用于运行一个xxxx.launch型文件,xxxx.launch型文件是描述一组节点以及它们话题重映射和参数的XML文件,如:
roslaunch rospy_tutorials talker_listener.launch
话题

ROS节点之间通过**发布(publish)/订阅(subscribe) 话题(topic)**的通信机制来进行通讯、交换信息和数据。下面给出具体的实例来分析其工作过程。

例1:声明一个话题并在其上发布消息,相应节点以2Hz的速率发送连续的整数到counter节点上。

该实例用Python实现,文件名称为 topic_publisher.py,代码如下:

#!/usr/bin/env python    
import rospy

from std_msgs.msg import Int32

rospy.init_node('topic_publisher')

pub=rospy.Publisher('counter',Int32)

rate=rospy.Rate(2)

count=0
while not rospy.is_shutdown():
    pub.publish(count)
    count+=1
    rate.sleep()

代码第一行注释部分用于告诉操作系统这是一个Python文件。运行该程序需要建立ros工作区间,并导入一些配置文件,可参考这篇豆瓣文章,这里给出一些过程:

  1. 新建并初始化一个工作区间:
~$: mkdir catkin_ws2
~$: mkdir -p ~/catkin_ws2/src
~$: cd ~/catkin_ws2/src
~$: catkin_init_workspace
  1. 将ros用户自己的工程目录配置到bash里
gedit ~/.bashrc

在其最后一行加入

export ROS_PACKAGE_PATH=~/catkin_ws2:$ROS_PACKAGE_PATH
  1. 编译工程
$ cd ~/catkin_ws2/
$ catkin_make
  1. 将catkin_make加入到shell里
$ source devel/setup.bash
$ echo $ROS_PACKAGE_PATH
  1. 创建工程文件
catkin_create_pkg basic std_msgs rospy
  1. 编译
catkin_make
  1. 加入到当前shell环境里
. ~/catkin_ws2/devel/setup.bash
  1. topic_publisher.py文件放入~/catkin_ws2/basic/src/文件夹下
  2. 将当前工程加入到shell环境里去
echo "source ~/catkin_ws2/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 运行前,还需要用 chmod命令给它增加运行权限:
chmod u+x topic_publisher.py
  1. 回到catkin_ws2目录下,运行程序(需开两个终端)
roscore
rosrun basic topic_publisher.py

运行成功显示界面如下:

lxy@linxiaoyin:~/catkin_ws3$ rosrun basic topic_publisher.py
/home/wangcheng/catki n_ws3/src/basic/src/topic_publisher.py:9: SyntaxWarning: The publisher should be created with an explicit keyword argument 'queue_size'. Please see http://wiki.ros.org/rospy/Overview/Publishers%20and%20Subscribers for more information.
  pub=rospy.Publisher('counter',Int32)
  1. 通过rostopic查看相关信息
$ rostopic list
-----------
/counter
/rosout
/rosout_agg
  1. 观察数据输出情况
$ rostopic echo /counter 5
----------------------
data: 185
---
data: 186
---
data: 187
---
data: 188
---
data: 189

rostopic还有其它一些指令用于查看发布的话题相关信息,如:

# 检验是否按照我们期望的速率发布消息
rostopic hz counter 
# 查看声明的话题
rostopic info counter 
# 查询已发布的某种类型的话题
rostopic find std_msgs/Int32

3.整理版面费报销材料

因为是国外期刊,需要的材料较多,具体包括以下八项:

  • 论文首页
  • 论文首页翻译
  • 国外发票(invoice)
  • 国外发票翻译
  • 汇款凭证
  • 当日汇率及购汇明细
  • 文章录用通知(邮件)
  • 文章录用通知翻译

4.练习演讲

学习了《开讲啦》一些名人的演讲,但后来耳机坏了,大概只模仿练习了10分钟,耳机下午没修好,打算换一个了。

5.跑步三公里

keep打卡证明!
三公里


今天学习时间:

1、 上午8:00-12:00:学习地面站开发
2、 下午14:00-17:30 ROS学习
3、晚上19:00-23:00 整理报销材料/跑步


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值