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一致