所需硬件設備如下:
實現原理:
- 視頻流獲取:從大疆無人機獲取實時視頻流。
- 數據傳輸:將視頻流傳輸至 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與其他硬件組件之間的兼容性。
更新軟件庫
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.service
sudo 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
時,這是由于沒有CH34
驅動的,可以下載一個驅動:
git clone https://github.com/juliagoda/CH341SER.git
隨后切換到CH41SER
目錄
然后執行make
命令
ls /dev/ttyUSB*
完整的執行過程:
此時USB bulk
便可以了