Linux + Python 2
# 下載 code
$ git clone https://github.com/DyslexiaS/UAV
這裡還要安裝 dronekit, opencv2, 設定環境變數等等。
# 到 drone 資料夾
$ cd UAV/drone
# 後面數字(不給的話預設爲1) 0 表示無線連接, 1 表示有線連接。
# 如通過 raspberry pi 連線可以跑以下指令:
$ python connect.py 1
等待一段時間(我記得要幾十秒)會出現以下 output 等待輸入指令,表示連接成功。
...
#################
execute: (這裡可以輸入接下來介紹的 4 種指令,通常是輸入 takeoff 就可以了)
支援 4 個指令:
-
takeoff [height] [n]
指令:讓 UAV 起飛。- 可以輸入
takeoff 10
讓無人機飛起10
米,高度自訂。 takeoff
之後會直接進入control
指令。[height]
可以不給,預設值爲5
。[n]
可以不給,預設值爲0
,用於detect
指令。
- 可以輸入
-
control [n]
指令:鍵盤控制 UAV 活動。- 分別用
w
a
s
d
和i
j
k
l
模擬遙控器左右手柄。 p
:相等於執行detect n 0
(拍一張)。o
:相等於執行detect n 1
(連續拍)。m
:相等於執行mode guided
,切換成GUIDED
模式。(我記得是GUIDED
模式才能電腦控制,若過程中已經由遙控器切換成其他模式,要記得先切回GUIDED
)q
:退出control
模式。[n]
可以不給,預設值爲0
,用於detect
指令。
- 分別用
-
detect [n] [auto]
指令:辨識圓及自動控制飛行方向[n]
可以爲任意數字,和拍照存的圖片名稱相關,預設值爲0。每次拍照都將命名爲idx_高度.jpg
存在img/
資料夾,作爲後續研究用。[auto]
可以爲0
或1
。[auto]
爲0
表示拍一次照然後按分析結果方向飛行。(不太會用到)[auto]
爲1
表示持續拍照及根據判斷結果飛行,可中途輸入Ctrl+C
退出。
-
mode [some mode]
:切換 mode[some mode]
可以切換的大部分模式(不確定是不是全部),如mode guided
進入GUIDED
模式。
- 通過提取目標顏色、灰階處理、圖像平滑、霍爾變換找到圓心。(每張找到圓心的圖片也都會存在
img/
裡) - 依據圓的直徑反推 UAV 高度。(其實照理來說第1、2的步驟反了,但這是因爲我記得飛行中直接讀 UAV 的高度會非常不準。若這部分解決了可以進一步改善第一步,即我們可以推算這高度拍照的圓的直徑的像素距離,降低找錯圓的機率)
- 根據高度推算 UAV 與圓心的實際距離。
- 設定 UAV 的水平速度(正比於實際距離,但有上限)及垂直速度(根據 UAV 與圓心的俯角,若大於 45 度則向下飛,反之向上)。
- 若找不到圓將垂直向上擴大拍照範圍。