使用DroneKit控制無人機


DroneKit-Python是一個用於控制無人機的Python庫。DroneKit提供了用於控制無人機的API,其代碼獨立於飛控,單獨運行在機載電腦(Companion Computer)或其他設備之上,通過串口或無線的方式經MAVLink協議與飛控板通信。除了DroneKit-Python以外,還有DroneKit-Android以及DroneKit-Cloud的API供不同的開發者使用。

本教程使用的解決方案為:

  • 運行在機載電腦上的DroneKit-Python代碼
  • 機載電腦選擇Raspberry Pi 3B
  • Pixhawk飛控上運行ArduCopter(APM)飛控軟件
  • 安裝額外的傳感器:光流(Optical Flow)傳感器和超聲波(Rangefinder)適應室內飛行的環境
  • 使用的PC運行Windows 10

第0步 預先儲備

在開始本教程之前,需要確認以下內容:

  • 明確需求,無人機是否必須室內執行任務?
  • 是否有空間足夠、可供測試的飛行平台及場地?
  • 此教程牽涉到的內容很多,是否有足夠的動手能力自學能力

你需要准備好:

  • 一架裝載Pixhawk的無人機或一套零件(包括:飛控及外設、機架、無刷電機、電調、正反槳、遙控器、航模電池,最好還有起落架、槳保護罩)
  • Raspberry Pi 3B或其他小型計算機
  • PX4Flow光流傳感器
  • 受Pixhawk/APM支持的超聲波傳感器或激光雷達(官方支持的傳感器列表
  • 螺絲刀、焊台等工具

此外,還可能需要了解:

  • 控制理論和數理基礎
  • 多旋翼無人機的基本原理
  • Linux bash shell的基本操作
  • Python的基本語法

當然,暫時不清楚也沒關系,可以在遇到問題時再去查閱參考資料。

第1步 組裝和設置飛控

Pixhawk作為一款開源飛控,價格便宜、功能強大。不過,因為它開源的屬性,飛控的安裝和調試不及商品飛控簡便;剛入門的時候可能會感到沒有頭緒,這時候不要放棄,熟悉了以后你會喜歡上它的!

如果已有安裝了Pixhawk的無人機,請確認無人機裝載的飛控程序為最新穩定版本的ArduCopter。此外,請進行多次試飛,確認無人機和飛控設置正確、飛手能夠熟練操控。

如果選擇購買散裝的套件,互聯網上有很多關於組裝和調試Pixhawk飛控的教程,一般賣家也都會提供文檔和技術支持,這里不再展開。推薦非常經典的泡泡老師新手課堂-PixHawk飛控的使用方法

需要注意,網上有些賣家會把傳感器替換成低精度的型號,因此特別注意一些售價低得反常的飛控。這些飛控即便可以飛行,但很可能在濾波和控制上出現問題。所以,我還是推薦各位去找開源社區的合作企業購買飛控。雖然貴了點,但是硬件質量更加可靠,能夠避免許多不必要的麻煩和炸機事故。

在進行下一步操作之前,請確認

  • 無人機組裝完成
  • 飛控調試完成
  • 多次試飛成功,Stabilize、AltHold、PosHold、Loiter、Land等模式下功能正常
  • 飛手能熟練操控無人機

第2步 連接和測試外設

2.1 連接機載電腦

ArduPilot官方支持多種微型計算機,且理論上任何計算機或單片機都可以通過UART串口直接連接到Pixhawk飛控。用戶和開發者可以根據自己的需求和預算,選購合適的微型計算機。這里以Raspberry Pi 3B(樹莓派3B)為例,因為它的設置相對簡單、價格合理、參考資料較多。

2.1 使用樹莓派連接Pixhawk飛控

2.2 安裝距離傳感器

在室內環境下,Pixhawk上自帶的氣壓計無法提供足夠准確(厘米級)的定高數據,可能因為空調、風扇甚至開關門、人員走動所產生的氣流引起氣壓變化,導致無人機的高度突然升高或降低,撞擊天花板或地面而發生危險。因此,需要安裝超聲波傳感器或激光雷達傳感器,用於室內的高度控制。

市面上受支持的超聲波傳感器和激光雷達種類繁多、價格和精度不一,建議根據需要選用,並尋求賣家或官方文檔(英文)的技術支持。

2.3 安裝光流傳感器

室內環境下,GPS信號經過建築物牆體的阻擋和反射,無法提供准確的定位數據,因此不能使用GPS作為定位信息的來源。光流傳感器是一個安裝在無人機上、指向正下方的攝像頭,使用光流算法,能夠在無GPS信號的情況下,為無人機提供定位數據和地速(相對地面的速度)。

2.3 在Pixhawk飛控上安裝和調試PX4Flow光流傳感器

第3步 控制指令的配置、編寫和測試

從這里開始,我們將針對室內飛行、光流+超聲傳感器組合這一特殊情況,配置飛控參數、編寫和測試控制代碼。這部分3.1、3.2和3.3的內容會互相穿插,在3.4中將給出一個較為合理的開發、測試流程,以供參考。

3.1 修改飛控參數

目前,ArduPilot的官方飛控程序還是以GPS信號作為定位信息的主要來源。需要對飛控參數做一些修改,使得光流傳感器和測距傳感器獲取的位置信息和高度信息能夠被飛控程序正確使用。

3.1 Pixhawk室內自動控制:參數設置

3.2 使用SITL模擬器

在進行實物試飛之前使用模擬器進行測試,可以試驗方案的可行性,同時規避掉許多簡單的問題,減少測試過程中無人機炸機帶來的損失。

在這里,我們需要編譯最新的穩定版本固件。

3.2.1 如何從源碼編譯SITL(Windows)

3.2.2 使用從源碼編譯的SITL測試DroneKit代碼

3.2.3 Pixhawk室內自動控制:參數設置(SITL)

3.3 學習DroneKit-Python

DroneKit-Python是一個Python庫,能夠控制無人機的運動、獲取無人機的實時狀態。我已經根據室內光流+超聲波自動飛行的特點,完成了FlightController控制庫的編寫,經過真機測試,可以直接使用。在GUIDED文件夾下,還有三個示例文件;通過簡單地參考和改寫示例文件,即可很快上手。

對DroneKit-Python中的常用功能,有以下教程:

3.3.1 DroneKit教程(一):安裝DroneKit和測試工具

3.3.2 DroneKit教程(二):控制Pixhawk示例

3.3.3 DroneKit教程(三):連接Pixhawk飛控

3.3.4 DroneKit教程(四):屬性和參數的讀取與設置

3.3.5 DroneKit教程(五):使用自定義MAVLink指令

3.3.6 DroneKit教程(六):繼承和自定義Vehicle類

3.3.7 DroneKit教程(七):遙控信道覆蓋

3.4 開發測試流程

在對以上概念有充分了解后,我們需要了解每一個環節在什么時候有什么作用。因此,在此給出一個簡略的DroneKit開發測試流程,供各位參考。

  1. 編寫DroneKit代碼
  2. 根據相應條件,配置SITL中的環境參數和飛控參數
  3. 運行SITL,測試編寫的DroneKit代碼功能是否正常
  4. 代碼通過SITL測試,准備進行真機試飛,按照SITL的配置修改真機飛控的參數
  5. 真機測試

版本信息

1.0 20170916 initial commit

1.1 20170921 add link 3.2.3

 

飛控相關請參考:http://blog.csdn.net/iracer/article/details/52718346

摘錄自:http://blog.csdn.net/liberatetheus/article/details/78006137


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM