本文针对mavlink和topic有一定熟悉的读者。
Pixhawk自有固件,mavlink程序主要是针对pixhawk与地面站通信的。所以要实现双机通信需要修改一些代码。这里主要是利用example/px4_mavlink_debug这个例子。
Pix1:用于接收pix2发送过来的信息,并将信息转发给地面站。
Pix2:用于向pix1发送信息。
Pix1:
(1)、将config_px4fmu-v2_default.mk中
MODULES +=examples/px4_mavlink_debug中注释去掉。
(2)、src/modules/mavlink/mavlink_messages.cpp 中添加
#include <uORB/topics/debug_key_value.h>
(3)、src/modules/mavlink/mavlink_receiver.h 中添加
#include<uORB/topics/debug_key_value.h>
voidhandle_message_debug_mavlink_value(mavlink_message_t *msg);
orb_advert_t_debug_value_pub;
(4)、src/modules/mavlink/mavlink_receiver.cpp 中
i. MavlinkReceiver构造函数初始化列表中添加_debug_value_pub(-1),//lastadd
ii. 添加函数:
void
MavlinkReceiver::handle_message_debug_mavlink_value(mavlink_message_t*msg)
{
mavlink_named_value_float_tvalue_float;
mavlink_msg_named_value_float_decode(msg,&value_float);
uint64_t timestamp =hrt_absolute_time();
structdebug_key_value_s dbg;
dbg.value =value_float.value;
dbg.timestamp_ms =timestamp;
if(_debug_value_pub< 0)
{
_debug_value_pub= orb_advertise(ORB_ID(debug_key_value), &dbg);
}
else
{
orb_publish(ORB_ID(debug_key_value),_debug_value_pub, &dbg);
}
}
iii. 修改handle_message()
void MavlinkReceiver::handle_message(mavlink_message_t*msg)
{
switch (msg->msgid) {
case MAVLINK_MSG_ID_COMMAND_LONG:
handle_message_command_long(msg);
break;
………………….
caseMAVLINK_MSG_ID_NAMED_VALUE_FLOAT:
handle_message_debug_mavlink_value(msg);
break;
default:
break;
}
(5)、启动一个新的mavlink连接。在sd卡中添加etc/extras.txt
#!nsh
#
#pix1
#mavlink stop-all
mavlink stream -d /dev/ttyS1 -s NAMED_VALUE_FLOAT -r 10
mavlink start -b 57600 -d /dev/ttyS2 -m custom
说明:
ttyS1:对应Telem1,用于向地面站发送数据
ttyS2:对应Telem2,用于接收pix2的数据
Pix2:
(1)、将config_px4fmu-v2_default.mk中
MODULES +=examples/px4_mavlink_debug中注释去掉。
(2)启动一个新的mavlink连接。在sd卡中添加etc/extras.txt
#!nsh
#pix2
#mavlink stop-all
mavlink start -b 57600 -d /dev/ttyS2 -m custom
usleep 100000
mavlink stream -d /dev/ttyS2 -s NAMED_VALUE_FLOAT -r 10
说明:
ttyS2:对应Telem2,用于向pix1发送数据
注:
(1)、连线时注意应将tx和rx交替连接。
图1 接线示意图
图2 实际运行示意图
(2)、除了USB、telem1、telem2外,还可以使用serial4/5。可使用下面标记的4个串口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)