主要架构组件和关系:
主窗口 (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 架构图 (简化版,突出主要交互)