您的位置:首页 > 其它

pixhawk双机通信测试例子

2016-04-06 21:46 148 查看
本文针对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个串口。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: