# 发送和接收调试值

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

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

MAVLink 信息 uORB 主题
named_value_float debug_key_value
DEBUG debug_value
DEBUG_VECT debug_vect

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

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

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

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

#包括 <uORB/uORB.h>;
#包括 <uORB/topics/debug_key_value.h>;
#包括 <string.h>;

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

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

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

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

警告

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

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

QGC 调试值绘图

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

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

首先,订阅主题 debug_key_value:

#包括 <poll.h>;
#包括 <uORB/topics/debug_key_value.h>;

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

然后就该主题进行投票:

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

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

    [...]

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

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

        /* 将数据复制到本地缓冲区 */
        或复制(ORB_ID(debug_key_value), debug_sub_fd, 及样品;dbg);
        
        /* 根据关键属性过滤信息 */
        如果 (strcmp(_sub_debug_vect.获取().密钥, "velx";) == 0) {
            PX4_INFO("velx:\t%8.4f";, dbg.价值);
        }
    }
}