ios - 无法下载适用于 IOS 的 Tello SDK
问题描述
任何人都知道如何下载适用于 iOS 的 Tello sdk。我访问了链接https://www.ryzerobotics.com/tello,但它没有用
解决方案
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。
推荐阅读
- powershell - 使用 powershell 从 Outlook 下载电子邮件附件
- java - 黑客地球显示输入不匹配和 NZEC 错误
- java - 我创建了一种方法来添加分钟到日期时间,但在 Java 中没有按预期
- google-cloud-platform - 如何获取 GCP 云资源的 URI?
- javascript - 如何在服务器端 Blazor 中使用 Bing Javascript 地图?
- vue.js - 如何使用 vuetify 项目设置 vue-cli 以在 IE 11 上运行?
- php - 从 SQL Server 过程创建的 Http 发布请求未获得授权
- node.js - 如何使用 --experimental-modules 标志永久运行 js
- ionic4 - Razorpay 在 ionic 4 和 android 7.0.0 中不起作用
- youtube-api - YouTube API 未提供准确的视频结果