px4使用mavlink和其他无人机通信并实现跟踪
交流学习加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和其他无人机通信并实现跟踪相关推荐
- 【2020-8-9】APM,PX4,GAZEBO,MAVLINK,MAVROS,ROS之间的关系以及科研设备选型
0.概述 无人机自主飞行平台可以分为四个部分:动力平台,飞行控制器,机载电脑和模拟平台. 动力平台:负责执行飞行任务,包括螺旋桨.电机.机架等,用于科研的一般都是F380和F450的机架. 飞行控制器 ...
- 多无人机通信-路由器实现
多无人机通信 多无人机之间相互通信是实现编队飞行的基础,而想要实现通信就需要组建网络,在网络之间实现数据信息的互相传输,按结构分成两大类:中心节点网络和无中心节点网络.我们这里所用的路由器就是中心节点 ...
- 基于ARQ反馈的无人机通信中继自主选择研究
基于ARQ反馈的无人机通信中继自主选择研究 人工智能技术与咨询 来源:<无线通信 > ,作者文非凡 关键词: 无人机:中继选择:ARQ反馈:多臂老虎机: 摘要: 无人机通信是实现无人机功能 ...
- 无人机通信信道模型实现代码
无人机通信信道模型实现 import numpy as npclass Channel_Param:@propertydef a(self):return self._a@propertydef b( ...
- 《无人机通信与导航技术》札记
单星定位 (1)用户采用原子钟,从而保持用户的钟差不变(或变化可忽略): (2)用户的位置也应当是与时间独立的未知量,即要么用户是静止的,要么用户的运动速度很慢,这样在伪距序贯测量的时间段内其位置的变 ...
- 无人机通信的国内外研究现状
无人机通信是当前研究领域的热点课题.在国内,有许多科研机构和高校在研究无人机通信,其中包括中国科学院.清华大学和北京大学等.这些研究机构致力于提高无人机的通信效率和稳定性,开发出能够在复杂环境下实现高 ...
- 基于SCA的无人机通信轨迹优化
基于SCA的无人机通信轨迹优化算法 相关代码见知乎博客 无人机轨迹优化matlab代码
- 无人机通信(WiFI/3G/4GLTE)
无人机通信(WiFI/3G/4GLTE) DJI大疆创新的无人机可实时操控执行各项任务."Phantom3还内置了全新的Lightbridge高清图传系统,使飞机所拍摄的实时图像可远距离传输 ...
- QGC接收PX4自定义Mavlink消息(二)qgc接收
这里补充一些,我的px4版本是1.11.0dev,在ubuntu18.04上开发,qgc为目前官网最新的版本,在windows上上开发,大家的源码会因为版本差异而有少许区别,所以代码复制粘贴编译肯定会 ...
最新文章
- 各种媒体在线播放代码
- 数据预处理之独热编码(OneHotEncoder)
- 发送请求获取响应内容(c#)
- Linux的vim编辑器中的翻页命令
- jspspy database help
- 【bzoj2648】SJY摆棋子 KD-tree
- 投资理财web后端系统_银行理财产品有风险吗?最大风险是什么?
- 怎么看tomcat添加的项目名_Tomcat部署项目不加项目名访问,不加8080访问
- 打印机打印网页不清晰_是什么原因导致uv打印机喷头加热不升温
- 使用vgg19进行微表情分类
- webstorm11.0下载地址和webstorm11.0破解程序patcher.exe下载使用方法说明 前端IDE工具的利器...
- 《从0到1》读书笔记第2章像1999 年那样狂欢第1记:小结及词汇解析
- java实践课程感想_Java课程总结与感想
- 多节点Linux环境打造
- QT tableview内置控件
- 【无标题】Hadoop HA文件参数配置和HA启动
- css 设置body的最小高度是100%,满屏显示
- 春节菲律宾之行--MALAPASCUA Island
- 中国自己的matlab,创建matlab中中国的holidays函数
- 最全的Matlab经典教程免费下载