[Tello] 群飛控制與Swift playgrounds

來到了群飛控制。

群飛屬於Tello edu才有的功能,因為他只能運作在搭載了Tello SDK 2.0以上版本的Tello,因此如果只有Tello的人,這篇就可以先跳過囉。

控制群飛,我目前有的、且成功率較高的方式是透過DJI他們出的群飛控制程式Multi-Tello-Formation 進行控制,因此這邊會先以這個為主,另外Swift Playgrounds本身也支援群飛,但因為他是搭配教學介面的方式進行使用,因此會到後面另外介紹。

環境準備

  1. 多台Tello edu飛機
  2. Wifi路由器(不一定要連上外網,只是需要一個中繼將電腦指令傳給所有的Tello)
  3. 一台筆電(控制程式)

Multi-Tello-Formation

Multi-Tello-Formation是DJI他們提供,以python設計好的群飛程式。可以點選上面連結後,進入頁面,並按右邊的code,選單跳下後會有個Download Zip,點選後就會下載整個資料的壓縮檔了。

壓縮檔下載後,解壓縮後可以在資料夾中看到『Tello-Swarm(.exe).zip』的壓縮檔,我們還需要再將他解壓縮。解壓縮後會出現四個檔案,這邊我們會需要用到的資料夾為『multi_tello_test』,但這邊我們需要先將所有的Tello edu飛機與Wifi路由器相連。而這個操作,目前使用起來比較明確可以成功的方法是使用前面介紹的Packet Sender進行路由器的設定,前面解壓縮的Tello-Swarm(.exe)資料夾裡面有個『ap_setup』的資料夾,可以在裡面的txt檔中輸入路由器帳號密碼,並進行Tello的修改,但自己實測的結果是成功機會不高,所以這邊還是以Packet Sender為主。

  1. 先將Tello開啟,並將筆電連上Tello提供的Wifi。
  2. 開啟Packet Sender,輸入IP: 192.168.10.1,Port: 8889,傳輸:UDP。
    上面ASCII的部分輸入wifi XXXXXXX OOOOOOO的文字(XXXXXXX表示Wifi帳號、OOOOOOO表示Wifi密碼。
  3. 輸入完之後按Send,就會將指令輸出囉。
    輸出後會看到下排出現我們傳送的指令與接收的回覆,如果成功的話,他會說已經接收到指令,機器會於3秒後重新開機。等他開機後就會直接連上我們的路由器,而這時候我們就可以反覆操作,直到所有機器設定完(中間可以把設定好的機器先關機)

接下來,我們就來設定我們希望Tello群飛的動作囉。

開啟前面已經解壓縮好的Tello-Swarm(.exe)資料夾,再開啟multi_tello_test資料夾。裡面會看到兩個檔案,分別是『Tello_EDU_CMD.txt』以及『multi_tello.exe』。前面一個檔案用來設定Tello的飛行狀態,後面一個用於執行Tello_EDU_CMD.txt中的指令。開啟Tello_EDU_CMD.txt之後,可以看到預先設定好的一串指令:(如果沒有可以複製貼上)

scan 1
battery_check 20
correct_ip
1=0TQDF6GBMB5SMF
*>takeoff
sync 10
1>land

這裡面的說的是:
「scan 1」:開始運作後越來確認會有幾台飛機。比方說我們有兩台要進行群飛就輸入scan 2,100台要群飛就輸入scan 100(我沒試過100台…)
「battery_check 20」:會先檢查電池剩餘電量,如果低於20%的話,該飛機則不會運作。20也可以改成別的數值。
「correct_ip」:確認IP。
「1=0TQDF6GBMB5SMF」:定義第一台飛機的SN碼。每台飛機的電池盒內都有一組特定的SN碼,輸入後程式會去抓那台飛機,確認讀取到飛機後才會進行下一步動作。如下圖兩台Tello的代碼不同,這時候我們就要寫:
1=0TQZH66ED0094Z
2=0TQZH66ED0096P
一台飛機一行,不要連著寫唷。


*>takeoff
sync 10
1>land

這幾個一起說,一起比較會比較好。
首先『*』代表「所有飛機」,所以「*>takeoff」表示所有飛機升空,而下方的1>land則表示第一台飛機land(降落)。sync 10表示中間停頓10秒鐘,類似一般程式的delay(10)或是time.sleep(10)。

這裡就是他原本提供的指令說明,而其他的指令如flip f(前翻)等,則可以查他的SDK資料後添加進來。

這邊提供一個小示範操作:

scan 2
battery_check 20
correct_ip
1=0TQZH66ED0094Z
2=0TQZH66ED0096P
*>takeoff
sync 10
1>land
sync 10
2>land

先掃描
檢查電池電量大於20
確認ip
確認讀取到的ip對應的機器sn碼
全部起飛
等待十秒
1號飛機降落
等待十秒
2號飛機降落

當指令寫好了,點選multi_tello.exe,我們的Tello就會依照指令運動囉!

Swift playgrounds

Swift playgrounds是iOS的一款程式學習軟體,支援iPad和iPhone,裡面有針對Tello的教學課程。

開啟後,他有不同的教學章節與右邊的教學示範。像我們直接跳到群飛的教學區域,則會從一開始的Wifi設定,到每台飛機的SN碼登錄,都有一步一步的指令和教學動畫可供參考。而這些程式碼也能實際用於Tello的操控,當我們今天將載具的Wifi連接上Tello之後,點選下方的「執行我的程式碼」,飛機就會開始運作,因此教師如果需要進行教學和示範,也可以透過此套程式進行模擬與程式撰寫。

當所有教學結束後,他會提供一個自由撰寫程式的頁面,因此這邊我們就能隨意地寫我們希望運作的內容囉。

以上的操作是針對Tello的控制教學,雖然自己還是比較喜歡自己做的飛機,但這台給初學、希望認識如何操作的學生進行使用,困難度確實比較低,成功率也高上許多。

其他參考資料:

https://tello.oneoffcoder.com/prerequisites.html

https://mypages.valdosta.edu/lichen/Python3/DJI.htm

One comment

  1. 趙珩宇老師你好,我想請問如果我的無人機是Tello talent,能否使用Swift playgrounds去完成你文章中的的群飛動作呢?

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s