Ardupilot自定义mavlink消息

2023-05-16

在ardupilot\modules\mavlink\message_definitions\v1.0\commom.xml文件结尾处添加自定义消息

<!-- 20220713WP:添加一个mavlink消息 -->
    <message id="255" name="MAV_MESSAGE_TEMP_TEST">
      <description>send test message to gcs</description>
      <field type="int16_t" name="message1">message1</field>
      <field type="int16_t" name="message2">message2</field>
      <field type="int16_t" name="message3">message3</field>
      <field type="int16_t" name="message4">message4</field>
    </message>

然后基于构型编译(./waf plane),生成头文件mavlink_msg_mav_message_temp_test.h,位置为

E:\GitHub\ardupilot4.1.1\build\fmuv3\libraries\GCS_MAVLink\include\mavlink\v2.0\common

在ardupilot/libraries/GCS_MAVLink/GCS.h中的GCS_MAVLINK类下声明函数

send_mav_message_temp_test()

    // common send functions
    // 声明自定义的mavlink信息发送函数
    void send_mav_message_temp_test(void);
    void send_heartbeat(void) const;
    void send_meminfo(void);
    void send_fence_status() const;

 在GCS_Common.cpp中实现

// 发送自定义信息数据
void GCS_MAVLINK::send_mav_message_temp_test(void)
{
    //该函数自动生成,包含四个变量    
    mavlink_msg_mav_message_temp_test_send(chan, 0x0a,0x0b,0x0c,0x0d);
}

添加相对应的ap_message msg_id

ap_message GCS_MAVLINK::mavlink_id_to_ap_message_id(const uint32_t mavlink_id) const
{
    static const struct {
        uint32_t mavlink_id;
        ap_message msg_id;
    } map[] {
        ...
        { MAVLINK_MSG_ID_MAV_MESSAGE_TEMP_TEST, MSG_MAV_MESSAGE_TEMP_TEST},//自定义的mavlink
        ...
            };
}

在libraries/GCS_MAVLink/ap_message.h结尾添加

enum ap_message : uint8_t {
    ...
    MSG_MAV_MESSAGE_TEMP_TEST,// 自定义的mavlink消息
    ...
};

在ardupilot/arduplane/GCS_Mavlink.cpp中的try_send_message函数的添加case调用

bool GCS_MAVLINK_Plane::try_send_message(enum ap_message id)
{
    switch (id) {
    ...  
    case MSG_MAV_MESSAGE_TEMP_TEST:
        CHECK_PAYLOAD_SIZE(MAV_MESSAGE_TEMP_TEST);
        send_mav_message_temp_test();// 调用自定义的信息发送函数send_mav_message_temp_test
        gcs().send_text(MAV_SEVERITY_DEBUG, "hahahahaha !!!");
        break;
    ...
}

并在ap_message STREAM_EXTRA1_msgs[]数组中加入MSG_MAV_MESSAGE_TEMP_TEST,否则无法发送到地面站

static const ap_message STREAM_EXTRA1_msgs[] = {
    MSG_ATTITUDE,
    MSG_SIMSTATE,
    MSG_AHRS2,
    MSG_RPM,
    MSG_AOA_SSA,
    MSG_PID_TUNING,
    MSG_LANDING,
    MSG_ESC_TELEMETRY,
    MSG_EFI_STATUS,
    MSG_MAV_MESSAGE_TEMP_TEST,// 这里至关重要,否则无法正常发送到地面站,但是没搞懂为什么
};

编译,烧录固件到飞控,连接地面站(否则一直发应答包,不会发数据包,检测不到),断开,然后打开串口助手获取16进制数据,在输出的mavlink消息中寻找定义的0x0a,0x0b,0x0c,0x0d数据。

 这里看到地面站hub界面输出 “hahahahaha !!!” 字体,说明程序成功运行到自定义的case中,并发送消息到地面站了

 但是在地面站 temp 界面中的MAVLink Inspector中并没有看到新定义的mavlink消息,这里猜测是地面站选择显示的消息,故猜想需要修改地面站代码(留待以后再说)。

添加message消息的整个流程如图。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ardupilot自定义mavlink消息 的相关文章

随机推荐

  • 2018年度小米运维盘点

    元旦假期一眨眼就没了 xff0c 2018年也嗖的一下就过去了 xff0c 这一年里发生的大事件你都还记得吗 xff1f 下面就让小编带你回顾一下过去这一年里小米运维的知识点吧 xff01 2018年我们推送了很多被读者认可的文章 xff0
  • 网络工程师眼中的自动化运维

    本文从一名网工从业者的角度出发 xff0c 探讨了在企业网运维过程中 xff0c 网络工程师可以用什么样的工具让网络更加透明高效 上篇文章回顾 xff1a Apache Ranger Hadoop ACL控制工具 引言 网络就像wifi x
  • 浅谈动态追踪技术

    本文主要介绍了动态追踪技术 xff0c 并举例说明动态追踪技术的应用 身为一个SRE xff0c 工作中经常会遇到各种奇奇怪怪的服务异常问题 这些问题在staging xff08 测试环境 xff09 没有发现 xff0c 但放到真实的生产
  • 深入浅出计算机视觉(一)

    本文通过案例引入计算机视觉基本知识 xff0c 并浅析其基本任务中的图像分类 图像分割进展及应用 历史文章回顾 xff1a HBase Replication详解 Foreword前言 先上几个计算机视觉应用的案例 xff1a 6月6日至8
  • orbslam2 安装与运行

    目录 一 更新apt库 xff0c 更新软件列表 二 安装git xff0c 用于从Github上克隆项目到本地 三 下载orbslam2源码 四 安装C 43 43 11编译器 cmake 五 安装Pangolin 六 安装Eigen3
  • strstr函数的用法

    包含文件 xff1a string h 函数名 strstr 函数原型 xff1a extern char strstr char str1 char str2 功能 xff1a 从字符串str1中查找是否有字符串str2 xff0c 如果
  • 冒泡排序、插入排序,选择排序区别

    在代码的写法上表现为 xff1a 冒泡排序 xff1a 在某一个元素的冒泡过程中 xff0c 当前元素与其他元素比较后可能需要进行互换操作 xff0c 而这个操作可能执行多次 选择排序 xff1a 当前元素只交换一次 xff08 或0次 x
  • Prometheus 环境搭建

    1 ubuntu和ros安装 lt 安装ubuntu对应的ros版本 gt 2 prometheus px4配置 prometheus px4是Prometheus项目配套使用的PX4固件 xff0c Prometheus项目的仿真模块依赖
  • E: 无法定位软件包 的解决办法

    one solution 1 sudo apt get update 更新目录 2 sudo apt get upgrade xff08 更新文件 xff09 3 sudo apt get dist upgrade xff08 更新依赖关系
  • gnome-terminal用法解析

    gnome terminal命令用于打开一个新的终端 xff0c 直接在命令行 gnome terminal 就可以打开一个新的终端 xff0c 有一些常用参数 xff1a 打开后自动最大化 gnome terminal maximize打
  • 仿真1 - takeoff_land

    实验步骤 xff1a xff08 1 xff09 将遥控器开机并通过USB接口接入电脑 xff08 2 xff09 输入以下命令启动起飞降落仿真demo cd xff5e Prometheus Scripts simulation tuto
  • orbslam2稠密版建图

    一 获取代码 高博的工作是对基本 ORB SLAM2 的扩展 xff0c 基本思想是为每个关键帧构造相应的点云 xff0c 然后依据从 ORB SLAM2 中获取的关键帧位置信息将所有的点云拼接起来 xff0c 形成一个全局点云地图 git
  • 六级(2020/7-1) Text1

    People often discuss the dangers of too much stress xff0c but lately最近 a very different view of stress is gaining popula
  • Prometheus在无人机板载计算机的搭建

    一 source ubuntu sh 过程遇到的问题 问题一 xff1a Could not find a version that satisfies the requirement psutil 解决办法 xff1a 1 找到requi
  • 《论文阅读01》Learning multiview 3D point cloud registration

    目录 一 论文 二 论文概要 三 论文详述 一 论文 研究领域 xff1a 点云配准论文 xff1a Learning multiview 3D point cloud registrationCVPR 2020论文链接 二 论文概要 该论
  • 跨源点云配准

    跨源点云配准是指对不同类型传感器的点云进行配准 它的优点是结合多个不同类型的传感器各自的优势 xff0c 为自动驾驶系统提供更丰富的三维点云信息 相比于同源点云配准 xff0c 跨源点云配准尚处于学术阶段 xff0c 而其在自动驾驶领域的应
  • Ubuntu20.04 安装pcl点云库

    Ubuntu18 04和20 04安装pcl点云库非常方便 xff0c 只需要一行代码 xff1a sudo apt install libpcl dev 卸载 xff1a sudo apt remove libpcl dev
  • vslam从入门到入土:在ubuntu18中使用D455运行VINS-FUSION

    1 ROS安装 建议使用ROS官方网的步骤 melodic Installation Ubuntu ROS Wiki 一定要看清楚版本 ubuntu18 是 melodic 2 ceres安装 2 1依赖 sudo apt get inst
  • 01 点云中的NAN点

    一 NAN点 在点云中 xff0c NAN Not a Number 表示一个无效的数字或值 xff0c 通常是由于数据输入错误 计算错误或其他问题导致的 NAN点可能表示一个不存在的点 一个超出点云范围的点 一个无效的坐标值等 由于NAN
  • Ardupilot自定义mavlink消息

    在ardupilot modules mavlink message definitions v1 0 commom xml文件结尾处添加自定义消息 lt 20220713WP 添加一个mavlink消息 gt lt message id