PX4二次开发中查无资料的踩坑总结

2023-05-16

写在前:2021年9月下旬开始摸索px4飞控的二次开发,从C++零基础到第一个修改算法后的版本稳定运行,大概用了2个月,从12月初改用新版本px4源码到现在又过去了约1个月,期间踩了各种各样的坑,可以说历尽坎坷,一言难尽。网上能查到的还好办,参考-尝试即可,头疼的是实际中还遇到很多搜遍全网都没有的奇奇怪怪问题,有些都不知从何下手。在此简要记述经过摸索基本解决了的问题和方法,以备忘和分享。可能有些问题是由于我的基础太过薄弱,大神勿笑,如果我的理解有误,请多指教。

1.对空值判断语句错误使用,导致循环输出结果为空

px4 V1.12.3版本中,有许多对空值NAN的操作,并且一个数学表达式中,如果一个值为空,则最终结果也为空,这就导致自己写的一个循环输出结果始终未空。要解决这个问题就需要判断一个值是否为空,如果是,就把该值设为0。首先我是这样写的

float a;
if(a==NAN){a=0;}

自以为写的没问题,但输出始终为空的问题并未解决,头疼了许久。

后来才知道,要比较一个变量是否是空,不能用类似a==NAN这样的语句,因为空不与自身相等。要实现判断一个变量是否是空,可以用全局函数IsNan(),比如可以这样写

float a;
if(IsNan(a)){a=0;}

即实现了如果a是空,则将a赋为零的功能。

2.日志消息语句过多,导致控制延迟增大,控制发散

px4 V1.12.3中,多旋翼位置控制mc_pos_control 是一个工作队列任务。不同于Task任务有独立的进程优先级和堆栈空间,多个工作队列共享一个WorkQueueRunner线程,共享同一个堆栈空间,多个工作队列在一个线程中是顺序执行的,这样设计优点是可以减小RAM的使用、可以减少任务切换的次数,缺点是工作队列任务时间过长可能会造成线程中其他队列任务延时,因此队列任务不能运行执行时间过长的任务。

自己在修改mc_pos_control 模块时,为了查找1.中循环输出为NAN的问题,插入了许多日志消息语句,如PX4_WARN(),PX4_INFO(),导致该模块运行时间过长,使得整个navigation & control进程刷新率低至12Hz,定点模式无人机位置控制发散。把这些日志消息语句统统注释掉即可解决 。

3.RTK连接顺序问题

飞控:CUAV V5+;

地面站计算机:Surface Pro 6,Win10家庭版;

地面站软件:QGC V3.5.6;

RTK硬件:雷迅C-RTK 9P;

数传电台:CUAV Supter Radio 915Mhz 500mw,实际就是3DR的电台;

本人用Surface Pro 6作为地面站,小巧便携、性能足够,唯一缺点是仅有一个USB接口,需要接一个一拖三的拓展口。近日终于解决完上述1.  2.点问题,终于准备上RTK进行调试的时,却发现只要一插上RTK地面基站的数据线,数传电台的连接就中断,而且通过插拔数传,拔掉RTK地面基站,插拔一拖三,都无法恢复连接,甚至地面站也无法正常退出,电脑无法正常关机,只能长按电源键强关,再开机。

几经周折试验,发现必须在打开QGC地面站之前,首先连接好数传电台和RTK的数据线,再双击打开QGC地面站软件,即可正常连接。其中原因不甚清楚。

4.每次起飞后首次进入定点模式,飞机都会做“刷锅”运动

每次起飞后首次进入定点模式,飞机都会做“刷锅”运动,半径由小到大再由大到小,位置变化曲线如图:

神奇的是四五圈之后还能稳定回期望的位置,更神奇的是本次起落内,无论怎样变换定点的期望位置,飞机都很稳定,不会再出现“刷锅”现象,但飞机姿态会有一点“抽搐”。

经过与 飞同学z1872385的博客_飞同学_CSDN博客-自用笔记,ROS,QT_QGC领域博主 的交流,并分析日志,指出,主要问题是磁罗盘受到干扰,另外飞控的震动也过大。如图,可以看出磁场强度与油门量呈强相关性,加速度计的数据也显示加速度剧烈的变化,即震动强烈:

 

 解决方法,1)将C-RTK主机架高,远离电源分配板,并做三角支撑使平台稳定;

                   2)给飞控加减振;如图:

处理完后试飞,效果完美。

ps:

1)关于雷迅的C-RTK9P主机里是否有内置磁航向传感器,官网说明里没有提,产品说明书里也没有写,所以最初装机的时候就没考虑磁罗盘的问题,因为上层板没有合适的位置,就把RTK的主机塞在了电源板和飞控板中间,造成了干扰问题。    最后与他们的技术交流之后才确认有,而且笔者感觉是有两个,因为每次校准磁航向的时候都会多出两个外置磁罗盘,这两个磁罗盘的方向还不一样。

2)关于飞控的振动,一开始比较相信雷迅家的板子,感觉有内置减振,就直接贴在了机架上,事实证明还是不能偷懒啊,该做的减振和抗干扰措施要做足。

3)RTK定位精度是真高啊!稳定悬停时,位置偏差不超过5公分,如图:

当然也有我算法的功劳,PX4原始算法的效果是这个样子:

5. 关于px4编译内存溢出问题

px4源码版本V1.12.3,编译fmu-v5版本固件正常,编译fmu-v2版本固件内存溢出,比1M稍稍大了一点点,无关模块能去的都去了,还是不行。参考文章PX环境搭建编译px4_fmu-v2_default相关问题的解决方法

修改默认的Flash大小,具体路径为:PX4-Autopilot/boards/px4/fmu-v2/nuttx-config/scripts/script.ld,将其中的1008k改为较大的数,如1608k。

修改后,编译时不再报错,但upload时仍然报错,按照提示修改upload为force-upload:

make px4_fmu-v2_default force-uoload

即可成功烧录固件。

6. 关于px4部分机架类型无法选择的问题

实验室有很多雷迅家的pixhack飞控硬件,有很多块飞控板可选机架不全,不能选择垂起机架,如13001双旋翼垂起,烧录各种固件都不行,但同样的固件有的飞控板就没问题。

格式化SD卡也不能解决问题。

手动修改SYS-AUTOSTART参数为13001也不行,修改完刷新参数貌似可以了,但断电重启后仍然显示机架未设定。

问题原因及解决办法尚未找到。

今天烧录V3版本的固件可以解决大部分飞控板的问题,之前一直烧V2版本的。但有一个飞控板提示闪存错误,可能是硬件真的有损坏。

7. 垂起的怠速调节问题

实验室的双旋翼垂起,一解锁旋翼就会有一个初始转速,对于调试很不安全,查资料大多说修改参数PWM_MIN,一方面PX4 V1.12.3版本无此参数,与其相近的应该是PWM_MAIN_MIN,另一方面,经尝试修改PWM_MAIN_MIN并无任何效果。

查看源码发现,VT_IDEL_PWM_MC才是控制垂起机架多旋翼模式怠速的参数,把默认的1080修改为1000,完美解决。注意,该参数修改后须重启才能生效。

今天先写这么多,后边再更新。

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

PX4二次开发中查无资料的踩坑总结 的相关文章

  • PX4+QGC+jmavsim软件在环仿真

    一 环境修改 参考官方手册jMAVSim 仿真模拟 PX4 Developer Guide xff0c 以上环境基于上一篇内容 xff0c 未完成ROS 43 jmavsim 43 QGC环境搭建的请移步Ubuntu18 04下px4 43
  • PX4通过I2C方式添加自定义传感器(2)

    PX4 I2C通信方式传感器驱动分析 xff08 以ets airspeed为例 xff09 1 说明 这篇文章我们就来看看I2C传感器的驱动过程 xff0c 当然里面也有很多东西我不是很理解 xff0c 所以仅谈我领悟的一些东西 我就以e
  • PX4/Pixhawk---uORB深入理解和应用

    The Instructions of uORB PX4 Pixhawk 软件体系结构 uORB 主题发布 主题订阅 1 简介 1 1 PX4 Pixhawk的软件体系结构 PX4 Pixhawk的软件体系结构主要被分为四个层次 xff0c
  • 关于PX4中的高度若干问题

    飞行的高度是如何测量的 xff1f 地面的高度和海平面的高度差别很大 xff0c 飞控又是如何有效判别进行降落的 xff1f 这是我脑子里的疑问 搜索的一圈发现很少有人讨论这方面的问题 xff0c 于是本次我就直接看一下源代码 xff0c
  • PX4代码学习系列博客(6)——offboard模式位置控制代码分析

    分析offboard模式的代码需要用到以下几个模块 local position estimator mavlink mc pos control mc att control mixer 程序数据走向 mavlink 一般的offboar
  • 无人机仿真—PX4编译,gazebo仿真及简单off board控制模式下无人机起飞

    无人机仿真 PX4编译 xff0c gazebo仿真及简单off board控制模式下无人机起飞 前言 在上篇记录中 xff0c 已经对整体的PX4仿真环境有了一定的了解 xff0c 现如今就要开始对无人机进行起飞等仿真环境工作 xff0c
  • PX4 ---- Indoor Flight

    文章目录 室内飞行ROS amp PX4Pose Data 飞机配置MAVROS 基于工训赛 VIO 飞行总结 室内飞行 ROS amp PX4 Pose Data 飞机配置 VIO 参考此处 xff0c 采用 T265 配置 相机与飞控机
  • PX4模块设计之十三:WorkQueue设计

    PX4模块设计之十三 xff1a WorkQueue设计 1 WorkQueue启动2 WorkQueue接口2 1 基本接口2 2 辅助接口2 3 WorkQueue任务函数2 3 1 Flat Build2 3 2 Protected
  • PX4模块设计之十八:Logger模块

    PX4模块设计之十八 xff1a Logger模块 1 Logger模块简介2 模块入口函数2 1 主入口logger main2 2 自定义子命令Logger custom command2 3 日志主题uORB注册 3 重要实现函数3
  • PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一 xff1a ManualControl模块 1 ManualControl模块简介2 模块入口函数2 1 主入口manual control main2 2 自定义子命令custom command 3 Manual
  • PX4模块设计之三十六:MulticopterPositionControl模块

    PX4模块设计之三十六 xff1a MulticopterPositionControl模块 1 MulticopterPositionControl模块简介2 模块入口函数2 1 主入口mc pos control main2 2 自定义
  • PX4模块设计之四十三:icm20689模块

    PX4模块设计之四十三 xff1a icm20689模块 1 icm20689模块简介2 模块入口函数2 1 主入口icm20689 main2 2 自定义子命令custom command2 3 模块状态print status 重载 3
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • px4仿真无法起飞问题(Failsafe enabled: no datalink)

    报错信息 问题描述 xff1a 使用JMAVSim和gazebo仿真px4起飞时报错如下 xff1a WARN commander Failsafe enabled no datalink 说不安全 解决方法 打开QGC 就可以起飞了
  • 【px4】运行mavsdk中的offboard example

    运行MAVSDK中的offboard例子时无人机不执行 想控制无人机前后左右移动 xff0c 在按照官方教程实现offboard 插件的时候 发现用action插件能正常起飞和降落 但是一旦执行到offboard的插件代码的时候就会自动降落
  • PX4飞控的PPM接收机

    xff08 一 xff09 原理图 xff1a PX4飞控的PPM输入捕获由协处理器完成 xff0c 接在A8引脚 xff0c 对应Timer1的通道1 xff08 二 xff09 PPM协议 xff1a PPM的每一帧数据间隔为20ms
  • PX4模块设计之二十七:LandDetector模块

    PX4模块设计之二十七 xff1a LandDetector模块 1 LandDetector模块简介2 模块入口函数2 1 主入口land detector main2 2 自定义子命令custom command 3 LandDetec
  • 步骤八:PX4使用cartographer与move_base进行自主建图导航

    首先老样子硬件如下 飞控 HOLYBRO PIXHAWK V4 PX4 机载电脑 jetson nano b01 激光雷达 思岚a2 前提 你已经完成了cartographer建图部分 能够正常输出map话题 前言 由于要参加中国机器人大赛
  • PX4通过参数脚本给飞控导入参数

    PX4通过参数脚本给飞控导入参数 先找一架正常能飞的无人机连接地面站 在参数页面右上角点击工具 gt 保存到文件 保存的时候文件名注明参数的相关信息 然后将需要加载参数的无人机连接至地面站 xff0c 注意需要加载参数的无人机必须和保存的参
  • 无人机PX4使用动捕系统mocap的位置实现控制+MAVROS

    动捕系统Optitrack xff0c 有很高的定位精度 xff0c 能够给无人机提供比较精确的位置信息 xff0c 因此如果实验室有条件 xff0c 都可以买一套动捕系统 动捕系统的原理 xff1a 光学式动作捕捉依靠一整套精密而复杂的光

随机推荐

  • 教你快速学习PID控制原理

    教你快速学习PID控制原理 写在前面 在这篇文章中我会通过举例的方式来让大家了解什么是PID控制 xff0c 这篇博客是让大家更加容易的理解PID控制 xff0c 如果大家想要跟深入的了解的话最好是自己上手去做一个关于PID控制的实物 xf
  • opencv HSV找颜色,找轮廓用最小旋转矩形框出

    include lt opencv2 opencv hpp gt include lt iostream gt include lt string gt using namespace cv using namespace std 输入图像
  • FreeRTOS学习笔记——FreeRTOS 任务基础知识

    RTOS 系统的核心就是任务管理 xff0c FreeRTOS 也不例外 xff0c 而且大多数学习RTOS 系统的工程师或者学生主要就是为了使用RTOS 的多任务处理功能 xff0c 初步上手RTOS 系统首先必须掌握的也是任务的创建 删
  • linux c char * char[]相互转换

    1 char 转char 可以直接赋值 char pp 20 61 34 helloworld 34 char p 61 pp 2 char 转char 主要有两种方法可以将char 转换为char 类型 xff0c 分别是 xff1a s
  • GDB改变程序的执行

    1 修改变量值 xff1a set var var name 61 num 最佳 print var name 61 num 2 跳转执行 gdb提供了乱序执行的功能 jump linespec linespec可以是文件的行号 xff0c
  • Linux缓冲区

    所有的磁盘I O都要进过内核的快缓冲区 xff08 内核缓冲区高速缓冲 xff09 xff0c 既然read和write都要被内核缓冲 xff0c 那么 不带缓冲的IO 指的是在用户的进程中对这两个函数不会进行缓冲 xff0c 每次read
  • git忽略本地的已经push过的提交

    先使用如下命令 xff1a span class hljs comment git span span class hljs comment rm span span class hljs literal span span class h
  • 计算机启动过程

    BIOS BIOS做了底层的一些初始化的工作 BIOS的初始化过程 xff1a 在计算机电源刚打开的时候 xff0c 首先会 xff1a 1 硬件自检 2 检查系统中的内存和显卡等关键部件的存在和工作状态 3 查找并执行显卡等接口卡BIOS
  • 系统调用

    系统调用 xff1a 操作系统对上提供服务的接口 通过软中断触发中断 INT和IRET指令用于系统调用 xff0c 系统调用时 xff0c 堆栈切换和特权级的切换 开销 1 引导机制 2 建立内核堆栈 3 验证参数 4 内核态映射到用户态的
  • ERVER CONSOLE DEBUG: onBackendConnect: gdb-server session closed

    Waiting for gdb server to start 2022 08 24T07 08 56 126Z SERVER CONSOLE DEBUG onBackendConnect gdb server session connec
  • Linux离线安装telnet命令

    参考 xff1a https www hangge com blog cache detail 2935 html 一 离线包下载 xff08 1 xff09 首先下载 telnet client 或 telnet 客户端软件包 xff0c
  • 嵌入式开发--CAN总线与高速光耦6N137

    嵌入式开发 CAN总线与高速光耦6N137 6N137简介 CAN总线应用时 xff0c 有时候需要加光耦隔离电路 xff0c 以免在雷击或遇到高压干扰时 xff0c 保护设备安全 常用的有光耦隔离和专用芯片隔离 本文介绍使用高速光耦6N1
  • 处理机调度

    调度算法 第一类就绪队列怎么排 第二类是每一次执行时间的长短的控制 第三类关于多种算法如何综合到一起 先来先服务算法 按着到就绪队列里的先后顺序来排队的在找就绪进程的时候也是按照这个先后顺序来 按先来后到没有考虑到进程的特征 缺点 xff1
  • 死锁产生和预防

    死锁的产生 1 资源是互斥的 资源在同一时刻只有一个进程才能够使用和访问 2 持有并等待 一个进程持有一份资源阻塞等待其它进程释放资源 3 资源不可抢占 只有一个进程使用完资源之后其它进程才能够占有使用 4 循环等待 在等待资源的进程集合中
  • 第一次实验报告:使用Packet Tracer分析HTTP数据包

    姓名 xff1a 刘钰 学号 xff1a 201821121036 班级 xff1a 计算1812 1 实验目的 熟练使用Packet Tracer工具 分析抓到的HTTP数据包 xff0c 深入理解 xff1a HTTP协议 xff0c
  • 超详细|一篇搞定操作系统——用户接口

    文章目录 6 1 用户接口6 2 其他特殊操作系统6 2 1 嵌入式操作系统6 2 2 分布式操作系统 操作系统全家桶 xff1a 传送门 一 操作系统引述 xff1a https blog csdn net diviner s artic
  • mac搭建嵌入式编程环境--交叉编译工具链crosstool-ng

    1 第一个思路就是和ubuntu一样 xff0c 是否有apt get一样的管理软件包工具 查了一下有类似的macport和homebrew macport下载方法 xff1a https guide macports org instal
  • 用matlab处理px4日志的转换方法

    px4 v1 8 2的版本可以选择用sdlog2模块记录日志 xff0c 通过QGC地面站下载的日志格式为 ulg xff0c 将下载成功的 ulg扩展名改为 bin xff0c 然后用MP地面站 数据闪存日志 创建matlab文件 xff
  • 关于VTOL垂直起降模式的参数很详细的介绍

    转载 xff1a 基于Ardupilot PX4固件 xff0c APM PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试 xff08 第二篇 xff09 https blog csdn net u011322358 article
  • PX4二次开发中查无资料的踩坑总结

    写在前 xff1a 2021年9月下旬开始摸索px4飞控的二次开发 xff0c 从C 43 43 零基础到第一个修改算法后的版本稳定运行 xff0c 大概用了2个月 xff0c 从12月初改用新版本px4源码到现在又过去了约1个月 xff0