Page 64 - 《橡塑技术与装备》2025年5期
P. 64
橡塑技术与装备
HINA R&P TECHNOLOGY AND EQUIPMENT
于监听 AGV 的位置信息。update_position() 用于更
新 AGV 的位置信息。此外,还定义了一个内部的数
据结构 Point 用于表示坐标点。
Point 类 :这是一个命名元组,用于表示二维坐
标点,包括 x 坐标和 y 坐标。
1.5.3 方法详解
(1)初始化方法 :在 __init__() 方法中,初始化
了 AGV 的 IP 地址、端口号、ID 等信息,并创建了一
图 2 激光 AGV 运行监控系统 个 UDP 套接字用于通信。同时,还初始化了一些路径
信息和状态信息。
1.5 Python 代码实现细节 (2)发送应答报文方法 : common_AGV_reply()
本文所使用的 Python 代码主要包括三个文件 :
方法用于生成并发送通用的 AGV 应答报文。根据传
LineUtils.py、readFile.py 和 AGV_simulation.py。
入的参数,构造了不同类型的应答报文,并通过 UDP
其中,LineUtils.py 提供了计算直线点、贝塞尔曲线
协议发送给特定的地址。
点 和 贝 塞尔 曲 线 弧 度 的 方 法 ; readFile.py 用 于 解 析
(3)监听位置方法 : listen_position() 方法是一
XML 格式的地图数据 ; AGV_simulation.py 是主要的
个循环,持续监听来自 AGV 的位置信息。它解析收
仿真测试程序。
到的 UDP 数据包,并根据不同的命令码执行相应的操
1.5.1 程序结构 作(包括变量读写和导航控制)。其中,变量读写包括
AGV_simulation.py 是主程序,包括了激光 AGV
读变量、写变量 ;导航控制包括手自动切换、AGV 手
的模拟类 SimulatedAGV 和主函数 main()。 动定位、获取 AGV 当前位置、导航控制、查询 AGV
LineUtils.py 是一个工具类,提供了计算直线点、
运行状态 / 导航状态等。
贝塞尔曲线点和贝塞尔曲线弧度的方法。这些方法可
下面对上述操作做详细说明。
以用于在给定起点、终点和控制点的情况下生成一系 读变量,目前已有的读变量包括告警信息、AGV
列直线或贝塞尔曲线上的坐标点,以及计算这些点的
状态、AGV 叉臂高度、AGV 叉臂状态、电池状态。
弧度。它利用了数学公式来计算贝塞尔曲线上的点和
写变量,目前已有的写变量包括设置叉臂高度、
弧度,以便在机器人导航系统中生成平滑的路径。
设置区域、服务器心跳、远程关机、吸合、重新下发
ReadFile.py 是一个读取 XML 文件并解析其中内
导航、设定管控状态。
容的类。它的主要功能是解析给定 XML 文件中的点、
获取 AGV 当前位置,如果路径点 ID 为空,当前
控制点和路径信息,并将其存储在相应的数据结构中。
位置默认为 AGV 停车点。
具体来说,它会提取 XML 文件中的点的名称、x 和 y
导航控制,操作包括开始导航、取消导航、暂停
坐标,控制点的坐标,以及路径的长度和最大速度。
导航、继续导航、创建导航任务并暂停导航 5 种。下
这些数据被存储在字典中,以便后续的处理和使用。
面以 “ 开始导航 ” 为例进行说明,先获取指定路径的
1.5.2 类与数据结构 所有路径和路径点 ID,然后根据路径,读取 XML 文
SimulatedAGV 类 :该类用于模拟 AGV 的行为。
件,获取路径长度和最大速度。等分点的计算是通过
它包括了初始化方法 __init__() 用于初始化 AGV 的
路线长度 / 最大速度,先计算出运行时长。假设前端
各项参数(包括 IP 地址、端口号、AGV ID 等)和网
页面每隔 3 s 刷新一次,如果运行时长 <3 s,等分点
络连接。其中,points_data、control_points_data 和
固定为 1;否则,等分点 = 运行时长 /3。最后根据路径,
path_data 分别存储了地图上的点坐标、控制点坐标
获取控制点坐标,调用 LineUtils 工具类计算贝塞尔
和路线长度与最大速度等信息。在类的实例化过程中,
曲线上的点和弧度。
会读取一个 XML 文件,解析其中的数据并传递给 __
查询 AGV 运行状态,包括位置的 X 坐标、位置
init__ 函数,以初始化 AGV。common_AGV_reply()
的 Y 坐标、位置的朝向角度等。
用于发送通用的 AGV 应答报文。listen_position() 用
查询 AGV 导航状态,状态包括无到导航点任务、
5
·20· 第 51 卷 第 期