首页 > 解决方案 > 无法下载适用于 IOS 的 Tello SDK

问题描述

任何人都知道如何下载适用于 iOS 的 Tello sdk。我访问了链接https://www.ryzerobotics.com/tello,但它没有用

标签: ios

解决方案


Tello 没有可下载的官方 SDK。您可以在此链接中找到说明,其中提供了通过网络连接向无人机发送 UDP 数据包的详细信息。您可以使用GitHub 上的CocoaAsyncSocket来帮助您创建到套接字的连接,然后将命令作为 ASCII 数据传递给 Tello。

这里有一些示例代码可以帮助你(我今天早些时候在我自己的网站上写的):

var socket = GCDAsyncUdpSocket()
let sendHost = "192.168.10.1"
let sendPort: UInt16 = 8889
let statePort: UInt16 = 8890

首先,创建套接字,一个带有 Tello IP 的字符串,以及几个保存端口号的常量(8889 用于向其发送命令,如果命令成功,还接收诸如“OK”之类的响应。使用 8890用于每秒多次接收来自无人机的遥测数据。

这会将初始的“命令”命令发送到 Tello:

// Set the delegate and dispatch queue
socket.setDelegate(self)
socket.setDelegateQueue(DispatchQueue.main)

// Send the "command" command to the socket.
do {
    try socket.bind(toPort: sendPort)
    try socket.enableBroadcast(true)
    try socket.beginReceiving()
    socket.send("command".data(using: String.Encoding.utf8)!,
                toHost: sendHost,
                port: sendPort,
                withTimeout: 0,
                tag: 0)
} catch {
    print("Command command sent.")
}

您需要确保该类符合 GCDAsyncUdpSocketDelegate。

实现从 Tello 接收数据的委托方法。

func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?) {
let dataString = String(data: data, encoding: String.Encoding.utf8)
if (sock.localPort() == sendPort) {
    print(dataString)
}

if (sock.localPort() == statePort) {
    var telloStateDictionary = [String:Double]()
    let stateArray = dataString?.components(separatedBy: ";")

    for itemState in stateArray! {
        let keyValueArray = itemState.components(separatedBy: ":")
        if (keyValueArray.count == 2) {
            telloStateDictionary[keyValueArray[0]] = Double(keyValueArray[1])
        }
    }
    print(telloStateDictionary)
}

}

设置端口 8890 用于监听遥测:

let receiveSocket = GCDAsyncUdpSocket(delegate: self, delegateQueue: DispatchQueue.main)
    do {
        try receiveSocket.bind(toPort: statePort)
    } catch {
        print("Bind Problem")
    }

    do {
        try receiveSocket.beginReceiving()
    } catch {
        print("Receiving Problem")
    }

运行应用程序。假设您已手动连接到 Tello(就像您使用 Tello 应用程序控制它一样),您应该开始从 Tello 获取信息。

要向它发送更多命令,例如“起飞”或“cw 360”,您可以执行以下操作:

func sendCommand(command: String) {
    let message = command.data(using: String.Encoding.utf8)
    socket.send(message!, toHost: sendHost, port: sendPort, withTimeout: 2, tag: 0)
}

将命令作为字符串传递,这会将其发送到 Tello。


推荐阅读