操作系统: Ubuntu 16.04
我正在尝试创建一个Python程序,它可以控制多个Ryze Tello无人机。这些都是非常简单的无人机,可以通过连接计算机通过Wi端口和发送文本命令来控制。
例如,这是一个简单的程序,在这个程序中,一旦连接到无人机的will网络,它就会简单地向无人机发送“起飞”命令。
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto('command', 0, ('192.168.10.1', 8889))
sock.sendto('takeoff', 0, ('192.168.10.1', 8889))
现在,我的目标是能够同时向多个这样的无人机发送命令(例如,让它们执行计划好的“舞蹈”例程)。我有多个Wi连接到我的电脑,每个连接到一个单独的无人机。然而,问题是每个无人机都有固定的IP和端口,如上文所示。我已经尝试了SSH进入无人机,以改变其IP,但没有运气,并支持线不确定它是否有可能与Tello。然而,由于连接在我的计算机上仍然被清晰地处理,所以必须有一种方法分别向无人机发送命令。至于怎么做,我不确定,因此我为什么要寻求帮助。
发布于 2018-05-05 01:22:29
为每个无人机创建一个单独的socket
对象,其中每个socket
被bind()
编辑到无人机连接的特定WiFi适配器的本地IP上。然后,您可以根据需要通过每个socket
命令。即使无人机都具有相同的IP和端口,bind
也确保每个命令都通过适当的WiFi网络发送到它所针对的正确的无人机。
就像这样:
import socket
sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock1.bind(('WiFi_1_IP', 8889));
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock2.bind(('WiFi_2_IP', 8889));
sock3 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock3.bind(('WiFi_3_IP', 8889));
...
sock1.sendto('command', 0, ('192.168.10.1', 8889))
sock2.sendto('command', 0, ('192.168.10.1', 8889))
sock3.sendto('command', 0, ('192.168.10.1', 8889))
...
sock1.sendto('takeoff', 0, ('192.168.10.1', 8889))
sock2.sendto('takeoff', 0, ('192.168.10.1', 8889))
sock3.sendto('takeoff', 0, ('192.168.10.1', 8889))
...
https://stackoverflow.com/questions/50182936
复制相似问题