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二次开发中查无资料的踩坑总结 的相关文章

  • pixhawk: px4代码初学分析:追溯电机控制--pwm输出

    追溯电机控制 pwm输出 正常工作状态下pwm输出过程简述 xff1a 其他状态下pwm输出 xff1a 正常工作状态下pwm输出过程简述 xff1a 姿态解算部分得出姿态控制量通过px4io cpp把姿态控制量发送给IOIO串口读取姿态控
  • PX4二次开发中查无资料的踩坑总结

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

    PX4无人机 键盘控制飞行代码 仿真效果 实机效果 由于图片限制5M以内 xff0c 只能上传一小段了 xff0c 整段视频请点击链接 Pixhawk 6c 无人机 键盘控制无人机 Offboard模式 核心 xff1a 发布 mavros
  • PX4飞控之PWM输出控制

    PX4飞控之PWM输出控制 多旋翼电调如好盈XRotor xff0c DJI通用电调等都支持PWM信号来传输控制信号 常用的400Hz电调信号对应周期2500us xff0c 一般使用高电平时间1000us 2000us为有效信号区间 xf
  • 初学PX4之环境搭建

    文章转自 xff1a http www jianshu com p 36dac548106b 前言 前段时间linux崩溃了 xff0c 桌面进去后只有背景 xff0c 折腾好久没搞定 xff0c 为了节省时间索性重装了系统 xff0c 同
  • PX4 ---- Mixer

    文章目录 Mixer 混合控制 作用输入输出装载混控文件MAVROS代码解析总结示例MAINAUX Mixer 混合控制 作用 经过位置控制和姿态控制后 xff0c 控制量通过 actuator controls发布 xff0c 其中 co
  • PX4模块设计之四:MAVLink简介

    PX4模块设计之四 xff1a MAVLink简介 1 MAVLink PX4 应用简介2 MAVLink v2 0新特性3 MAVLink协议版本4 MAVLink通信协议帧4 1 MAVLink v1 0 帧格式4 2 MAVLink
  • PX4模块设计之六:PX4-Fast RTPS(DDS)简介

    64 TOC PX4模块设计之六 xff1a PX4 Fast RTPS DDS 简介 基于PX4开源软件框架简明简介的框架设计 xff0c 逐步分析内部模块功能设计 PX4 Fast RTPS DDS 具有实时发布 订阅uORB消息接口
  • 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模块设计之十七:ModuleBase模块

    PX4模块设计之十七 xff1a ModuleBase模块 1 ModuleBase模块介绍2 ModuleBase类介绍3 ModuleBase类功能介绍3 1 模块入口3 2 模块启动3 3 模块停止3 4 状态查询3 5 任务回调3
  • PX4模块设计之二十四:内部ADC模块

    PX4模块设计之二十四 xff1a 内部ADC模块 1 内部ADC模块简介2 模块入口函数2 1 主入口board adc main2 2 自定义子命令custom command 3 内部ADC模块重要函数3 1 task spawn3
  • PX4模块设计之二十六:BatteryStatus模块

    PX4模块设计之二十六 xff1a BatteryStatus模块 1 BatteryStatus模块简介2 模块入口函数2 1 主入口battery status main2 2 自定义子命令custom command 3 Batter
  • 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模块设计之四十五:param模块

    PX4模块设计之四十五 xff1a param模块 1 param模块简介2 模块入口函数param main3 重要函数列表4 总结5 参考资料 1 param模块简介 Description Command to access and
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • PX4-4-任务调度

    PX4所有的功能都封装在独立的模块中 xff0c uORB是任务间数据交互和同步的工具 xff0c 而管理和调度每个任务 xff0c PX4也提供了一套很好的机制 xff0c 这一篇我们分享PX4的任务调度机制 我们以PX4 1 11 3版
  • 【px4】运行mavsdk中的offboard example

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

    本文基于PX4飞控1 5 5版本 xff0c 分析导航模块中自护返航模式的控制逻辑和算法 自主返航模式和导航中的其他模式一样 xff0c 在Navigator main函数中一旦触发case vehicle status s NAVIGAT
  • PX4项目学习::(七)飞控栈:commander

    PX4的飞行控制程序通过模块来实现 xff0c 与飞控相关的模块主要有commander xff0c navigator xff0c pos control xff0c att control这几个 xff0c 分别可以在src modul

随机推荐

  • 教你快速学习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