以NAVIO+ & Raspberry Pi 製作 4G 連線無人機

玩過用 4G 連線 Parrot DISCO,感受過無距離限制的FPV飛行後,很想以 Ardupilot 做同樣事:

  1. 以 4G 網絡連結無人機與 ground station,實時控制無人機,獲取飛行數據
  2. 以 4G 網絡傳送無人機鏡頭的實時影像
  3. 1小時或以上的飛行時間,30公里或以上的飛行距離

便在倉底找回2015年買下的NAVIO+,就以它來製作一部 4G 連線的定翼無人機,以下就是我的製作筆記。

使用的硬件


軟件設定

開始時,跟著 NAVIO 的官方文件做,由於我使用 ZeroTier 建 VPN,連結無人機與 ground station,NAVIO沒有這方面的資料,這部分設定要自己處理,以下就是軟件設定部分的筆記。

Raspberry Pi 基本設定

  1. 下載預先配置的 Raspbian image (md5),這是NAVIO廠方提供的專用 image
  2. 把下載的 image file 燒錄到 SC card,在 Mac 的 Terminal 執行以下程序(使用其他 OS 可參考官方文件):
// show the SD card disk path {diskx}
diskutil list
// unmount SD card, remember replace the {diskx}
diskutil unmountDisk /dev/{diskx}
// format SD card
sudo newfs_msdos -F 16 /dev/{diskx}
// restore image file to SD card, remember replace the {/path/of/image/xxx.dmg} to the image file path
sudo dd if={/path/of/image/xxx.dmg} of=/dev/{diskx}
  1. 把 SD card 裝入 Raspberry Pi 後啓動。在 Raspberry Pi 以預設戶口登入(注意,此 image 沒有圖型介面,所有操作都是通過 command line 進行)
user: pi
password: raspberry
  1. 跟據官方文件進行安全設定。以下是我的快速設定:
passwd // change password
sudo adduser {new-username} sudo // create new user
sudo su // make sure the new-user has been setup correctly
sudo deluser -remove-home pi // remove default user and the home directoty
sudo nano /etc/sudoers.d/010_pi-nopasswd //
{new-username} ALL=(ALL) PASSWD: ALL // Make sudo require a password
  1. 把 WiFi USB 安裝到 Raspberry Pi後,修改 WiFi config 文件
sudo pico /etc/wpa_supplicant/wpa_supplicant.conf

把這段加入(修改 your-wifi-network-name 和 your-wifi-network password)

network={
ssid="your-wifi-network-name"
psk="your-wifi-network password"
key_mgmt=WPA-PSK
}
  1. 啓動WiFi
sudo ifdown wlan0 && sudo ifup wlan0
  1. 重新啓動 Raspberry Pi
  2. 以後可以用 PC/Mac 登入 Raspberry Pi
ssh your-user-name@raspberry-pi-ip

e.g. [email protected]


NAOVIO+, Arduplane 和 QGroundControl 設定

1. 更新 arduplane firmware:

由於廠方提供的 image 的 arduplane firmware 不是最新的,因為 image 不會像 firmware 般更新得也,最好就自己做一次更新。

sudo curl http://firmware.ardupilot.org/Plane/stable/navio/arduplane -o /opt/ardupilot/navio/arduplane-3.8/bin/arduplane
sudo chmod 775 arduplane

2. 安裝與設定 ZeroTier:

ZeroTier 提供了一個十分方便的途徑,使我們可以輕易地把無人機和 ground station 透過 4G 網絡連結,而不需自己架建 VPN。 整個設定過程包括:

  • 登記及設定 ZeroTier 戶口
  • 在 Raspberry Pi 安裝 zerotier-one 客戶端
  • 在 ground station 安裝 ZeroTier One 客戶端
  • 在 ZeroTier 戶口批准 Raspberry Pi 及 ground station 的連線

2.1 登記 ZeroTier 戶口:

到此網站登記一個新戶口(免費的):http://zerotier.com/

2.1a 登入後按 Networks,Create 建立一個新網絡:

2.1b 進入新網絡的設定頁面:

  • 記下 Network ID
  • 在 Name 下,改一個你喜歡的名稱,例如:NAVIO Network
  • 在 Managed Routes > Easy 下,選一個你覺得易記的 IP range
  • 其他的設定請如下圖一樣

2.2 安裝 zerotier-one 到 Raspberry Pi:

通過此軟件,Raspberry Pi 無人機就能自動找上我們剛剛建立的網絡,與 ground station 連線。

執行以下 shell command 下載ZeroTier:

curl -s 'https://pgp.mit.edu/pks/lookup?op=get&search=0x1657198823E52A61' | gpg --import && \ if z=$(curl -s 'https://install.zerotier.com/' | gpg); then echo "$z" | sudo bash; fi

確保 ZeroTier 在 root 上執行

sudo systemctl enable zerotier-one

執行 sudo zerotier-cli status 如果看到 200 info [ID] [version] ONLINE 就成功了。

2.2a 連結 ZeroTier 網絡,執行:

sudo zerotier-cli join [Network ID]

Network ID 是剛剛建立 ZeroTier 網絡時那個 Network ID)

2.3 安裝 Zerotier One 到 ground station:

2.3a 到此下載 ZeroTier One,安裝到 ground station。

2.3b 安裝後,選取 Join Network,輸入 Network ID:

2.4 認證 Raspberry Pi 與 ground station 的連線請求

返回 ZeroTier 的網絡設定頁面,你會看到兩行新的記錄在頁面下方。

  • 在 “Auth?” 選取
  • 在 “Name” 加入名稱方便識認
  • 記下 Raspberry Pi 與 ground station 的 “Managed IPs”

2.5 更新 arduplane 的連線設定

arduplane 需要知道如何及那裡傳送資料到 ground station,我們要修改 Raspberry Pi 裡這個文件 /etc/default/arduplane。

udo nano /etc/default/arduplane
// Add the IP of ground station:
TELEM1="-A udp:192.168.192.100:14550"

上面的意思是,把資料以 UDP 傳送到 192.168.192.100 port 14550。192.168.192.100 是 ZeroTier 裡 ground station 的 IP,14450 是 ground station 預設的 port 位。

由於 arduplane 要等待 zerotier-one 完成後提供 IP,才能把數據回傳給 ground station。我修改了 /etc/systemd/system/arduplane.service 檔以達到此要求:

sudo nano /etc/systemd/system/arduplane.service

把這兩行加入 [Unit] 之下:

After=network-online.target
Wants=network-online.target

修改後重新載入設定檔:

sudo systemctl daemon-reload

開啓 arduplane:

sudo systemctl start arduplane

讓 arduplane 在開機時能自動開啓:

sudo systemctl enable arduplane

NAVIO官方文件提供更詳細的設定解析

再深入一點,需要看 systemd 的文件。很多開機的問題(為什麼 xxx 沒有啓動?)都與它有關。

2.6 連結 Raspberry Pi 與 ground station

文章整理中…

Bellergy RC

SkHero Spy 600 – 2.7公里飛行

最遠距離2.7公里

上次試過1.5公里的飛行,今次打算試飛3公里,用的也是IBCrazy的Airblade天線。
飛行路線以mission設定好,可讓我專心留意OSD的數據-用電量,距離等等。
到了2.7公里斷了圖,心一驚就回航了。其實只是mission轉向時天線在一些角度下被降落架遮擋所至,感覺上超越3公里都無問題。

電量問題

問題反而是電量支持不了,電量下跌至14.4時我還在海中心,mission設定了時速30公里,這個速度一定返不到來。就立刻轉為手動模式,一於高速返航。裝上了兩顆5400mAh 4S電池,飛行時間也只有10-12分鐘。試過後,覺得Y6機架是為了安全性而放棄了效率的設計。

最高時速95公里

高速返航時在OSD看到速度可達90公里以上,當時油門還未推盡,怕電機支持不了而收油了。感覺上,SkyHero真的是一隻力量型的機。

國產OSD質素很好

因為minimosd的顯示很差,還有兩次無故死掉,很想找一個代替品,直至找到了PlayUAV OSD。顯示很細緻,功能也多,硬件穩定,一試便知道我會繼續用了。何況是國產開發,還是開源project,就更少見,更應該支持了。

硬件設定

Air Antenna: IBCrazy 5.8 GHz Airblade Antenna
Ground Antenna : FatShark Patch Antenna
Frame: Sky Hero Spy 600
Controller : Pixhawk
Firmware : ArduCopter 3.3
Props : APC 12″ MR
Motors : Antigravity MT2814 710KV
Batteries : 4S 5400mAh battery x 2
OSD : PlayUAV OSD
Total distance : 6.2km
Farthest distance : 2.7km

自動導航輔助航拍

要同時控制航拍機飛行及鏡頭的角度是一件困難的事,幸好多數航拍機都有自動導航的功能,只要在軟件中輸入路線,高度,速度等設定,航拍機就能自動航行。拍攝者就能專心地控制鏡頭的方向及角度,往往能拍出更多變化的片段。

我會在APM Planner小心計劃好路線,要特別留意飛行高度和地形的變化,最好是自己熟識的地點,而路線也要在視線範圍之內,有意外時可以立即接手操控。也會把自動返航(RTL)的高度設定得高一點(例如50米)。

我也會設定同一條路線飛行多次(DO_JUMP),第一次飛行時鏡頭向前平放,注要留意飛行高度,是否太接近障外物,做好除時取消導航的準備。當第一圈成功,就能專心於取景了。

在APM Planner裡還有一個很好用的功能(DO_SET_ROI),ROI是region of interest的簡寫,意思是航機的頭永遠向著這一點。上圖的#5就是ROI,所以航機飛到#6, #7機頭就會向著那更個半島。到了#8就取消了ROI,航拍機又會回復向前。

以下是一條短片,一次過飛了兩圈約六分鐘,已得到很多不同角度的片段。

Sky Hero Spy試機,用錯frame type,一飛即反

剛剛砌好隻SkyHero Spy,立刻試機,但一飛即反!

起初以為是電機的次序錯了,又以為是方向錯了,又檢查了螺旋槳方向,全部無問題。

install firmware (Y6 frame),再做accelerometer calibration,再飛,再死。




 

imgres

原來我的frame type是Y6B,必須在Frame Type選Y6B。

 

Screen Shot 2015-10-06 at 2.25.52 am

選好了就成功了。




後來發現在Full Parameter List選Download Param File,把3DR Y6的設定載入,再自己調整不適合的會更方便。

Screen Shot 2015-10-06 at 1.43.32 am

 

GeoFance – 防止飛走

以我一名初學者,GeoFance是一定要設定的,有太多情況會失控,想盡力防止失去愛機。

GeoFance可使意外離開範圍的 multicopter 自動返航或降落,假如自動返航都不能使她回航,(例如機體平衡出現問題,或太大風)離開設定範圍超過100m,便自動降落。搜索範圍可因而大大降低。

(如果我一開始有 setup GeoFence,以前那隻 3DR Y6就不會飛得太遠而失去了。)

為了知道GeoFance的設定範圍,我畫了一張地圖,才發現400m已包括很大的範圍,以秒速20m,只要20秒便可由山腰飛到民居了。所以萬一失控,一分鐘時間是1.2km,實在無可能找回機隻了。

GeoFence

 

Connect Pixwark – minimosd- FPV – GoPro & video switcher

我的QAV500有一個FPV CCD鏡頭,另一個GoPro鏡頭作拍攝之用。

是否可以有一個轉換器,在飛行時轉換鏡頭?FPV可以平時飛行用,GoPro可以取景時看。

就嘗試把 Pixwark + minimosd + FPV (ImmersionRCTransmitter, CCD cam) + GoPro 和 video switcher 連接起來。

connect pixhawk, minimosd, FPV set and video switcher
Connect pixhawk, minimosd, FPV set and video switcher

初步試驗,成功使用遙控轉換鏡頭,但有些問題還未能解決。

1)嘗試以”Relay Switch“轉換,但不是每次都成功,可能要按三四次才有一次成功。我覺得是因為”Relay”是 digital output pin,Video Switcher不能正常接收信號。

2)也試過用”camera trigger“功能,但每次轉換幾秒後,它都會回到原來的鏡頭。是因camera trigger的原意是模擬一次按鍵的動作。

3)OSD不能正常顯示,它開始時正,但當轉換鏡頭後,它的顯示便走了位。


再努力Google一下,發現這不獨是我的問題,也有人問為什麼不能把Ch7的信號轉到Pixhawk的AUX#9呢?

How to assign a receiver channel as a pass-thru Pixhawk ?

The reason some people can’t connect directly to the Rx is because some don’t have enough channel outputs. Also, some Rx’s don’t allow both PPM and PWM outputs.
I’m using a FrSky 4 channel Rx with an 8 channel PPM output. All channels must pass through PPM to the APM/Pixhawk.

不過,看到底好像還沒有人有解決方法,要不就是等有人把program update,另一個方案就是用一個強大一些的receiver。

Actually, you can configure the x8r to output the top 8 channels and use the sbus out for the lower 8 to the pixhawk.

可能都要買一個FrSky X8R試一試了。


部件列表:

Measuring Vibration of HK Dart 250 frame

Pixhawk in the Shell是我以Hobbyking Dart 250砌的試驗機。Dart 250的機架很軟,不像ZMR250以碳纖為㡳板堅固,但它抄了QAV400 clean + dirty frame的設計,把飛控與motors機架以bobbins分間,提供了很好的防震力。

Hobbyking Dart 250 damping

在室內試飛後,查看飛行記錄,AccX及AccY都能保持在+-0.5之內,以這個平價機架來說,是很不錯的數值。(ps. 我的props未有平衡,而且有點破)

Dart 250 vibration log
Dart 250 vibration log

 (有關如何查看震動記錄

Flying Dart 250 at home
Flighting Dart 250 at home