【问题标题】:Using UDP to control robot via python使用UDP通过python控制机器人
【发布时间】:2016-02-24 09:36:07
【问题描述】:

我正在使用 raspberrypi 开发机器人。我一直在寻找一个可以帮助我处理网络问题的库,比如数据包&co。 所以我使用这段代码来选择我收到的命令:

def selectPacket(x):
    if x == '00': 
        return '00'
    elif x == "01":
        Date = datetime.now()
        return str(Date.microsecond)
    elif x == "02":
        return '98'
    elif x == "03":
        return '98'
    elif x == "04":
        return '98'
    elif x == "05":
        return '98'
    else: 
        return '99'

我确定有一个库可以使用 python 制作快速服务器和客户端,我想使用 UDP,因为我将使用的连接将非常不稳定,所以 tcp 是不可能的。

【问题讨论】:

    标签: python udp raspberry-pi robot udpclient


    【解决方案1】:

    因为控制机器人依赖于复杂的部分,例如它们有多少条腿,它们有多少个关节等等,我认为没有你想要的库。而且python上的连接阶段太简单了,无法制作库。

    这里是简单的 UDP 客户端/服务器代码:

    UDP 服务器

    import socket, traceback
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.bind(('', 5000))
    
    print "Listening for broadcasts..."
    
    while 1:
        try:
            message, address = s.recvfrom(8192)
            print "Got message from %s: %s" % (address, message)
            s.sendto("Hello from server", address)
            print "Listening for broadcasts..."
        except (KeyboardInterrupt, SystemExit):
            raise
        except:
            traceback.print_exc()
    

    UDP 客户端

    import socket, sys
    dest = ('<broadcast>', 5000)
    
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    s.sendto("Hello from client", dest)
    print "Listening for replies."
    
    while 1:
        (buf, address) = s.recvfrom(2048)
        if not len(buf):
            break
        print "Received from %s: %s" % (address, buf)
        s.sendto("echo", dest)
    

    另外,如果您有复杂的逻辑,需要拆分成多个部分,可以是通信、控制或 I/O,请参阅事件驱动编程:http://etutorials.org/Programming/Python+tutorial/Part+IV+Network+and+Web+Programming/Chapter+19.+Sockets+and+Server-Side+Network+Protocol+Modules/19.3+Event-Driven+Socket+Programs/)

    【讨论】:

    • 我只需要一个用于数据包处理和 udp 通信的库,其他的我自己做
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2011-04-10
    • 2017-01-25
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多