先介绍一般px4飞控的xyz坐标指点飞行:

利用mavros的 /mavros/setpoint_raw/local 话题可以发送东北天(ENU)坐标给px4飞控进行指点飞行。ENU坐标原点在起飞点,东向为x坐标,北向为y坐标,天向为z坐标。z坐标高度对应 /mavros/local_position/local 中的z坐标,根据px4设置的不同可能是气压计、高度传感器或者差分GPS高度。

下面介绍如何进行gps坐标指点飞行:

户外我们往往希望给定一个gps坐标让四旋翼飞过去,而不是给定一个相对于起飞点的xyz坐标。这时有两种方案:

方法一、直接发送gps坐标

一种方法是利用mavros的 /mavros/setpoint_raw/global 话题直接发送gps坐标和高度给px4飞控,但是我不建议这么做。首先是因为很多人试过用这个话题但是没有成功,其次这个话题里的z坐标高度含义也不那么清晰,我还没明白这个高度到底是对地高度?gps高度?气压计高度?还是海拔高度?实际使用中也极其不建议直接就发gps坐标进行指点飞行,因为我们对经纬度的大小也没有一个直观的感受,经纬度小数点后6位才大致对应1m,给出的经纬度坐标稍有偏差飞机就不知道会飞向何方了,这不利于安全。

方法二、先将gps坐标转化为ENU坐标

第二种方法是将gps坐标先转化为ENU坐标系下的xyz坐标,然后还是用 /mavros/setpoint_raw/local 话题发送给px4飞控。如果你去阅读px4源码里的mavlink_receiver.cpp代码(这是px4接收mavros等mavlink信息的文件),你会发现即使你是用第一种方案向 /mavros/setpoint_raw/global 话题直接发送gps坐标,px4还是会先将gps坐标转化为相对于起飞点的xyz坐标,然后再和 /mavros/setpoint_raw/local 的坐标指令一样地处理。这个px4源码里用的gps坐标转换为ENU坐标的代码如下:

其中map_projection_project函数就是根据给定的参考点gps坐标ref、目标点gps坐标lat和lon,来计算两点之间的xy坐标差(这个x是东,y是北?)。对于原点在起飞点的ENU坐标系,参考点gps坐标其实就是起飞点的gps坐标啦。

map_projection_reproject则是给定ENU坐标系下的xy坐标差和一个参考点gps坐标ref,计算出目标点的gps坐标lat和lon。

这两个转换函数很简单也很常用,但是转换结果未必十分精准。因为地球毕竟是椭球形,将球形平面的经纬度坐标转换为平面内的笛卡尔坐标xy必然有转换误差(主要来源于对椭球的描述偏差)。由此可见,即使是给px4直接发送gps坐标指点飞行,飞机也不是用gps坐标直接进行位置环反馈控制,因此飞行的gps结果也未必十分精准。

我们还在网上找到了更精准的gps坐标转笛卡尔坐标的代码,它将地球按照维度分为了五段,计算过程更复杂但也更准确,xy输出结果和以上px4内部的转换代码大致相差1%。代码链接:  使用时引用头文件,然后直接调用函数。也可以参考uavros_simulation/uavros_wrzf_sitl/src/uav_controller.cpp · Peixuan Shu/UAVros - 码云 - 开源中国 (gitee.com)中的gps_to_local函数写法(注意引用头文件WGS84toCartesian.hpp)

注意px4中ENU坐标系用的原点gps坐标未必是home点,一般ENU的原点是飞控上电稳定后的点,但是飞机可能有被搬动或者多次起降的情况,这时home点会变化但是ENU的原点不会变,而且home点更新很慢也容易出错。因此在读取参考点gps坐标时,最好的方式是等飞控和上位机程序启动稳定后(否则读到的gps坐标是错误的!),同时读取当前gps坐标(/mavros/global_position/global) 和ENU坐标 (/mavros/local_position/pose), 利用gps_to_local函数或者前文提到的map_projection_project 算出目标点和当前点的xy坐标差,加上当前的ENU坐标,就能得到目标点的ENU坐标了!这里也可以参考uavros_simulation/uavros_wrzf_sitl/src/uav_controller.cpp · Peixuan Shu/UAVros - 码云 - 开源中国 (gitee.com)

注意

户外gps指点飞行很危险,再三确认坐标值正确,经纬度和xy前后顺序正确,高度正确,再进行指点飞行。直接发送xy坐标指点飞行时,使用的是px4自带的位置环控制,会有大角度机动出现,px4的位置环PID参数为MPC_X等,最大限速v_max也可以修改(QGroundControl地面站中修改)

而且不建议利用指点飞行起飞。如果直接给定飞机上方一点坐标使其起飞,电机会突然从停转状态达到最大转速,飞机也会噌地一下快速飞起来。建议用px4自带的takeoff模式起飞,它会有一个递增的坡度限幅使得电机转速慢慢增加,飞机也是平稳起飞。如果转速增加太慢,可以修改px4的ramp值(QGC搜索ramp或者takeoff)。如果室内用uwb飞行则不能用takeoff模式,因为它的local坐标值是用uwb位置填充的,起飞点就不是(0,0),(而且没有gps导致home点也不会更新?)飞机自动起飞时会直接侧倾向uwb的零点飞过去。

四旋翼利用mavros进行GPS坐标指点飞行相关推荐

  1. 四旋翼的运动原理及几个飞行问题

    四旋翼的运动及原理.飞行的问题.调试 四旋翼飞行器通过调节四个电机转速来改变旋翼转速,实现升力的变化,从而控制飞行器的姿态和位置.四旋翼飞行器是一种六自由度的垂直升降机,但只有四个输入力,同时却有六个 ...

  2. 【四二学堂】标准GPS坐标,转换成百度坐标

    百度坐标反查地址:http://api.map.baidu.com/lbsapi/getpoint/ 工具类如下: import org.apache.commons.lang3.StringUtil ...

  3. 2017 年全国大学生电子设计竞赛试题——四旋翼自主飞行器探测跟踪系统(C 题)【本科组】1

    一.任务 设计并制作四旋翼自主飞行器探测跟踪系统,包括设计制作一架四旋翼自主飞行器,飞行器上安装一向下的激光笔:制作一辆可遥控小车作为信标. 飞行器飞行和小车运行区域俯视图和立体图分别如图 1 和图 ...

  4. “四旋翼”无人机“X模式”飞行原理

    文章目录 摘要 飞行器分类 四旋翼"X模式"飞行原理 四旋翼"十模式"飞行原理 参考资料 摘要 简单的介绍了四旋翼无人机的两种模式的飞行原理 飞行器分类 固定翼 ...

  5. 四旋翼惯导融合之观测传感器滞后问题汇总与巴特沃斯低通滤波器设计(气压计MS5611、GPS模块M8N、超声波、PX4FLOW等)

    前文讲到APM的三阶互补方案,之前附的图是从学长博客里面抠的,感觉还不是很详细,于是自己就画了下,顺便重新理一下思路. 上图中下标为O的表示原始量(Origion),C表示矫正后的量(Correcti ...

  6. 四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo)(三)传感器数据读取与复现(IMU、GPS)

    系列文章目录 文章1:四旋翼无人机仿真之hector_quadrotor无人机(ROS + Gazebo) 文章2:四旋翼无人机仿真之hector_quadrotor(二)键盘teleop_twist ...

  7. Udacity机器人软件工程师课程笔记(二十五) - 使用PID控制四轴飞行器 - 四轴飞行器(四旋翼)模拟器

    1.四轴飞行器运动学和动力学模型 在讨论四轴飞行器时,明确定义两个参考坐标系会很有帮助:一个固定的世界坐标系W{W}W和一个牢固地附着到四轴飞行器的质心(CoM)的运动坐标系B{B}B. 假设运动坐标 ...

  8. 启航篇——四旋翼飞行器之入坑两年心路历程和毕设总结

    笔者今年大四毕业,由于之前参加比赛及准备考研,没有时间总结这两年来做四旋翼飞行器的心得体会.现在借毕业设计这个契机,想把这件事做了,算是两年的收尾工作,也是个新的开始. 先从介绍这两年的经历开始吧.开 ...

  9. 四旋翼自主飞行器设计方案

    针对2016年湖南省电子设计竞赛的飞行器赛题,写一篇四轴的方案,适合初学四轴的和想了解四轴的,大神级别的可以绕道. 1.方案设计 1.1姿态传感器的选择 1.1.1加速度计 加速度检测芯片有ADXL3 ...

最新文章

  1. Python LOGGING使用方法
  2. 初级线段树讲解---转
  3. [剑指offer]面试题第[56-2]题[JAVA][数组中数字出现的次数][状态机][hashmap][位运算]
  4. 最佳海报样机模板|让作品脱颖而出
  5. 毕设日志2019.4.2——tf版本的faster rcnn的代码运行
  6. 腾讯超级大脑发布!马化腾要用三张智能网络,打造AI in All通用操作系统
  7. Lua_手册_代码版
  8. mysql查询最接近的记录
  9. Eclipse插件开发之拖拽功能
  10. 电池SOC预估存在哪些难题以及常用方法
  11. 计算机网络拓扑结构功能是,计算机网络拓扑结构
  12. BliBli抢楼全攻略
  13. Red Teaming Mind Map
  14. 你的灯还亮着吗?--走出问题的乌托邦
  15. JS基础-循环精灵图
  16. day09-商品规格管理
  17. 2022年应届大学毕业生就业分析报告
  18. 如何关闭电脑开机时自动启动的软件?
  19. 互联网快讯:华为推“矿鸿”; 京东MALL开业;掌门教育、猿辅导布局素质教育
  20. 【素史】曼怛罗(81)

热门文章

  1. 秒杀数字后端实现中clock gating使能端setup violation问题
  2. 【深度学习】windows下安装TensorFlow
  3. 项目实训-智能生物序列分析平台-药物推荐日志
  4. 中国高校计算机大赛(天梯赛)官网,我校获2019年“中国高校计算机大赛-团体程序设计天梯赛”全国三等奖...
  5. 两美媚张家界凤凰自助游
  6. LuaPlus学习(三)
  7. 删除文件恢复软件?只需2个步骤
  8. M$spszi$y是嘛意思
  9. 解决死锁问题的基本方法
  10. 2.利用计算机进行信息加工的一般过程是:,信息加工