plotjuggler看飞控状态曲线

部分px4飞控参数信息在下载log中使用Flight Review难以看到全部曲线,可以使用plot juggler软件来查看:

0、安装与开启

安装:

sudo apt install ros-noetic-plotjuggler
sudo apt install ros-noetic-plotjuggler-ros

启动:

rosrun plotjuggler plotjuggler

在这里插入图片描述

在左上角[file]-[data]
左侧参数中选择相应信息,拖动到右侧窗口

刚刚导入时会弹出基础信息窗口,包含【info】,【properties】,【message logs】:
在这里插入图片描述

1、电流、电压相关

电流位于 【battery_status】中,有瞬时电流【current_a】,平均电流【current_average_a】,滤波电流【current_filered_a】3个曲线可以查看:
在这里插入图片描述
电压位于【battery_status】中,有【voltage_v】和【voltage_filered_v】
在这里插入图片描述

2、温度相关

传感器温度,flight review中也可以显示,在plotjuggler中显示在每个传感器中:
在这里插入图片描述

3、滤波工具

【菜单】-【tools】-【fast-fourier-transform】(快速傅里叶变换)
选择参数,例如【sensor-conbined】,拖动到上方框,再点击calculate
在这里插入图片描述

QGC(QGroundControl)中实现飞控状态显示的核心机制依赖于MAVLink协议的消息通信与Qt前端界面的动态绑定。在QGC的架构中,飞控状态的显示主要由`Vehicle`类和`Fact`系统共同完成。`Vehicle`类负责与飞控建立连接并接收MAVLink消息,而`Fact`系统则负责将这些数据绑定到QML界面中,以实现状态信息的可视化[^2]。 ### 飞控状态显示的代码实现 #### 1. MAVLink消息的接收与解析 QGC通过`MAVLinkProtocol.cc`文件处理MAVLink消息的接收与解析。该文件中通过`qDebug()`可以打印出所有QGC接收到的MAVLink消息包,用于调试与验证消息的完整性。例如,在接收端加入如下代码: ```cpp qDebug() << b.toHex(); ``` 此代码可以打印出所有接收到的MAVLink消息包的十六进制内容,从而帮助开发者验证消息是否正确发送和接收。需要注意的是,在使用软件在环仿真时,某些自定义MAVLink消息可能无法正常发送,而使用实际硬件(如CubeBlack)则可以正常通信[^2]。 #### 2. 飞行状态数据的绑定与显示 QGC的前端界面基于Qt Quick(QML)实现,通过`Fact`系统将飞控状态数据绑定到UI组件上。例如,在QML文件中,可以使用以下代码显示飞控的GPS信息: ```qml import QtQuick 2.11 import QGroundControl 1.0 import QGroundControl.FactSystem 1.0 Text { text: qsTr("GPS Latitude: %1").arg(factGPSLatitude.value) color: "blue" font.pointSize: 20 } ``` 在该示例中,`factGPSLatitude`是一个`Fact`对象,其值来源于飞控通过MAVLink消息发送的GPS数据。`Fact`系统通过`FactSystem`模块实现与飞控的动态数据绑定,确保UI能够实时反映飞控状态[^3]。 #### 3. 自定义状态信息的添加 若需在QGC中添加自定义的飞控状态信息,首先需要在飞控端定义新的MAVLink消息类型,并通过`mavlink_msg_to_send_buffer`函数将消息发送至QGC。QGC接收到消息后,会通过`Vehicle`类中的解析逻辑提取数据,并将其注册为新的`Fact`对象,以便在QML中使用。 以下是一个示例代码,展示如何通过MAVLink协议发送自定义消息: ```c #include <mavlink.h> mavlink_message_t message; uint8_t buf[MAVLINK_MAX_PACKET_LEN]; // 发送自定义状态消息 mavlink_msg_custom_status_send( &message, 0, 0, MAV_COMP_ID_ALL, "Custom Status", 123 ); // 序列化MAVLink消息 uint16_t len = mavlink_msg_to_send_buffer(buf, &message); // 发送至QGC send_mavlink_message(buf, len); ``` 在QGC端,需要在`Vehicle`类中添加对该消息的解析逻辑,并将解析后的数据注册为`Fact`对象。例如: ```cpp void Vehicle::handleCustomStatusMessage(const mavlink_message_t& message) { mavlink_custom_status_t status; mavlink_msg_custom_status_decode(&message, &status); // 将解析后的数据注册为Fact对象 Fact* customStatusFact = new Fact("CustomStatus", status.value, this); // 绑定到QML界面 emit factAdded(customStatusFact); } ``` #### 4. 状态信息的界面布局 QGC的主界面通过`MainRootWindow.qml`文件定义整体布局,并在其中嵌入状态信息的显示组件。例如,可以添加一个红色矩形区域,用于显示特定状态信息: ```qml Rectangle { id: myRect color: "red" visible: true x: 100 y: 100 width: 100 height: 100 Text { id: myTest text: qsTr("!!!!!") color: "blue" font.pointSize: 20 } } ``` 通过将`Fact`对象绑定到`Text`组件的`text`属性上,可以实现动态更新的状态显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值