Xavier NX(ubuntu20.04)配置大疆无人机payload SDK(PSDK)全流程_大疆payload移植
硬件配置
- 准备一台高清显示器、一套键盘鼠标和宽敞的桌面环境。
- 准备一套 M350 RTK 飞行器环境,安装电池后将飞行器摆放到桌面上合适的位置。
- 如果需要执行飞行控制,使用笔记本或者台式 PC 通过 USB-C 连接线连接飞行器的调参口(调参口为下图中 E-Port 接口旁的 USB-C 接口)。
- 如图. 飞行器设备连接所示,准备 E-Port 开发者套件并连接到飞行器。
- 检查并确认 E-Port 开发者套件的电源拨码开关(标识 7)处于 OFF 状态。
- 将 E-Port 开发者套件中的 USB 口(标识 2)通过同轴线连接到飞行器的 E-Port 接口(需要注意 A/B 面)。
如图. 官方给出的是Jetson Nano 示意图与图. Jetson Nano 开发板连接所示,将 E-Port 开发者套件连接到 Jetson Nano 开发板
- 通过杜邦线连接 E-Port 开发者套件的 UART(标识 5)引脚连接 USB 转 TTL 串口模块(开发者套件 TX、RX、GND 分别连接串口模块的 RX、TX、GND)。
- 将 USB 转 TTL 串口模块连接到 Jetson Nano 开发板的 USB 口(标识 a)。
- 将 E-Port 开发者套件的 USB 主从切换拨码开关(标识 3)拨到 Host 状态。
- 将 E-Port 开发者套件的 USB (标识 6)通过 USB-C OTG 转接线和 Micro USB 线连接到开发板的 Micro USB OTG 口(标识 b)。
- 连接 E-Port 开发者套件的 PPS 引脚(标识 5)到开发板 40pins GPIO 的引脚 7(标识 f),可以查阅引脚介绍
- 。本连接步骤仅用于时间同步,不需要时间同步则本步骤可以忽略。
- 通过 XT30 转 DC 供电线,连接 E-Port 开发者套件的电源输出接口(标识 4,可选 12V/2A、5V/2A) 到开发板的 DC 电源接口(标识 c,按需选择是否使用外部电源供电)。
- 将开发板的 HDMI 显示输出(标识 d)接入到高清显示器,并且接入键盘鼠标到开发板的 USB 口(标识 a),接入无线网卡或者具备网络能力的有线网口到开发板网口(标识 e)。
- 检查所有连接是否稳定和正常。
-
进行飞行器整机启动,将 E-Port 开发者套件的电源拨码开关打开,检查绿色指示灯是否亮起,并且检查开发板是否正常供电并启动。
-
观察显示器,确认开发板是否进入启动页面。
#
软件环境准备
# 1. 安装软件环境
-
Jeston 开发套件默认不包含 SD 卡和系统镜像,请参考英伟达官方烧录指导
-
进行镜像烧录和账户配置。
-
完成硬件环境准备并启动完成后,我们首先输入您配置的账号密码,检查是否可以登录进入 Ubuntu 桌面系统。
-
进入桌面后,您可以通过浏览器访问网页检查 Jeston Nano 开发网络环境是否正常。
-
在运行 PSDK 之前,需要您参考如下 shell 命令,安装以下的依赖库,并检查是否安装成功。
- FFmpeg
- ffplay
- OpenCV
- libaio
- CMake
- libusb
/* 更新软件仓库 */sudo apt-get updatesudo apt-get upgradesudo apt-get install automakesudo apt-get install libaio-dev/* 从 https://opus-codec.org/ 上下载 opus-1.3.1 源码,并进行安装 */tar -xzvf opus-1.3.1.tar.gzcd opus-1.3.1/autoreconf -f -i./configuremake -j16sudo make install/* 从 GitHub 下载并安装 FFmpeg 4.3 源码 ,如果make权限不够显示错误,就sudo make install*/tar -zxvf ffmpeg-4.3.2.tar.gz./configure --enable-sharedmake && make install/* 检查 OpenCV 是否安装 */opencv_version/* 这里鉴于是arm架构可能不能显示可以采用如下检验 */pkg-config --modversion opencv4 # 输出OpenCV版本(如4.6.0)/* 安装 libusb */sudo apt-get install libusb-1.0-0-dev
#2. 开启 Jetson Nano 的 USB bulk 功能
PSDK提供Jetson nano的 usb bulk 配置文件
,包括配置脚本(psdk-usb-configure.sh)和配置程序(startup_bulk)。
备份原配置:bash# 找到实际路径后备份(如),这个东西路径你在主机里搜索就行,l4t-usb肯定能搜到sudo cp /usr/local/bin/l4t-usb-device-mode-start.sh ~/nx-usb-bk.sh替换大疆脚本:bashsudo cp 大疆提供的/psdk-usb-configure.sh /usr/local/bin/l4t-usb-device-mode-start.shsudo chmod +x /usr/local/bin/l4t-usb-device-mode-start.sh修改脚本内路径:编辑psdk-usb-configure.sh,将 Nano 的/dev/usb-ffs/替换为 Xavier NX 的实际设备路径(通过ls /dev/bus/usb/确认)。启动验证:bash# 手动启动测试/home/dji/startup_bulk/startup_bulk $(ls /dev/usb-ffs/bulk* | head -n 1) &ps -aux | grep startup_bulk # 确认进程存在lsusb -v | grep \"大疆设备描述\" # 确认Bulk设备枚举自启动配置:bashsudo nano /etc/rc.local# 在exit 0前添加:/home/dji/startup_bulk/startup_bulk /dev/usb-ffs/bulk1 &
# 3. 注册 PSDK 开发者账号
您可以在大疆开发者网站
上进行注册,申请成为 PSDK 开发者。
# 4. 下载 PSDK 软件包
在 Payload-SDK 仓库
获取 PSDK 最新的软件开发包,最新代码在 master 分支上。
5. 修改必要的配置代码
您需要通过开发者用户中心,创建应用后将生成的 PSDK 应用信息,填入前一步获取的 PSDK 软件开发包的指定文件中,否则 PSDK 将无法正常运行。
- samples/sample_c/platform/linux/nvidia_jetson/application/dji_sdk_app_info.h
- samples/sample_c++/platform/linux/nvidia_jetson/application/dji_sdk_app_info.h
/* Exported constants --------------------------------------------------------*/// ATTENTION: User must goto https://developer.dji.com/user/apps/#all to create your own dji sdk application, get dji sdk application// information then fill in the application information here.#define USER_APP_NAME \"MyDronePayload\" // 自定义应用名#define USER_APP_ID \"12345678\" // 平台生成的App ID#define USER_APP_KEY \"abcdef123456\" // 平台生成的App Key#define USER_APP_LICENSE \"DJI_SDK_FREE\" // 免费License(示例)#define USER_DEVELOPER_ACCOUNT \"developer@example.com\" // 注册邮箱#define USER_BAUD_RATE \"115200\" // 若硬件串口为115200波特率
根据当前飞行器与 Jetson Nano 开发板的硬件连接方式,你需要对 PSDK 的硬件连接配置文件进行对应的修改。
- samples/sample_c/platform/linux/nvidia_jetson/application/dji_sdk_config.h
- samples/sample_c++/platform/linux/nvidia_jetson/application/dji_sdk_config.h
#define DJI_USE_ONLY_UART (0)#define DJI_USE_UART_AND_USB_BULK_DEVICE (1)#define DJI_USE_UART_AND_NETWORK_DEVICE (2)/*!< Attention: Select your hardware connection mode here.这里推荐选(2),网络链接* */#define CONFIG_HARDWARE_CONNECTION DJI_USE_UART_AND_NETWORK_DEVICE
如果您使用的连接方式是DJI_USE_UART_AND_NETWORK_DEVICE,您需要在以下配置文件中对当前使用的网卡设备名称和VID、PID进行配置。
- samples/sample_c/platform/linux/nvidia_jetson/hal/dji_network.h
- samples/sample_c++/platform/linux/nvidia_jetson/hal/dji_network.h
/** @attention User can config network card name here, if your device is not MF2C/G, please comment below and add your * NIC name micro define as #define \'LINUX_NETWORK_DEV \"your NIC name\"\'. */#ifdef PLATFORM_ARCH_x86_64#define LINUX_NETWORK_DEV \"enxf8e43b7bbc2c\"#else#define LINUX_NETWORK_DEV \"l4tbr0\"#endif/** * @attention */#ifdef PLATFORM_ARCH_x86_64#define USB_NET_ADAPTER_VID (0x0B95)#define USB_NET_ADAPTER_PID (0x1790)#else#define USB_NET_ADAPTER_VID (0x0955)#define USB_NET_ADAPTER_PID (0x7020)#endif
如果您使用的连接方式是DJI_USE_UART_AND_USB_BULK_DEVICE,您需要在以下配置文件中对当前使用的USB Bulk端点进行配置。
- samples/sample_c/platform/linux/nvidia_jetson/hal/hal_usb_bulk.h
- samples/sample_c++/platform/linux/nvidia_jetson/hal/hal_usb_bulk.h
#define LINUX_USB_BULK1_EP_OUT_FD \"/dev/usb-ffs/bulk1/ep1\"#define LINUX_USB_BULK1_EP_IN_FD \"/dev/usb-ffs/bulk1/ep2\"#define LINUX_USB_BULK1_INTERFACE_NUM (2)#define LINUX_USB_BULK1_END_POINT_IN (0x83)#define LINUX_USB_BULK1_END_POINT_OUT (2)#define LINUX_USB_BULK2_EP_OUT_FD \"/dev/usb-ffs/bulk2/ep1\"#define LINUX_USB_BULK2_EP_IN_FD \"/dev/usb-ffs/bulk2/ep2\"#define LINUX_USB_BULK2_INTERFACE_NUM (3)#define LINUX_USB_BULK2_END_POINT_IN (0x84)#define LINUX_USB_BULK2_END_POINT_OUT (3)#ifdef PLATFORM_ARCH_x86_64#define LINUX_USB_VID (0x0B95)#define LINUX_USB_PID (0x1790)#else#define LINUX_USB_VID (0x0955)#define LINUX_USB_PID (0x7020)#endif
# 6. 编译与运行
PSDK 软件包支持 CMake 编译,您可以通过 cmake 命令进行编译,生成可执行文件,运行如下示例代码后,build/ 目录下将会生成可执行文件dji_sdk_demo_on_jetson
和 dji_sdk_demo_on_jetson_cxx
cd Payload-SDK/mkdir cmake-build-debug && cd cmake-build-debugcmake ../ && make -j8