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

MavLink的使用前提条件是安装好MavLink环境
在这里插入图片描述

一、 生成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>

在这里插入图片描述

2.使用工具

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

python3 -m mavgenerate 

将文件前面编辑的 test.xml 文件选中
在这里插入图片描述
生成成功,在相应目录下找到文件
在这里插入图片描述
将生成的test文件夹中的文件复制到飞控源码中 Firmware/mavlink/include/mavlink/v2.0/common/ 目录下
在这里插入图片描述
在这里插入图片描述

二、修改代码

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

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

#include "./mavlink_msg_test_types.h"

在这里插入图片描述

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>(),

在这里插入图片描述在这里插入图片描述

3.在mavlink_main.cpp设置频率

"Firmware/src/modules/mavlink/mavlink_main.cpp"
在这里插入图片描述

三、下载代码查看结果

1.编译下载

make px4_fmu-v3_default upload

在这里插入图片描述
拔插一次USB,进入下载
在这里插入图片描述

2.查看输出结果

windows 下载MP地面站源代码
在这里插入图片描述
VS2015打开项目
在这里插入图片描述
在这里插入图片描述
解析出来的ID值和代码设置的ID一致
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_39610398/article/details/106015689