骁龙高级版

高通骁龙飞行器 已停用(已被取代,但 PX4 尚不支持更新版本)。本文档是为现有用户提供的,但将在未来版本中删除。

本页收集了一些有用的命令和说明,在使用 Snapdragon 平台时可能会派上用场。

连接至 Snapdragon

通过 FTDI

套件附带的分线板上有三个针脚,用于连接控制台。将捆绑的 FTDI 电缆连接到提供的针座上,然后将分线板连接到扩展连接器上。

在 Linux 上,使用以下命令打开控制台

屏幕 /dev/ttyUSB0 115200

将 USB0 改为任意位置。检查 /dev//dev/serial/by-id.

通过 ADB(安卓调试桥)

通过 USB2.0 连接 Snapdragon 并使用电源模块为其供电。当 Snapdragon 运行时,LED 指示灯将以蓝色缓慢闪烁(呼吸)。

确保可以使用 adb:

adb 设备

如果看不到设备,很可能是 USB 设备权限问题。请按照以下说明操作

要获取外壳,请执行下列操作

adb shell

DSP 调试监控器/控制台

当您通过 USB 与 Snapdragon 板连接时,您可以访问 DSP 上的 PX4 shell (POSIX)。与 DSP 端(QuRT)的交互通过 qshell posix 应用程序及其 QuRT 配套程序。

通过 USB 连接 Snapdragon 后,打开 mini-dm 查看 DSP 的输出:

${HEXAGON_SDK_ROOT}/tools/debug/mini-dm/Linux_Debug/mini-dm

另外,特别是在 Mac 上,您还可以使用 纳米-dm.

在 linaro 端运行主程序:

CD /home/linaro ./px4 -s px4.config

现在,您可以通过 linaro shell 使用 DSP 上加载的所有应用程序,语法如下:

pxh> qshell 指挥部 [参数 ...]

例如,查看可用的 QuRT 应用程序:

pxh> qshell list_tasks

执行命令的输出结果显示在 minidm 上。

串行端口

目前 QURT 并不支持所有 POSIX 调用。因此,需要定制一些 ioctl。

设置和使用 UART 的应用程序接口在 dspal.

Wi-Fi 设置

这些是为高级开发人员编写的说明。

连接到 Linux shell(请参阅 控制台说明).

接入点模式

如果您想让 Snapdragon 成为 Wifi 接入点(AP 模式),请编辑该文件: /etc/hostapd.conf 并设置:

ssid=EnterYourSSID wpa_passphrase=EnterYourPassphrase

密码必须至少包含 8 个字符

然后配置 AP 模式:

/usr/local/qr-linux/wificonfig.sh -s softap reboot

车站模式

如果您希望骁龙连接到现有的无线网络,请编辑该文件: /etc/wpa_supplicant/wpa_supplicant.conf 并添加网络设置:

network={ ssid="我现有的网络 ssid" psk="我现有的密码" }

然后配置站模式:

/usr/local/qr-linux/wificonfig.sh -s station reboot

使用 Snapdragon Flight 上的摄像头

Snapdragon Flight 板有一个向下的灰度摄像头和一个向前的 RGB 摄像头,前者可用于基于光流的位置稳定。摄像头 snap_cam repo 提供了一种方法来运行和串流不同的摄像头,并计算光流。

除了摄像头,光流还需要一个向下的距离传感器。这里将讨论 TeraRanger One 的使用。

光流

光流由应用处理器计算,并通过 MAVLink 发送至 PX4。克隆和编译 snap_cam repo 中的说明。

以根用户身份运行光流应用程序(每秒 90 帧,自动曝光):

./optical_flow -f 90 -a

光流应用程序需要 PX4 发送 IMU MAVLink 信息。您可能需要向 PX4 添加一个额外的 MAVLink 实例,方法是将以下内容添加到您的 mainapp.config:

mavlink start -u 14557 -r 1000000 -t 127.0.0.1 -o 14558 mavlink stream -u 14557 -s HIGHRES_IMU -r 250

TeraRanger One 设置

要将 TeraRanger One (TROne) 与 Snapdragon Flight 连接,必须使用 TROne I2C 适配器。供应商必须为 TROne 更新 I2C 固件。

TROne 通过定制的 DF13 4 对 6 针电缆连接到 Snapdragon Flight。我们建议使用 J15 连接器(USB 旁边),因为所有其他连接器都已在使用(遥控、电调、GPS)。接线如下:

4 针 <->; 6 针
1 1
2 6
3 4
4 5

TROne 必须由 10 - 20V 电压供电。

QGroundControl 中的摄像机流

观看任一摄像机的实时流媒体 qcamvid 可以使用。在 Snapdragon Flight 上运行以下命令,以 720p 分辨率流式传输 hires 摄像机 10 分钟。

qcamvid -c hires -r 720p -s -t 600

使用 qcamvid -h 查看所有选项。

要在 QGroundControl 中观看直播流,必须使用 gstreamer(请参阅 这里).

安装并连接到 Snapdragon Flight'network 后,必须在以下页面进行更改 QGroundControl.

QGC 中的骁龙流媒体设置

访问输入/输出数据

可使用名为 DSPAL 的类似 POSIX 的应用程序接口,通过在 aDSP 上运行的代码访问低级总线数据。
该应用程序接口的头文件保存在 github 并在每个头文件中使用 Doxygen 格式的文档进行注释。下文提供了所支持的 API 的说明以及指向适用头文件的链接。

应用程序接口概述

源代码示例

验证每个 DSPAL 函数的单元测试代码也是如何调用这些函数的良好范例。
该代码也在 github

设置串行数据速率

串行 API 不符合通过 tcsetattr() 功能。IOCTL 代码将被替代使用,并在上面链接的头文件中进行了说明。

计时器

更高级的 aDSP 操作的附加功能可通过前缀"...... "获得。 qurt_.例如,计时器功能可通过 qurt_timer 前缀,并在 qurt_timer.h 头文件。 海克斯康 SDK.

设置功率级别

使用 Hexagon SDK 提供的 HAP 功能,可以设置 aDSP 的功率级别。这通常会减少 I/O 延迟。有关这些 API 的更多信息,请参见 HAP_power.h 头文件。 海克斯康 SDK.

故障排除

adb 不工作

  • 检查 权限
  • 确保使用的是正常工作的微型 USB 电缆。
  • 试试 USB 2.0 端口。
  • 试试电脑的前后端口。

USB 权限

  1. 创建新的权限文件

    sudo -i gedit /etc/udev/rules.d/51-android.rules
    
  2. 粘贴此内容,使大多数已知设备都能进行 ADB 访问:

    SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0e79", MODE="0666", GROUP="plugdev";SUBSYSTEM=="usb", ATTRS{idVendor}=="0502", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0b05", MODE="0666", GROUP=";plugdev" SUBSYSTEM===="usb", ATTRS{idVendor}===="413c", MODE="0666", GROUP="plugdev" SUBSYSTEM===="usb", ATTRS{idVendor}===="0489", MODE="0666";, GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="091e", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="18d1", MODE="0666";, GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0bb4", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", MODE=";0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="24e3", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="2116";, MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0482", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}==";17ef", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="1004", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}==";22b8", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0409", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}=="2080", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0955", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}=="2257", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="10a9", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}=="1d4d", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0471", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb";, ATTRS{idVendor}===="04da", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}===="05c6", MODE="0666", GROUP="plugdev" SUBSYSTEM==";usb", ATTRS{idVendor}=="1f53", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="04e8", MODE="0666", GROUP="plugdev" SUBSYSTEM==";usb", ATTRS{idVendor}=="04dd", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="0fce", MODE="0666", GROUP="plugdev";SUBSYSTEM=="usb", ATTRS{idVendor}=="0930", MODE="0666", GROUP="plugdev" SUBSYSTEM=="usb", ATTRS{idVendor}=="19d2", MODE="0666", GROUP="plugdev";
    
  3. 为文件设置正确的权限:

    sudo chmod a+r /etc/udev/rules.d/51-android.rules
    
  4. 重启守护进程

    sudo udevadm control --reload-rules sudo service udev restart sudo udevadm trigger
    

如果还是不行,请检查 StackOverflow 上的这个答案.

电路板无法启动/启动循环/损坏

如果您仍然可以使用串行控制台连接到电路板,并得到类似这样的提示:

root@linaro-developer:~#

输入以下内容即可进入 fastboot(启动加载程序)模式

重新启动

如果无法使用串行控制台,可以尝试连接 Micro USB 电缆,然后输入:

adb wait-for-device && adb reboot bootloader

然后对电路板进行电源循环。如果幸运的话 adb 设法短暂连接,并将电路板送入 fastboot。

要检查是否处于 fastboot 模式,请使用:

fastboot 设备

成功进入快速启动模式后,您可以尝试 更新安卓/Linux 映像.

如果您碰巧有 P2 板您可以启动骁龙,同时短接写有 J3 的位置旁边的两个引脚(在电路板边缘的角孔和 MicroSD 卡插槽之间的两个矩形引脚),将骁龙重置为恢复映像。

如果一切都失败了,你可能需要向 intrinsyc 求助。

设备无剩余空间

有时 使 Atlflight_eagle_default 上传 上传失败:

未能将 'px4' 复制到 '/home/linaro/px4':设备上没有剩余空间

如果 ramdump 填满磁盘,就会出现这种情况。清理方法如下

rm -rf /var/log/ramdump/*

此外,日志可能已经占满了空间。要删除它们,请执行

rm -rf /root/log/*

未定义 PLT 符号

_FDtest

如果在尝试启动 px4 程序时在 mini-dm 上看到以下输出,则表示需要 更新 ADSP 固件:

[08500/03] 05:10.960 HAP:45:undefined PLT symbol _FDtest (689) /libpx4muorb_skel.so 0303 symbol.c

其他东西

如果您更改了源代码,大概是添加了功能,您会看到 未定义 PLT 符号 ... 则表示链接失败。

  • 函数的声明和定义是否一一对应?
  • 您的代码是否真的被编译了?模块是否在 cmake 配置
  • 添加的)文件是否包含在 CMakeLists.txt?
  • 尝试将其添加到 POSIX 编译中,然后运行编译。POSIX 链接器会在编译/链接时通知您链接错误。

krait 更新参数 XXX 启动失败

ERROR [platforms__posix__px4_layer] krait update param 297 失败 ERROR [platforms__posix__px4_layer] krait update param 646 失败 px4 启动。ERROR [muorb] Initialize 调用 uorb fastrpc initalize 方法错误。ERROR [muorb] ERROR:FastRpcWrapper 未初始化

如果在启动 px4 时遇到类似上述的错误,请尝试

ADSP 重新启动

如果 mini-dm 控制台突然显示大量 INIT 输出,说明 ADSP 端已经崩溃。其原因并不明显,例如可能是某些分段故障、空指针异常等。

mini-dm 控制台输出通常如下所示:

[08500/02] 20:32.332 进程传感器启动,ID=1 0130 main.c [08500/02] 20:32.337 mmpm_register:用于 USM ADSP 内核 12 的 MMPM 客户端 0117 UltrasoundStreamMgr_Mmpm.cpp [08500/02] 20:32.338 ADSP License DB: 已存储 ID 为 164678 的许可证验证函数。0280 adsp_license_db.cpp [08500/02] 20:32.338 AvsCoreSvc:StartSvcHandler 进入 0518 AdspCoreSvc.cpp [08500/02] 20:32.338 AdspCoreSvc:启动成功 0534 AdspCoreSvc.cpp [08500/02] 20:32.342 DSPS INIT 0191 sns_init_dsps.c [08500/02] 20:32.342 INIT DONE 0224 sns_init_dsps.0224 sns_init_dsps.c [08500/02] 20:32.342 Sensors Init : waiting(1) 0160 sns_init_dsps.c [08500/02] 20:32.342 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.342 THRD CREATE: Thread=0x39 Name(Hex)= 53, 4e, 53, 5f, 53, 4d, 47, 52 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x38 Name(Hex)= 53, 4e, 53, 5f, 53, 41, 4d, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x37 Name(Hex)= 53, 4e, 53, 5f, 53, 43, 4d, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x35 Name(Hex)= 53, 4e, 53, 5f, 50, 4d, 0, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x34 Name(Hex)= 53, 4e, 53, 5f, 53, 53, 4d, 0 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 THRD CREATE: Thread=0x33 Name(Hex)= 53, 4e, 53, 5f, 44, 45, 42, 55 0186 qurt_elite_thread.cpp [08500/02] 20:32.343 Sensors Init : ///////////init once completed/////////// 0169 sns_init_dsps.c [08500/02] 20:32.342 loading BLSP configuration 0189 blsp_config.c [08500/02] 20:32.343 Sensors DIAG F3 Trace Buffer Initialized 0260 sns_init_dsps.c [08500/02] 20:32.345 INIT DONE 0224 sns_init_dsps.c [00053/03] 20:32.345 不支持的算法服务 id 0953 sns_scm_ext.c [08500/02] 20:32.346 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.347 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.347 INIT DONE 0224 sns_init_dsps.c [08500/02] 20:32.546 HAP:159:unable to open the specified file path 0167 file.c [08500/04] 20:32.546 打开 /usr/share/data/adsp/blsp.config 失败 0204 blsp_config.c [08500/04] 20:32.546 QDSP6 Main.c: blsp_config_load() 失败 0261 main.c [08500/02] 20:32.546 Loaded default UART-BAM mapping 0035 blsp_config.c [08500/02] 20:32.546 UART tty-1: BAM-9 0043 blsp_config.c [08500/02] 20:32.546 UART tty-2: BAM-6 0043 blsp_config.c [08500/02] 20:32.546 UART tty-3: BAM-8 0043 blsp_config.c [08500/02] 20:32.546 UART tty-4: BAM-2 0043 blsp_config.c [08500/02] 20:32.546 UART tty-5: BAM N/A 0048 blsp_config.c [08500/02] 20:32.546 UART tty-6: BAM N/A 0048 blsp_config.c [08500/02] 20:32.547 HAP:111:cannot find /oemconfig.so 0141 load.c [08500/03] 20:32.547 HAP:4211::error: -1: 0 == dynconfig_init(&conf, "security") 0696 sigverify.c [08500/02] 20:32.548 HAP:76:cannot find /voiceproc_tx.so 0141 load.c [08500/02] 20:32.550 HAP:76:cannot find /voiceproc_rx.so 0141 load.c

我的是 P1 还是 P2 电路板?

Snapdragon 上的丝网印刷内容如下

1DN14-25- H9550-P1 REV A 高通公司

如果您看到 H9550这意味着你有一块 P2 电路板!

请忽略上面写的 -P1。

据推测,P1 板没有出厂分区/映像,因此无法恢复到出厂状态。

© PX4 开发团队。许可证 CC BY 4.0            已更新:2024-02-13 22:49:01

与" "匹配的结果"

    没有与""匹配的结果"