




主要架构组件和关系:
-
主窗口 (MainWindow): 作为应用程序的宿主和协调者。它加载并管理多个用户控件(UserControls),这些用户控件构成了应用程序的不同功能模块。它还负责建立这些模块之间的事件订阅关系。
-
用户控件模块 (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对象来与特定机器人模型交互。它接收来自其他模块(如StudioControl,StudioCreate)的指令,并将状态更新(连接状态、电机统计)发送回其他模块。 -
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(TcpClient,UdpClient)的原始数据包构建和收发。实现了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的动作管理)。 -
机器人抽象与控制层 (
Robot,ArmRobot_V_1)。 -
通信层 (
RobotCom)。 -
数据模型层 (
Action,Frame,Sequence,LED)。 -
工具/算法层 (
Kinematics,TrajectoryPlanner,Animator,FileIO)。
-
-
异步处理
: 使用
BackgroundWorker处理耗时的操作(如动作播放、部署),保持UI响应。 -
硬件抽象
:
RobotCom和Robot类封装了与特定硬件(Dynamixel舵机、可能的LED控制器)的通信细节。 -
依赖外部库
: 使用
HelixToolkit.Wpf进行3D图形显示。 -
面向对象
: 代码组织在类中,利用继承(如
Robot->RobotCom)和组合。

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