【PX4 飞控二次开发】使用MAVLink向地面站发送消息

MAVLink使用

    • 一、 生成MavLink库
      • 1.编写测试代码
      • 2.使用工具
    • 二、修改代码
      • 1.“common.h”添加头文件
      • 2.修改 "mavlink_messages.cpp"
      • 3.在mavlink_main.cpp设置频率
    • 三、下载代码查看结果
      • 1.编译下载
      • 2.查看输出结果

MavLink的使用前提条件是安装好MavLink环境
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第1张图片

一、 生成MavLink库

1.编写测试代码

<?xml version="1.0"?>
<mavlink>
  <version>3</version>
  <messages>
    <message id="188" name="TEST_TYPES">
      <description>Test all field types</description>
      <field type="uint8_t" name="c">uint8_t</field>
    </message>
  </messages>
</mavlink>

【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第2张图片

2.使用工具

在mavlink库目录下运行mavgenerate.py工具

python3 -m mavgenerate 

将文件前面编辑的 test.xml 文件选中
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第3张图片
生成成功,在相应目录下找到文件
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第4张图片
将生成的test文件夹中的文件复制到飞控源码中 Firmware/mavlink/include/mavlink/v2.0/common/ 目录下
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第5张图片
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第6张图片

二、修改代码

1.“common.h”添加头文件

Firmware/mavlink/include/mavlink/v2.0/common/

#include "./mavlink_msg_test_types.h"

【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第7张图片

2.修改 “mavlink_messages.cpp”

"Firmware/src/modules/mavlink/mavlink_messages.cpp"
添加类 “MavlinkStreamMytest

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

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

	static constexpr uint16_t get_id_static()
	{
		return MAVLINK_MSG_ID_TEST_TYPES;
	}

	uint16_t get_id()
	{
		return get_id_static();
	}

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

	unsigned get_size() override
	{
		return MAVLINK_MSG_ID_TEST_TYPES_LEN  + MAVLINK_NUM_NON_PAYLOAD_BYTES ;	// commands stream is not regular and not predictable
	}

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

protected:
	explicit MavlinkStreamMytest(Mavlink *mavlink) : MavlinkStream(mavlink){}
	~MavlinkStreamMytest(){}
	bool send(const hrt_abstime t)
	{
		mavlink_test_types_t test;
		test.c = 8;
		mavlink_msg_test_types_send_struct(_mavlink->get_channel(), &test);
		return true;
	}
};


StreamListItem streams_list[] 将编写的类添加到列表中

create_stream_list_item<MavlinkStreamMytest>(),

【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第8张图片【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第9张图片

3.在mavlink_main.cpp设置频率

"Firmware/src/modules/mavlink/mavlink_main.cpp"
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第10张图片

三、下载代码查看结果

1.编译下载

make px4_fmu-v3_default upload

【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第11张图片
拔插一次USB,进入下载
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第12张图片

2.查看输出结果

windows 下载MP地面站源代码
在这里插入图片描述
VS2015打开项目
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第13张图片
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第14张图片
解析出来的ID值和代码设置的ID一致
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第15张图片
【PX4 飞控二次开发】使用MAVLink向地面站发送消息_第16张图片

你可能感兴趣的:(【PX4,飞控二次开发】)