pixhawk双机通信测试例子

来源:互联网 发布:淘宝卖家数据采集工具 编辑:程序博客网 时间:2024/06/01 21:00

本文针对mavlinktopic有一定熟悉的读者。

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)、连线时注意应将txrx交替连接。

1接线示意图

 

2实际运行示意图

 

2)、除了USBtelem1telem2外,还可以使用serial4/5。可使用下面标记的4个串口。

0 0
原创粉丝点击