归档:构建高通骁龙飞行套件

警告

存档文章

ArduPilot 不再支持高通 Snapdragon Flight Kit。

本文介绍了如何为以下设备构建 ArduPilot Qualcomm® Snapdragon Flight™ 套件(开发人员版)制作 在 Linux 上。

警告

由于 Intrinsyc 的一些不寻常的许可条款,我们无法分发 ArduPilot 的二进制文件(或使用高通公司库构建的任何程序)。因此,您必须自行构建固件。

概述

ArduPilot 有两个端口连接到该电路板:

  • QFLIGHT 主要在 ARM 内核上运行,DSP 上只有传感器和 UART。这种端口更易于调试,而且可以使用所有普通的 Linux 开发工具。

  • HAL_QURT QFLIGHT 移植主要在 DSP 上运行,ARM 内核上仅有一小块垫片。由于实时调度极为精确,因此该端口的性能更好,而且更稳健,因为它可以在 Linux 因故崩溃时继续飞行(QFLIGHT 端口依赖 Linux 和 QURT 的工作来继续飞行)。不过,它更难调试!

两个 ArduPilot 端口的构建说明几乎完全相同(此处均有介绍)。

提示

我们建议开发人员使用 QFLIGHT port 进行开发和调试,但在生产中使用时应重新编译并以 QURT 为目标。

本文中的说明演示了 Copter(来自 ArduCopter 目录)的构建。Plane 和 Rover 的构建方法相同,都是从各自的载具源代码目录中构建。

准备电路板

在 Windows 上使用 QFIL 刷新操作系统

从 Intrinsyc 购买的电路板会预装操作系统(如 Ubuntu),但如果您收到的电路板来源不同,则可能不会预装操作系统。请使用下面的说明从 Windows PC 将操作系统闪存到电路板上。

  1. 下载并安装 QFIL (这里 - 搜索下面写有 "QPST 2.7.422 "的绿色下载按钮)。

  2. 首先使用电源砖为电路板供电,然后用 USB 电缆连接电脑(注意电路板有一个 USB3.0 端口,但普通的微型 USB 电缆也可以使用),将电路板置入启动加载器模式。

  3. 启动 QFIL,电路板连接的 COM 端口应自动显示在屏幕左侧。 选择端口 按钮。通常它的名称是 "QDLoader 9008"。

  4. 在 "选择编程器 "下点击 浏览 按钮,找到 prog_emmc_firehose_8974.mbn(待办事项:这是哪个软件包中的内容?)

  5. 在 "下载 "下,应该能自动找到 rawprogram_unsprse.xml(?)

  6. 点击 下载 按钮,如果一切顺利,操作系统就会闪存到电路板上。

../_images/Load_prog_emmc_firehose1.png

使用 FTDI 电缆连接电路板

电路板应附带一条 FTDI 电缆和一块绿色的小型串行适配器板,将其插入电路板顶部 USB 端口旁边的黑色矩形连接器。使用 ssh 程序(如 Putty)以 115200 波特连接到 FTDI 电缆的串行端口(这种方式登录电路板无需密码)。

更改根密码并启用以根身份登录

按照上述说明使用 FTDI 电缆连接,并输入以下内容更改根密码 密码 在命令行上输入两次所需的密码(即 "penguin")。

编辑 /etc/ssh/sshd_config,修改第 28 行如下,启用以根用户身份登录:

允许根登录

连接到电路板的 WIFI 接入点

电路板的 WIFI 接入点将显示为 ssid "Atlanticus_XXXXX"(其中 X 为 5 位数字)和密码 "password"。

分配给计算机的 IP 地址(默认范围为 192.168.1.10 ~ 192.168.1.20)可通过修改以下文件进行更改。这可能是必要的,以避免与家庭/企业 wifi 网络冲突。

/etc/dnsmasq.conf 第 304 和 305 行,如下所示。

interface=wlan0

dhcp-range=192.168.**2**.10,192.168.**2**.20,infinite

/etc/network/interfaces.d/.qca6234.cfg.softap 第 39 行,如下所示。

`` 地址 192.168.2.1``

您可以使用 Putty 等终端程序,以 linaro/linaro 或 root/penguin 的用户名/密码,通过上面显示的 IP 地址(即 192.168.2.1)SSH 登录电路板。

正确设置主目录权限

默认情况下,/home/linaro 目录权限不正确。

苏都 编译 -R linaro.linaro /home/linaro

创建日志目录

在飞行板上,在 DSP 可以写入的位置创建日志目录:

mkdir /usr/share/data/adsp/logs

检查并升级电路板上的 Ubuntu 内核版本

使用 FTDI 电缆或通过 sifi ssh 连接到电路板,输入 "uname -a"。输出结果应如下所示(或稍后日期),如果没有,则应更新。

Linux操作系统 linaro-developer 3.4.0-eagle8074 #1 SMP 预审 星期三 12 月 9 17:42:13 PST 2015 armv7l armv7l armv7l GNU/Linux

要升级到 Ubuntu 的后续版本,请先 从 Intrinsic 网站下载并解压缩最新的 "Flight_BSP_X.X "文件(注:截至 2016 年 1 月,这些文件至少已暂时消失)。

使用 fastboot-all 脚本进行升级:

在 Ubuntu 机器上找到上述下载的 Binaries/fastboot-all.bat 脚本。

编辑脚本并删除重启行(第 16 行),如下所示(如果升级失败,重启可能会导致电路板变砖)。

快速启动 重新启动

运行脚本:

苏都 ./Binaries/fastboot-all.bat

升级后,电路板将被完全清除,这意味着之前的任何设置(如 root 密码、wifi IP 地址)都需要重新设置。

注:2016 年 1 月 25 日,在执行此升级并撰写本维基页面后,我们发现 /firmware/image 已过期。我们应添加说明,说明哪些文件需要更新,以及在哪里可以找到新文件。

通过手动复制图像进行升级

  • 解压上述压缩包,在 "二进制文件 "目录中找到以下文件

    • boot.img, cache.img, persist.img, system.img

  • 在 Ubuntu 机器上,解压 4 个镜像文件中的 3 个:

    • simg2img cache.img cache.ext4

    • simg2img persist.img persist.ext4

    • simg2img system.img system.ext4

  • 将这四个文件传输到飞行板上新的 /images 目录中(通过 WIFI 传输或放入 SD 卡)。

    • boot.img、cache.ext4、persistence.ext4、system.ext4

  • 输入 "mount"(挂载),检查是否有分区在使用中

    • 通常只使用 "persist",因此使用 "umount /mnt/persist/"命令将其卸载

  • 挂载图像:

    • dd if=boot.img of=/dev/disk/by-partlabel/boot bs=1M

      dd if=cache.ext4 of=/dev/disk/by-partlabel/cache bs=1M

      dd if=persist.ext4 of=/dev/disk/by-partlabel/persist bs=1M

      dd if=system.ext4 of=/dev/disk/by-partlabel/boot bs=1M

安装 baro 和 mpu9250 驱动程序

将这两个文件复制到飞行板的 /usr/share/data/adsp:

libbmp280.so, libmpu9x50.so

编辑危险的 Q6 服务启动脚本

在飞行板上编辑 /etc/init/q6.conf脚本,注释掉下面一行,如果保留该行,会导致飞行板在启动过程中因 "q6 "无法启动而永远停滞不前

#观看 -n 1 --精确 -g grep -m 1 "2"; /sys/kernel/debug/msm_subsys/adsp &&;

将电路板调至 "存储模式"

在升级过程中,如果跳过上述步骤,可能会导致电路板无法完全启动。您将无法使用 FTDI 或 wifi 登录。如果出现这种情况,你可以利用启动序列中的竞争条件,让电路板进入 "存储模式",从而访问电路板上的磁盘。

  • 首先确保电源线和 USB 电缆都已断开

  • 插上电源

  • 快速插入 USB

  • 断开电源砖,希望 LED 灯会变红

  • 插上电源

如果一切顺利,通过 USB 连接的 Windows 或 Ubuntu 机器上将出现 10 或 20 个磁盘设备。可以对磁盘上的文件进行编辑,包括编辑启动脚本,以解决启动问题。

建设的先决条件

这些说明仅适用于 64 位 Linux 机器(包括 Ubuntu)。

获取源代码

首先克隆源:

git 复制 --递归-子模块 https://github./ArduPilot/ardupilot.git
CD ardupilot

获取其他工具/库

要为任一端口构建 ArduPilot,您还需要 Intrinsyc 提供的 3 个库软件包(购买电路板时会提供下载链接):

  • HEXAGON_Tools 软件包,使用 7.2.11 版进行了测试

  • Hexagon_SDK 数据包,2.0 版

  • HexagonFCAddon 软件包,使用 Flight_BSP_1.1_ES3_003.2 测试

这些软件包都应解压到一个 $HOME/Qualcomm 目录。

为 QURT 建设

要建造 Copter,你必须这样做:

CD ArduCopter
生产 qurt -j4

加入电路板的 WiFi 网络并输入以下命令(其中 我的官方 是控制板的主机名或 IP 地址):

生产 qurt_send 飞行板=我的官方

这将安装两个文件:

/根基/ArduCopter.小精灵
/我们/份额/数据/adsp/libardupilot_skel.那么

要启动 ArduPilot,只需运行 .elf 文件。

/根基/ArduCopter.小精灵

备注

对于 QURT 端口,不能使用参数来指定每个 UART 的用途。

默认情况下,ArduPilot 将通过 UDP 14550 向本地 WiFi 网络发送遥测数据。只需打开您最喜欢的兼容 MAVLink 的 GCS 并使用 UDP 连接即可。

为 QFLIGHT 建造

要为 QFLIGHT 建造 Copter,请执行以下操作:

CD ArduCopter
生产 qflight -j4

加入电路板的 WiFi 网络并输入以下命令(其中 我的官方 是控制板的主机名或 IP 地址):

生产 qflight_send 飞行板=我的官方

这将安装两个文件:

/根基/ArduCopter.小精灵
/我们/份额/数据/adsp/libqflight_skel.那么

要启动 ArduPilot,只需运行 .elf 文件。您可以使用命令行选项控制 UART 输出。典型的启动命令如下

/根基/ArduCopter.小精灵 -A udp:192.168.1.255:14550:bcast -e /设计/tty-3 -B qflight:/设计/tty-2 --dsm /设计/tty-4

这将启动 ArduPilot,通过 UDP 在 14550 端口进行遥测,通过 tty-2 在 DSP 上进行 GPS,通过 tty-4 进行 Skektrum 卫星遥控输入,通过 tty-3 进行 ESC 输出。

默认情况下,ArduPilot 将通过 UDP 14550 向本地 WiFi 网络发送遥测数据。只需打开您最喜欢的兼容 MAVLink 的 GCS 并使用 UDP 连接即可。

启动 ArduPilot

您还可以将启动命令添加到 /etc/rc.local.例如,在 QURT 版本中,您可以添加以下一行:

/根基/ArduCopter.小精灵 及样品;