交流学习加qq:2096723956
PX4固件版本1.11.0
以位置信息为例,本文直接使用MAVLINK库中预定义的位置消息,如果想自定义MAVLINK消息,参考
https://blog.csdn.net/qq_38768959/article/details/108802979?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163894817116780269899703%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163894817116780269899703&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_v2~rank_v29-3-108802979.pc_v2_rank_blog_default&utm_term=mavlink&spm=1018.2226.3001.4450
先定义位置UORB消息,记得在cmakelist里也添加一下

在mavlink_recever.h里加入

#include <uORB/topics/a01_GPS.h>
void handle_message_receive_position_int(mavlink_message_t *msg);uORB::Publication <a01_GPS_s>                       _a01_GPS_pub{ORB_ID(a01_GPS)};

其中handle_message_receive_position_int是位置信息的接收处理函数,_a01_GPS_pub用于发布接收到的位置信息。

在mavlink_recever.cpp里的handle_message函数里加入handle_message_receive_position_int处理函数,如下图,在无人机接收到位置信息后进入位置接收处理函数


然后在mavlink_recever.cpp中定义handle_message_receive_position_int
如下:

void
MavlinkReceiver::handle_message_receive_position_int(mavlink_message_t *msg)
{a01_GPS_s   pos;
mavlink_global_position_int_t msg1 = {};
mavlink_msg_global_position_int_decode(msg,&msg1);
if(msg->sysid == 1)
{pos.lat = msg1.lat;pos.lon = msg1.lon;_a01_GPS_pub.publish(pos);
}
}

该函数的逻辑很简单,就是接收到位置消息后,调用MAVLINK库中的解包函数进行解析,将解析后的经纬度信息发布出去。然后在别的线程里订阅这个位置消息就行了。
这里自定义一个进程用于测试。测试程序就是订阅位置信息并打印。如下:

a01_GPS_s _a01_GPS;
uORB::Subscription _a01_GPS_sub{ORB_ID(a01_GPS)};
_a01_GPS_sub.copy(&_a01_GPS);PX4_INFO("_a01_GPS:%f\r\n",(double)_a01_GPS.lat);

测试
用一架ID为1的无人机和一架ID为其他的无人机,用数传建立通信。将ID为其他的无人机用USB连接到地面站。在ID为其他的无人机上运行测试进程。观察地面站终端的打印信息如下:


可以看到已经成功的接收到ID为1的无人机的纬度。接收到的信息是实际的纬度乘以10的七次方的。

如果想进一步的利用1号无人机的位置实现对一号无人机的跟踪。
可以利用以下程序:

_vehicle_local_position_sub.copy(&_vehicle_local_position);
globallocalconverter_init(_vehicle_local_position.ref_lat,_vehicle_local_position.ref_lon, _vehicle_local_position.ref_alt, hrt_absolute_time());
_a01_GPS_sub.copy(&_a01_GPS);_ref_lat=(double)_a01_GPS.lat/10000000;_ref_lon=(double)_a01_GPS.lon/10000000;globallocalconverter_tolocal(_ref_lat,_ref_lon,30, &x1, &y1, &z1);_pos_sp_triplet.current.x =x1+5;_pos_sp_triplet.current.y =y1;_pos_sp_triplet.current.z =-3.0f;

其中globallocalconverter_init是PX4自带的位置转换初始化函数。初始化完成后利用globallocalconverter_tolocal将1号无人机的经纬度转换为以初始化经纬度为原点的本地坐标。再将本地坐标加上偏移量赋给位置控制三组合去执行,相当于实时的以一号无人机为原点,保持一个相对的偏移量,从而实现对一号无人机的跟踪飞行。

px4使用mavlink和其他无人机通信并实现跟踪相关推荐

  1. 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型

    0.概述 无人机自主飞行平台可以分为四个部分:动力平台,飞行控制器,机载电脑和模拟平台. 动力平台:负责执行飞行任务,包括螺旋桨.电机.机架等,用于科研的一般都是F380和F450的机架. 飞行控制器 ...

  2. 多无人机通信-路由器实现

    多无人机通信 多无人机之间相互通信是实现编队飞行的基础,而想要实现通信就需要组建网络,在网络之间实现数据信息的互相传输,按结构分成两大类:中心节点网络和无中心节点网络.我们这里所用的路由器就是中心节点 ...

  3. 基于ARQ反馈的无人机通信中继自主选择研究

    基于ARQ反馈的无人机通信中继自主选择研究 人工智能技术与咨询 来源:<无线通信 > ,作者文非凡 关键词: 无人机:中继选择:ARQ反馈:多臂老虎机: 摘要: 无人机通信是实现无人机功能 ...

  4. 无人机通信信道模型实现代码

    无人机通信信道模型实现 import numpy as npclass Channel_Param:@propertydef a(self):return self._a@propertydef b( ...

  5. 《无人机通信与导航技术》札记

    单星定位 (1)用户采用原子钟,从而保持用户的钟差不变(或变化可忽略): (2)用户的位置也应当是与时间独立的未知量,即要么用户是静止的,要么用户的运动速度很慢,这样在伪距序贯测量的时间段内其位置的变 ...

  6. 无人机通信的国内外研究现状

    无人机通信是当前研究领域的热点课题.在国内,有许多科研机构和高校在研究无人机通信,其中包括中国科学院.清华大学和北京大学等.这些研究机构致力于提高无人机的通信效率和稳定性,开发出能够在复杂环境下实现高 ...

  7. 基于SCA的无人机通信轨迹优化

    基于SCA的无人机通信轨迹优化算法 相关代码见知乎博客 无人机轨迹优化matlab代码

  8. 无人机通信(WiFI/3G/4GLTE)

    无人机通信(WiFI/3G/4GLTE) DJI大疆创新的无人机可实时操控执行各项任务."Phantom3还内置了全新的Lightbridge高清图传系统,使飞机所拍摄的实时图像可远距离传输 ...

  9. QGC接收PX4自定义Mavlink消息(二)qgc接收

    这里补充一些,我的px4版本是1.11.0dev,在ubuntu18.04上开发,qgc为目前官网最新的版本,在windows上上开发,大家的源码会因为版本差异而有少许区别,所以代码复制粘贴编译肯定会 ...

最新文章

  1. 各种媒体在线播放代码
  2. 数据预处理之独热编码(OneHotEncoder)
  3. 发送请求获取响应内容(c#)
  4. Linux的vim编辑器中的翻页命令
  5. jspspy database help
  6. 【bzoj2648】SJY摆棋子 KD-tree
  7. 投资理财web后端系统_银行理财产品有风险吗?最大风险是什么?
  8. 怎么看tomcat添加的项目名_Tomcat部署项目不加项目名访问,不加8080访问
  9. 打印机打印网页不清晰_是什么原因导致uv打印机喷头加热不升温
  10. 使用vgg19进行微表情分类
  11. webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器...
  12. 《从0到1》读书笔记第2章像1999 年那样狂欢第1记:小结及词汇解析
  13. java实践课程感想_Java课程总结与感想
  14. 多节点Linux环境打造
  15. QT tableview内置控件
  16. 【无标题】Hadoop HA文件参数配置和HA启动
  17. css 设置body的最小高度是100%,满屏显示
  18. 春节菲律宾之行--MALAPASCUA Island
  19. 中国自己的matlab,创建matlab中中国的holidays函数
  20. 最全的Matlab经典教程免费下载

热门文章

  1. TCP报文标志位--URG,PSH调研
  2. SAP外币评估 fagl fc val 多评估与少评估问题
  3. 改善用户体验的alert提示效果
  4. 干货!迈向鲁棒的测试时间适应
  5. 告诉你个广告业务存储神器
  6. 互联网时代 消费品企业如何减缓焦虑?
  7. C语言调用Python脚本
  8. smtplib python_smtplib —SMTP协议客户端
  9. 绘图用计算机软件的基本种类有,天津09年自考计算机绘图设计(二)考试大纲...
  10. linux 安装jre和jdk,Ubuntu下安装JDK/JRE及问题的解决