【AI解析】 WPF 应用程序控制桌面机械臂

发布于:2025-06-13 ⋅ 阅读:(14) ⋅ 点赞:(0)

主要架构组件和关系:

  1. 主窗口 (MainWindow): 作为应用程序的宿主和协调者。它加载并管理多个用户控件(UserControls),这些用户控件构成了应用程序的不同功能模块。它还负责建立这些模块之间的事件订阅关系。

  2. 用户控件模块 (UserControls - Studio...):

  • 轨迹规划部分使用 TrajectoryPlanner 生成几何路径,并将其转换为关节空间数据。

  • 通过 TrajectoryData 事件将轨迹发送给 StudioGraphics 显示。

  • 通过 Playing 事件在测试轨迹时更新 StudioGraphics

  • 动态生成UI来显示和编辑每个 Frame 的参数(时长、延迟)。

  • 使用 BackgroundWorker 异步模拟播放 (animate) 和部署 (deployer) 动作序列。

  • 在模拟播放时,通过 Playing 事件更新 StudioGraphics

  • 在部署时,通过 Deploying 事件将 Frame 数据发送给 StudioComms

  • 使用 FileIO 进行动作文件的保存和加载。

  • 可能会使用 Animator (尽管在提供的 Animate_DoWork 中有自己的插值逻辑)。

  • StudioToolBar

    : 提供顶部工具栏按钮,用于在不同的主视图/模块之间切换 (通过触发 ToolClicked 事件通知 MainWindow)。

  • StudioComms

    : 处理与机器人硬件的通信(USB 或 WIFI/UDP)。它实例化一个 ArmRobot_V_1 对象来与特定机器人模型交互。它接收来自其他模块(如 StudioControlStudioCreate)的指令,并将状态更新(连接状态、电机统计)发送回其他模块。

  • StudioControl

    : 提供机器人手动控制界面(关节滑块 - FK,笛卡尔坐标滑块 - IK)。它使用 Kinematics 类进行运动学计算。当滑块值改变时,它触发事件通知 StudioComms 发送指令,并通知 StudioGraphics 更新3D模型。

  • StudioGraphics

    : 使用 HelixToolkit.Wpf 显示机器人的3D模型。它响应关节角度变化(来自 StudioControl 或 StudioCreate 的动画播放)来更新模型姿态,并能显示由 StudioApplication 生成的轨迹。

  • StudioCreate

    : 核心的动作序列创建和管理模块。用户可以创建由多个 Frame 组成的 Action。它负责:

  • StudioStatus

    : 显示应用程序的状态信息和警告。它接收来自其他模块的状态更新。

  • StudioMotorStats

    : 显示从 StudioComms 获取的电机统计数据(温度、电池、错误、扭矩)。

  • StudioApplication

    : 包含特定应用程序逻辑,如井字棋游戏和轨迹规划。

  • StudioCourseView & CourseViewer

    : 用于课程内容导航和显示。StudioCourseView (目录) 触发 TopicChanged 事件,CourseViewer (内容显示) 响应此事件来加载图片。

  • 核心逻辑与数据模型类:

    • RobotCom

      : 底层通信基类,处理USB(SerialPort)和WIFI/UDP(TcpClientUdpClient)的原始数据包构建和收发。实现了Dynamixel协议1.0和2.0以及一个自定义的"Luci"协议的细节。

    • Robot (继承 RobotCom)

      : 更高级的机器人抽象。管理动作(Action)和LED序列的异步播放(使用 BackgroundWorker)。处理 Frame 的记录、归中、使能/禁用机器人等。使用 FileIO

    • ArmRobot_V_1 (继承 Robot)

      : 特定机器人模型的实现,定义了其舵机ID、类型、波特率、中立位、通信分组等配置。

    • Action (继承 List<Frame>)

      : 表示一系列机器人运动帧。管理总时长、有效性验证等。

    • Frame

      : 代表机器人动作的一个关键帧或运动段,包含目标位置、速度、时长、延迟等。包含验证逻辑。

    • Sequence

      : 包含一个 Action 列表和一个 LED 效果列表,用于编排更复杂的序列。

    • LED & eye

      : 定义LED的状态(颜色、时长)和数据包生成逻辑(可能针对PCA控制器)。

    • Kinematics

      : 实现正向运动学(FK)和逆向运动学(IK)计算,以及齐次变换矩阵运算。

    • TrajectoryPlanner

      : 生成预定义的几何轨迹(直线、圆等),并使用 Kinematics 将其转换为关节空间坐标。

    • Animator

      : (根据其代码)用于将一个 Action (一系列 Frame) 插值为更平滑的动画数据点。

    • FileIO

      : 提供对象的二进制序列化和反序列化功能,以及深拷贝。

  • 配置文件与入口:

    • App.cs

      : WPF应用程序入口点,启动 MainWindow

    • app.config

      : 配置应用程序支持的 .NET Framework 版本。

    架构特点总结:

    • WPF应用

      : 基于Windows Presentation Foundation。

    • 模块化设计

      : 功能被划分到不同的 UserControl 中,主窗口 MainWindow 进行组装。

    • 事件驱动

      : 模块间通信主要通过C#事件和委托实现,实现了一定程度的解耦。

    • 分层结构 (隐式)

      :

      • UI层 (XAML 和 UserControls 的C#后台)。

      • 应用逻辑/控制层 (UserControls 中的业务逻辑,如 StudioCreate 的动作管理)。

      • 机器人抽象与控制层 (RobotArmRobot_V_1)。

      • 通信层 (RobotCom)。

      • 数据模型层 (ActionFrameSequenceLED)。

      • 工具/算法层 (KinematicsTrajectoryPlannerAnimatorFileIO)。

    • 异步处理

      : 使用 BackgroundWorker 处理耗时的操作(如动作播放、部署),保持UI响应。

    • 硬件抽象

      RobotCom 和 Robot 类封装了与特定硬件(Dynamixel舵机、可能的LED控制器)的通信细节。

    • 依赖外部库

      : 使用 HelixToolkit.Wpf 进行3D图形显示。

    • 面向对象

      : 代码组织在类中,利用继承(如 Robot -> RobotCom)和组合。

    Mermaid 架构图 (简化版,突出主要交互)