如何使用APM固件飞控来使能外部位置控制

2023-05-16

在三维激光雷达平台上我们飞控采用pixhawk2的飞控。官方给我说这个支持APM和PX4的固件,但是对APM固件的支持性比较好,因此就选用了APM的飞控。在一开始装好飞机后,第一次飞还好好的,但是之后出现了一个问题,就是yaw角会不受控制的自旋。这个找了电机电调的问题还是飞不稳(电调很容易焊接不牢靠)。之后我们把飞控的减震板去掉之后并且再次将电机连接到飞控上,进行了电调的校准,然后就可以很稳定的飞了。之后感觉飞控板质量有问题才导致了这个原因。不管怎么说现在可以在自稳模式平稳飞行了。超声波定高效果也还将就,偶尔会出现掉高的情况,反正先往下走吧(从后来回过头来看这个选择是很明智的)。之后遇到一个问题,AMP 3.5.7固件没有LPE,无法使用外部位置信息融合。如果使用外部位置控制的话有三种方式:1、将外部位置信息当做一个GPS的信息传入飞控,在EKF2中进行融合。2、自己修改EKF2,加上一个外部位置融合的模块。3、位置控制在NUC上进行计算,然后得到期望的姿态给飞机控制。斟酌了一下这些问题,我们决定我们换成PX4飞控来进行我们的工作,因为PX4固件有LPE,可以进行外部位置融合。

换成PX4固件,大概调了一下PID参数,可以定高飞行了(效果也只是一般般)。然后我们准备将雷达的位置信息融合进飞机。但是问题出现了,进不到定点模式,融合数据太差了。经过看飞行日志,发现加速度计的波动在+-0.5G之间,这怎么能用呢。然后我再看了一下其他正常飞行的飞机,加速度计的波动都在+-0.1G左右。这个差距也太大了吧,我们又加了一个比较好的减震板,数据勉强在+-0.3G的噪声,但是还是太差了。不管调参还是怎么搞,都没有改善。为啥不加减震APM固件噪声就比较小,加了这么好的减震PX4固件的加速度计的噪声就这么大,其他硬件都是一样的 啊。这个真的是APM固件比PX4固件好么?那还换回APM固件来试一下吧。APM固件看一下有没有什么方法来融合外部位置,当时想的最坏的不过是把位置控制写在nuc上,总比做不出来强。换后,测试自稳模式和定高模式都很不错,惊喜的是定高不会出现掉高的现象了,看来好的减震板还是有必要的。不错不错,也不枉我们这段时间的折腾。

现在就是位置估计了。查看了在APM论坛上,确实有人讨论外部位置融合的问题。我擦,有大神已经把APM外部位置融合做出来了。并且已经在github上合并到主项目中master版本上了。赶快下载下来试一下。参照官网上的APM编译环境配置,来配置好环境,编译最新的固件,然后看了一下固件版本3.7-dev。确实比我们在地面站上下载下来的固件新不少啊。试一下吧,按照他们说的步骤先设置一下飞机的参数。

Setup the Pixhawk

Connect to the Pixhawk with a ground station (i.e. Mission Planner) and set the following parameters:

  • SERIAL2_PROTOCOL = 1 (the default) to enable MAVLink on the serial port.

  • SERIAL2_BAUD = 921 so the Pixhawk can communicate with the TX1 at 921600 baud.

  • LOG_BACKEND_TYPE = 3 if you are using APSync to stream the dataflash log files to the TX1

You may need to manually disable flow control on Telem2 although this is not normally required:

  • BRD_SER2_RTSCTS = 0

As a side note the J120’s UART2 appears on the TX1 as /dev/ttyTHS1.

以上是pixhawk2与mavros连接需要设置的。

Configure ArduPilot

Connect to the flight controller with a ground station (i.e. Mission Planner) and check that the following parameters are set as shown below:

  • AHRS_EKF_TYPE = 2 (the default) to use EKF2 (at the time this page was written the EKF3 did not yet support external position estimates)

  • EK2_ENABLE = 1 (the default)

  • EK3_ENABLE = 0 (the default)

  • GPS_TYPE = 0 to disable the GPS

  • EK2_GPS_TYPE = 3 to disable the EKF’s use of the GPS

  • MAG_ENABLE = 0, COMPASS_USE = 0, COMPASS_USE2 = 0, COMPASS_USE3 = 0 to disable the EKF’s use of the compass and instead rely on the heading from ROS and Hector SLAM

After changing any of the values above, reboot the flight controller.

以上是使用EKF2来取消GPS、取消MAG。这个是融合视觉信息的准备工作。

mavros连接到pixhawk2之后将位置信息通过vision_pose话题来发给飞控,然后在QGC上的analysis中可以看到视觉的估计值已经被飞控接收到了,然后就是看是否融合使用了视觉的信息。但是没有变量可以看到融合的位置信息。只能通过飞行日志来看了,让飞机产生一个飞行日志,然后查看EKF的消息中的PN PE来看一下融合进去了没有。看了一下确实融合进去了。并且yaw角使用的视觉yaw角这样的话,外部位置的坐标系和飞机的坐标系就对应起来了。

如果位置信息融合了的话可以看到地面站消息中会有这样的显示。

EKF2 IMU1 initial pos NED = 0.0,0.0,0.0 (m)
EKF2 IMU1 is using external nav data
EKF2 IMU0 initial pos NED = 0.0,0.0,0.0 (m)
EKF2 IMU0 is using external nav data

到这里就把视觉信息传给飞控了。此时还没有测试是否能够定点。之后测试之后再更新吧。

10月13日更新

经过这么久的调试,终于可以使用guided模式来寻点了。

到上面那步可以直接试一下自己的飞机能否准确定点。如果可以的话就可以尝试使用set_point来给飞机发期望的位置。这里有一个位置,有一个四元数。位置是给飞机期望的位置,四元数是给飞机期望的yaw角。通过set_point给飞机期望位置之后飞机就根据你给的位置和yaw角来达到期望的状态。mavros给飞机当前外部位置的时候需要xyz都需要给,要不然融合就会有问题。不能只给x和y,然后z给0,这样的话在定高和定点的时候不会有问题。在guided模式和auto模式的时候就会出现问题,当前的z方向的位置都是0,导致高度控制会产生错误。

reference

http://ardupilot.org/dev/docs/ros-slam.html

https://discuss.ardupilot.org/c/blog

https://github.com/ArduPilot/ardupilot

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用APM固件飞控来使能外部位置控制 的相关文章

  • libvlc 使用mediaplayer 播放rtsp

    环境 ubuntu18 04 vlc3 0 6源码 从 github上下载的vlc 源码 xff0c 默认配置 xff0c 默认编译 xff0c 用命令 vlc rtsp 192 168 43 129 10086 stream 竟然无法播放
  • c语言下,关闭socket的两种方式

    c语言关闭socket的两种方式 一 shutdown include lt sys socket h gt int shutdown int sockfd int how how的方式有三种分别是 SHUT RD xff08 0 xff0
  • 文件系统(七)—图解进程文件操作

    学习文件系统 xff0c 我们的目标是如何实现一个简单的文件系统 xff1f 磁盘上需要什么结构 xff1f 它们需要记录什么 xff1f 如何访问 xff1f 对于这些问题 xff0c 我们就需要理解文件系统的基本工作原理 xff0c 可
  • 解决Docker ADD/COPY 报ADD failed: stat /var/lib/docker/tmp/docker-builder****: no such file or director

    意思就是说 ADD source target 命令找不到source的文件 搜了大致有以下情况 xff1a 没有source文件 xff0c 或者source文件跟Dockerfile不在同一目录 xff0c 或者命令docker bui
  • Qt各个版本和插件的下载方法

    Qt及其插件的下载 网址 xff1a http master qt io 1 输入网址 后 2 点开archive后 3 打开qt后 xff0c 出来的是qt的版本 4 下载5 2版本为例 xff0c 打开5 2 后 5 里面有两个版本5
  • Centos7 安装Docker以及图形管理界面

    Docker的安装 1 确保系统中没有旧版本 如果安装过的话 xff0c 没有安装则忽略此步 yum span class token operator span y remove docker docker common docker s
  • Android汽车服务篇(三) CarPropertyService下篇

    一 简介 上篇文章介绍了Android汽车服务篇 二 CarPropertyService上篇 我们继续看一看看CarPropertyService 这个服务也是很重要的 绝大部分与车辆硬件功能相关联的属性 如空调 车舱功能 车辆传感器等都
  • PPTV面试算法思考-最长对称子字符串

    题目 最近在微信公众号里看看到了一个PPTV的面试算法题 xff0c 感觉难度适中 xff0c 想试下 题目的内容为求一个字符串的最长对称子字符串 如 xff1a 输入 输出 abba 4 abad 3 acccbaa 3 我的算法1 自己
  • mardown语法详解

    这里写自定义目录标题 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题 xff0c 有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中 居左 居右SmartyP
  • C++

    由于见到论坛上不少找书的 xff0c 于是就稍稍汇总总结了一下 xff0c 作为本人即将推出的 C 43 43 资源大汇 系列文章的引子 本文只是初稿 xff0c 其中有不少的纰漏 笔误 打误 xff08 打字错误 xff09 希望各位纠正
  • Tx2 设置静态IP的两种方法

    Tx2设置静态ip的两种方法 Tx2静态ip设置可通过桌面右上角的有线连接配置中的ipv4的配置来设置 xff1b Tx2静态ip设置的第二种方法是通过间接修改ipv4的配置来设置 xff1b 用ifconfig来查看你使用的是哪个网络设备
  • 七 Gazebo学习总结之传感器的添加

    本文展示的是使用者怎么直接通过Gazebo其他模型来创建复杂的模型 xff0c 以及使用 lt include gt 和 lt joint gt 标签来连接一个复杂模型的不同部分 1 增加一个激光器 a 进入先前教程的模型目录中 cd ga
  • STM32、FreeRTOS—— SVC 和 PendSV

    问 I went through the xTaskStartSechudler function which ends up triggering the SVC instruction and i came to know that i
  • MYNTEYE-SDK-ROS-Kinetic-VINS-Mono环境搭建到运行(Ubuntu 16.04)非常详细

    一 首先安装ROS环境 1 确保系统软件处于最新版 xff1a sudo apt get update 2 打开终端 xff0c 输入命令 wget https raw githubusercontent com oroca oroca r
  • win7关机一直卡在正在关机

    win7关机一直卡在正在关机 尝试用win7系统准备工具 xff08 sysprep xff09 来恢复到系统的初始状态 步骤 xff1a 1 win 43 R打开运行窗口 xff1b 2 在窗口中输入 xff1a sysprep xff0
  • Jetson TX2学习笔记(一):软硬件基础环境配置

    拿到了Jetson TX2套件 xff0c 在给套件安装开发环境时踩了很多坑 上网查阅的资料也都没能解决问题 xff0c 这里把成功安装步骤一一记录下来 xff0c 同时将所遇到且网上未提及的问题也进行一下分析 先说一下 xff0c Jet
  • 启动Docker,出现“Got permission denied while trying to connect to the Docker daemon socket“的情况

    启动docker时 xff0c 出现 Got permission denied while trying to connect to the Docker daemon socket 的情况 解决方法 xff1a docker守护进程启动
  • 【matlab调用m文件方法】

    matlab如何调用m文件 matlab调用m文件方法
  • kubernetes(k8s)介绍安装和部署实战

    kubernetes 基本介绍 kubernetes xff0c 简称 K8s xff0c 是用 8 代替 8 个字符 ubernete 而成的缩写 是一个开源 的 xff0c 用于管理云平台中多个主机上的容器化的应用 xff0c Kube
  • latex与mathtype的对应

    在latex中一些特殊的字体在用mathtype实现的时候需要找到相应的字体 xff0c 就是说latex实现的所有特殊的字体 xff0c 实现 xff0c 在mathtype中都能找到相应的对应 例如下面的文本对应 R E u

随机推荐

  • 深度学习 优化算法

    深度学习优化算法 优化算法概念动量框架 SGDMomentumNAGAdaGradRMSProp AdaDeltaAdamNdam参考 优化算法 概念 优化算法的功能是通过改善训练方式来最大化或者最小化损失函数 模型内部有些参数 xff0c
  • AVStream AVCodecContext AVCodec

    AVStream 表示成一个流媒体 xff0c 每个AVStream对应一个AVCodecContext xff0c 存储该音视频流使用解码器的相关数据 xff0c 每个AVCodecContext中对应一个AVCodec 包含该音视频的解
  • 2022 年 GIS 就业状况

    2022 年 GIS 就业状况 我们生活在数字时代 xff0c 通过进行在线研究选择我们的道路 xff0c 比如选择假期 选择大学或追求职业 如果您正在考虑进入 GIS 领域或在 GIS 领域进一步发展 xff0c 那么这份报告一定会有所帮
  • Eigen使用方法

    看了这边博客之后总结一下https blog csdn net augusdi article details 12907341 xff0c 感谢原作 xff01 看了之后学到了好多 xff01 1 矩阵定义 不管是向量还是矩阵 xff0c
  • Linux C 书籍推荐

    建议学习路径 xff1a 首先先学学编辑器 xff0c vim emacs什么的都行 然后学make file文件 xff0c 只要知道一点就行 xff0c 这样就可以准备编程序了 然后看看 C程序设计语言 K amp R xff0c 这样
  • Lidar与imu外参标定

    目录 网上资料 方案1 方案2 Lidar与IMU的相对旋转 实现 总结 附录 xff1a 最近由于工作需要 xff0c 花了几天时间了解激光与imu的标定方法 xff1b 因为项目需要 xff0c 且这里是个人认识的一个整理 xff0c
  • ROS的tf包中坐标变换的方法

    1 setRotation函数的参数 在坐标变换的时候常有这样的写法 xff1a tfTutorialsAdding a frame C 43 43 transform setOrigin tf Vector3 0 0 2 0 0 0 tr
  • 转载-自定义ros消息 vector

    原创 xff1a https blog csdn net m zhangjingdong article details 79617966 1 我在ros程序包中新建一个msg文件夹 xff0c 用于存储msg消息相关定义 xff0c 之后
  • 学神的“诞生”-2014清华大学本科生特等奖学金答辩观后感

    清华的特奖与交大的竢实扬华 偶然间在学堂在线上留意到有这样的一场现场答辩 xff0c 很想知道最高学府的最高荣誉花落谁家 xff0c 得此殊荣的又是些怎样的 学神 xff0c 几点感受记录之 1 经历 gt gt 证书 清华的学生更注重大学
  • qt中 美化 问题列表

    1 QTabWidget 中tab xff0c tab bar xff0c pane属性分布 2 使用qss美化时 xff0c tab标签上和pane中都能美化成功 xff0c 但tab最右侧的tab bar却始终没有成功 设置控件的背景
  • AttributeError: module 'cv2.cv2' has no attribute 'createLBPHFaceRecognizer'

    AttributeError module cv2 cv2 has no attribute createLBPHFaceRecognizer 在某一次做人脸识别的小demo的过程中遇到了这个问题 下面直接上产生问题的源代码 span cl
  • CAN总线ACK响应问题

    CAN总线的应答位 xff08 ACK xff09 用来表示节点已经收到有效的帧 任何节点如果准确无误地接收到帧 xff0c 则要向总线上发送显性位 xff0c 该显性位将掩盖发送节点输出的隐性位 xff0c 使总线上表现为显性 如果发送节
  • 嵌入式书籍推荐

    嵌入式书籍推荐 Linux基础 1 Linux与Unix Shell 编程指南 C语言基础 1 C Primer Plus xff0c 5th Edition 美 Stephen Prata着 2 The C Programming Lan
  • 调试中关于__FILE__, __LINE__ 及 __FUNCTION__ 用法

    在C语言中 FILE xff1a 打印相应的文件名 LINE xff1a 打印语句在源代码中相应的行 FUNCTION xff1a 打印语句在源代码中相应的函数名
  • 看技术书籍坚持不下来的,看这里,记录增量学习法

    今天 xff0c 在阅读 软技能 代码之外的生存指南 这本书的过程中 xff0c 学习到了番茄工作法 定额工作法 xff0c 受此启发 xff0c 突然脑海里冒出了一个方法论 xff0c 这是我独创的一个学习方法论 xff0c 我把它称作
  • ubuntu16.04安装realsense2环境与SDK(D435)

    关于realsense2环境的安装以及SDK的使用现在的文档还不是很多 xff0c 就分享下我的过程 xff0c 希望对大家有帮助 我安装是从源码构建的 xff0c 以下是我参考的资料链接 第一个链接是官网 xff0c 我是以它为主 xff
  • C++服务器研发精进

    一袭青衫闯帝都 xff0c 回首已然四春秋 壮志未酬心未老 xff0c 抚膺身衰发已疏 转眼间已经工作四年有余 xff0c 回想刚毕业的懵懂无知 xff0c 仿佛就在昨日 xff0c 成长乎 xff1f 徒增岁月矣 理想中的职业生涯应该是目
  • [kernel 启动流程] (第二章)第一阶段之——设置SVC、关闭中断

    1 kernel启动流程第一阶段简单说明 arch arm kernel head S kernel入口地址对应stext ENTRY stext 1 第一阶段要做的事情 xff0c 也就是stext的实现内容 设置为SVC模式 xff0c
  • opencv 2.4.9编译踩坑笔记

    为了跑GSLAM xff0c 一直遇到opencv版本的问题 xff0c 本机之前是4 1 0 xff0c 作者回答用的版本是opencv2 4 9 xff0c 没办法 xff0c 再装一个 最终我的CMAKE指令 xff1a cmake
  • 如何使用APM固件飞控来使能外部位置控制

    在三维激光雷达平台上我们飞控采用pixhawk2的飞控 官方给我说这个支持APM和PX4的固件 xff0c 但是对APM固件的支持性比较好 xff0c 因此就选用了APM的飞控 在一开始装好飞机后 xff0c 第一次飞还好好的 xff0c