Matt Kear带来关于ArduPilot推力台项目的个人分享,以下是他给大家分享的内容。
项目分享
在过去的几个月里,我一直在做一个有趣的项目,我想和大家分享。我一直在设计一套工具,希望帮助社区成员在动力设备选择方面做出更明智的决定,并能协助获得推力曲线以助于直升机的调试。
这些工具的核心是一个基于ArduPilot的推力台。
推力台具有以下特点
1、记录:油门、推力、扭矩、电压、电流、电机换向(RPM)、时间戳。
2、ESC记录:如果使用BL Heli ESC,则它还会记录ESC电流、ESC转速、ESC温度以及ESC电压。
3、油门坡道模式:逐渐提高油门到最大值(设置为参数),在10个增量时暂停,以捕捉稳态响应。
4、油门瞬态模式:调整油门到悬停油门,然后继续运行一系列悬停油门附近的阶跃输入信号,以捕捉瞬态行为。(这点仍待改进)。
5、过流保护:设置最大电流参数值。当超过该值时,油门归零,系统停止,以防止损坏ESC和测试电机,并且会以屏幕和灯光来提醒用户。
6、显示:用于油门杆的可操控LED。OLED显示用于油门、推力、扭矩、和电压的屏幕反馈。
7、安全性:建立在ArduPilot的已经证明的电机安全方式。“车辆”的启动和解除,只是在指令停止并切断电机时使用。悬挂式的“失能开关”,主要是用于操控电机。
8、遥测:WiFi热点使得使用GCS进行实时远程遥测和控制变得容易。加上使用MAVFTP使数据检索变得非常容易。
这个项目是完全开源的。所有的代码、CAD和组件的详细信息都将被共享。只要耐心等待我整理所有的这些信息,并使其可行即可。一切都将沿着这个思路完成。
项目目标
清晰的项目目标是帮助大家更好的理解项目决策的最好方法。
1、开发一套对ArduPilot社区(也许更为广泛)有用的工具。
2、使项目变得实际可行。更具体地说,是能够以合理的价格构建硬件。社区中有很多从事3D打印的人,因此会非常依赖这样的生产方式。
3、使用AP的脚本作为例子来构建一个大型的脚本项目,这有些超出了目前提供的示例,但是我们希望更多人尝试使用脚本以及脚本所提供的友好的开发环境。
项目日志
我计划遵循以下顺序,在此处更新项目进展。
1、项目简介:本文。
2、硬件:所用部件的概述以及原因。
3、生产:设计部分如何实现生产。
4、数据处理器:介绍如何访问、使用和贡献,我一直在做的后处理工具。
适配性
我对这个项目非常满意的一点是它有很大的灵活性。
例如,并不是每个人都需要或想要扭矩数据,所以他们可以轻松地得到一个低成本的推力台,并将测压元件插入到这个系统中,以获得更多的数据和更好的自动化。这样一来,只需进行一些3D打印和焊接,您就可以更轻松地访问项目。
项目背景
谈到Mayatech推力台,这实际上就是该项目开始的契机。我得到了其中一个架子,剥离了LCD屏幕和按钮,然后开始组装,我先安装了赫星的黑色飞控:
渐渐地,我增加了更多的功能,增加了LED条、电压电流监测、OLED显示屏和电整流的RPM:
在这之后,我开始了捕捉扭矩的工作。这需要设计一个新的支架。我尝试了几种不同的布局,使用测压元件来获得推力和扭矩。
然而,在测试过程中,我经常遇到产生的数据不够清晰的问题。它可能会由于电机/桨叶上的不平衡而产生振动的噪声,或者会在两个测压元件中发生交叉耦合。
现在,我可以花更多的时间来解耦脚本或后处理器中的测压元件,因为这些推力台正起到这样的作用。但是,我决定通过使用轴承和衬套来进行机械地解耦推力和扭矩传感器。对于结果我非常满意。这是我最终设计的推力台:
采用电机与杆相连的设计。杆可以自由移动并绕其轴旋转。扭矩测力传感器通过杆夹紧并栓紧固定。下轴承提供单点接触,以便将纯弯矩施加到传感器上。在后面的黑色长截面内,两个推力轴承和一个衬套用于允许旋转,但将推力负载转移到后面的测压元件。
尽管我已经做了很多减少摩擦的工作,但毫无疑问,系统中会有一些滞后现象。我反对总是通过逐渐增加和减少到a)来了解磁滞的严重程度,以及b)能够在后期处理中消除其影响。下面的两幅图显示了我在油门斜坡测试中获得的推力和扭矩的输出示例:
这个数据集有上升和下降的趋势,所以我想你们会认同滞后是极小的。至于可重复性,我已经在这个平台上进行了无数次测试,并且总是发现重复运行之间的有良好的一致性。唯一的区别就是在后续运行中电压略低的影响。
最后,我加入了一个新的油门模式来捕捉桨叶/电机组合的瞬态行为。在这种模式下,油门缓慢倾斜到MOT_THST_HOVER参数给出的油门设置。然后在油门逐渐降到零之前,输入一系列悬停油门附近的阶跃输入。以下是我在这个油门模式下得到的一些示例输出:
这种模式在可用性方面仍然需要一些改进,因为它目前依赖于用户在脚本中更改油门步骤的输入。
输出数据和后期处理
这个脚本捕获的数据被转存到一个*.csv文件中,因此用于处理数据的输入栏是非常容易访问的。例如,很容易使用现有的Google 表格拟合工具进行输出。
目前我没办法对后置处理器进行过多的解释,因为这是一个非常机动性的目标,仍需大量的工作去实现。它目前的功能是:
1、导入目录中的所有*. csv文件,以便比较。
2、自动运行监测,将多个油门斜坡从一个文件分割成多个实例,以便于比较。
3、绘制任何已记录变量与其他变量之间的关系。
4、多个筛选器用于清理数据。
5、一种粗略的同轴分组方法,允许将不同数据实例添加到一个净结果中。就如同测试时的同轴一样。
6、MOT_THST_EXPO拟合工具。
这个工具是用Python编写的,GUI是在TKinter完成的。这是它目前的状态:
关于推力台的代码
推力台的代码是用Lua编写的。目前为止,代码可以在WIP PR:#16813中获取。
#16813:AP_Scripting: Add thrust stand by Gone4Dirt · Pull Request #16813 · ArduPilot/ardupilot · GitHub
代码的顶部是C库从SparkFun到Lua的一个端口,以便能够利用I2C总线上的NAU7802放大器。因此,此脚本使用@IamPete1的I2C脚本PR。
#14276:https://github.com/ArduPilot/ardupilot/pull/14276
脚本的下半部分是实际的推力台代码。
此脚本在AP master上工作之前,确实依赖于一些其他的PR来编写绑定脚本:
最后,这个PR现在被标记为WIP,因为我仍然在寻找一个bug,但我不认为这实际上是lua脚本的错误。基本上,我用的是Matek F765。放大器有相同的地址,因此在两个独立的I2C总线上。
由于某些原因,推力测压元件的放大器“丢失”了数据,而LUA得到了空值。我有在相同总线上的OLED屏幕,但我已经将其删除了。但是这个问题仍然发生。我也排除了电磁干扰,因为推力和扭矩I2C总线都是相邻运行的,故障总是发生在推力而不是扭矩上。加上两条线都是通过接地的金属编织线。
此外,我已经交换了推力和扭矩放大器,以排除故障放大器。这是一个间歇性问题,因此不会总是引起问题。降低采样率可以减少问题发生的可能性,但我很肯定这只是因为它减少了在总线上的通行量。我认为这可能是一个竞争条件或DMA缓冲区问题,但这并不是我的专业领域。
所以,如果有人对如何调试这个有任何想法或者建议的话,我很乐意倾听。
使用推力台:这是我使用推力台安装5英同轴电缆的视频链接。
过流保护演示:过流保护功能视频演示链接。该参数被设置得很低,以触发对演示的保护。