PX4飞控-自定义发送MavLink消息

2023-05-16

PX4飞控-自定义发送MavLink消息

一、自定义XML文件

在这里插入图片描述

如图所示。

这相当于定义了一个结构体,结构体里面就有一个类型为uint8_t的u8元素。

使用的id端口为150,这里注意不要与已经存在的id重复。

二、使用XML文件生成对应的头文件

在这里需要使用到一个工具mavlink_generator,它的安装方法比较简单。

在命令行依次输入下方命令即可完成安装:

git clone https://github.com/mavlink/mavlink.git

cd mavlink
    
git submodule update --init --recursive
    
python -m mavgenerate

之后会弹出下图界面:

在这里插入图片描述

点击第一个Browse,选择之前新建的XML文件。

点击第二个Browse,选择最终的输出文件夹。

将Language切换为C,其他保持默认。

最终选择界面如下图所示

在这里插入图片描述

点击Generate按钮,会弹出一个窗口,点击OK即可。

在这里插入图片描述

最后成功生成最终文件。

三、将生成的头文件添加到源代码中

在生成目录找到mavlink_msg_mytestmessage.h(这个文件名不是固定的,根据个人定义而不同。)

将这个文件复制到源代码/mavlink/include/mavlink/v2.0/common目录下。

同时在同目录的common.h文件中添加刚才复制的头文件。

在这里插入图片描述

四、 修改mavlink_messages.cpp文件

class MavlinkMytestMessage : public MavlinkStream
{
public:
	const char *get_name() const override
	{
		return MavlinkMytestMessage::get_name_static();
	}

	static constexpr const char *get_name_static()
	{
		return "MytestMessage";
	}

	static constexpr uint16_t get_id_static()
	{
		return MAVLINK_MSG_ID_TEST_TYPES;
	}

	uint16_t get_id() override
	{
		return get_id_static();
	}

	bool const_rate() override
	{
		return true;
	}

	static MavlinkStream *new_instance(Mavlink *mavlink)
	{
		return new MavlinkMytestMessage(mavlink);
	}

	unsigned get_size() override
	{
		return MAVLINK_MSG_ID_TEST_TYPES_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES;
	}

private:
	/* do not allow top copying this class */
	MavlinkMytestMessage(MavlinkMytestMessage &) ;
	MavlinkMytestMessage &operator = (const MavlinkMytestMessage &) ;

protected:
	explicit MavlinkMytestMessage(Mavlink *mavlink) : MavlinkStream(mavlink)
	{}
	~MavlinkMytestMessage()
	{}
    /* 发送函数 */
	bool send(const hrt_abstime t) override
	{
        /* 创建结构体 */
		mavlink_test_types_t test;
        /* 结构体变量赋值 */
		test.u8 = 150;
        /* 发送函数 */
		mavlink_msg_test_types_send_struct(_mavlink->get_channel(), &test);
		return true;
	}
};

mavlink_messages.cpp文件中添加如上面代码差不多的类。有一些地方需要对应起来,也可以参考这个文件中其他类的定义来进行修改和理解。

添加完自定义的类之后还需要修改static const StreamListItem streams_list这个列表。

这个列表里面存放着目前所有需要输出的Mavlink消息,可以根据自己的需要进行取舍,注释掉不需要的消息。

要发送自定义的消息,就需要把刚才自定义的类添加到这个列表中来。

在这里插入图片描述

五、 修改mavlink_main.cpp文件

需要在Mavlink::configure_streams_to_default(const char *configure_single_stream)这个函数里面添加要发送的消息。(位置差不多在函数尾处)

在这里插入图片描述

这个函数第二个参数是发送速率,可以通过修改它来更改发送速率。

六、 上传固件

编译已经修改过的源代码,并上传到飞行器中。之后查看Mavlink消息就会找到自己定义的消息了。

推荐测试的时候把其他所有消息全部注释,只留自己自定义的消息,这样可以更清晰的看到输出结果。

QGC地面站可能无法正常查看到自己自定义的消息,可能还需要进一步修改地面站的配置。所以这里还是推荐使用串口助手直接调试查看。

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

PX4飞控-自定义发送MavLink消息 的相关文章

  • 编译PX4固件

    PX4编译 文章目录 PX4编译疑难杂症bug1bug2catkin build isolated 官方脚本Step1Step2 安装常用依赖Step3 创建并运行脚本Step4 补全代码子模块Step5 验证仿真 官方offboard 例
  • PX4位置控制offboard模式说明

    offboard模式的开发及应用 一 px4固件的模式 px4固件支持10几种飞行模式 xff0c 从代码结构上分析 xff0c 分为基本模式 自定义模式和自定义子模式 1 基本模式 基本模式又分为 xff0c 位置控制模式 自稳模式 手动
  • PX4 GAZEBO无人机添加相机并进行图像识别

    PX4 GAZEBO无人机添加摄像头并进行图像识别 在之前完成了ROS的安装和PX4的安装 xff0c 并可以通过roslaunch启动软件仿真 接下来为无人及添加相机 xff0c 并将图像用python函数读取 xff0c 用于后续操作
  • PX4代码学习系列博客(5)——在px4中添加自己的模块

    怎么在px4中添加自己的模块 在 px4固件目录结构和代码风格 这一节 xff0c 曾经说过NuttX是一个实时的嵌入式系统 xff0c 上面可以像windows那样运行程序 那既然是应用程序 xff0c 那我们应该也能写一些可以在Nutt
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • DroneKit教程(五):使用自定义MAVLink指令

    DroneKit教程 xff08 五 xff09 xff1a 使用自定义MAVLink指令 DroneKit的实质是通过发送和接受MAVLink消息 xff0c 向飞控发送控制指令 从飞控获取各种状态信息 DroneKit的所有内置功能都是
  • PX4模块设计之五:自定义MAVLink消息

    PX4模块设计之五 xff1a 自定义MAVLink消息 1 MAVLink Dialects1 1 PX4 Dialects1 2 Paprazzi Dialects1 3 MAVLink XML File Format 2 添加自定义M
  • PX4模块设计之十一:Built-In框架

    PX4模块设计之十一 xff1a Built In框架 1 Nuttx Built In框架2 PX4 Built In框架2 1 NSH Built In关联文件2 2 NSH Built In关联文件生成2 3 NSH Built In
  • PX4模块设计之十七:ModuleBase模块

    PX4模块设计之十七 xff1a ModuleBase模块 1 ModuleBase模块介绍2 ModuleBase类介绍3 ModuleBase类功能介绍3 1 模块入口3 2 模块启动3 3 模块停止3 4 状态查询3 5 任务回调3
  • PX4模块设计之二十四:内部ADC模块

    PX4模块设计之二十四 xff1a 内部ADC模块 1 内部ADC模块简介2 模块入口函数2 1 主入口board adc main2 2 自定义子命令custom command 3 内部ADC模块重要函数3 1 task spawn3
  • PX4模块设计之三十六:MulticopterPositionControl模块

    PX4模块设计之三十六 xff1a MulticopterPositionControl模块 1 MulticopterPositionControl模块简介2 模块入口函数2 1 主入口mc pos control main2 2 自定义
  • PX4模块设计之三十九:Commander模块

    PX4模块设计之三十九 xff1a Commander模块 1 Commander模块简介2 模块入口函数2 1 主入口commander main2 2 自定义子命令custom command 3 Commander模块重要函数3 1
  • PX4模块设计之四十三:icm20689模块

    PX4模块设计之四十三 xff1a icm20689模块 1 icm20689模块简介2 模块入口函数2 1 主入口icm20689 main2 2 自定义子命令custom command2 3 模块状态print status 重载 3
  • px4仿真无法起飞问题(Failsafe enabled: no datalink)

    报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
  • px4无人机常识介绍(固件,px4等)

    专业名词解释 aircraft 任何可以飞或者可以携带物品还是搭载旅客的飞行器统称为飞机 航空器 uav 无人驾驶飞机 vehicle 飞行器 airplane plane aero plane 有机翼和一个或多个引擎的飞行器统称为飞机 D
  • PX4软件在环仿真注意点

    注 xff1a 最新内容参考PX4 user guide 点击此处 PX4下载指定版本代码和刷固件的三种方式 点击此处 PX4sitl固件编译方法 点击此处 PX4开发指南 点击此处 PX4无人机仿真 Gazebo 点击此处 px4仿真 知
  • MISSION_MAVLINK

    上传航点的mavlink包 MISSION ITEM 39 Message encoding a mission item This message is emitted to announce the presence of a miss
  • PX4模块设计之二十七:LandDetector模块

    PX4模块设计之二十七 xff1a LandDetector模块 1 LandDetector模块简介2 模块入口函数2 1 主入口land detector main2 2 自定义子命令custom command 3 LandDetec
  • 【PX4 飞控剖析】06 树莓派加载安装ROS,Mavros以及PX4固件

    PX4 飞控剖析 06 树莓派加载安装Mavros以及PX4固件 1 树莓派 刷镜像1 1 用Win32DiskImager刷入ubuntu mate 16 04 2 desktop armhf raspberry pi的镜像 1 2 开机

随机推荐

  • React styled-components(二)—— props、attrs属性

    styled components props attrs属性 96 props 96 96 props 96 穿透添加 96 attrs 96 属性获取 96 state 96 中的样式 变量控制样式通过 96 props 96 控制样式
  • leetcode_贪心算法

    贪心算法相关题 简单题目455 分发饼干1005 K次取反后最大化的数组和860 柠檬水找零 序列问题376 摆动序列法一 xff1a 贪心法法二 xff1a 动态规划 单调递增的数字简化版本 有点难度53 最大子序和贪心算法动态规划 13
  • leetcode_动态规划

    leetcode 动态规划 基础题目509 斐波那契数70 爬楼梯62 不同路径63 不同路径II343 整数拆分96 不同的二叉搜索树 01背包分割等和子集1049 最后一块石头的重量II494 目标和474 一和零 完全背包518 零钱
  • 北东地/东北天两种导航坐标系与姿态转换

    一 坐标系 1 导航坐标系 常用的导航坐标系有北东地和东北天两种 两种坐标系的指向分别定义如下 xff1a 1 1 北东地坐标系 X轴 xff1a 指北 Y轴 xff1a 指东 Z轴 xff1a 指地 1 2 东北天坐标系 X轴 xff1a
  • 如何消除CACHE对DMA的影响?

    各位看官 xff0c 阅读之前 xff0c 请帮忙点击这里一下 xff0c 多谢 xff01 嵌入式系统中的CACHE 问题 郑州解放军信息工程大学 xff08 450002 xff09 陈曦 李汉宁 随着社会的发展 人们生活水平的提高 x
  • 12种性格导致贫穷

    每个人都有不同的性格和个性 有的性格对于挣钱是有帮助的 有的性格却容易导致贫困 大量的研究表明 至少有十二种性格容易导致贫困和失败 第一 知足 只要有吃有穿 腹饱体暖 就感到满足 对于财富没有追求 第二 自满 自己的总是最好的 这种人不愿与
  • 上海房地产市场救市14条政策出台

    值得纪念的一天 http www sina com cn 2008年10月23日05 53 东方网 东方网10月22日消息 xff1a 为促进本市房地产市场健康发展 xff0c 根据财政部 国家税务总局 中国人民银行等部门有关文件精神 xf
  • 天涯上各大公司裁员应对金融危机的强帖,不断更新中……

    http www tianya cn publicforum content no20 1 171416 shtml 俺的东家赫然在列 xff0c 俺作证 xff0c 裁员是真的 活过冬天就会在春天复苏 xff0c 如果死在冬天 xff0c
  • 学习笔记-Semihosting

    如何理解Semihosting xff08 老帖重发 xff0c 写得比较久了 xff09 Semihosting xff0c 顾名思义 xff0c 就是 34 半主控 34 xff0c 意思就是说 xff0c 运行在target boar
  • 开发笔记-NAND Flash Bad Block Management

    1 xff09 为什么会出现坏块 由于NAND Flash的工艺不能保证NAND的Memory Array在其生命周期中保持性能的可靠 xff0c 因此 xff0c 在NAND的生产中及使用过程中会产生坏块 坏块的特性是 xff1a 当编程
  • ThreadX 实时操作系统

    ThreadX 实时操作系统 xff08 RTOS xff09 Express Logic日前發佈了支援Altera Nios II軟式核心嵌入處理器的ThreadX即時作業系統 RTOS xff0c 全新的ThreadX具備快速軟體計時器
  • React 条件渲染组件

    组件通常需要根据不同的条件显示不同的内容 xff0c 以及根据应用的状态变化只渲染其中的一部分 在 React 中 xff0c 可以使用 JavaScript 语法有条件地呈现 JSX xff0c 比如 if 语句 amp amp 和 操作
  • BDM的禅义

    2006 4 13 13 16 00 BDM的禅义 这片文章译自 the zen of bdm xff0c 翻译的不好 xff0c 还请大家多提意见 介绍 你可能感到奇怪 xff0c 为什么说BDM的禅义 BDM xff08 背景调试模式
  • RTOS基本原理:多任务和调度-FreeRTOS是如何工作的

    FreeRTOS是如何工作的 RTOS基本原理 多任务和调度 作者 xff1a Gavin Lee 来源 xff1a upsdn net 更新日期 xff1a 2006 04 12 RTOS基本原理 多任务 调度 上下文切换 实时应用 实时
  • 上下文切换-FreeRTOS是如何工作的

    FreeRTOS是如何工作的 上下文切换 作者 xff1a Gavin Lee 来源 xff1a upsdn net 更新日期 xff1a 2006 04 13 上下文切换 跟任何其他程序一样 xff0c 一个任务执行时 xff0c 它使用
  • 国产手机操作系统艰难探索

    4大阵营纷争劲起 国产手机操作系统艰难探索 作者 xff1a 连晓东 出处 xff1a 中国电子报 2005 7 13 13 07 52 阅读 lt script src 61 34 http service donews com numb
  • 嵌入式系统和嵌入式操作系统

    嵌入式系统和嵌入式操作系统 西南交通大学电气学院 张湘 肖建 2004 10 2 文章从概念 特点 种类等不同方面就嵌入式系统和嵌入式操作系统做了介绍 一 什么是嵌入式系统 嵌入式系统一般指非PC系统 xff0c 有计算机功能但又不称之为计
  • FPGA与SRAM相结合完成大容量数据存储

    FPGA与SRAM相结合完成大容量数据存储 作者 xff1a 安莎莎 赖伟林 张辉 阅读 xff1a 248 引用 xff1a 0 发布时间 xff1a 2006 05 25 20 01 出处 xff1a 电子产品世界 西安电子科技大学 通
  • Git客户端(Windows系统)的使用

    分类 xff1a Ubuntu 2013 09 03 02 15 212人阅读 评论 0 收藏 举报 本文环境 xff1a 操作系统 xff1a Windows XP SP3 Git客户端 xff1a TortoiseGit 1 8 5 0
  • PX4飞控-自定义发送MavLink消息

    PX4飞控 自定义发送MavLink消息 一 自定义XML文件 如图所示 这相当于定义了一个结构体 xff0c 结构体里面就有一个类型为uint8 t的u8元素 使用的id端口为150 xff0c 这里注意不要与已经存在的id重复 二 使用