ArduPilot Kakute F7 AIO DIYF450 without GPS配置

1. 源由

鉴于GPS模块信号质量未达标,定位存问题,因此想尝试使用ArduPilo进行目视裸奔飞行。

因此,对ArduPilot飞控之DIY-F450计划进行适当调整,测试在原有F450果冻机架上能否比较平稳飞行,为后续电脑地面站控制打下基础。

2. 配置

上述配置方法有别于常规ArduPilot(需要GPS,需要Compass)。固件默认:电机PWM驱动,MAX7456驱动(目前且不上图传)。

2.1 Kakute F7 AIO相关配置

官方介绍Holybro Kakute F7 and KAKUTE F7 AIO

2.1.1 串口规划

  • 无人机控制链路:地面站控制和遥控器控制 //本次飞行不需要地面站,存手控+自稳模式

地面站控制:3DR Radio Telemetry V5 433MHz
遥控器控制:CRSF(ELRS)

  • 路径规划:GPS(全球定位)和Compass(指南针) // 本次测试飞行不需要GPS和Compass

SERIAL0 -> USB
SERIAL1 -> UART1 (Telem1)
SERIAL2 -> UART2 (GPS)
SERIAL3 -> UART3 (Reserve)
SERIAL4 -> UART4 (Reserve)
SERIAL5 -> UART7 (Reserve)
SERIAL6 -> UART6 (CRSF)

注:SERIAL0 -> USB就不介绍了,默认的USB串口方式进行飞控于计算机的连接。

2.1.2 电传配置

SERIAL1 -> UART1 (Telem1)

在这里插入图片描述

2.1.3 GPS配置

SERIAL2 -> UART2 (GPS)

5Hz GPS刷新率,NMEA+ublox,57600bps不太够,建议选择115200bps。
在这里插入图片描述自动配置串口
在这里插入图片描述

鉴于本次是without GPS配置方式,因此要特别注意将TYPE自动选择None。在这里插入图片描述

2.1.4 CRSF接收机配置

SERIAL6 -> UART6 (CRSF)

这里波特率并不是太重要,协议一般是会 自协商的,参考:BetaFlight模块设计之二十三:CRSF V3串口速率协商任务分析

在这里插入图片描述
Kakute F7 AIO板子必须配置BRD_ALT_CONFIG=1,当使用UART6作为遥控接收机配置的时候,详见:Holybro Kakute F7 and KAKUTE F7 AIO

在这里插入图片描述
这个主要是信号强度显示的问题,固件默认就是3,不过请确认下。
在这里插入图片描述
请特别注意CRSF协议是否被选中,因为我们使用的ELRS 915MHz接收机。
在这里插入图片描述
如果需要更换飞行模式设置的通道,请配置如下FLT_MODE_CH。
在这里插入图片描述

2.1.5 Compass配置

鉴于Kakute F7 AIO板子内部不集成Compass芯片,外部又没有GPS模块(通常带外部Compass),那么必须将指南针取消掉。
在这里插入图片描述

2.1.6 电机配置

请根据Connect ESCs and MotorsHolybro Kakute F7 and KAKUTE F7 AIO配置电机转向和对应控制pin脚。

M1 -> Servo Output 4
M2 -> Servo Output 1
M3 -> Servo Output 2
M4 -> Servo Output 3

在这里插入图片描述

2.1.7 TX12 遥控器配置

实际测试过程发现,按照指南配置后,飞机能正常起飞,但是前后(Pitch)是反向的。因此,需要调整遥控器这端Channel2的正反向。

在这里插入图片描述

3. 实测效果

这个整体上比Betaflight的自稳模式下容易控制,飞行的更加平稳。貌似后续GPS按上以后巡航可能会更好一点。

ArduPilot-DIYF450-KakuteF7-AIO-stabilize手动控制测试

在这里插入图片描述

4. 参考资料

【1】Holybro Kakute F7 and KAKUTE F7 AIO
【2】Connect ESCs and Motors
【3】ArduPilot飞控之DIY-F450计划
【4】Betaflight BN880 GPS 简单测试
【5】四轴飞控DIY Mark4 - 减震
【6】BetaFlight模块设计之二十三:CRSF V3串口速率协商任务分析

5. 附录-tf卡日志记录配置

检查LOG_BACKEND_TYPE,Kakute F7 AIO使用tf卡记录日志,因此选用1(FILE)。

注:有些劣质tf卡会没有办法记录,有一张8GB的扩容卡,坑了长长的一天时间。建议通过更换确认OK的tf卡测试。实在没有办法,可以设置为0,不做日志记录。

在这里插入图片描述

6. 附录-电流电压计配置

确保以下参数使用Mission Planner配置一遍,确保电流电压计输出值正确。

  • BATT_MONITOR 4
  • BATT_VOLT_PIN 13
  • BATT_CURR_PIN 12
  • BATT_VOLT_MULT 10.1
  • BATT_AMP_PERVLT 17.0

如果配置不正确,会导致Battery pre-check始终过不了。主要是检测pin脚和参数不对的原因。ArduPilot的配置相对来说并不是那么人性化,当然买比较新的,官网维护的硬件会比较容易。DIY还是需要动手和逻辑分析的能力,否则这个坑是很难越过去的。

在这里插入图片描述

注:BATT_VOLT_MULT 可能需要调整,笔者实验发现调整到10.9 电压显示比较正确。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux中关闭AIO(异步输入输出)可以通过以下步骤实现: 1. 首先,确保在程序中调用了`aio_cancel`函数来取消所有未完成的异步操作。这将确保在关闭AIO之前,所有的异步操作都被终止。 2. 然后,使用`aio_error`函数来检查异步操作的错误状态。如果返回值为`EINPROGRESS`,表示异步操作仍在进行中,需要等待操作完成。 3. 使用`aio_return`函数来获取异步操作的返回值。如果返回值大于0,表示操作已完成,并且可以获取到返回的数据。 4. 最后,使用`aio_suspend`函数来等待所有异步操作完成。这将阻塞程序,直到所有异步操作都完成。 5. 在所有异步操作都完成后,可以关闭文件描述符和释放相关的资源。 以下是一个示例代码,展示了如何关闭AIO: ```c #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <aio.h> #include <fcntl.h> int main() { struct aiocb cb = {0}; int fd = open(&quot;test.txt&quot;, O_RDONLY); if (-1 == fd) { printf(&quot;文件打开失败:%m\n&quot;); exit(-1); } printf(&quot;文件打开成功!\n&quot;); // 异步读取文件数据 cb.aio_fildes = fd; cb.aio_nbytes = BUFF_SIZE; cb.aio_offset = 0; int r = aio_read(&cb); if (-1 == r) { printf(&quot;异步读取失败:%m\n&quot;); close(fd); exit(-2); } printf(&quot;异步读取成功!\n&quot;); // 取消未完成的异步操作 aio_cancel(fd, &cb); // 等待所有异步操作完成 aio_suspend(&cb, 1, NULL); // 获取异步操作的返回值 r = aio_return(&cb); if (r > 0) { printf(&quot;拿到了数据: r:%d bytes, data: %s\n&quot;, r, cb.aio_buf); } // 关闭文件描述符和释放内存 close(fd); free(cb.aio_buf); return 0; } ``` 请注意,以上代码仅展示了关闭AIO的基本步骤,并不包含完整的错误处理和资源释放。在实际应用中,需要根据具体情况进行适当的错误处理和资源管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值