# 发送和接收调试值
在软件开发过程中,经常需要输出单个重要数字。这就是通用 named_value_float
, DEBUG
和 DEBUG_VECT
MAVLink 的数据包进来了。
# MAVLink 调试信息与 uORB 主题之间的映射
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
.
本教程的代码可在此处获取:
- 调试教程代码 (打开新窗口)
- 启用教程应用程序 (打开新窗口) 确保 MAVLink 调试程序 (config_examples_px4_mavlink_debug),并将其设置为 "y"。
设置调试发布所需的一切就是这段代码。首先添加头文件:
#包括 <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 中的结果在实时绘图上看起来就像这样:
# 教程:接收字符串/浮点数对
以下代码片段展示了如何接收 速度
调试变量。
首先,订阅主题 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.价值);
}
}
}