




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