UDP交互架构

架构介绍

  • 机器人头部处理器是整个机器人控制的核心,它承担着

    1. 收集肢体传感器信息
    2. 控制肢体
    3. 与控制台交互
  • UDP通讯模块是肢体末端信息收集与控制台交互的基础,头部的UDP相关交互内容如下图:

  • 在机器人中,每一个模块(例如脚部,头部感知到信息)都对应一个类。在UDP部分会引用类实例;使用收到的感知数据来调整类的一些属性,然后基于类的另一些属性来输出UDP数据。

文件介绍

  • UDP_Bridge,包含了网络通讯相关的全部信息。在UDP_Bridge初始化中需要两个关键参数:

    1. 需要引入一个字典类型的配置字符串,在这个文件中存储了每个类型信息需要的端口

      def init(self,rootObj=None,config={}):

    2. rootObject,程序根资源。UDP_Bridge将在根资源中寻找目标对象。
  • UDP_Bridge 也有几个关键的函数

数据收函数(回调函数)

  1. L/R_Handler,接收到左右脚UDP数据时运行的函数,用于向上同步数据
  2. C_Handler,用于响应控制台指令

数据发函数

  1. StampSync,用于同步时间戳
  2. InherentDataSync广播机器人内部数据(姿态,关节,传感器数值)
  3. PerceptDataSync 广播机器人感知数据(图像)

获取局域网广播地址的方法

MicroPython方法

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(self.ssid,self.password)

self.ip=wlan.ifconfig()[0]
ip_parts = self.ip.split('.')
ip_parts[-1] = '255'
broadCastIP= '.'.join(ip_parts)

Python方法

def BroadcastAddr():
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        # 连接到一个远程的地址,这个地址可以是任何能够连接的地址,不一定是实际的目标地址
        s.connect(("8.8.8.8", 80))  # 这里选择Google的DNS服务器作为连接的目标
        ip_address = s.getsockname()[0]
        s.close()
        splitIP=ip_address.split('.')
        splitIP[-1]='255'
        return '.'.join(splitIP)
    except socket.error as e:
        print("Error occurred while retrieving IP address:", e)
        return None
作者:admin  创建时间:2024-03-20 09:04
最后编辑:admin  更新时间:2024-04-22 09:38