大疆无人机使用eport连接Jetson主板实现目标检测
所需硬件设备如下:
实现原理:
- 视频流获取:从大疆无人机获取实时视频流。
- 数据传输:将视频流传输至 Jetson 平台。
- 目标检测处理:在 Jetson 上运行目标检测算法对传入的视频帧进行分析
EPort开发套件
大疆官网给出了 M350 RTK
飞行器与 EPort
连接的教程:
https://developer.dji.com/doc/payload-sdk-tutorial/cn/quick-start/quick-guide/jetson-nano.html
无人机与Eport
连接图:
Jetson开发板
-
USB 转 TTL 串口模块
: 此模块通常用于低级别的硬件调试和通信。在这个上下文中,它可能被用来与 E-Port开发者套件建立串行通信链路,以便发送命令或接收来自负载的数据
。 -
USB-C USB
连接线: 用于连接飞行器的调参接口,这允许用户对飞行器及其负载进行固件升级或者通过PC上的模拟器来进行测试。 -
Micro USB
连接线: 可能用于连接 Jetson Nano 和 E-Port 开发者套件,以实现数据传输
或其他形式的通信。 -
USB-C OTG
转接线: OTG(On-The-Go)转接线可以让 Jetson Nano充当主机角色,从而连接其他USB设备。在这种情况下,它可能用于增强Jetson Nano与其他硬件组件之间的兼容性。
允许root用户登录
首先为 root
用户设置密码:
sudo passwd root
随后使用设置 root
可使用 ssh
登录
sudo vim /etc/ssh/sshd_config
在文件中找到这句代码:
#PermitRootLogin prohibit-password
将其改为:
PermitRootLogin yes
随后重启ssh
连接服务
sudo systemctl restart sshd
更新软件库
sudo apt-get update sudo apt-get upgrade sudo apt-get install automake sudo apt-get install libaio-dev
Opus安装
Opus
是一种开源的的音频编解码器,设计用于实时语音传输
首先下载opus
的安装包,可以直接采用apt
安装(推荐):
sudo apt-get install libopus-dev
当然,也可以考虑使用源码文件安装,不用太纠结于版本,使用最新版即可:
https://github.com/xiph/opus/releases/tag/v1.5.2
#解压文件tar -xzvf opus-1.5.1.tar.gz cd opus-1.3.1/ autoreconf -f -i ./configure make -j16 sudo make install
检查是否安装成功,这里采用的是apt
安装,其默认版本是1.3.1
pkg-config --modversion opus
FFmpeg安装
FFmpeg
是一个强大的开源音视频处理工具集,可以用来:
转换音视频格式(如 MP4 → AVI
、MP3 → WAV
)
剪辑、合并、分割视频
提取音频或封面图
实时推流(RTMP
、HLS
),这里推荐使用apt
安装
sudo apt-get install ffmpeg
如果不行,可以采用源码安装
tar -zxvf ffmpeg-4.3.2.tar.gz ./configure --enable-shared make && make install
使用如下命令检验是否安装成功
# 安装完成后检查 ffmpeg 是否安装 ffmpeg -version
OpenCV、CUDA、cudNN配置
这里需要注意的是OpenCV
的版本一定要在4.9
以上,好吧,请直接从git上下载源码,安装的是4.13
版本,亲测有效,4.9
,4.11
版本均不可用
即git clone https://github.com/opencv/opencv.git
详情参照博主这篇博文:https://blog.csdn.net/pengxiang1998/article/details/149073838
Jetson边缘计算主板:Ubuntu 环境配置 CUDA 与 cudNN 推理环境 + OpenCV 与 C++ 进行目标分类
这里Jetpack
的版本找不到了,但其实并不影响,只会报一个warning
而已
安装USB配置文件
libusb-1.0-0-dev
提供了在 Linux 上直接与 USB 设备进行通信所需的开发文件,通过这个包可以实现与 USB
设备通信
sudo apt-get install libusb-1.0-0-dev
检查内核模块
使用如下命令即可:
# 确保usb gadget和usb转串⼝的驱动都装了# 检查 USB Gadget 相关模块 lsmod | grep usb
- USB Gadget 相关:通常会显⽰ libcomposite 等模块(这是 USB Gadget 功能的核⼼依赖)。
- USB 转串⼝相关:常⻅的模块包括: usbserial:通⽤ USB 转串⼝驱动框架
ftdi_sio:FTDI 芯片的驱动
pl2303:Prolific PL2303 芯片的驱动
cp210x:Silicon Labs CP210x 芯片的驱动
ch341:沁恒
CH340/CH341 芯片的驱动- usb 转串⼝对应的设备是/dev/ttyUSB0
源码下载
将源码下载到如下地址,并将其解压,得到文件如下:
设置开机自启服务
设置开机自启服务:这是为了让无人机启动后既可以自动执行我们的导线追踪算法
切换到/home/laiease/Payload-SDK-master/
目录下,使用root 权限将service
文件安装到/etc/systemd/system
⽬录下 :
sudo mv djixunxian.service /etc/systemd/system/
随后切换到/home/laiease/Payload-SDK-master/jetson-usb/
,然后将如下服务文件也移动到对应位置
sudo mv jetsongadget.service /etc/systemd/system/
将对应的服务文件放置到系统路径下后,需要让 systemd
“知道”有新的或更改的服务存在:
新建了一个服务(如 djixunxian.service)
修改了某个服务的配置文件(比如路径、启动命令、环境变量等)
# 重新加载systemd 其会让systemd 重新加载所有的服务单元配置文件(比如 .service 文件)sudo systemctl daemon-reload
随后执行以下几个步骤进行设置自启:
# 允许两个服务开机⾃启 sudo systemctl enable djixunxian.service
djixunxian.service
已成功启用开机自启
sudo systemctl enable jetsongadget.service
jetsongadget.service
已成功启用开机自启
# 启动两个服务 sudo systemctl start jetsongadget.servicesudo systemctl start djixunxian.service
启动完成效果如下:
编译startup_bulk
切换到 jetson-usb
路径
cd /home/laiease/Payload-SDK-master/jetson-usb make
效果如下:
项目编译
cd ./Payload-SDK-master mkdir build cd build make -j4
重启服务,要先启动jetsongadget
,然后再启动djixunxian
systemctl restart jetsongadget
systemctl restart djixunxian
检查服务状态
systemctl status djixunxian
当然,也可以使用 journalctl | grep -i dji
查看状态:
推流正常:
推理正常:
推理效果如下:
报错处理
在启动服务时报错:
Process: 11087 ExecStart=/home/laiease/Payload-SDK-master/build/bin/dji_sdk_demo_linux_cxx (code=dumped, signal=ABRT)Main PID: 11087 (code=dumped, signal=ABRT)
这是由于USB_bulnk
找不到导致的,当出现找不到USB0
时
首先检查USB
转串口线是否正常接入:如果有这个,说明正常接入了
然后,使用 dmesg | tail -30
查看日志信息,当出现如下错误时:
[ 437.462906] ch34x 1-2.1:1.0: ch34x converter detected[ 437.468035] usb 1-2.1: ch34x converter now attached to ttyUSB0[ 437.544924] usb 1-2.1: usbfs: interface 0 claimed by ch34x while \'brltty\' sets config #1[ 437.547686] ch34x ttyUSB0: ch34x converter now disconnected from ttyUSB0
这说明
此时,CH340
设备插入,ch34x 驱动识别成功,创建了 /dev/ttyUSB0
但另一个服务 brltty
(盲文终端支持)立即抢占了这个设备
❌ 导致 ch34x
驱动被强制断开,/dev/ttyUSB0
被销毁
解决方案:
停止并禁用 brltty
sudo systemctl stop brltty-udev.servicesudo systemctl disable brltty-udev.servicesudo systemctl mask brltty-udev.service
随后卸载 brltty
模块
sudo modprobe -r brltty
重新插拔 CH340
设备
拔掉 USB
,等 2
秒,再插回去。
此时,再次执行如下命令
ls /dev/ttyUSB*
此时,应该就能够查看到ttyUSB0
,如果还是看不到的话,可以尝试下载CH340
驱动
git clone https://github.com/juliagoda/CH341SER.git
随后切换到CH41SER
目录
然后执行make
命令
ls /dev/ttyUSB*
完整的执行过程:
此时USB bulk
便可以了