使用 Jetson Nano 开发套件
简介
E-Port 开发者套件用于将飞行器的 E-Port 接口转换成多种标准硬件接口,方便开发者进行硬件设备连接和 SDK 开发调试。E-Port 开发者套件支持的飞行器机型与适配的机身接口,请阅读表. 标准硬件接口与开发套件。
本示例将基于 M350 RTK 飞行器、E-Port 开发者套件和 Jetson Nano 开发者套件,介绍从硬件连接、软件环境配置、获取开发包和编译运行等一系列的开发步骤,帮助您快速上手 Payload SDK (后称 PSDK) 的开发。本示例在 PSDK 支持的飞行器机型上没有差异。
基础知识介绍
如下是本篇教程需要使用的硬件设备介绍,建议您在查看后续内容前进行相关阅读。
硬件环境准备
1. 准备硬件设备
硬件 | 个数 | 用途 |
---|---|---|
英伟达 Jetson Nano 开发套件 | 1 | PSDK 的运行平台 |
高清显示器(HDMI 或 DP 接口) + HDMI 或 DP 连接线 | 1 | 用于开发板 Ubuntu 系统的界面显示 |
键盘 + 鼠标 | 1 | 用于开发板 Ubuntu 系统的人机交互 |
无线网卡/网线 | 1 | 用于开发板访问网络资源 |
E-Port 开发者套件 | 1 | 用于连接开发板和飞行器 |
M350 RTK 飞行器 + 配套产品(遥控器+电池+负载+充电箱) | 1 | 应用开发硬件平台 |
笔记本电脑/台式 PC | 1 | 用于连接飞行器/负载进行升级以及模拟器 |
USB 转 TTL 串口模块 | 1 | 用于连接开发板和 E-Port 开发者套件 |
USB-C USB 连接线 | 1 | 用于连接飞行器的调参口,用于对飞行器/负载进行升级以及在 PC 上使用模拟器 |
Micro USB 连接线 | 1 | 用于连接开发板和 E-Port 开发者套件 |
USB-C OTG 转接线 | 1 | 用于连接开发板和 E-Port 开发者套件 |
2.54mm 杜邦线 | 若干 | 用于连接开发板和 E-Port 开发者套件 |
2. 硬件连接
- 准备一台高清显示器、一套键盘鼠标和宽敞的桌面环境。
- 准备一套 M350 RTK 飞行器环境,安装电池后将飞行器摆放到桌面上合适的位置。
- 如果需要执行飞行控制,使用笔记本或者台式 PC 通过 USB-C 连接线连接飞行器的调参口(调参口为下图中 E-Port 接口旁的 USB-C 接口)。
- 如图. 飞行器设备连接所示,准备 E-Port 开发者套件并连接到飞行器。
- 检查并确认 E-Port 开发者套件的电源拨码开关(标识 7)处于 OFF 状态。
- 将 E-Port 开发者套件中的 USB 口(标识 2)通过同轴线连接到飞行器的 E-Port 接口(需要注意 A/B 面)。
.png)
图. 飞行器设备连接
如图. Jetson Nano 示意图与图. Jetson Nano 开发板连接所示,将 E-Port 开发者套件连接到 Jetson Nano 开发板,开发板 40pins GPIO 的引脚介绍请参考引脚介绍。
- 通过杜邦线连接 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)。
- 检查所有连接是否稳定和正常。

图. Jetson Nano 示意图

图. Jetson Nano 开发板连接
进行飞行器整机启动,将 E-Port 开发者套件的电源拨码开关打开,检查绿色指示灯是否亮起,并且检查开发板是否正常供电并启动。
观察显示器,确认开发板是否进入启动页面。
软件环境准备
1. 安装软件环境
Jeston Nano 开发套件默认不包含 SD 卡和系统镜像,请参考英伟达官方烧录指导 进行镜像烧录和账户配置。
完成硬件环境准备并启动完成后,我们首先输入您配置的账号密码,检查是否可以登录进入 Ubuntu 桌面系统。
进入桌面后,您可以通过浏览器访问网页检查 Jeston Nano 开发网络环境是否正常。
在运行 PSDK 之前,需要您参考如下 shell 命令,安装以下的依赖库,并检查是否安装成功。
- FFmpeg
- ffplay
- OpenCV
- libaio
- CMake
- libusb
/* 更新软件仓库 */ sudo apt-get update sudo apt-get upgrade sudo apt-get install automake sudo apt-get install libaio-dev /* 从 https://opus-codec.org/ 上下载 opus-1.3.1 源码,并进行安装 */ tar -xzvf opus-1.3.1.tar.gz cd opus-1.3.1/ autoreconf -f -i ./configure make -j16 sudo make install /* 从 GitHub 下载并安装 FFmpeg 4.3 源码 */ tar -zxvf ffmpeg-4.3.2.tar.gz ./configure --enable-shared make && make install /* 检查 OpenCV 是否安装 */ opencv_version /* 安装 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)。
/* Back up the bulk configuration file of jetson nano */
cp /opt/nvidia/l4t-usb-device-mode-start.sh ~/Desktop/nano-usb-config/l4t-usb-device-mode-start-bk.sh
/* Using PSDK's bulk configuration file */
sudo cp startup_bulk/psdk-usb-configure.sh /opt/nvidia/l4t-usb-device-mode-start.sh
/* Set the startup_bulk file path in the script */
/home/dji/Desktop/startup_bulk/startup_bulk /dev/usb-ffs/bulk1 &
/home/dji/Desktop/startup_bulk/startup_bulk /dev/usb-ffs/bulk2 &
/* After restarting the system, make sure that startup_bulk is running normally */
ps -aux | grep startup_bulk
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 "your_app_name"
#define USER_APP_ID "your_app_id"
#define USER_APP_KEY "your_app_key"
#define USER_APP_LICENSE "your_app_license"
#define USER_DEVELOPER_ACCOUNT "your_developer_account"
#define USER_BAUD_RATE "460800"
根据当前飞行器与 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.
* */
#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-debug
cmake ../ && make -j8
Sample 介绍与体验
PSDK 提供了丰富的功能 Sample 和接口支持,可以满足行业各种场景下的二次开发需求。下面将带您体验 PSDK 的几个典型功能,帮助您快速上手 PSDK 开发。
1. Sample:自定义控件功能体验
PSDK 支持自定义控件功能,如下 Sample 将演示如何使用 API 接口,Pilot 上会显示预设的自定义控件 UI。
运行可执行文件 dji_sdk_demo_on_jetson_cxx
。
- 输入 g 来选择
Sample - Start widget all features sample
,即可开启自定义控件功能。 - 输入 h 来选择
Sample - Start widget speaker sample
,即可开启喊话器功能。
自定义控件和喊话器控件,将会在遥控器上安装的 Pilot 上显示,你可以在 Pilot 上对这些控件进行操作。

图. 自定义控件功能 Sample 结果

图. 喊话器控件
2. Sample:信息管理、飞行控制功能体验
PSDK 支持 信息管理功能和飞行控制功能,如下 Sample 将演示如何使用 API 接口,订阅到 M350 RTK 飞行器遥感数据和控制飞行器运动。
- 输入 0 来选择
Sample - Fc subscribe sample
,即可开启数据订阅功能。 - 在体验飞行控制功能之前,你需要将飞行器连接到 PC 端的 DJI Assistant 2 ,然后在 DJI Assistant 2 中打开模拟器,准备完成后,你可以顺序输入 1 - 6 来体验飞行控制功能。

图. 信息管理 Sample 结果
3. Sample:相机管理、云台管理功能体验
PSDK 支持相机管理功能和云台管理功能,如下 Sample 将演示如何使用 API 接口,控制相机拍照和云台旋转。不同的相机机型对相机管理功能的支持情况请查阅基础相机管理中的相机支持功能差异概览表格。
- 输入 k 来选择
Sample - Run camera manager sample
,即可体验相机管理功能。 - 输入 a 来选择
Sample - Gimbal manager sample
,即可体验云台管理功能。

图. 相机功能列表

图. 相机管理 Sample - [11] Record video

图. 云台功能列表
4. Sample:订阅相机码流功能体验
PSDK 支持获取相机码流功能,如下 Sample 将演示如何使用 API 接口,订阅到 M350 RTK FPV 和主相机的码流。
- 输入 c 来选择
Sample - Camera stream view sample
,即可体验订阅相机码流和FPV码流的功能。

图. 获取相机码流

图. 主相机视角

图. FPV 视角
FAQ
常见问题汇总?
- 运行PSDK报如下错误:
Can't operation the device. Probably the device has not operation permission. Please execute command 'sudo chmod 777 /dev/ttyUSB0' to add permission.
解决方法: 执行 sudo chmod 777 /dev/ttyUSB0
- 运行PSDK报如下错误:
Please fill in correct user information to 'samples/sample_c/platform/linux/nvidia_jetson/application/dji_sdk_app_info.h' file.
解决方法:请在开发者网站上注册帐号,并将帐号信息填入文件 dji_sdk_app_info.h
- 运行PSDK报如下错误:
ls: cannot access '/dev/ttyUSB0': No such file or directory
解决办法:检查串口是否正确连接