跳至内容

发送和接收调试值

在软件开发过程中,经常需要输出单个重要数字。这就是通用 named_value_float, DEBUGDEBUG_VECT MAVLink 的数据包进来了。

MAVLink 调试信息是由 uORB 主题转换而来的。为了发送或接收 MAVLink 调试信息,你必须分别发布或订阅相应的主题。下面的表格总结了 MAVLink 调试信息和 uORB 主题之间的映射关系:

MAVLink 信息uORB 主题
named_value_floatdebug_key_value
DEBUGdebug_value
DEBUG_VECTdebug_vect

教程:发送字符串/浮点数对

本教程介绍如何发送 MAVLink 信息 named_value_float 使用相关的 uORB 主题 debug_key_value.

本教程的代码可在此处获取:

设置调试发布所需的一切就是这段代码。首先添加头文件:

C
#include <uORB/uORB.h>;
#include <uORB/topics/debug_key_value.h>;
#include <string.h>;

然后为调试值主题做广告(不同的发布名称做一次广告即可)。将其放在主循环前面:

C
/* 宣传调试值 */
结构 debug_key_value_s dbg;
strncpy(dbg.key、 "velx";, 尺寸(dbg.key));
dbg.value = 0.0f;
orb_advert_t pub_dbg = 广告(ORB_ID(debug_key_value)、 及样品;dbg);

而在主循环中发送则更加简单:

C
dbg.value = 位置[0];
出版(ORB_ID(debug_key_value), pub_dbg、 及样品;dbg);

警告

多条调试信息必须有足够的时间间隔,以便 Mavlink 对其进行处理。这意味着代码必须在发布多条调试信息之间等待,或者在每次函数调用迭代时交替发布信息。

然后,QGroundControl 中的结果在实时绘图上看起来就像这样:

QGC 调试值绘图

教程:接收字符串/浮点数对

以下代码片段展示了如何接收 速度 调试变量。

首先,订阅主题 debug_key_value:

C
#include <poll.h>;
#include <uORB/topics/debug_key_value.h>;

int debug_sub_fd = 订阅(ORB_ID(debug_key_value));
[...]

然后就该主题进行投票:

C
[...]
/* 使用这种技术可以等待多个主题,这里只使用一个 */
px4_pollfd_struct_t fds[] = {
    { .fd = debug_sub_fd, .events = 波林 }、
};

虽然 () {
    /* 等待 debug_key_value 1000 毫秒(1 秒) */
    int poll_ret = px4_poll(fds、 1, 1000);

    [...]

debug_key_value 主题时,不要忘记根据其关键属性对其进行过滤,以剔除关键属性不同于 速度:

C
    [...]
    如果 (fds[0].revents 及样品; 波林){
        /* 获取第一个文件描述符的数据 */
        结构 debug_key_value_s dbg;

        /* 将数据复制到本地缓冲区 */
        或复制(ORB_ID(debug_key_value),debug_sub_fd、 及样品;dbg);

        /* 根据关键属性过滤信息 */
        如果 (strcmp(_sub_debug_vect。获取().key、 "velx";) == 0) {
            PX4_INFO("velx:\t%8.4f";,dbg.value);
        }
    }
}