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交替连接。
![](http://img.blog.csdn.net/20160406214913500?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1
接线示意图
![](http://img.blog.csdn.net/20160406214923219?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2
实际运行示意图
(2)、除了USB、telem1、telem2外,还可以使用serial4/5。可使用下面标记的4个串口。
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个串口。
相关文章推荐
- SQL Server 2012 Express LocalDB
- 屏幕适配 和等比缩放
- 20135323符运锦----第七周:Linux内核如何装载和启动一个可执行程序
- [置顶] 深入理解JVM之三:类文件结构
- MySQL Cluster集群探索与实践
- SPOJ - DISUBSTR 多少个不同的子串
- SPOJ - DISUBSTR 多少个不同的子串
- Markdown语法及简要规则
- Windows Server 2008 R2 Hyper-v 基本使用方法
- Top命令的用法详细详解
- 关于MySQL中数据类型显示宽度n
- 6.5趣味逻辑之委派任务
- win10+opencv3.1+vs 2015环境配置
- 八皇后问题---递归回溯
- Windows Server 2008 R2 数据备份和还原
- C++ 常用头文件
- c语言 中的一道经典面试题
- WPF主题样式和应用程序样式
- 第四周总结
- iOS SDWEBImage和collectionView的组合,以及collectionView的随意间距设置