[ Tello ] 以Packet Sender 控制 Tello & 發現SDK 3.0

在進入正題之前,我們可以先看看前一篇 [Tello] Tello 的電腦程式撰寫與操作 裡面介紹的DroneBlocks裡面出現過的程式指令。

這邊我們將DroneBlocks上面關於Tello控制的方塊都擺出來,可以看到如左上方的"takeoff after 5 seconds",在右邊會變成『 takeoffAfter(5) 』的函式;單純的起飛(takeoff)則變成『 takeoff() 』,看起來是不是簡單又容易處理呢?
其實現在在使用Python或是其他程式時,我們多半可以透過許多專家設計的函式庫(Library)減少許多程式撰寫時的困難,同時加速我們的專案製作流程。

下面就來介紹有哪些方式可以讓我們透過Python控制Tello吧

基本UDP傳輸

用這個分類來說控制Tello其實有點奇怪,但因為便於解釋Tello的傳輸協定,所以將這個協定直接列為一種方式,順便說明一下UDP的傳輸方式。

UDP稱為『使用者數據傳輸協定』(User Datagram Protocol,翻譯成中文都會有點怪,大家還是記UDP即可)。與UDP相對的就是TCP,也是我們一般在設定網路時最常看到的單詞,TCP(Transmission Control Protocol, 傳輸控制協定),提供連接導向(Connection -oriented)程序(Process)之間的可靠性(Reliable)連線服務。TCP 提供標準通訊介面,可讓不同的電腦之間連線,為了講求可靠性,在傳輸時會需要驗證資料的正確性;但UDP的傳輸協定則不會進行資料的驗證,因此在傳輸速度上較TCP快,但如果遇到資料重覆、資料未依序到達、資料遺失等等問題,必須由使用者自行解決。

因為Tello是以UDP的方式進行資料的傳遞,所以我們在操作Tello時,才需要將它開啟,並且透過Wifi連接上Tello,完成連線。也因此,在基本的Tello控制上,我們除了前面所提到的APP以及軟體外,我們還能用其他比較特殊的方式進行控制,像是直接透過一些TCP/IP、UDP檢測軟體,如Packet Sender、SocketTest、ProcessTCPSummary、PortExpert等軟體進行控制。

以上的軟體多半都是開源軟體,而這邊我以我覺熟悉的Packet Sender進行說明。Packet Sender可以作為網路TCP/IP、UDP檢測所用,而因為介面清楚,所以就以這個進行Tello的控制。

Packer Sender這套軟體支援Windows、Mac、Linux,所以在每台電腦上都可以使用,我們可以上他的網站直接下載並安裝。

安裝好之後,剛開啟Packet Sender的時候,上面會有許多預設的指令,這些不用擔心、不用害怕,只要全選後按右邊的「Delete Saved Packet」即可清除下面看起來很可怕的資訊,然後接下來我們就能專心設定給Tello飛行用的指令囉。

我們可以在Tello的官方網站中找到上面那份文件( https://www.ryzerobotics.com/zh-tw/tello/downloads ),打開文件後在第三頁的地方會有指令表可以參考。

接下來我們回到Packet Sender這套軟體上。在Packet上首先我們需要在中間的Address處輸入:192.168.10.1,然後在他後面一欄Port輸入:8889,接下來後面原本是TCP的部分改成UDP,基本設定就完成了。

Address 輸入:192.168.10.1

Port 輸入:8889

TCP改UDP

接下來我們就可以參考Tello提供的指令操控Tello了。

Command

首先先輸入「command」到ASCII,輸入完之後會再HEX那邊看到「63 6f 6d 6d 61 6e 64」的代碼。另外我們可以在Name的地方也輸入Command,然後點選右邊的「Save」,就會儲存到下方欄位裡了。

接下來我們將Wifi連上Tello,然後按下方欄位Command左邊的「Send」,我們就會在下面的資訊中看到如下圖底下所呈現的資訊。

首先最底部一欄,這邊我用Command輸入後,會出現「43 6f 6d 6d 61 6e 64」的16進位代碼,而command輸入後則是「63 6f 6d 6d 61 6e 64」。也因為送出的代碼不同,所以第一個並沒有收到Tello提供的回應。這邊如果操作時也出現無回應的狀況,也可以針對大小寫、全形、半形等字體進行確認。

另外ASCII文字轉換16位元表示的資料和其他文字轉換也可以透過下方網站深入了解唷。 https://coding.tools/tw/ascii-to-hex

輸入command這串訊息並傳送出去後,則會收到回應「OK」(下往上,第三欄 ASCII的「OK」),這樣代表訊息傳遞成功,且執行完成。

接下來可以試試看「battery?」的詢問電量操作,在下一欄則會跳出100\r\n,表示目前電量100%。其他的代碼如起飛的(takeoff)、降落的(land)、翻滾(flip)、以多少速度移動到什麼位置(go x y z speed)、設定Wifi帳號密碼(wifi ssid pass)等,則可以參考上面所提供的官方文件 “tello-sdk-2.0-user-guide”在第三頁之後找到囉。

那東西有點多,python操作就放在下一篇。

偷偷發現…上面我在輸入「sdk?」的時候,出來的回應值是「30」,代表網路上目前找到的SDK 2.0的東西其實是過時的,目前已經更新到SDK 3.0了。所以花了些時間將3.0的使用手冊找出來了。這個版本最讓我興奮的是,他支援ESP32,所以其他的模組也可以一同連動了。(下方檔案第6頁開始)

One comment

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

發表迴響

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

WordPress.com 標誌

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

Twitter picture

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

Facebook照片

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

連結到 %s