5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年)

标题: 分享个BETAFPVF405AIOv4的Ardupilot固件 [打印本页]

作者: hulandy    时间: 2022-10-1 19:54
标题: 分享个BETAFPVF405AIOv4的Ardupilot固件
本帖最后由 hulandy 于 2022-10-4 16:14 编辑


(, 下载次数: 30)
一直飞穿越机,最近对类DJI的机器挺感兴趣。先组了个7寸的,用的Ardupilot固件,感觉效果不错。
后来见大疆阿凡达上市,就想弄个小机玩。
手头上只有两块飞控,一个是F7,和AP固件无缘了(内存不足1M),然后就剩下这块BetaFPV的F405飞控。当时买它就是想试试小机用BLHELI32的表现,由于芯片短缺,板载电调用的是国产MCU,用起来也挺稳定。说到这个飞控的缺点--接口略少对于AP固件来说。
对Ardupilot的理解也是菜鸟级别,不懂ChibiOS,直接参照其它飞控的配置文件编了最新的Copter4.2.3,初步试飞不错。没接GPS,室内光流定点也还好。
本固件已经开启对双向Dshot的支持从而支持rpm滤波。我的配置:TX1RX1关闭DMA(Serial1配置里的option选择TXRX NODMA),连接GL9306光流传感器;TX3RX3已默认更改为I2C接口(只有这个端口可用于I2C,也去掉了配置成普通端口的选择),我连上了MS5611气压计和5883罗盘以及一个GY-US42声纳(BMP280和其它主流的都支持,在参数树里指定外置型号)。顺便说下只有光流而没有rangefinder (声纳或者激光测距等等)也是可以开光流定点的,只是没有rangefinder辅助的更稳定。TX4RX4(Serial2)用于连接GPS,不过我拍了一个需要十一后才发货,没测试但应该问题不大。TX6(Serial3)就没什么用了,也是关闭DMA,可用于SmartAudio。
LED针脚默认是RCin用来当Sbus或其它单线接收机接口。
对于Ardupilot的其它配置方法就不赘述了。如有问题和给予帮助建议可以跟帖。

初步测试挺好。我的其它硬件:BETAFPV Knight35机架,T-motor 1404电机,4S 650mah电池。Frsky AcherRS接收机。
固件下载中V4为MPU6000版本(已测试),V5为BMI270版本。 10月4日修复了一个BUG。

通过百度网盘分享的文件:FPV
链接:https://pan.baidu.com/s/1dmcNwx1LyO42Q1q7kYEQQw?pwd=d162
提取码:d162
复制这段内容打开「百度网盘APP 即可获取」


(, 下载次数: 39) (, 下载次数: 31)
(, 下载次数: 36)




作者: 红三军团    时间: 2022-10-2 09:12
谢谢分享

作者: hulandy    时间: 2022-10-6 10:04
感觉没什么人气~吹一下Ardupilot 固件:
我感觉Ardupilot 和Dji的对比就像Betaflight和Kiss。
如果你想组装一架像Dji那样的多轴,Ardupilot 不会让你失望的。当然它也需要一点点的学习,参数配置好后飞行性能不输Dji。
高级功能也应有尽有,发电机,机场等。这也是大厂都不再出飞控的一个原因吧~当然在像F405这种级别的飞控上,很多高级功能都屏蔽了以节约内存,也可以单独打开一项你最需要的。

不过和Dji系统类似,这个飞控系统对大推重比的配置较难调校,主要是油门曲线的问题。记得是建议1:3以下的推重比。当然更高推重比的飞行器如穿越机也没必要用这个固件。

作者: folooy    时间: 2022-10-10 23:58
hulandy 发表于 2022-10-6 10:04
感觉没什么人气~吹一下Ardupilot 固件:
我感觉Ardupilot 和Dji的对比就像Betaflight和Kiss。
如果你想组 ...



作者: hulandy    时间: 2023-1-20 08:08
准备写一篇相对详细的折腾记录。所有的内容只参考了官方的文档,因为官方文档已经非常详尽了。官方文档中也有连接到CNUAV的网址(中文说明),但是对比英文原版,简化了一些内容。如果想更好的了解这个固件,还是原版比较全面。写这个原因一是可以帮助一些不想花费较大时间成本去研究原版的人,二是日后方便自己查阅~毕竟好记性不如烂键盘。
Ardupilot固件(以下简称AP)有个孪生的项目PX4,适合学术研究,飞行也是没有问题的。但AP固件还是比较适合直接拿来DIY用,支持旋翼机、固定翼(包括最新的垂起机型),车船等等,最为主要的是它也可以很方便地移植到大家已经拥有的穿越机飞控上(主要有F405、H743等)这些芯片在穿越机中很常见。如果你的飞控型号刚好在官方固件列表里(firmware.ardupilot.org)那就更方便了。其次是官方固件列表里相同目标的克隆飞控,有时候会有一些删减和小差异,但总体上也非常容易修改。第三种就是不在官方固件列表里的那些F405和H743等等飞控。需要参考官方的移植方法编译,基本上参考一些同芯片飞控,并在Betaflight的unified-target里对照资源也算容易。如果你的飞控不被Betaflight支持,那就需要更多的工作(F7飞控没有办法,因为它内存不满足最低要求,AP固件总归是比穿越机固件复杂)。AP固件依赖气压计和罗盘。如果你的飞控并没有集成,可以考虑使用I2C外接气压和罗盘,BMP280,MS5611都是可以的,罗盘可以选5883。如果默认没有I2C接口也没关系,例如F405飞控的USART3通常可以用来配置为I2C接口,具体可以参考STM32针脚功能列表。


AP固件能给我们的是接近DJI飞行器的飞行手感,包括定点悬停和返航,也可以增加各种传感器,固件支持的传感器类型也算比较多。它在自主导航方面的可靠程度还是高出inav固件不少的。对于飞行性能,目前我也是初级阶段,还没有研究能否实现尽可能在某一方面接近穿越机的响应速度。我感觉想让它和BF一样是不现实的。
另外本固件也推荐小推重比的搭配,比如1:3。这样你就可以参考DJI的某些配置,并使用小C大容量电池组装出一台接近DJI续航时间的机器来。至于它能干嘛,我目前想到的是你可以测试图传和接收机等设备的实际表现。


获取飞控固件的方式有,直接从上面的固件网址找到你飞控的固件,其中APJ格式用于已经是AP固件的飞控,直接使用地面站更新; 如果你第一次从BF改到AP固件,需要用ARDUPILOT_BL.hex固件。使用较低版本的INAV地面站,进入DFU模式刷机,就像刷INAV和BF一样简单,这是我推荐的刷写方法,简单可靠。下载固件时有普通固件和支持电调双向传输的固件,结尾为bdshot,之所以分开来且没有默认支持,是有些飞控bdshot可能会有问题。也因为即便不用bdshot(主要是开启rpm滤波)就已经能稳定地飞行了。因为飞控有成熟的卡尔曼滤波算法。bdshot配置好可以锦上添花,配置不好会适得其反。

如果你的飞控是某个飞控的克隆,对于F405一般可以直接刷,而有些高级飞控比如H743,可能有小配置不同,这时可以考虑自己修改编译固件(一般是屏蔽冗余传感器等操作),编译参考我前面的文章。当然略微麻烦了一些,但一旦掌握,过程也非常简单。大至步骤:在win10或win11中安装linux子系统,根据文档安装开发支持包,然后就是git clone AP固件的官方源。更新submodule,开始找到你要修改的飞控配置文件,修改完输入几个命令就可以了。对于这里的痛点可能有github时常不稳。建议主机开clash,然后linux用命令cat /etc/resolv.conf查看IP地址,然后export ALL_PROXY="http://yours:7890" 就可以愉快地使用git了。     对于官方列表没有的F405和H743可以对照其它飞控的配置文件修改,资源从BF的unified-target文档里找。
配置好文件先编译bootloader,把bootloader放到tools里可以方便以后自己更新编译固件。

有了固件还是和前面说到的一样用INAV地面站刷写,建议inav4xx版本。

刷好固件,就来到了飞控的配置。安全第一的原则,在准备起飞前永远不要上桨。且做好随时拔电的准备。


地面站建议使用MISSION PLANNER。 安装完毕打开,右上角选择对应的端口号,点击连接。这时会有mavlink进度条的小窗口。连接完毕,左上有六个选项卡,分别是飞行数据、
飞行计划、初始设置、配置/调式、模拟、帮助。 我们要配置飞控,主要在初始设置和配置/调试 这两个大项中进行。如果你足够pro,可以用配置/调试中的 全部参数树配置所有参数。

在配置参数前,我们最好打开飞控的官方文档信息页,这里包括你的飞控的大多数资料,如支持的特性,端口的配置等等。如果不看这个页面将会有一些麻烦,因为它的串口顺序并不总是和你之前的BF固件一样。有时候电压电流监测数值也需要对照修改,自己摸索是非常不现实的。自己编译的固件就按硬件信息里的顺序来。飞控信息的定位:打开官网ardupilot.org,最上方的导航栏中Documentation》左侧栏Copter》AutoPilot Hardware Options》Closed hardware - 这里就是支持的飞控列表了。


飞控的快速设置:

为了方便我们操作电调,配置/调试》全部参数树》SERVO-SERVO_BLH_AUTO值设为1,右侧点击“写入参数”,这样才打开BLHELI电调的飞控PASSTHROUGH。

1,设置飞行器的样式,可以在初始设置》必要硬件》机架类型下按要求选择。以常见的穿越机为例,第一行选四旋翼,第二行点击X型。第二种设置方法:配置/调试》全部参数树》FRAME》FRAME_CLASS值和FRAME_TYPE值都改成1。右侧点击“写入参数”。

2,加速度计校准,有三个按钮,第一个按钮为六面校准,点击按钮,根据按钮提示进行飞控六个面的校准,完毕后再用下面按钮校准水平,最后一个按钮似乎是多余的。这时可以切换到飞行数据选项卡,查看飞控各个方向是否正确:机头向下,仪表也指向地面,机头向上,仪表指向天空。向左倾斜飞控,左侧的地面升起,向右倾斜飞控,右侧的地面升起。

3, 指南针。 玩AP固件最主要的就是定点悬停,而指南针又是AP固件导航的关键,AP固件可以同时支持多个指南针同时工作,你甚至可以把多个指南针都接在I2C端口。一般情况下我们的指南针电源都是接在板载BEC上的,只有上电才能识别。所以上电,点击Start,开始在3个轴向上翻滚校正指南针。进度条结束后提示success,点击reboot,指南针校准结束,方向也会自动识别。无论是校准,还是以后飞行,都要远离金属物,磁场强度高也会影响,如果前面校准失败需要远离金属物再试直到提示成功。

4, 遥控器。 在配置/调试选项卡,全部参数树-SERIAL,找到你连接接收机的SERIAL,例如SERIAL2,修改SERIAL2_PROTOCOL数值为23,右侧写入参数,断开飞控,重新上电,在初始设置选项卡,必要硬件,遥控器校准,拨动遥控器的摇杆已经应该有反应了。点击校准遥控按钮,按提示校准行程和中点,对照图表确认就可以下一步了。需要注意的是俯仰控制,和其它通道相反,向上打杆俯仰的条应该向下增加才对。其它通道通常没有问题。(AP固件支持将一些针脚配置成rcin接口,可以无需经过serial设置直接连接sbus等单线接收机,比如我把Betafpv的F405飞控上的LED配置成rcin,上sbus接收机就会自动识别。对于某些带rcin飞控的bdshot固件,有些会屏蔽此接口来释放资源给双向电调传输用,这也许是bdshot固件总是作为可选固件的另一个原因)此时也可以继续配置GPS的端口,找到对应的SERIAL,比如SERIAL1,PROTOCOL修改为5,这里注意,如果这个SERIAL是USART,端口波特率一般不需要特别指定,因为默认是自动配置和匹配,而如果这个SERIAL是UART,需要手动填对波特率(如有误请指正)。I2C接口上的设备不需要进行手动设置。

5,Servo Output,这一项可以用来修改电机的顺序,暂时跳过。

6,ESC Calibration 我们假设飞行器已经是全部组装好的状态。根据介绍文字,点击开始按钮,断开飞控连接,然后给飞控电调上电。等待电调提示音出现,如果时间长也没有声音可以拔掉电池重新插一次,这时电调应该正常识别了。下面的数字保持默认就好。除非你有自己的要求。

7,这时点击可选硬件,电机测试,上电点击按钮测试电机序号。AP固件的序号从右上电机开始顺时针为ABCD。如果不对,回到Servo Output,修改电机的顺序,直到在测试电机中尝试正确。如果电机转向不对,需要用电调配置程序修改转向。

![1][1]  ![2][2]

8,飞行模式,可以根据需要自己选择。如果要修改默认的模式通道,可以在配置/调试,全部参数树,修改 FLTMODE_CH 的参数为你想要的对应通道。默认的模式通道是第5通道,这对于ELRS接收机来说是必须要改的。

9,故障保护,右侧的”电台“框内,Enabled always RTL下方默认油门值减去10. ”电池“保护按自己需要填写。

10, 这时必要硬件下会多出之前没有的Initial Paramater,切换到这里,把4个数值改成你自己的,分别是桨的尺寸,电池节数,单节电池满电电压,单节电池空电电压。然后点下面的 计算初始参数数据按钮,可以去掉FENCE的勾,即电子围栏,如果没有请忽略。然后保存。

11,如果你没有去掉FENCE,来到配置/调试,地理围栏,去掉启用的勾。

12,配置/调试,基本调参,这里是推荐数值,对于穿越机通常是过大的。我们可以降到0.05左右。

13,扩展调参,这里先熟悉下各个选项。中下方有其它通道的功能设置,按需要设置。

14,标准参数,前面两项可以改变飞机的姿态控制速度,下面两项可以微调机架相对于飞控的角度。这里我们都先不动,去掉解锁检查的ALL的勾,在你需要解锁检查的选项前打勾。修改完可以点最上方的写入参数。

这时我们可以进行初步的试飞了。安装螺旋桨,做足准备,人离得足够远和安全。以左手油门遥控器为例,最低油门然后向右侧打偏航,飞行器就会解锁,推油起飞。如果飞机抖动,可降落调整基本调参,继续减小数值直到不抖动为止。


  [1]: https://ardupilot.org/copter/_images/motororder-quad-x-2d.png
  [2]: https://ardupilot.org/copter/_images/APM_2_5_MOTORS_QUAD_enc.jpg

作者: hulandy    时间: 2023-1-20 08:09
AP飞控的操作逻辑和DJI一样,解锁,推油超过中间位置,飞机就会上升,油门置中,则在该高度悬停, 油门低于中点降落。所以如果油门摇杆能自动回中也不错。

AP固件对油门的控制比较依赖线性的油门,有三个因素影响油门的线性:电池的压降,电调正确的PWM数值范围,线性的拉力(桨、电机、电调的组合)。
首先确认电池参数的正确(下面的参数都指全部参数树里的参数):

    MOT_BAT_VOLT_MAX: 4.2v x 电池节数

    MOT_BAT_VOLT_MIN: 3.3v x 电池节数

然后是拉力曲线,专业的做法是测试使用的电机、电调、螺旋桨组合的拉力表。我们是模型级别的飞行器用一个估算的值尝试即可。修改 MOT_THST_EXPO值, 0.55 适合 5-7 寸桨, 0.65 适合 10 寸左右, 0.75 适合 20 寸。

电调输出设置:

    MOT_PWM_MAX: 查阅电调说明书或填2000us

    MOT_PWM_MIN: 查阅电调说明书或填1000us

    MOT_SPIN_ARM: 使用前面提到的电机测试决定解锁时电机的转速值或默认

    MOT_SPIN_MAX: 0.95

    MOT_SPIN_MIN: 使用前面提到的电机测试查看电机能稳定旋转的最低值 或默认

    MOT_THST_HOVER: 0.25  悬停油门,低了更安全。(MOT_HOVER_LEARN参数:0禁用,1学习,2学习并保存,使用2测试后,可以将此值改成0,并使用固定的MOT_THST_HOVER值)
       
扩展调参页面:

    INS_ACCEL_FILTER: 10Hz

    INS_GYRO_FILTER: 80Hz 适合 5 寸桨, 40Hz 适合 10 寸桨, 20Hz 适合20寸或更大。一般这个值低会有更多的滤波以减少抖动的产生。穿越机可尝试50-60

    ATC_ACCEL_P_MAX: 110000 适合 10 寸桨, 50000 适合 20 寸桨, 20000 适合 30寸桨. 穿越机可以尝试使用更大的值比如200000,轴距越小值越大。

    ATC_ACCEL_R_MAX: 110000 适合 10 寸桨, 50000 适合 20 寸桨, 20000 适合 30 寸桨。 穿越机可以尝试使用更大的值比如200000,轴距越小值越大。

    ATC_ACCEL_Y_MAX: 27000 适合 10 寸桨, 18000 适合 20 寸桨, 9000适合 30 寸桨

Copter-4.1 (以上):

    ATC_RAT_PIT_FLTD: INS_GYRO_FILTER / 2

    ATC_RAT_PIT_FLTT: INS_GYRO_FILTER / 2

    ATC_RAT_RLL_FLTD: INS_GYRO_FILTER / 2

    ATC_RAT_RLL_FLTT: INS_GYRO_FILTER / 2

    ATC_RAT_YAW_FLTE: 2

    ATC_RAT_YAW_FLTT: INS_GYRO_FILTER / 2

PID数值最好可以用无线数传连接,把PID三个值都推到尽可能大。

黑匣子的使用:
用以下参数启用黑匣子分析震动信息:
LOG_BACKEND_TYPE: 黑匣子存储位置。数值 “0” 禁用记录, “1” 记录到SD卡, “2” 通过mavlink数传输出,数值 “4” 记录到板载flash如果配备.可直接勾选。
LOG_BITMASK: 都记录什么信息.一般使用默认参数,  “0” 停止记录.可直接勾选。
LOG_DISARMED: 设置为1开启飞控通电就记录即便没有解锁,多用来记录和调试传感器。

INS_LOG_BAT_MASK 设置为 1 收集第一个陀螺仪的震动数据
INS_LOG_BAT_OPT = 2 记录滤波后的数据。
INS_LOG_BAT_OPT = 1 用于INVENSIVE的高于500hz的陀螺仪数据可能一般用不到动它。

当你记录了一个比较初始的飞行后就能查看震动情况。点击“飞行数据”,下方的选项卡切换到最后面的“数据闪存日志”,点击通过mavlink下载闪存日志,这里有一个列表,下载你要的日志,然后按键盘上的CTRL+F,弹出窗口中点击FFT,再点选下方的按钮就可以显示震动数据。

有了震动数据我们可以配置基于双向电调的动态滤波和修改之前的INS_GYRO_FILETER

基于电调双向传输的动态滤波设置:
首先参数 SERVO_BLH_BDMASK点击数值,勾选前4个通道。写入参数。
设置INS_HNTCH_ENABLE = 1 开启第一个滤波通道然后刷新参数更多参数将会出现。设置 INS_HNTCH_MODE = 3 开启基于电调数传或双向传输的滤波。INS_HNTCH_REF设为1, INS_HNTCH_HMNCS 设为1(保守设置).   INS_HNTCH_OPTS 对于微型机建议设置为6,大机型据说可设置为16以开启三倍滤波.


气压计温度补偿设置,在版本3.6以上中支持该特性。设置 TCAL_ENABLED 参数为 2 (学习并校准),保存后断开飞控使其冷却,然后上电飞控等待大约10分钟,此时不要移动飞控。这时连接并查看 TCAL_BARO_EXP 参数,应该已经被更新为一个非0的新数字。 这时再将 TCAL_ENABLED 改回 1保存。

目前我用到的参数只有这些。其它的诸如飞控板微调,飞行器响应,定点PID等可以根据自己的喜好再调整。硬件的安装,GPS最好位于最高点并且下方做金属贴纸屏蔽。气压计使用海绵缓冲或加一个非全密封的盖子缓冲。其它就和穿越机差不多了,电机和桨的动平衡要好。机架共振小等等。



作者: nightspeed    时间: 2023-4-23 05:32
真好!学习了,期待楼主继续更新。





欢迎光临 5iMX.com 我爱模型 玩家论坛 ——专业遥控模型和无人机玩家论坛(玩模型就上我爱模型,创始于2003年) (http://wz.5imx.com/) Powered by Discuz! X3.3