Service Registry
controller.shared.config.service_registry
服务注册配置 - Shared Config 注册所有应用服务到DI容器 - 简化版
SerialApplicationService
SerialApplicationService(message_display: MessageDisplay, serial_domain_service: SerialDomainService)
Bases: BaseService
串口应用服务。
只负责串口连接管理和状态协调,不处理数据收发。 数据收发由各个Domain服务直接使用SerialDomainService。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
connection_status_changed |
pyqtSignal
|
串口连接状态变化信号。 |
port_list_updated |
pyqtSignal
|
端口列表更新信号。 |
初始化串口应用服务。
源代码位于: src/controller/controller/application/services/serial_application_service.py
27 28 29 30 31 32 33 34 | |
refresh_ports
refresh_ports() -> List[str]
刷新可用端口列表。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 可用端口名称列表。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
get_port_info
get_port_info(port_name: str) -> Optional[Dict[str, str]]
获取指定端口信息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
port_name
|
str
|
端口名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[Dict[str, str]]
|
Optional[Dict[str, str]]: 端口信息字典,失败时返回None。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
51 52 53 54 55 56 57 58 59 60 61 62 63 64 | |
get_available_ports
get_available_ports() -> List[str]
获取当前可用端口列表(不刷新)。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 可用端口名称列表。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
66 67 68 69 70 71 72 73 74 75 76 | |
get_current_port
get_current_port() -> Optional[str]
获取当前连接的端口名称。
返回:
| 类型 | 描述 |
|---|---|
Optional[str]
|
Optional[str]: 端口名称,未连接时返回None。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
78 79 80 81 82 83 84 | |
connect_serial
connect_serial(port: str, config: Dict[str, Any]) -> bool
连接串口。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
port
|
str
|
串口名称。 |
必需 |
config
|
Dict[str, Any]
|
串口配置参数。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
连接是否成功。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | |
disconnect_serial
disconnect_serial() -> bool
断开串口连接。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
断开是否成功。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
106 107 108 109 110 111 112 113 114 115 116 117 118 119 | |
is_connected
is_connected() -> bool
检查串口是否已连接。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否已连接。 |
源代码位于: src/controller/controller/application/services/serial_application_service.py
121 122 123 124 125 126 127 | |
cleanup
cleanup() -> None
清理资源。
源代码位于: src/controller/controller/application/services/serial_application_service.py
145 146 147 148 149 150 151 | |
CommandHubService
CommandHubService(message_domain_service: MessageDomainService, motion_runner: MotionRunner, serial_domain_service: SerialDomainService, message_display: MessageDisplay, motion_constructor: MotionConstructor)
Bases: BaseService
命令中心服务 - Application层。
职责: 1. 分发用户命令到不同的处理逻辑 2. 协调运动任务的准备和执行 3. 管理消息显示
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
message_domain_service |
消息领域服务。 |
|
motion_runner |
运动执行器。 |
|
serial_domain_service |
串口领域服务。 |
|
motion_constructor |
运动构造器。 |
初始化命令中心服务。
源代码位于: src/controller/controller/application/services/command_hub_service.py
28 29 30 31 32 33 34 35 36 37 38 39 | |
single_send_command
single_send_command(**kwargs: Any) -> bool
发送单个命令。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
**kwargs
|
Any
|
命令参数,将被编码为消息帧。 |
{}
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否发送成功。 |
源代码位于: src/controller/controller/application/services/command_hub_service.py
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | |
command_distribution
command_distribution(config_dict: dict)
分发用户命令到对应的处理逻辑。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config_dict
|
dict
|
配置字典,包含 control, mode 等参数。 |
必需 |
源代码位于: src/controller/controller/application/services/command_hub_service.py
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | |
get_current_position
get_current_position()
请求获取当前位置。
源代码位于: src/controller/controller/application/services/command_hub_service.py
113 114 115 116 117 | |
run_teach_record
run_teach_record(angles_list: list)
运行示教记录(播放示教轨迹)。
流程: 1. 准备示教运动任务 2. 获取当前位置 3. 异步回调时自动构建平滑轨迹并执行
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angles_list
|
list[list[float]]
|
示教记录的角度列表 [[θ1,...,θ6], ...]。 |
必需 |
源代码位于: src/controller/controller/application/services/command_hub_service.py
119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | |
run_motion_sequence
run_motion_sequence()
开始执行运动序列(用于运动规划方案)。
流程: 1. 查询当前位置 2. 收到位置反馈后,MotionConstructor 自动规划所有任务
源代码位于: src/controller/controller/application/services/command_hub_service.py
141 142 143 144 145 146 147 148 149 | |
MessageResponseService
MessageResponseService(message_display: MessageDisplay, serial_domain_service: SerialDomainService, message_domain_service: MessageDomainService, robot_state_service: RobotStateDomainService, motion_runner: MotionRunner, motion_constructor: MotionConstructor, trajectory_planner: TrajectoryPlanningService, trajectory_repository: TrajectoryRepository)
Bases: BaseService
消息响应服务 - Application层。
处理串口接收的数据,解码并更新状态服务。
职责: 1. 接收串口数据 2. 拼接缓冲,检测完整帧 3. 解码消息 4. 更新状态服务(统一入口) 5. 根据操作模式分发处理(执行/保存/预览)
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
get_current_position_signal |
pyqtSignal
|
获取当前位置信号(用于UI显示)。 |
trajectory_preview_signal |
pyqtSignal
|
轨迹预览数据信号。 |
初始化消息响应服务。
源代码位于: src/controller/controller/application/services/message_response_service.py
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | |
handle_message
handle_message(message_in: str)
处理接收到的消息。
流程: 1. 拼接缓冲 2. 检测完整帧(AA55...0D0A) 3. 解码消息 4. 更新状态服务 5. 处理运动消息
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message_in
|
str
|
输入的原始串口数据。 |
必需 |
源代码位于: src/controller/controller/application/services/message_response_service.py
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | |
handle_motion_message
handle_motion_message(current_position)
处理运动消息(获取当前位置的回复)。
根据状态决定行为: 1. 有待处理的操作 → 调用对应的处理器 2. 无操作 → 仅发射信号供UI显示
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
current_position
|
list[float]
|
当前关节位置(编码器值)。 |
必需 |
源代码位于: src/controller/controller/application/services/message_response_service.py
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | |
MotionPlanningApplicationService
MotionPlanningApplicationService(domain_service: MotionPlanningDomainService, repository: MotionPlanRepository, motion_constructor: MotionConstructor, command_hub: CommandHubService, message_response: MessageResponseService, trajectory_repository: TrajectoryRepository)
Bases: QObject
运动规划应用服务。
职责: 1. 协调Domain和Infrastructure 2. 自动保存 3. 发送UI更新信号 4. 执行运动规划(单点和整体方案) 5. 处理"获取位置"功能
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
plan_list_changed |
pyqtSignal
|
方案列表变化信号。 |
current_plan_changed |
pyqtSignal
|
当前方案切换信号。 |
point_list_changed |
pyqtSignal
|
节点列表变化信号。 |
current_position_received |
pyqtSignal
|
当前位置数据信号(弧度值)。 |
trajectory_preview_signal |
pyqtSignal
|
轨迹预览数据信号(轨迹数据,上下文)。 |
初始化运动规划应用服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
domain_service
|
MotionPlanningDomainService
|
运动规划领域服务。 |
必需 |
repository
|
MotionPlanRepository
|
运动方案仓储。 |
必需 |
motion_constructor
|
MotionConstructor
|
运动构造器。 |
必需 |
command_hub
|
CommandHubService
|
命令中心服务。 |
必需 |
message_response
|
MessageResponseService
|
消息响应服务。 |
必需 |
trajectory_repository
|
TrajectoryRepository
|
轨迹仓储。 |
必需 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | |
create_plan
create_plan(name: str)
创建方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
方案名称。 |
必需 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
115 116 117 118 119 120 121 122 123 124 125 | |
delete_plan
delete_plan(index: int) -> bool
删除方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=删除成功, False=删除失败(违反业务规则)。 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | |
switch_plan
switch_plan(index: int)
切换方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
目标方案索引。 |
必需 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
144 145 146 147 148 149 150 151 152 153 | |
rename_plan
rename_plan(index: int, new_name: str)
重命名方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
new_name
|
str
|
新名称。 |
必需 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
155 156 157 158 159 160 161 162 163 164 | |
add_point
add_point(point_data: dict)
添加节点
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
168 169 170 171 172 | |
delete_point
delete_point(index: int)
删除节点
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
174 175 176 177 178 | |
move_point_up
move_point_up(index: int)
上移节点
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
180 181 182 183 184 | |
move_point_down
move_point_down(index: int)
下移节点
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
186 187 188 189 190 | |
update_point
update_point(index: int, point_data: dict)
更新节点
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
192 193 194 195 196 | |
get_single_point
get_single_point(index: int) -> dict
获取单个节点数据。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
dict |
dict
|
节点数据字典,如果索引无效则返回None。 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
198 199 200 201 202 203 204 205 206 207 208 209 210 | |
execute_single_point
execute_single_point(index: int)
执行单个节点。
流程: 1. 获取节点数据 2. 解析为任务列表 3. 准备执行操作 4. 查询当前位置
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 | |
execute_motion_plan
execute_motion_plan()
执行整个运动规划方案。
流程: 1. 获取所有节点的任务 2. 准备执行操作 3. 查询当前位置,触发执行
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | |
request_current_position
request_current_position()
请求获取当前位置(仅用于UI显示)。
流程: 1. 发送 0x07 命令查询位置 2. 串口返回数据后,MessageResponseService 检查 has_pending_operation() 3. 因为没有调用 prepare_operation,所以返回 False 4. MessageResponseService emit get_current_position_signal 5. 本Service转发信号给ViewModel
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
389 390 391 392 393 394 395 396 397 398 399 | |
save_node_trajectory
save_node_trajectory(node_index: int) -> bool
保存单个节点的轨迹。
流程: 1. 获取节点任务 2. 准备保存操作 3. 查询当前位置 4. MessageResponseService 自动完成保存
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
node_index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True: 准备成功, False: 准备失败。 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 | |
save_plan_trajectory
save_plan_trajectory() -> bool
保存整个方案的轨迹
流程: 1. 获取方案所有任务 2. 准备保存操作 3. 查询当前位置 4. MessageResponseService 自动完成保存
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
True |
bool
|
准备成功 |
False |
bool
|
准备失败 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 | |
preview_node_trajectory
preview_node_trajectory(node_index: int) -> bool
预览单个节点的轨迹曲线
流程: 1. 获取节点任务 2. 准备预览操作 3. 查询当前位置 4. MessageResponseService 自动发射预览信号
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
node_index
|
int
|
节点索引 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
True |
bool
|
准备成功 |
False |
bool
|
准备失败 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 | |
preview_plan_trajectory
preview_plan_trajectory() -> bool
预览整个方案的轨迹曲线
流程: 1. 获取方案所有任务 2. 准备预览操作 3. 查询当前位置 4. MessageResponseService 自动发射预览信号
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
True |
bool
|
准备成功 |
False |
bool
|
准备失败 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 | |
load_local_trajectory
load_local_trajectory(file_path: str) -> bool
从 plans 目录加载轨迹文件,作为示教节点添加
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file_path
|
str
|
轨迹文件的完整路径或文件名 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
True |
bool
|
加载成功 |
False |
bool
|
加载失败 |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 | |
get_local_trajectory_files
get_local_trajectory_files() -> List[str]
获取所有可用的本地轨迹文件
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
文件名列表(不带扩展名) |
源代码位于: src/controller/controller/application/services/motion_planning_application_service.py
641 642 643 644 645 646 647 648 | |
CameraApplicationService
CameraApplicationService(camera_service: CameraDomainService, recognition_service: RecognitionDomainService, hand_eye_service: HandEyeTransformDomainService, kinematic_service: KinematicDomainService, robot_state_service: RobotStateDomainService, motion_constructor: MotionConstructor, command_hub: CommandHubService, message_display: MessageDisplay)
Bases: QObject
摄像头应用服务。
协调摄像头Domain服务、检测服务和消息显示,提供统一的查询接口,避免ViewModel直接访问Domain层。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
connection_status_changed |
pyqtSignal
|
摄像头连接状态变化信号。 |
detection_status_changed |
pyqtSignal
|
检测状态变化信号。 |
初始化摄像头应用服务。
源代码位于: src/controller/controller/application/services/camera_application_service.py
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
connect_camera
connect_camera()
连接摄像头。
源代码位于: src/controller/controller/application/services/camera_application_service.py
64 65 66 67 68 69 70 71 72 73 74 75 76 | |
disconnect_camera
disconnect_camera()
断开摄像头。
源代码位于: src/controller/controller/application/services/camera_application_service.py
78 79 80 81 82 83 84 85 86 87 88 89 | |
start_detection
start_detection()
开始检测。
源代码位于: src/controller/controller/application/services/camera_application_service.py
91 92 93 94 95 96 97 98 99 100 101 102 103 | |
stop_detection
stop_detection()
停止检测。
源代码位于: src/controller/controller/application/services/camera_application_service.py
105 106 107 108 109 110 111 112 113 114 115 116 | |
move_to_detected_part
move_to_detected_part()
运动到检测到的零件位置。
完整流程: 1. 检查检测状态 2. 获取检测结果 3. 获取当前关节角度 4. 手眼标定计算目标关节角度 5. 构建运动任务 6. 触发运动执行 7. 停止检测(可选)
源代码位于: src/controller/controller/application/services/camera_application_service.py
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 | |
is_camera_connected
is_camera_connected() -> bool
检查摄像头是否连接。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=已连接, False=未连接。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
272 273 274 275 276 277 278 | |
is_color_available
is_color_available() -> bool
检查彩色图像是否可用。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=有数据, False=无数据。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
280 281 282 283 284 285 286 | |
is_depth_available
is_depth_available() -> bool
检查深度图像是否可用。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=有数据, False=无数据。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
288 289 290 291 292 293 294 | |
get_latest_color_image
get_latest_color_image() -> Optional[np.ndarray]
获取最新彩色图像。
返回:
| 类型 | 描述 |
|---|---|
Optional[ndarray]
|
Optional[np.ndarray]: 彩色图像(BGR格式),如果无数据则返回None。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
296 297 298 299 300 301 302 | |
get_latest_depth_image
get_latest_depth_image() -> Optional[np.ndarray]
获取最新深度图像。
返回:
| 类型 | 描述 |
|---|---|
Optional[ndarray]
|
Optional[np.ndarray]: 深度图像(16位或32位浮点),如果无数据则返回None。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
304 305 306 307 308 309 310 | |
visualize_depth_image
visualize_depth_image(depth_image: ndarray) -> np.ndarray
深度图可视化为伪彩色图。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
depth_image
|
ndarray
|
原始深度图(16位或32位浮点)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 伪彩色深度图(BGR, uint8)。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
312 313 314 315 316 317 318 319 320 321 | |
is_detection_running
is_detection_running() -> bool
检查检测是否正在运行。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=运行中, False=未运行。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
323 324 325 326 327 328 329 | |
get_latest_detection_result
get_latest_detection_result() -> Optional[Dict]
获取最新检测结果。
返回:
| 类型 | 描述 |
|---|---|
Optional[Dict]
|
Optional[Dict]: 检测结果字典,如果无数据则返回None。 包含字段:head_center, central_center, real_center, angle, depth, real_depth。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
331 332 333 334 335 336 337 338 | |
get_image_with_detection
get_image_with_detection(image: ndarray) -> np.ndarray
获取叠加了检测结果的图像。
封装了检测状态检查和图像绘制逻辑,提供高层业务接口。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
image
|
ndarray
|
原始图像(BGR格式)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 如果检测正在运行且有结果,返回叠加了检测标注的图像; 否则返回原图像。 |
源代码位于: src/controller/controller/application/services/camera_application_service.py
340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 | |
ToolsApplicationService
ToolsApplicationService(kinematic_service: KinematicDomainService, robot_state_service: RobotStateDomainService)
Bases: QObject
工具应用服务。
职责: 1. 接收 6 个关节角度 2. 调用 KinematicDomainService 计算正运动学 3. 格式化结果并发射信号 4. 获取当前机械臂关节角度 5. 计算逆运动学
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
calculation_result_signal |
pyqtSignal
|
发送正运动学计算结果。 |
current_angles_signal |
pyqtSignal
|
发送当前关节角度。 |
inverse_result_signal |
pyqtSignal
|
发送逆运动学计算结果。 |
初始化工具应用服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
kinematic_service
|
KinematicDomainService
|
运动学服务。 |
必需 |
robot_state_service
|
RobotStateDomainService
|
机械臂状态服务。 |
必需 |
源代码位于: src/controller/controller/application/services/tools_application_service.py
31 32 33 34 35 36 37 38 39 40 | |
calculate_forward_kinematics
calculate_forward_kinematics(joint_angles: List[float])
计算正运动学。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
joint_angles
|
List[float]
|
6个关节角度(弧度)。 |
必需 |
Emits
calculation_result_signal 包含: { "quaternion": [x, y, z, w], "position": [x, y, z], "rotation_matrix": [[...], [...], [...]] # 3x3 } 或错误信息: { "error": "错误信息" }
源代码位于: src/controller/controller/application/services/tools_application_service.py
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | |
get_current_joint_angles
get_current_joint_angles()
获取当前机械臂关节角度。
Emits
current_angles_signal: List[float] - 6个关节角度(弧度)。
源代码位于: src/controller/controller/application/services/tools_application_service.py
85 86 87 88 89 90 91 92 93 94 95 96 97 98 | |
calculate_inverse_kinematics
calculate_inverse_kinematics(rotation_matrix: List[List[float]], position: List[float], initial_theta: List[float] = None)
计算逆运动学。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
rotation_matrix
|
List[List[float]]
|
3x3 旋转矩阵。 |
必需 |
position
|
List[float]
|
[x, y, z] 位置(米)。 |
必需 |
initial_theta
|
List[float]
|
初始关节角度(用于选择最接近的解). Defaults to None. |
None
|
Emits
inverse_result_signal 包含: { "joint_angles": [θ1, θ2, θ3, θ4, θ5, θ6], # 弧度 "joint_angles_deg": [θ1, θ2, θ3, θ4, θ5, θ6] # 度 } 或错误信息: { "error": "错误信息" }
源代码位于: src/controller/controller/application/services/tools_application_service.py
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | |
MessageDisplay
MessageDisplay()
Bases: QObject
消息显示服务。
负责在界面上显示日志和状态消息,通过信号分发给 UI 组件。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
message_display_signal |
pyqtSignal
|
消息显示信号,携带 (消息内容, 消息类型)。 |
clear_requested |
pyqtSignal
|
清除消息请求信号。 |
初始化消息显示服务。
源代码位于: src/controller/controller/application/commands/message_display.py
17 18 19 | |
display_message
display_message(message: str, message_type: str) -> None
显示一条消息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message
|
str
|
消息内容。 |
必需 |
message_type
|
str
|
消息类型(如 "info", "error", "warning")。 |
必需 |
源代码位于: src/controller/controller/application/commands/message_display.py
21 22 23 24 25 26 27 28 | |
clear_messages
clear_messages() -> None
清除所有消息。
源代码位于: src/controller/controller/application/commands/message_display.py
30 31 32 | |
MotionListener
MotionListener(motion_runner: MotionRunner, message_display: MessageDisplay)
运动消息监听器。
负责监听运动执行器发送的消息,解码位置数据并显示。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
motion_runner |
MotionRunner
|
运动执行器。 |
message_display |
MessageDisplay
|
消息显示服务。 |
robot_utils |
RobotUtils
|
机器人工具类,用于坐标转换。 |
初始化运动监听器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
motion_runner
|
MotionRunner
|
运动执行器。 |
必需 |
message_display
|
MessageDisplay
|
消息显示服务。 |
必需 |
源代码位于: src/controller/controller/application/listener/motion_listener.py
16 17 18 19 20 21 22 23 24 25 26 | |
handle_motion_msg
handle_motion_msg(message, message_type)
处理运动消息,手动解析位置数据。
消息格式:AA55 + control(1) + mode(1) + joint_angles(24) + ... + CRC(2) + 0D0A 编码过程:弧度 -> radian2position -> 位置值(32位) -> 大端序16进制
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message
|
str
|
原始16进制消息字符串。 |
必需 |
message_type
|
str
|
消息类型。 |
必需 |
源代码位于: src/controller/controller/application/listener/motion_listener.py
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | |
BaseViewModel
BaseViewModel(parent=None)
Bases: QObject
基础视图模型类。
所有视图模型的基类,提供通用的信号和清理接口。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
connection_status_changed |
pyqtSignal
|
连接状态变更信号,携带 bool 状态。 |
初始化基础视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/base_view_model.py
17 18 19 20 21 22 23 | |
cleanup
cleanup()
清理资源。
子类应重写此方法以释放资源(如关闭连接、停止定时器等)。
源代码位于: src/controller/controller/presentation/view_models/base_view_model.py
25 26 27 28 29 30 | |
MainViewModel
MainViewModel(serial_vm: SerialViewModel, display_vm: DisplayViewModel, control_vm: ControlViewModel, status_vm: StatusViewModel, effector_vm: EffectorViewModel, trajectory_vm: TrajectoryViewModel, dynamics_vm: DynamicsViewModel, camera_vm: CameraViewModel, motion_planning_vm: MotionPlanningViewModel, tools_vm: ToolsViewModel, parent=None)
Bases: BaseViewModel
主视图模型。
整合所有子视图模型,并管理它们之间的信号交互。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
connection_status_changed |
pyqtSignal
|
串口连接状态信号。 |
status_message_changed |
pyqtSignal
|
状态消息变更信号。 |
progress_changed |
pyqtSignal
|
进度变更信号。 |
serial_vm |
SerialViewModel
|
串口视图模型。 |
display_vm |
DisplayViewModel
|
显示视图模型。 |
control_vm |
ControlViewModel
|
控制视图模型。 |
status_vm |
StatusViewModel
|
状态视图模型。 |
effector_vm |
EffectorViewModel
|
末端执行器视图模型。 |
trajectory_vm |
TrajectoryViewModel
|
轨迹视图模型。 |
dynamics_vm |
DynamicsViewModel
|
动力学视图模型。 |
camera_vm |
CameraViewModel
|
相机视图模型。 |
motion_planning_vm |
MotionPlanningViewModel
|
运动规划视图模型。 |
tools_vm |
ToolsViewModel
|
工具视图模型。 |
初始化主视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
serial_vm
|
SerialViewModel
|
注入的串口 VM。 |
必需 |
display_vm
|
DisplayViewModel
|
注入的显示 VM。 |
必需 |
control_vm
|
ControlViewModel
|
注入的控制 VM。 |
必需 |
status_vm
|
StatusViewModel
|
注入的状态 VM。 |
必需 |
effector_vm
|
EffectorViewModel
|
注入的末端 VM。 |
必需 |
trajectory_vm
|
TrajectoryViewModel
|
注入的轨迹 VM。 |
必需 |
dynamics_vm
|
DynamicsViewModel
|
注入的动力学 VM。 |
必需 |
camera_vm
|
CameraViewModel
|
注入的相机 VM。 |
必需 |
motion_planning_vm
|
MotionPlanningViewModel
|
注入的规划 VM。 |
必需 |
tools_vm
|
ToolsViewModel
|
注入的工具 VM。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/main_view_model.py
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 | |
cleanup
cleanup()
清理资源。
调用所有子 ViewModel 的 cleanup 方法,确保资源释放。
源代码位于: src/controller/controller/presentation/view_models/main_view_model.py
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | |
SerialViewModel
SerialViewModel(serial_service: SerialApplicationService, command_hub_service: CommandHubService, parent=None)
Bases: BaseViewModel
串口视图模型。
纯信号转发层,不包含业务逻辑,负责 UI 与串口服务的交互。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
port_list_updated |
pyqtSignal
|
端口列表更新信号,携带端口列表。 |
serial_service |
SerialApplicationService
|
串口应用服务。 |
command_hub_service |
CommandHubService
|
命令中心服务。 |
初始化视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
serial_service
|
SerialApplicationService
|
串口应用服务。 |
必需 |
command_hub_service
|
CommandHubService
|
命令中心服务。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
24 25 26 27 28 29 30 31 32 33 34 35 36 | |
refresh_ports
refresh_ports() -> None
刷新端口列表命令 - 直接转发到Service。
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
40 41 42 | |
connect_serial
connect_serial(port: str, config: Dict[str, Any]) -> None
连接串口命令 - 直接转发到Service。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
port
|
str
|
端口名称。 |
必需 |
config
|
Dict[str, Any]
|
配置参数。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
44 45 46 47 48 49 50 51 | |
disconnect_serial
disconnect_serial() -> None
断开连接命令 - 直接转发到Service。
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
53 54 55 | |
get_available_ports
get_available_ports() -> List[str]
获取可用端口列表 - 委托给Service。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 端口列表。 |
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
59 60 61 62 63 64 65 | |
get_current_port
get_current_port() -> Optional[str]
获取当前连接的端口 - 委托给Service。
返回:
| 类型 | 描述 |
|---|---|
Optional[str]
|
Optional[str]: 端口名称。 |
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
67 68 69 70 71 72 73 | |
get_connection_status
get_connection_status() -> bool
获取连接状态 - 委托给Service。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否已连接。 |
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
75 76 77 78 79 80 81 | |
get_port_info
get_port_info(port_name: str) -> Optional[Dict[str, str]]
获取端口信息 - 委托给Service。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
port_name
|
str
|
端口名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[Dict[str, str]]
|
Optional[Dict[str, str]]: 端口信息。 |
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
83 84 85 86 87 88 89 90 91 92 | |
cleanup
cleanup() -> None
清理视图模型 - 断开信号连接。
源代码位于: src/controller/controller/presentation/view_models/serial_view_model.py
110 111 112 113 | |
DisplayViewModel
DisplayViewModel(message_display: MessageDisplay, parent=None)
Bases: BaseViewModel
显示视图模型。
作为消息显示的中心分发器,其他服务调用它的方法来显示消息。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
message_display_signal |
pyqtSignal
|
消息显示信号,携带 (消息内容, 消息类型)。 |
clear_requested |
pyqtSignal
|
清除消息请求信号。 |
message_display |
MessageDisplay
|
消息显示服务。 |
初始化显示视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message_display
|
MessageDisplay
|
消息显示服务。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/display_view_model.py
27 28 29 30 31 32 33 34 35 36 37 | |
clear_messages
clear_messages() -> None
清除所有消息。
发送清除消息信号。
源代码位于: src/controller/controller/presentation/view_models/display_view_model.py
39 40 41 42 43 44 45 | |
cleanup
cleanup() -> None
清理资源。
源代码位于: src/controller/controller/presentation/view_models/display_view_model.py
47 48 49 | |
ControlViewModel
ControlViewModel(command_hub_service: CommandHubService, parent=None)
Bases: BaseViewModel
控制视图模型。
负责处理用户输入的控制命令,并分发到命令中心服务。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
command_hub_service |
CommandHubService
|
命令中心服务。 |
初始化控制视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
command_hub_service
|
CommandHubService
|
命令中心服务。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/control_view_model.py
15 16 17 18 19 20 21 22 23 | |
send_command
send_command(config_dict: dict)
发送控制命令。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config_dict
|
dict
|
命令配置字典,包含控制参数。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/control_view_model.py
25 26 27 28 29 30 31 | |
StatusViewModel
StatusViewModel(robot_state_service: RobotStateDomainService, parent=None)
Bases: BaseViewModel
状态视图模型。
管理机器人状态显示,订阅 RobotStateDomainService 的状态更新,不再自己维护状态。
职责: 1. 订阅 RobotStateDomainService 的状态更新 2. 转换数据格式(转换为 dict 供 UI 组件使用) 3. 发射信号给 UI 组件
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
status_updated |
pyqtSignal
|
状态更新信号,携带状态数据字典。 |
robot_state_service |
RobotStateDomainService
|
机械臂状态服务。 |
初始化状态视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
robot_state_service
|
RobotStateDomainService
|
机械臂状态服务(依赖注入)。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/status_view_model.py
28 29 30 31 32 33 34 35 36 37 38 39 | |
get_position_string
get_position_string() -> str
获取位置信息的字符串表示。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
位置字符串,如 "[0.50, -1.20, 0.30, 0.00, 0.00, 0.00]"。如果无数据返回 "--"。 |
源代码位于: src/controller/controller/presentation/view_models/status_view_model.py
66 67 68 69 70 71 72 73 74 75 76 | |
get_status_summary
get_status_summary() -> str
获取状态摘要。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
状态摘要字符串,如 "CMD:0x06 | MODE:0x08 | STA:0x01"。如果无数据返回 "无状态数据"。 |
源代码位于: src/controller/controller/presentation/view_models/status_view_model.py
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | |
EffectorViewModel
EffectorViewModel(command_hub_service: CommandHubService, parent=None)
Bases: BaseViewModel
末端执行器视图模型。
负责处理末端执行器(如夹爪、吸盘)的控制命令。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
command_hub_service |
CommandHubService
|
命令中心服务。 |
初始化末端执行器视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
command_hub_service
|
CommandHubService
|
命令中心服务。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/effector_view_model.py
17 18 19 20 21 22 23 24 25 | |
send_effector_command
send_effector_command(config_dict: dict)
发送末端执行器命令。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config_dict
|
dict
|
命令配置字典。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/effector_view_model.py
27 28 29 30 31 32 33 | |
TrajectoryViewModel
TrajectoryViewModel(parent=None)
Bases: BaseViewModel
轨迹规划视图模型。
负责轨迹规划相关的 UI 交互逻辑。
初始化轨迹规划视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/trajectory_view_model.py
13 14 15 16 17 18 19 | |
DynamicsViewModel
DynamicsViewModel(command_hub_service: CommandHubService, robot_state_service: RobotStateDomainService, dynamic_service: DynamicDomainService, teach_record_service: TeachRecordDomainService, record_repository: RecordRepository, parent: Optional[object] = None)
Bases: BaseViewModel
动力学视图模型。
订阅 RobotStateDomainService,实现力矩补偿和示教记录。
职责: 1. 处理示教模式切换 2. 订阅力矩补偿请求(数据驱动) 3. 计算并发送力矩补偿 4. 管理示教记录的录制、保存、播放
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
recording_state_changed |
pyqtSignal
|
记录状态变化信号。 |
record_list_updated |
pyqtSignal
|
记录列表更新信号。 |
command_hub |
CommandHubService
|
命令中心服务。 |
robot_state |
RobotStateDomainService
|
机械臂状态服务。 |
dynamic_service |
DynamicDomainService
|
动力学服务。 |
teach_record_service |
TeachRecordDomainService
|
示教记录服务。 |
record_repository |
RecordRepository
|
记录仓储。 |
初始化动力学视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
command_hub_service
|
CommandHubService
|
命令中心服务。 |
必需 |
robot_state_service
|
RobotStateDomainService
|
机械臂状态服务。 |
必需 |
dynamic_service
|
DynamicDomainService
|
动力学服务。 |
必需 |
teach_record_service
|
TeachRecordDomainService
|
示教记录服务。 |
必需 |
record_repository
|
RecordRepository
|
记录仓储。 |
必需 |
parent
|
Optional[object]
|
父对象。 |
None
|
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | |
toggle_teaching_mode
toggle_teaching_mode(command_dict: dict)
切换示教模式。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
command_dict
|
dict
|
命令字典,包含 control 和 mode。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
86 87 88 89 90 91 92 93 94 95 96 97 | |
send_torque
send_torque(torque_values: list)
发送力矩控制命令。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
torque_values
|
list
|
力矩值列表(6个关节)。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
99 100 101 102 103 104 105 106 107 108 109 110 | |
toggle_recording
toggle_recording()
切换记录状态(开始/停止)。
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
142 143 144 145 146 147 148 149 150 151 152 | |
delete_record
delete_record(record_name: str) -> bool
删除指定记录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
record_name
|
str
|
记录名称。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否删除成功。 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
154 155 156 157 158 159 160 161 162 163 164 165 166 | |
run_record
run_record(record_name: str)
运行指定记录(播放示教轨迹)。
流程: 1. 获取示教记录的角度列表 2. 委托给 CommandHubService 处理
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
record_name
|
str
|
记录名称。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
168 169 170 171 172 173 174 175 176 177 178 179 180 | |
reverse_record
reverse_record(record_name: str) -> Optional[str]
反转指定记录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
record_name
|
str
|
记录名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[str]
|
Optional[str]: 新记录名称,失败返回 None。 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
182 183 184 185 186 187 188 189 190 191 192 193 194 | |
get_record_names
get_record_names() -> List[str]
获取所有记录名称。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 记录名称列表。 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
196 197 198 199 200 201 202 | |
is_recording
is_recording() -> bool
查询是否正在记录。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否正在记录。 |
源代码位于: src/controller/controller/presentation/view_models/dynamics_view_model.py
204 205 206 207 208 209 210 | |
CameraViewModel
CameraViewModel(app_service: CameraApplicationService, parent=None)
Bases: BaseViewModel
摄像头视图模型。
职责: - 连接 UI 和 Application Service - 管理图像显示状态(定时刷新) - 管理检测状态 - 通过 Application Service 获取图像和检测结果
架构原则: - 只依赖 Application 层,不直接访问 Domain 层 - 所有 Domain 层调用通过 Application Service 转发
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
image_display_requested |
pyqtSignal
|
图像显示请求信号,携带 (image, image_type)。 |
status_updated |
pyqtSignal
|
状态文本更新信号。 |
image_info_updated |
pyqtSignal
|
图像信息更新信号。 |
connection_status_changed |
pyqtSignal
|
摄像头连接状态信号。 |
button_states_changed |
pyqtSignal
|
按钮状态变更信号,携带 (color_active, depth_active)。 |
clear_display_requested |
pyqtSignal
|
清除显示请求信号。 |
detection_status_changed |
pyqtSignal
|
检测状态变更信号。 |
detection_result_updated |
pyqtSignal
|
检测结果更新信号。 |
app_service |
CameraApplicationService
|
摄像头应用服务。 |
display_timer |
QTimer
|
图像刷新定时器。 |
初始化摄像头视图模型。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
app_service
|
CameraApplicationService
|
摄像头应用服务。 |
必需 |
parent
|
QObject
|
父对象. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
connect_camera
connect_camera()
连接摄像头。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
74 75 76 | |
disconnect_camera
disconnect_camera()
断开摄像头。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
78 79 80 81 82 83 84 85 | |
start_color_display
start_color_display()
开始显示彩色图。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | |
start_depth_display
start_depth_display()
开始显示深度图。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | |
stop_display
stop_display()
停止显示。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 | |
start_detection
start_detection()
开始检测。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
137 138 139 | |
stop_detection
stop_detection()
停止检测。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
141 142 143 | |
move_to_detected_part
move_to_detected_part()
运动到检测到的零件位置。
职责:仅转发到 Application 层。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
145 146 147 148 149 150 | |
cleanup
cleanup()
清理资源。
源代码位于: src/controller/controller/presentation/view_models/camera_view_model.py
241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 | |
MotionPlanningViewModel
MotionPlanningViewModel(app_service: MotionPlanningApplicationService, dynamics_vm: DynamicsViewModel)
Bases: QObject
运动规划 ViewModel。
职责: 1. 转发 UI 命令到 Application Service 2. 转发 Application Service 信号到 UI 组件 3. 通过 DynamicsViewModel 获取示教记录(避免重复注入)
设计原则: - ViewModel 只依赖 Application Service,不直接访问 Domain 或 Infrastructure - 所有业务逻辑在 Application Service 中封装
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
plan_list_changed |
pyqtSignal
|
方案列表变更信号。 |
current_plan_changed |
pyqtSignal
|
当前方案变更信号,携带索引。 |
point_list_changed |
pyqtSignal
|
节点列表变更信号。 |
current_position_received |
pyqtSignal
|
当前位置数据信号,携带角度列表(弧度)。 |
trajectory_preview_signal |
pyqtSignal
|
轨迹预览信号,携带 (轨迹数据, 上下文)。 |
app_service |
MotionPlanningApplicationService
|
运动规划应用服务。 |
dynamics_vm |
DynamicsViewModel
|
动力学 ViewModel。 |
初始化运动规划 ViewModel。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
app_service
|
MotionPlanningApplicationService
|
运动规划应用服务。 |
必需 |
dynamics_vm
|
DynamicsViewModel
|
动力学 ViewModel。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | |
create_plan
create_plan(name: str)
创建方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
方案名称。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
63 64 65 66 67 68 69 | |
delete_plan
delete_plan(index: int) -> bool
删除方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=删除成功, False=删除失败(违反业务规则)。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
71 72 73 74 75 76 77 78 79 80 | |
switch_plan
switch_plan(index: int)
切换方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
82 83 84 85 86 87 88 | |
rename_plan
rename_plan(index: int, new_name: str)
重命名方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
new_name
|
str
|
新名称。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
90 91 92 93 94 95 96 97 | |
get_plan_names
get_plan_names() -> List[str]
获取所有方案名称。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 方案名称列表。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
99 100 101 102 103 104 105 | |
get_current_plan_index
get_current_plan_index() -> int
获取当前方案索引。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
int |
int
|
当前索引。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
107 108 109 110 111 112 113 | |
get_plan_count
get_plan_count() -> int
获取方案数量。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
int |
int
|
方案数量。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
115 116 117 118 119 120 121 | |
add_point
add_point(point_data: dict)
添加节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
point_data
|
dict
|
节点数据。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
125 126 127 128 129 130 131 | |
delete_point
delete_point(index: int)
删除节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
133 134 135 136 137 138 139 | |
move_point_up
move_point_up(index: int)
上移节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
141 142 143 144 145 146 147 | |
move_point_down
move_point_down(index: int)
下移节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
149 150 151 152 153 154 155 | |
update_point
update_point(index: int, point_data: dict)
更新节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
point_data
|
dict
|
节点数据。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
157 158 159 160 161 162 163 164 | |
get_all_points
get_all_points() -> List[dict]
获取当前方案的所有节点。
返回:
| 类型 | 描述 |
|---|---|
List[dict]
|
List[dict]: 节点列表。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
166 167 168 169 170 171 172 | |
get_single_point
get_single_point(index: int) -> dict
获取单个节点数据。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
dict |
dict
|
节点数据。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
174 175 176 177 178 179 180 181 182 183 | |
get_teach_record_names
get_teach_record_names() -> List[str]
获取所有示教记录名称(委托给 DynamicsViewModel)。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 记录名称列表。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
187 188 189 190 191 192 193 | |
get_teach_record
get_teach_record(name: str) -> List[List[float]]
获取指定示教记录的数据(委托给 DynamicsViewModel)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
记录名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 记录数据。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
195 196 197 198 199 200 201 202 203 204 205 | |
execute_single_point
execute_single_point(index: int)
执行单个节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
209 210 211 212 213 214 215 | |
execute_motion_plan
execute_motion_plan()
执行整个运动规划方案。
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
217 218 219 | |
request_current_position
request_current_position()
请求获取当前位置(仅用于UI显示)。
委托给 Application Service 处理。
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
223 224 225 226 227 228 | |
save_node_trajectory
save_node_trajectory(node_index: int) -> bool
保存单个节点的轨迹。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
node_index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=准备成功, False=准备失败。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
232 233 234 235 236 237 238 239 240 241 | |
save_plan_trajectory
save_plan_trajectory() -> bool
保存整个方案的轨迹。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=准备成功, False=准备失败。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
243 244 245 246 247 248 249 | |
preview_node_trajectory
preview_node_trajectory(node_index: int) -> bool
预览单个节点的轨迹曲线。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
node_index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=准备成功, False=准备失败。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
253 254 255 256 257 258 259 260 261 262 | |
preview_plan_trajectory
preview_plan_trajectory() -> bool
预览整个方案的轨迹曲线。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=准备成功, False=准备失败。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
264 265 266 267 268 269 270 | |
load_local_trajectory
load_local_trajectory(file_path: str) -> bool
从 plans 目录加载轨迹文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file_path
|
str
|
轨迹文件的完整路径或文件名。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=加载成功, False=加载失败。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
274 275 276 277 278 279 280 281 282 283 | |
get_local_trajectory_files
get_local_trajectory_files() -> List[str]
获取所有可用的本地轨迹文件。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 文件名列表(不带扩展名)。 |
源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
285 286 287 288 289 290 291 | |
ToolsViewModel
ToolsViewModel(app_service: ToolsApplicationService)
Bases: QObject
工具 ViewModel。
职责: 1. 转发 UI 的计算请求到 Application Service 2. 转发 Application Service 的结果信号到 UI 3. 处理获取当前位置和逆运动学计算请求
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
calculation_result |
pyqtSignal
|
正运动学结果信号,携带结果字典。 |
current_angles_received |
pyqtSignal
|
当前关节角度信号,携带角度列表。 |
inverse_result |
pyqtSignal
|
逆运动学结果信号,携带结果字典。 |
app_service |
ToolsApplicationService
|
工具应用服务。 |
初始化工具 ViewModel。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
app_service
|
ToolsApplicationService
|
工具应用服务。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/tools_view_model.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | |
calculate_kinematics
calculate_kinematics(joint_angles: List[float])
请求计算正运动学(转发给 Application Service)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
joint_angles
|
List[float]
|
6个关节角度(弧度)。 |
必需 |
源代码位于: src/controller/controller/presentation/view_models/tools_view_model.py
49 50 51 52 53 54 55 | |
get_current_position
get_current_position()
请求获取当前机械臂关节角度。
源代码位于: src/controller/controller/presentation/view_models/tools_view_model.py
57 58 59 | |
calculate_inverse_kinematics
calculate_inverse_kinematics(rotation_matrix: List[List[float]], position: List[float], initial_theta: List[float] = None)
请求计算逆运动学。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
rotation_matrix
|
List[List[float]]
|
3x3 旋转矩阵。 |
必需 |
position
|
List[float]
|
[x, y, z] 位置(米)。 |
必需 |
initial_theta
|
List[float]
|
初始关节角度. Defaults to None. |
None
|
源代码位于: src/controller/controller/presentation/view_models/tools_view_model.py
61 62 63 64 65 66 67 68 69 | |
DHParam
dataclass
DHParam()
机械臂 DH 参数配置。
存储运动学和动力学所需的 DH 参数。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
kinematic_dh |
array
|
运动学 DH 参数表。 |
dynamic_dh |
array
|
动力学 DH 参数表。 |
初始化默认 DH 参数。
源代码位于: src/controller/controller/domain/value_objects/dh_param.py
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
get_kinematic_dh
get_kinematic_dh() -> np.ndarray
获取运动学 DH 参数。
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 运动学 DH 参数矩阵。 |
源代码位于: src/controller/controller/domain/value_objects/dh_param.py
39 40 41 42 43 44 45 | |
get_dynamic_dh
get_dynamic_dh() -> np.ndarray
获取动力学 DH 参数。
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 动力学 DH 参数矩阵。 |
源代码位于: src/controller/controller/domain/value_objects/dh_param.py
47 48 49 50 51 52 53 | |
RobotStateSnapshot
dataclass
RobotStateSnapshot(init_status: int, control: int, mode: int, joint_positions: Tuple[int, ...], joint_angles: Tuple[float, ...], joint_speeds: Tuple[int, ...], joint_torques: Tuple[int, ...], joint_status: Tuple[int, ...], double_encoder_interpolations: Tuple[int, ...], errors: Tuple[int, ...], effector_data: Any, timestamp: float)
机械臂状态快照 - 不可变数据载体。
特点: - frozen=True: 不可变,线程安全 - 包含完整的机械臂状态 - 可以保存历史快照序列
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
init_status |
int
|
初始化状态。 |
control |
int
|
当前命令 0x06/0x07...。 |
mode |
int
|
运行模式 0x08/0x0A...。 |
joint_positions |
Tuple[int, ...]
|
编码器位置(原始值,6个关节)。 |
joint_angles |
Tuple[float, ...]
|
关节角度(弧度,6个关节)。 |
joint_speeds |
Tuple[int, ...]
|
关节速度。 |
joint_torques |
Tuple[int, ...]
|
关节力矩。 |
joint_status |
Tuple[int, ...]
|
关节状态码。 |
double_encoder_interpolations |
Tuple[int, ...]
|
双编码器插值。 |
errors |
Tuple[int, ...]
|
错误码。 |
effector_data |
Any
|
夹爪数据。 |
timestamp |
float
|
接收时间戳。 |
from_decoded_message
classmethod
from_decoded_message(decoded_msg: Any) -> RobotStateSnapshot
从解码消息创建快照。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
decoded_msg
|
Any
|
解码后的消息对象,应包含 positions(弧度), speeds, torques 等字段。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
RobotStateSnapshot |
RobotStateSnapshot
|
创建的状态快照实例。 |
Note
decoded_msg.positions 已经通过 position2radian 转换为弧度值, 所以 joint_angles 直接使用该值。 joint_positions 会通过反向计算还原为原始编码器值。
源代码位于: src/controller/controller/domain/value_objects/robot_state_snapshot.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | |
HandEyeCalibrationConfig
dataclass
HandEyeCalibrationConfig(hand_eye_matrix: ndarray, camera_intrinsics: CameraIntrinsics, target_offset: TargetOffset, end_effector_adjustment: EndEffectorAdjustment)
手眼标定完整配置。
这是一个值对象(Value Object),不可变且无副作用。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
hand_eye_matrix |
ndarray
|
4x4 齐次变换矩阵。 |
camera_intrinsics |
CameraIntrinsics
|
相机内参。 |
target_offset |
TargetOffset
|
目标偏移量。 |
end_effector_adjustment |
EndEffectorAdjustment
|
末端姿态调整。 |
__post_init__
__post_init__()
验证数据完整性。
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果手眼标定矩阵形状不是 4x4。 |
源代码位于: src/controller/controller/domain/value_objects/hand_eye_calibration_config.py
78 79 80 81 82 83 84 85 | |
CameraIntrinsics
dataclass
CameraIntrinsics(fx: float, fy: float, cx: float, cy: float)
相机内参。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
fx |
float
|
x 方向焦距。 |
fy |
float
|
y 方向焦距。 |
cx |
float
|
光心 x 坐标。 |
cy |
float
|
光心 y 坐标。 |
TargetOffset
dataclass
TargetOffset(x: float, y: float, z: float)
目标偏移量(米)。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
x |
float
|
x 方向偏移。 |
y |
float
|
y 方向偏移。 |
z |
float
|
z 方向偏移。 |
to_array
to_array() -> np.ndarray
转换为 numpy 数组。
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: [x, y, z] 数组。 |
源代码位于: src/controller/controller/domain/value_objects/hand_eye_calibration_config.py
37 38 39 40 41 42 43 | |
EndEffectorAdjustment
dataclass
EndEffectorAdjustment(z_rotation: float, y_rotation: float, x_rotation: float)
末端姿态调整(弧度)。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
z_rotation |
float
|
绕 Z 轴旋转角度。 |
y_rotation |
float
|
绕 Y 轴旋转角度。 |
x_rotation |
float
|
绕 X 轴旋转角度。 |
MotionOperationMode
Bases: Enum
运动操作模式枚举。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
NONE |
无操作(仅获取位置)。 |
|
EXECUTE |
执行运动。 |
|
SAVE |
保存轨迹。 |
|
PREVIEW |
预览轨迹(显示曲线)。 |
KinematicUtils
运动学工具类。
提供基本的运动学变换和角度处理函数。
dh2rm
staticmethod
dh2rm(a: float, alpha: float, d: float, theta: float) -> np.ndarray
根据 DH 参数计算变换矩阵。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
a
|
float
|
连杆长度。 |
必需 |
alpha
|
float
|
连杆扭转角。 |
必需 |
d
|
float
|
连杆偏移。 |
必需 |
theta
|
float
|
关节角。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 4x4 齐次变换矩阵。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | |
rm2quat
staticmethod
rm2quat(rm: ndarray) -> np.ndarray
旋转矩阵转四元数。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
rm
|
ndarray
|
3x3 旋转矩阵或 4x4 变换矩阵。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 四元数 [x, y, z, w]。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
quat2rm
staticmethod
quat2rm(quat: ndarray) -> np.ndarray
四元数转旋转矩阵。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
quat
|
ndarray
|
四元数 [x, y, z, w]。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 3x3 旋转矩阵。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
51 52 53 54 55 56 57 58 59 60 61 | |
quat2euler
staticmethod
quat2euler(quat: ndarray) -> np.ndarray
四元数转欧拉角 (XYZ 顺序)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
quat
|
ndarray
|
四元数 [x, y, z, w]。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 欧拉角 [roll, pitch, yaw] (弧度)。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
63 64 65 66 67 68 69 70 71 72 73 | |
euler2quat
staticmethod
euler2quat(euler: ndarray) -> np.ndarray
欧拉角转四元数 (XYZ 顺序)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
euler
|
ndarray
|
欧拉角 [roll, pitch, yaw] (弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 四元数 [x, y, z, w]。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
75 76 77 78 79 80 81 82 83 84 85 | |
euler2rm
staticmethod
euler2rm(euler: ndarray) -> np.ndarray
欧拉角转旋转矩阵 (XYZ 顺序)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
euler
|
ndarray
|
欧拉角 [roll, pitch, yaw] (弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 3x3 旋转矩阵。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
87 88 89 90 91 92 93 94 95 96 97 | |
rm2euler
staticmethod
rm2euler(rm: ndarray) -> np.ndarray
旋转矩阵转欧拉角 (XYZ 顺序)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
rm
|
ndarray
|
3x3 旋转矩阵。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 欧拉角 [roll, pitch, yaw] (弧度)。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
99 100 101 102 103 104 105 106 107 108 109 110 111 112 | |
normalize_angle
staticmethod
normalize_angle(angle: float) -> float
将角度归一化到 [-pi, pi] 范围。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angle
|
float
|
输入角度(弧度)。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
float |
float
|
归一化后的角度(弧度)。 |
源代码位于: src/controller/controller/domain/utils/kinematic_utils.py
114 115 116 117 118 119 120 121 122 123 124 | |
MessageEncoder
MessageEncoder(config_path='controller/config/message_encoder_config.yaml')
消息编码器。
基于 YAML 配置文件动态生成十六进制消息。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
config |
dict
|
加载的配置字典。 |
robot_utils |
RobotUtils
|
工具类实例。 |
formatters |
Dict[str, BaseFormatter]
|
已注册的格式化器字典。 |
Message |
type
|
动态创建的消息数据类。 |
初始化消息编码器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config_path
|
str
|
配置文件路径. Defaults to "controller/config/message_encoder_config.yaml". |
'controller/config/message_encoder_config.yaml'
|
源代码位于: src/controller/controller/domain/utils/message_encoder.py
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | |
create_message
create_message(**kwargs: Any) -> Any
创建 MessageOut 实例。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
**kwargs
|
Any
|
消息字段值。 |
{}
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
Any |
Any
|
消息对象 (MessageOut)。 |
源代码位于: src/controller/controller/domain/utils/message_encoder.py
134 135 136 137 138 139 140 141 142 143 | |
interpret_message
interpret_message(message: Any) -> str
根据配置动态将消息对象编码为字符串。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message
|
Any
|
MessageOut 对象。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
编码后的十六进制字符串。 |
源代码位于: src/controller/controller/domain/utils/message_encoder.py
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 | |
MessageDecoder
MessageDecoder(config_path='controller/config/message_decoder_config.yaml')
消息解码器。
基于 YAML 配置文件动态解析十六进制消息。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
config |
dict
|
加载的配置字典。 |
robot_utils |
RobotUtils
|
工具类实例。 |
parsers |
Dict[str, BaseParser]
|
已注册的解析器字典。 |
MessageIn |
type
|
动态创建的消息数据类。 |
初始化消息解码器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config_path
|
str
|
配置文件路径. Defaults to "controller/config/message_decoder_config.yaml". |
'controller/config/message_decoder_config.yaml'
|
源代码位于: src/controller/controller/domain/utils/message_decoder.py
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | |
decode_message
decode_message(hex_message: str) -> Any
解码十六进制消息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
hex_message
|
str
|
原始十六进制字符串。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
Any |
Any
|
解码后的消息对象 (MessageIn)。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果消息格式错误或校验失败。 |
源代码位于: src/controller/controller/domain/utils/message_decoder.py
179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | |
decode_message_detailed
decode_message_detailed(hex_message: str) -> Dict[str, Any]
解码消息并返回详细信息(包括原始十六进制值)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
hex_message
|
str
|
原始十六进制字符串。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Dict[str, Any]
|
Dict[str, Any]: 包含详细信息的字典。 |
源代码位于: src/controller/controller/domain/utils/message_decoder.py
254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 | |
RobotUtils
RobotUtils()
机器人工具类。
提供机器人相关的数值转换、校验和计算等工具方法。
初始化机器人参数。
源代码位于: src/controller/controller/domain/utils/robot_utils.py
10 11 12 13 14 15 | |
position2radian
position2radian(position: list) -> list
编码器位置值转换为弧度。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
position
|
list
|
编码器位置值列表。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
list |
list
|
关节角度列表(弧度)。 |
源代码位于: src/controller/controller/domain/utils/robot_utils.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
radian2position
radian2position(radian: list) -> list
弧度转换为编码器位置值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
radian
|
list
|
关节角度列表(弧度)。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
list |
list
|
编码器位置值列表(32位整数)。 |
源代码位于: src/controller/controller/domain/utils/robot_utils.py
33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
speed2position
speed2position(speed: list) -> list
速度值转换为位置增量值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
speed
|
list
|
速度列表。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
list |
list
|
对应的时间步长内的位置增量值。 |
源代码位于: src/controller/controller/domain/utils/robot_utils.py
48 49 50 51 52 53 54 55 56 57 | |
torque_transfer
staticmethod
torque_transfer(torque: list) -> list
力矩值转换与归一化。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
torque
|
list
|
力矩值列表,长度不超过6。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
list |
list
|
转换后的力矩值列表(16位整数)。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果力矩列表长度超过6。 |
源代码位于: src/controller/controller/domain/utils/robot_utils.py
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | |
effector2hex
staticmethod
effector2hex(effector_data: float) -> list
末端执行器数据转换为十六进制字节列表。
将浮点数拆分为整数部分和小数部分,分别转换为 2 字节的大端序十六进制。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
effector_data
|
float
|
末端执行器数据。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
list |
list
|
包含两个十六进制字符串的列表 [整数部分hex, 小数部分hex]。 |
源代码位于: src/controller/controller/domain/utils/robot_utils.py
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | |
calculate_crc16
staticmethod
calculate_crc16(data) -> int
计算 CRC16 校验和 (CCITT)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
data
|
Union[bytes, str]
|
字节数组或十六进制字符串。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
int |
int
|
16位校验和。如果输入格式错误返回 False。 |
源代码位于: src/controller/controller/domain/utils/robot_utils.py
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | |
ImageDrawingUtils
图像绘制工具类。
提供静态方法用于在 OpenCV 图像上绘制检测结果和辅助图形。
draw_detection_result
staticmethod
draw_detection_result(image: ndarray, detection: Dict) -> np.ndarray
在图像上绘制检测结果。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
image
|
ndarray
|
原始图像(BGR)。 |
必需 |
detection
|
Dict
|
检测结果字典,包含: - head_center (Tuple[float, float]): 头部中心点 (x, y)。 - central_center (Tuple[float, float]): 中央中心点 (x, y)。 - real_center (Tuple[float, float]): 实际中心点 (x, y)。 - angle (float): 角度(弧度)。 - depth (float): central_center 的深度(米)。 - real_depth (float): real_center 的深度(米)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 绘制后的图像(新图像,不修改原图)。 |
源代码位于: src/controller/controller/domain/utils/image_drawing_utils.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | |
draw_direction_arrow
staticmethod
draw_direction_arrow(image: ndarray, center: Tuple[int, int], angle: float)
绘制方向箭头。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
image
|
ndarray
|
图像(原地修改)。 |
必需 |
center
|
Tuple[int, int]
|
中心点坐标 (x, y)。 |
必需 |
angle
|
float
|
角度(弧度)- 直着向上为 0,顺时针为正。 |
必需 |
源代码位于: src/controller/controller/domain/utils/image_drawing_utils.py
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | |
KinematicDomainService
KinematicDomainService()
运动学领域服务。
提供机械臂正逆运动学解算功能,包括DH参数管理、坐标变换矩阵计算等。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
dh_param |
DHParam
|
机械臂 DH 参数对象。 |
kinematic_dh |
ndarray
|
运动学 DH 参数矩阵。 |
kinematic_utils |
KinematicUtils
|
运动学工具类实例。 |
gripper2base |
ndarray
|
当前末端到基座的变换矩阵。 |
初始化运动学服务。
源代码位于: src/controller/controller/domain/services/algorithm/kinematic_domain_service.py
21 22 23 24 25 26 | |
get_kinematic_dh
get_kinematic_dh() -> np.ndarray
获取运动学 DH 参数矩阵。
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: DH 参数矩阵。 |
源代码位于: src/controller/controller/domain/services/algorithm/kinematic_domain_service.py
28 29 30 31 32 33 34 | |
get_gripper2base
get_gripper2base(theta_list: list[float] | ndarray = None) -> tuple[np.ndarray, np.ndarray]
计算末端执行器相对于基座的位姿(四元数 + 位置)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
theta_list
|
list[float] | ndarray
|
关节角度列表(弧度)。如果不传则使用当前内部状态。 |
None
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[ndarray, ndarray]
|
(quat, pos) - quat (np.ndarray): 姿态四元数 [x, y, z, w]。 - pos (np.ndarray): 位置坐标 [x, y, z]。 |
源代码位于: src/controller/controller/domain/services/algorithm/kinematic_domain_service.py
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | |
get_gripper2base_rm
get_gripper2base_rm(theta_list: list[float]) -> np.ndarray
获取末端执行器相对于基座的变换矩阵。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
theta_list
|
list[float]
|
关节角度列表(弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 4x4 齐次变换矩阵。 |
源代码位于: src/controller/controller/domain/services/algorithm/kinematic_domain_service.py
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
inverse_kinematic
inverse_kinematic(rm: ndarray, pos: ndarray, initial_theta: list[float] | None = None) -> list[float]
机械臂逆运动学求解。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
rm
|
ndarray
|
目标姿态旋转矩阵 (3x3)。 |
必需 |
pos
|
ndarray
|
目标位置坐标 [x, y, z]。 |
必需 |
initial_theta
|
list[float] | None
|
初始关节角度猜测值,用于选择最优解。 |
None
|
返回:
| 类型 | 描述 |
|---|---|
list[float]
|
list[float]: 最优关节角度解(弧度)。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果未找到有效的逆运动学解。 |
源代码位于: src/controller/controller/domain/services/algorithm/kinematic_domain_service.py
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 | |
verify_solution
verify_solution(theta_list: list[float], target_pos: ndarray) -> bool
验证逆运动学解的准确性。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
theta_list
|
list[float]
|
待验证的关节角度解。 |
必需 |
target_pos
|
ndarray
|
目标位置坐标。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
如果正解位置与目标位置误差小于 1e-5 则返回 True。 |
源代码位于: src/controller/controller/domain/services/algorithm/kinematic_domain_service.py
208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 | |
DynamicDomainService
DynamicDomainService()
动力学领域服务 - 计算重力补偿力矩。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
link_masses |
list[float]
|
连杆质量列表 (kg)。 |
dh_matrix |
list
|
动力学 DH 参数矩阵。 |
link_com_positions |
list[ndarray]
|
连杆质心在本体坐标系下的位置 (m)。 |
g_vector |
ndarray
|
重力向量 (m/s²)。 |
n |
int
|
关节数量。 |
compensation_factor_front |
float
|
前3个关节的补偿系数。 |
compensation_factor_rear |
float
|
后3个关节的补偿系数。 |
源代码位于: src/controller/controller/domain/services/algorithm/dynamic_domain_service.py
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | |
compute_gravity_compensation
compute_gravity_compensation(joint_angles: list[float]) -> list[float]
计算重力补偿力矩。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
joint_angles
|
list[float]
|
当前关节角度(弧度),6维数组。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
list[float]
|
List[float]: 每个关节的重力补偿力矩(Nm),6维数组。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果 joint_angles 的长度不等于 6。 |
源代码位于: src/controller/controller/domain/services/algorithm/dynamic_domain_service.py
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
MessageDomainService
MessageDomainService(message_encoder: MessageEncoder, message_decoder: MessageDecoder)
消息领域服务。
负责消息的编码和解码,作为 MessageEncoder 和 MessageDecoder 的门面。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
message_encoder |
MessageEncoder
|
消息编码器。 |
message_decoder |
MessageDecoder
|
消息解码器。 |
初始化消息领域服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message_encoder
|
MessageEncoder
|
注入的消息编码器。 |
必需 |
message_decoder
|
MessageDecoder
|
注入的消息解码器。 |
必需 |
源代码位于: src/controller/controller/domain/services/communication/message_domain_service.py
14 15 16 17 18 19 20 21 22 | |
encode_message
encode_message(**message: Any) -> str
编码消息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
**message
|
Any
|
消息字段键值对。 |
{}
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
str |
str
|
编码后的十六进制消息字符串。 |
源代码位于: src/controller/controller/domain/services/communication/message_domain_service.py
24 25 26 27 28 29 30 31 32 33 34 | |
decode_message
decode_message(message: str) -> Any
解码消息。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
message
|
str
|
十六进制消息字符串。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
Any |
Any
|
解码后的消息对象 (MessageIn)。 |
源代码位于: src/controller/controller/domain/services/communication/message_domain_service.py
36 37 38 39 40 41 42 43 44 45 | |
SCurve
SCurve(v_max=[pi / 4] * 6, acc_max=[pi / 8] * 6, t_j=0.5)
S曲线速度规划算法。
实现基于加加速度(Jerk)限制的S型速度曲线规划。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
v_max |
ndarray
|
最大速度限制。 |
acc_max |
ndarray
|
最大加速度限制。 |
t_j |
float
|
加加减速段时间。 |
初始化 S 曲线规划器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
v_max
|
list[float]
|
最大速度. Defaults to [pi/4]*6. |
[pi / 4] * 6
|
acc_max
|
list[float]
|
最大加速度. Defaults to [pi/8]*6. |
[pi / 8] * 6
|
t_j
|
float
|
Jerk 时间参数. Defaults to 0.5. |
0.5
|
源代码位于: src/controller/controller/domain/services/algorithm/trajectory_domain_service.py
16 17 18 19 20 21 22 23 24 25 26 | |
solve_cubic_numeric
staticmethod
solve_cubic_numeric(a, b, c, d, tol=1e-08)
求解三次方程实根。
源代码位于: src/controller/controller/domain/services/algorithm/trajectory_domain_service.py
28 29 30 31 32 33 34 35 | |
solve_quadratic
staticmethod
solve_quadratic(a, b, c, tol=1e-08)
求解二次方程实根。
源代码位于: src/controller/controller/domain/services/algorithm/trajectory_domain_service.py
37 38 39 40 41 42 43 44 45 | |
base_method
staticmethod
base_method(t: float, jerk: float, a_start: float, v_start: float, s_start: float) -> tuple[float, float, float]
基础运动学方程计算。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[float, float, float]
|
(a, v, s) 当前时刻的加速度、速度、位移。 |
源代码位于: src/controller/controller/domain/services/algorithm/trajectory_domain_service.py
47 48 49 50 51 52 53 54 55 56 57 | |
planning
planning(start_angles: list[float], target_angles: list[float], v_start: list[float] = [0] * 6, dt: float = 0.01) -> tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]
规划从起点到终点的S曲线轨迹。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_angles
|
list[float]
|
起点角度。 |
必需 |
target_angles
|
list[float]
|
终点角度。 |
必需 |
v_start
|
list[float]
|
起始速度. Defaults to [0]*6. |
[0] * 6
|
dt
|
float
|
时间步长. Defaults to 0.01. |
0.01
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[ndarray, ndarray, ndarray, ndarray]
|
(times, accelerations, velocities, positions) 规划结果。 |
源代码位于: src/controller/controller/domain/services/algorithm/trajectory_domain_service.py
156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 | |
SmoothDomainService
SmoothDomainService()
轨迹平滑服务。
提供多种平滑算法: 1. Cubic Spline + Savitzky-Golay 滤波(默认,旧版) 2. TOPPRA 时间参数化平滑(可选,旧版测试方法)
适用场景: - 示教轨迹播放 - 多点轨迹规划 - 任何需要轨迹平滑的场景
初始化平滑服务。
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
29 30 31 | |
smooth_trajectory
smooth_trajectory(angles_list: List[List[float]], method: str = 'spline_savgol', **kwargs: Any) -> List[List[float]]
平滑轨迹(统一接口)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angles_list
|
List[List[float]]
|
原始轨迹 [[θ1,...,θ6], ...]。 |
必需 |
method
|
str
|
平滑方法 ("spline_savgol" 或 "toppra"). Defaults to "spline_savgol". |
'spline_savgol'
|
**kwargs
|
Any
|
各算法的特定参数。 |
{}
|
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 平滑后的轨迹点列表。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果指定了未知的平滑方法。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | |
spline_then_savgol
spline_then_savgol(angles_list: List[List[float]], upsample: int = 5, sg_window: int = 211, sg_poly: int = 3) -> List[List[float]]
Cubic Spline + Savitzky-Golay 滤波(参考旧版)。
流程: 1. Savitzky-Golay 平滑原始数据 2. Cubic Spline 上采样插值 3. 重采样回原始点数 4. 再次 Savitzky-Golay 平滑
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angles_list
|
List[List[float]]
|
原始轨迹 N×6。 |
必需 |
upsample
|
int
|
上采样倍数. Defaults to 5. |
5
|
sg_window
|
int
|
Savgol 滤波窗口(必须是奇数). Defaults to 211. |
211
|
sg_poly
|
int
|
Savgol 多项式阶数. Defaults to 3. |
3
|
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 平滑后的轨迹列表。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | |
toppra_smooth
toppra_smooth(waypoints: ndarray, v_max: ndarray | float, a_max: ndarray | float, dt: float = 0.01, grid_n: int = 800) -> List[List[float]]
使用 TOPPRA 进行平滑处理。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
waypoints
|
ndarray
|
路径点 (N, dof)。 |
必需 |
v_max
|
ndarray | float
|
最大速度。 |
必需 |
a_max
|
ndarray | float
|
最大加速度。 |
必需 |
dt
|
float
|
时间步长. Defaults to 0.01. |
0.01
|
grid_n
|
int
|
网格数. Defaults to 800. |
800
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
list |
List[List[float]]
|
平滑后的关节位置列表。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
参数错误。 |
RuntimeError
|
求解失败。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | |
remove_redundant_points
remove_redundant_points(q_teach: List[List[float]], eps: float = 0.0001) -> List[List[float]]
改进版去除重复点:保留“任意一个关节角变化超过阈值”的点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
q_teach
|
List[List[float]]
|
示教点列表。 |
必需 |
eps
|
float
|
变化阈值. Defaults to 1e-4. |
0.0001
|
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 去重后的点列表。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | |
resample_equal_arclen
resample_equal_arclen(q_points: List[List[float]], step: float = 0.002) -> List[List[float]]
按弧长重采样,使路径在关节空间中分布均匀。
原理: - 计算相邻点的欧氏距离(弧长) - 将弧长积分得到累计s - 对s均匀取样后,用插值函数生成新点
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
q_points
|
List[List[float]]
|
原始点列表。 |
必需 |
step
|
float
|
重采样步长. Defaults to 0.002. |
0.002
|
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 重采样后的点列表。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | |
affine_align_to_fixed_ends
affine_align_to_fixed_ends(q_eq: List[List[float]], q_start_req: ndarray, q_end_req: ndarray) -> List[List[float]]
对弧长重采样后的轨迹做仿射变换(线性缩放+平移),使轨迹的首尾点精确对齐到指定的起点和终点。
数学形式: q_aligned = q_start_req + (q_eq - q0) * scale 其中 scale = (q_end_req - q_start_req) / (q1 - q0)
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
q_eq
|
List[List[float]]
|
重采样后的轨迹。 |
必需 |
q_start_req
|
ndarray
|
要求的起点。 |
必需 |
q_end_req
|
ndarray
|
要求的终点。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 对齐后的轨迹。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 | |
teach_smooth
teach_smooth(q_teach: List[List[float]], q_start_req: ndarray, q_end_req: ndarray, step: float = 0.002, eps: float = 1e-06) -> List[List[float]]
示教轨迹整体平滑处理。
流程: 1. 去除停顿/重复点 2. 按弧长重采样(空间均匀) 3. 仿射缩放和平移对齐指定的起点/终点
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
q_teach
|
List[List[float]]
|
原始示教轨迹。 |
必需 |
q_start_req
|
ndarray
|
要求的起点。 |
必需 |
q_end_req
|
ndarray
|
要求的终点。 |
必需 |
step
|
float
|
重采样步长. Defaults to 0.002. |
0.002
|
eps
|
float
|
去重阈值. Defaults to 1e-6. |
1e-06
|
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 最终平滑轨迹。 |
源代码位于: src/controller/controller/domain/services/algorithm/smooth_domain_service.py
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | |
LinearMotionDomainService
LinearMotionDomainService(v_max=[pi / 4] * 6, a_max=[pi / 8] * 6, j_max=[pi / 16] * 6, dt=0.01)
直线运动规划服务。
提供空间直线插值运动规划功能,支持指定起点终点或指定方向距离的规划。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
v_max |
ndarray
|
各关节最大速度。 |
a_max |
ndarray
|
各关节最大加速度。 |
j_max |
ndarray
|
各关节最大加加速度。 |
dt |
float
|
时间步长。 |
kinematic_solver |
KinematicDomainService
|
运动学求解器。 |
初始化直线运动服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
v_max
|
list[float]
|
最大速度列表. Defaults to [pi/4]*6. |
[pi / 4] * 6
|
a_max
|
list[float]
|
最大加速度列表. Defaults to [pi/8]*6. |
[pi / 8] * 6
|
j_max
|
list[float]
|
最大加加速度列表. Defaults to [pi/16]*6. |
[pi / 16] * 6
|
dt
|
float
|
时间步长. Defaults to 0.01. |
0.01
|
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | |
clamp
clamp(x, low, high)
限制数值范围。
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
39 40 41 | |
linear_motion
linear_motion(start_position: list[float], end_position: list[float]) -> tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
规划两点间的直线运动。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_position
|
list[float]
|
起点关节角度。 |
必需 |
end_position
|
list[float]
|
终点关节角度。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
|
(t_list, positions, qd, qdd) 轨迹数据。 |
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | |
linear_motion_z_axis
linear_motion_z_axis(start_position: list[float], distance: float, direction: list[float], ds: float = 0.002, include_end: bool = True) -> tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
沿指定方向矢量进行直线运动规划。
注意:此模式下末端姿态保持不变,仅位置发生位移。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_position
|
list[float]
|
起点关节角度。 |
必需 |
distance
|
float
|
移动距离 (m)。 |
必需 |
direction
|
list[float]
|
方向矢量 [x, y, z]。 |
必需 |
ds
|
float
|
空间采样步长. Defaults to 0.002. |
0.002
|
include_end
|
bool
|
是否包含终点. Defaults to True. |
True
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
|
(t_list, positions, qd, qdd) 轨迹数据。 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果方向向量模长过小。 |
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | |
sampling
sampling(start_quat: ndarray, start_pos: ndarray, end_quat: ndarray, end_pos: ndarray, sampling_dis: float = 0.002, include_end: bool = True) -> tuple[np.ndarray, np.ndarray, int]
对起点和终点进行空间线性插值采样。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_quat
|
ndarray
|
起点四元数。 |
必需 |
start_pos
|
ndarray
|
起点位置。 |
必需 |
end_quat
|
ndarray
|
终点四元数。 |
必需 |
end_pos
|
ndarray
|
终点位置。 |
必需 |
sampling_dis
|
float
|
采样间距. Defaults to 0.002. |
0.002
|
include_end
|
bool
|
是否包含终点. Defaults to True. |
True
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[ndarray, ndarray, int]
|
(quat_list, pos_list, n_seg) |
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | |
smooth
smooth(quat_list: ndarray, pos_list: ndarray, n_seg: int) -> tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
对采样点序列进行逆运动学求解和时间参数化平滑。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
quat_list
|
ndarray
|
四元数序列。 |
必需 |
pos_list
|
ndarray
|
位置序列。 |
必需 |
n_seg
|
int
|
分段数。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
|
(t_list, positions, qd, qdd) |
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | |
inverse_kinematic
inverse_kinematic(quat, pos)
单点逆运动学求解(利用上一位置作为初值)。
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
203 204 205 206 207 208 | |
wrap_to_pi
wrap_to_pi(q: ndarray) -> np.ndarray
将角度包裹到 (-pi, pi],避免 2π 跳变影响计算。
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
218 219 220 | |
ensure_2d_array
ensure_2d_array(arr: ndarray) -> np.ndarray
将输入转换为二维数组 (N, dof) 并做基本校验。
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
当路标数少于 2(缺少起点或终点)时抛出。 |
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
222 223 224 225 226 227 228 229 230 231 232 233 234 | |
toppra_time_parameterize
toppra_time_parameterize(waypoints: ndarray, v_max: ndarray | float, a_max: ndarray | float, dt: float = 0.01, grid_n: int = 800) -> tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
使用 TOPPRA 进行时间参数化。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
waypoints
|
ndarray
|
路径点 (N, dof)。 |
必需 |
v_max
|
ndarray | float
|
最大速度。 |
必需 |
a_max
|
ndarray | float
|
最大加速度。 |
必需 |
dt
|
float
|
时间步长. Defaults to 0.01. |
0.01
|
grid_n
|
int
|
网格点数. Defaults to 800. |
800
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
|
(t, q, qd, qdd). |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果参数形状不正确。 |
RuntimeError
|
如果求解失败。 |
源代码位于: src/controller/controller/domain/services/algorithm/linear_motion_domain_service.py
236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 | |
CurveMotionDomainService
CurveMotionDomainService(kinematic_solver: KinematicDomainService, v_max=[pi / 4] * 6, a_max=[pi / 8] * 6, j_max=[pi / 16] * 6, dt=0.01)
曲线运动规划服务。
提供基于弧长参数化的空间曲线规划、姿态平滑插值以及基于 TOPPRA 的时间参数化功能。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
v_max |
ndarray
|
各关节最大速度 (rad/s)。 |
a_max |
ndarray
|
各关节最大加速度 (rad/s²)。 |
j_max |
ndarray
|
各关节最大加加速度 (rad/s³)。 |
dt |
float
|
时间步长 (s)。 |
kinematic_solver |
KinematicDomainService
|
运动学求解器实例。 |
初始化曲线运动服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
kinematic_solver
|
KinematicDomainService
|
运动学求解器服务实例。 |
必需 |
v_max
|
list[float]
|
最大速度列表. Defaults to [pi/4]*6. |
[pi / 4] * 6
|
a_max
|
list[float]
|
最大加速度列表. Defaults to [pi/8]*6. |
[pi / 8] * 6
|
j_max
|
list[float]
|
最大加加速度列表. Defaults to [pi/16]*6. |
[pi / 16] * 6
|
dt
|
float
|
采样时间步长. Defaults to 0.01. |
0.01
|
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | |
clamp
clamp(x, low, high)
将值 x 限制在 [low, high] 区间内。
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
50 51 52 | |
curve_motion
curve_motion(pos_fun, u0: float, u1: float, start_position: list[float], end_position: list[float] | None, ds: float = 0.002, include_end: bool = True, orientation_mode: str = 'slerp', tool_axis: str = 'z', up_hint: ndarray = np.array([0, 0, 1.0])) -> tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
执行曲线运动规划。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
pos_fun
|
callable
|
位置函数,接受参数 u 返回 (3,) 坐标。 |
必需 |
u0
|
float
|
参数起始值。 |
必需 |
u1
|
float
|
参数终止值。 |
必需 |
start_position
|
list[float]
|
起点关节角度。 |
必需 |
end_position
|
list[float] | None
|
终点关节角度。 |
必需 |
ds
|
float
|
采样弧长步长. Defaults to 0.002. |
0.002
|
include_end
|
bool
|
是否包含终点. Defaults to True. |
True
|
orientation_mode
|
str
|
姿态插值模式 ('fixed'|'slerp'|'tangent'). Defaults to "slerp". |
'slerp'
|
tool_axis
|
str
|
工具轴方向 ('x'|'y'|'z'). Defaults to "z". |
'z'
|
up_hint
|
ndarray
|
向上向量提示,用于切向跟随模式. Defaults to [0, 0, 1.0]. |
array([0, 0, 1.0])
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
|
(t_list, positions, qd, qdd) - t_list: 时间戳列表 - positions: 关节角度轨迹列表 - qd: 关节速度轨迹列表 - qdd: 关节加速度轨迹列表 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果 orientation_mode 无效或 slerp 模式下未提供 end_position。 |
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | |
make_pos_fun_spline
make_pos_fun_spline(start_position: list[float], end_position: list[float], mid_points: list, bc_type: str = 'natural') -> tuple[callable, np.ndarray]
构造基于三次样条的位置函数。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_position
|
list[float]
|
起点关节角度。 |
必需 |
end_position
|
list[float]
|
终点关节角度。 |
必需 |
mid_points
|
list
|
中间点坐标列表 (N, 3)。 |
必需 |
bc_type
|
str
|
边界条件类型. Defaults to "natural". |
'natural'
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[callable, ndarray]
|
(pos_fun, s) - pos_fun: 位置函数 callable - s: 累积弦长数组 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果点集形状不正确。 |
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | |
sample_parametric_equal_arclen
sample_parametric_equal_arclen(pos_fun, u0: float, u1: float, ds: float = 0.002, include_end: bool = True, dense: int = 4000) -> tuple[np.ndarray, np.ndarray, int]
对参数曲线 r(u) 做等弧长采样。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
pos_fun
|
callable
|
参数曲线函数 r(u)。 |
必需 |
u0
|
float
|
参数起始值。 |
必需 |
u1
|
float
|
参数终止值。 |
必需 |
ds
|
float
|
目标弧长采样间隔. Defaults to 0.002. |
0.002
|
include_end
|
bool
|
结果是否必须包含终点. Defaults to True. |
True
|
dense
|
int
|
初始密采样的点数. Defaults to 4000. |
4000
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[ndarray, ndarray, int]
|
(pos_list, u_eq, n_seg) - pos_list: 等弧长采样后的坐标列表 (M, 3) - u_eq: 对应的参数值列表 (M,) - n_seg: 分段数 |
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 | |
wrap_to_pi
wrap_to_pi(q: ndarray) -> np.ndarray
将角度包裹到 (-pi, pi],避免 2π 跳变影响计算。
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
303 304 305 | |
ensure_2d_array
ensure_2d_array(arr: ndarray) -> np.ndarray
将输入转换为二维数组 (N, dof) 并做基本校验。
Raises
ValueError 当路标数少于 2(缺少起点或终点)时抛出。
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 | |
toppra_time_parameterize
toppra_time_parameterize(waypoints: ndarray, v_max: ndarray | float, a_max: ndarray | float, dt: float = 0.01, grid_n: int = 400) -> tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
使用 TOPPRA 对路径进行时间参数化。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
waypoints
|
ndarray
|
路径点数组 (N, dof)。 |
必需 |
v_max
|
ndarray | float
|
最大速度约束。 |
必需 |
a_max
|
ndarray | float
|
最大加速度约束。 |
必需 |
dt
|
float
|
输出轨迹的时间步长. Defaults to 0.01. |
0.01
|
grid_n
|
int
|
TOPPRA 离散化网格点数. Defaults to 400. |
400
|
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
tuple |
tuple[list[float], list[list[float]], list[list[float]], list[list[float]]]
|
(t, q, qd, qdd) - t: 时间戳列表 - q: 关节位置列表 - qd: 关节速度列表 - qdd: 关节加速度列表 |
引发:
| 类型 | 描述 |
|---|---|
ValueError
|
如果 waypoints 维度不正确或约束格式错误。 |
RuntimeError
|
如果 TOPPRA 求解失败。 |
源代码位于: src/controller/controller/domain/services/algorithm/curve_motion.py
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 | |
SerialDomainService
SerialDomainService()
Bases: QObject
串口领域服务 - 管理串口连接的核心业务逻辑
初始化串口领域服务
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
44 45 46 47 48 49 50 51 52 53 54 55 | |
scan_available_ports
scan_available_ports() -> List[str]
扫描可用端口列表
返回
List[str]: 可用端口名称列表
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
57 58 59 60 61 62 63 64 65 66 67 | |
get_port_info
get_port_info(port_name: str) -> Optional[Dict[str, str]]
获取指定端口信息
参数
port_name: 端口名称
返回
Optional[Dict[str, str]]: 端口信息字典,失败时返回None
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
69 70 71 72 73 74 75 76 77 78 79 80 81 82 | |
get_current_port
get_current_port() -> Optional[str]
获取当前连接的端口名称
返回
Optional[str]: 端口名称,未连接时返回None
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
84 85 86 87 88 89 90 91 | |
is_connected
is_connected() -> bool
检查串口是否已连接
返回
bool: 是否已连接
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
93 94 95 96 97 98 99 100 | |
connect_port
connect_port(port: str, config: Dict[str, Any]) -> bool
连接串口
参数
port: 串口名称 config: 串口配置参数
返回
bool: 连接是否成功
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | |
disconnect_port
disconnect_port() -> bool
断开串口连接
返回
bool: 断开是否成功
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 | |
send_data
send_data(data: str) -> bool
发送数据
参数
data: 要发送的数据
返回
bool: 是否成功添加到发送队列
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 | |
cleanup
cleanup() -> None
清理资源
源代码位于: src/controller/controller/domain/services/communication/serial_domain_service.py
242 243 244 245 246 247 | |
MotionRunner
MotionRunner(serial_domain_service: SerialDomainService, message_domain_service: MessageDomainService)
Bases: QObject
运动执行器。
负责按时间步长定时发送运动和夹爪指令。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
motion_msg_signal |
pyqtSignal
|
运动消息发送信号,携带 (消息内容, 类型)。 |
serial_domain_service |
串口领域服务。 |
|
message_domain_service |
消息领域服务。 |
|
data_list |
list
|
待发送的数据列表。 |
data_index |
int
|
当前发送索引。 |
timer |
QTimer
|
定时器。 |
初始化运动执行器。
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
29 30 31 32 33 34 35 36 37 38 39 40 41 | |
add_motion_data
add_motion_data(positions)
添加运动数据点序列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
positions
|
list | ndarray
|
关节角度列表序列。 |
必需 |
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56 | |
add_gripper_data
add_gripper_data(effector_mode, effector_data, pre_delay=0.0, post_delay=1.0)
添加夹爪命令。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
effector_mode
|
int
|
夹爪模式。 |
必需 |
effector_data
|
float
|
夹爪参数。 |
必需 |
pre_delay
|
float
|
前置等待时间(秒). Defaults to 0.0. |
0.0
|
post_delay
|
float
|
后置等待时间(秒). Defaults to 1.0. |
1.0
|
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | |
start_motion
start_motion()
开始执行运动序列。
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
85 86 87 88 | |
stop_motion
stop_motion()
停止执行运动。
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
90 91 92 93 | |
clear_data
clear_data()
清空所有待发送数据。
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
95 96 97 98 | |
motion_timeout
motion_timeout()
定时器回调函数,负责单步发送或延迟等待。
源代码位于: src/controller/controller/domain/services/motion/motion_runner.py
100 101 102 103 104 105 106 107 108 109 110 111 | |
MotionConstructor
MotionConstructor(motion_runner: MotionRunner, trajectory_planner: TrajectoryPlanningService)
运动构造器 - 领域服务。
职责: 1. 管理操作状态(执行/保存/预览) 2. 协调 TrajectoryPlanningService(规划) 3. 协调 MotionRunner(执行)
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
motion_runner |
MotionRunner
|
运动执行器。 |
trajectory_planner |
TrajectoryPlanningService
|
轨迹规划服务。 |
初始化运动构造器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
motion_runner
|
MotionRunner
|
运动执行器。 |
必需 |
trajectory_planner
|
TrajectoryPlanningService
|
轨迹规划服务。 |
必需 |
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | |
prepare_operation
prepare_operation(mode: MotionOperationMode, tasks: List[Dict], context: Dict = None)
准备操作(统一入口)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
mode
|
MotionOperationMode
|
操作模式。 - EXECUTE: 执行运动 - SAVE: 保存轨迹 - PREVIEW: 预览轨迹 |
必需 |
tasks
|
List[Dict]
|
任务列表。 |
必需 |
context
|
Dict
|
操作上下文。 - EXECUTE: {} - SAVE: {"filename": "xxx", "type": "node|plan"} - PREVIEW: {"type": "node|plan", "node_index": 0} |
None
|
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | |
has_pending_operation
has_pending_operation() -> bool
检查是否有待处理的操作。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=有待处理的操作, False=无操作。 |
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
66 67 68 69 70 71 72 | |
get_operation_mode
get_operation_mode() -> MotionOperationMode
获取当前操作模式。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
MotionOperationMode |
MotionOperationMode
|
当前操作模式枚举。 |
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
74 75 76 77 78 79 80 | |
get_pending_tasks
get_pending_tasks() -> List[Dict]
获取待处理的任务列表。
返回:
| 类型 | 描述 |
|---|---|
List[Dict]
|
List[Dict]: 任务列表的副本。 |
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
82 83 84 85 86 87 88 | |
get_operation_context
get_operation_context() -> Dict
获取操作上下文。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
Dict |
Dict
|
上下文字典的副本。 |
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
90 91 92 93 94 95 96 | |
clear_operation
clear_operation()
清除操作状态。
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
98 99 100 101 102 | |
execute_motion
execute_motion(start_position: List[float])
执行运动(仅用于EXECUTE模式)。
流程: 1. 按任务顺序规划每个任务 2. 按顺序添加运动数据和夹爪命令 3. 清除状态
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
start_position
|
List[float]
|
起始位置(当前关节角度)。 |
必需 |
引发:
| 类型 | 描述 |
|---|---|
RuntimeError
|
如果当前模式不是EXECUTE。 |
源代码位于: src/controller/controller/domain/services/motion/motion_constructor.py
104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | |
TrajectoryPlanningService
TrajectoryPlanningService(s_curve: SCurve, smooth_service: SmoothDomainService, linear_motion_service: LinearMotionDomainService, curve_motion_service: CurveMotionDomainService)
轨迹规划服务 - 领域服务。
职责: 1. 根据任务类型规划轨迹点序列 2. 维护位置状态(起点->终点) 3. 返回纯数据,不执行任何副作用
核心原则:纯函数,可测试,可复用
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
s_curve |
SCurve
|
S曲线算法服务。 |
smooth_service |
SmoothDomainService
|
平滑算法服务。 |
linear_motion_service |
LinearMotionDomainService
|
直线运动服务。 |
curve_motion_service |
CurveMotionDomainService
|
曲线运动服务。 |
初始化轨迹规划服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
s_curve
|
SCurve
|
S曲线算法服务。 |
必需 |
smooth_service
|
SmoothDomainService
|
平滑算法服务。 |
必需 |
linear_motion_service
|
LinearMotionDomainService
|
直线运动服务。 |
必需 |
curve_motion_service
|
CurveMotionDomainService
|
曲线运动服务。 |
必需 |
源代码位于: src/controller/controller/domain/services/motion/trajectory_planning_service.py
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
plan_task_sequence
plan_task_sequence(tasks: List[Dict], start_position: List[float]) -> List[List[float]]
规划任务序列(仅返回位置)。
用于:执行运动、保存轨迹。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
tasks
|
List[Dict]
|
任务列表。 |
必需 |
start_position
|
List[float]
|
起始位置。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 轨迹点序列 [[q1,...,q6], ...]。 |
源代码位于: src/controller/controller/domain/services/motion/trajectory_planning_service.py
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | |
plan_task_sequence_with_derivatives
plan_task_sequence_with_derivatives(tasks: List[Dict], start_position: List[float]) -> Dict
规划任务序列(返回位置、速度、加速度、时间)。
用于:预览轨迹曲线。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
tasks
|
List[Dict]
|
任务列表。 |
必需 |
start_position
|
List[float]
|
起始位置。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
Dict |
Dict
|
包含以下键的字典: - time: [t0, t1, ...] - positions: [[q1,...,q6], ...] - velocities: [[qd1,...,qd6], ...] - accelerations: [[qdd1,...,qdd6], ...] |
源代码位于: src/controller/controller/domain/services/motion/trajectory_planning_service.py
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | |
RobotStateDomainService
RobotStateDomainService()
Bases: QObject
机械臂状态领域服务 - 单一数据源。
职责: 1. 维护当前机械臂状态(最新快照) 2. 维护历史状态缓冲(滑动窗口) 3. 计算静摩擦补偿(基于历史数据) 4. 发射信号通知订阅者
设计原则: - Single Source of Truth: 所有状态只在这里维护 - Pub-Sub Pattern: 支持多个订阅者 - Thread Safe: 使用锁保护可变数据
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
state_updated |
pyqtSignal
|
状态更新信号,携带 RobotStateSnapshot。 |
angles_changed |
pyqtSignal
|
角度显著变化信号,携带 [θ1, θ2, ..., θ6] 列表。 |
torque_compensation_requested |
pyqtSignal
|
力矩补偿请求信号,携带当前角度列表。 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | |
update_state
update_state(decoded_message)
更新机械臂状态(核心方法)。
由 MessageResponseService 调用,每次接收到串口数据并解码后调用。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
decoded_message
|
Any
|
解码后的消息对象。 |
必需 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | |
get_current_state
get_current_state() -> Optional[RobotStateSnapshot]
获取当前状态快照(不可变,线程安全)。
返回:
| 类型 | 描述 |
|---|---|
Optional[RobotStateSnapshot]
|
Optional[RobotStateSnapshot]: 当前状态快照。 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
132 133 134 135 136 137 138 | |
get_current_angles
get_current_angles() -> List[float]
获取当前关节角度(弧度)。
返回:
| 类型 | 描述 |
|---|---|
List[float]
|
List[float]: 6个关节的角度列表。 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
140 141 142 143 144 145 146 147 148 | |
get_current_positions
get_current_positions() -> List[int]
获取当前关节位置(编码器值)。
返回:
| 类型 | 描述 |
|---|---|
List[int]
|
List[int]: 6个关节的编码器位置列表。 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
150 151 152 153 154 155 156 157 158 | |
get_position_history
get_position_history(count: int = 20) -> List[Dict]
获取历史位置数据。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
count
|
int
|
获取的记录数量. Defaults to 20. |
20
|
返回:
| 类型 | 描述 |
|---|---|
List[Dict]
|
List[Dict]: 历史位置数据列表,每个元素包含 timestamp, angles, positions。 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
160 161 162 163 164 165 166 167 168 169 170 | |
get_friction_compensation
get_friction_compensation() -> List[float]
获取当前静摩擦补偿值。
返回:
| 类型 | 描述 |
|---|---|
List[float]
|
List[float]: 6个关节的静摩擦补偿值列表。 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
172 173 174 175 176 177 178 179 | |
set_teaching_mode
set_teaching_mode(enabled: bool)
设置示教模式。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
enabled
|
bool
|
True=开启, False=关闭。 |
必需 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
185 186 187 188 189 190 191 192 193 194 195 196 197 | |
set_friction_config
set_friction_config(config: List[float])
设置静摩擦配置。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config
|
List[float]
|
6个关节的静摩擦阈值列表。 |
必需 |
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
199 200 201 202 203 204 205 206 | |
clear_history
clear_history()
清空历史数据。
源代码位于: src/controller/controller/domain/services/state/robot_state_domain_service.py
208 209 210 211 212 213 | |
TeachRecordDomainService
TeachRecordDomainService()
Bases: QObject
示教记录领域服务 - Domain层。
职责: 1. 管理示教记录数据(内存中) 2. 控制记录的开始/停止 3. 提供记录的增删改查操作 4. 生成记录名称
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
recording_state_changed |
pyqtSignal
|
记录状态变化信号,携带是否正在记录。 |
record_added |
pyqtSignal
|
记录添加信号,携带新增的记录名称。 |
record_deleted |
pyqtSignal
|
记录删除信号,携带删除的记录名称。 |
初始化示教记录服务。
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
start_recording
start_recording()
开始记录。
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
49 50 51 52 53 54 55 56 | |
stop_recording
stop_recording() -> Optional[str]
停止记录并保存。
返回:
| 类型 | 描述 |
|---|---|
Optional[str]
|
Optional[str]: 新生成的记录名称,如果没有数据则返回 None。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | |
is_recording
is_recording() -> bool
查询是否正在记录。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否正在记录。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
79 80 81 82 83 84 85 | |
add_angle_to_current_record
add_angle_to_current_record(angles: List[float])
添加角度到当前记录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angles
|
List[float]
|
6维关节角度。 |
必需 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
87 88 89 90 91 92 93 94 95 | |
get_record_timer
get_record_timer() -> QTimer
获取记录定时器(用于外部连接)。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
QTimer |
QTimer
|
记录定时器。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
104 105 106 107 108 109 110 | |
get_all_records
get_all_records() -> Dict[str, List[List[float]]]
获取所有记录。
返回:
| 类型 | 描述 |
|---|---|
Dict[str, List[List[float]]]
|
Dict[str, List[List[float]]]: 所有记录字典。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
116 117 118 119 120 121 122 | |
get_record_names
get_record_names() -> List[str]
获取所有记录名称。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 记录名称列表。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
124 125 126 127 128 129 130 | |
get_record
get_record(name: str) -> Optional[List[List[float]]]
获取指定记录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
记录名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[List[List[float]]]
|
Optional[List[List[float]]]: 角度列表,如果不存在返回 None。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
132 133 134 135 136 137 138 139 140 141 | |
delete_record
delete_record(name: str) -> bool
删除指定记录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
记录名称。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否删除成功。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
143 144 145 146 147 148 149 150 151 152 153 154 155 156 | |
reverse_record
reverse_record(name: str) -> Optional[str]
反转指定记录并另存为新记录。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
原记录名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[str]
|
Optional[str]: 新记录名称,如果失败返回 None。 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 | |
load_records
load_records(records: Dict[str, List[List[float]]])
加载记录数据(从Repository)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
records
|
Dict[str, List[List[float]]]
|
记录数据字典。 |
必需 |
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
190 191 192 193 194 195 196 | |
clear_all_records
clear_all_records()
清空所有记录。
源代码位于: src/controller/controller/domain/services/state/teach_record_domain_service.py
198 199 200 | |
MotionPlanningDomainService
MotionPlanningDomainService()
运动规划Domain服务。
职责: 1. 管理多个方案(内存) 2. 维护当前激活的方案 3. 提供方案和节点的增删改查 4. 实施业务规则
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
_plans |
List[MotionPlan]
|
方案列表。 |
_current_index |
int
|
当前激活方案的索引。 |
初始化服务。
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
22 23 24 25 | |
initialize
initialize(plans: List[MotionPlan], current_index: int)
初始化数据(从Repository加载后调用)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
plans
|
List[MotionPlan]
|
方案列表。 |
必需 |
current_index
|
int
|
当前方案索引。 |
必需 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
29 30 31 32 33 34 35 36 37 | |
get_all_plans
get_all_plans() -> List[MotionPlan]
获取所有方案(用于持久化)。
返回:
| 类型 | 描述 |
|---|---|
List[MotionPlan]
|
List[MotionPlan]: 方案列表的副本。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
39 40 41 42 43 44 45 | |
create_plan
create_plan(name: str) -> int
创建方案,返回索引。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
name
|
str
|
方案名称。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
int |
int
|
新创建方案的索引。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
49 50 51 52 53 54 55 56 57 58 59 60 61 | |
get_plan_names
get_plan_names() -> List[str]
获取所有方案名称(用于下拉框)。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 方案名称列表。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
63 64 65 66 67 68 69 | |
get_current_index
get_current_index() -> int
获取当前方案索引。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
int |
int
|
当前索引。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
71 72 73 74 75 76 77 | |
set_current_index
set_current_index(index: int) -> bool
切换方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
目标索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否切换成功。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
79 80 81 82 83 84 85 86 87 88 89 90 91 | |
delete_plan
delete_plan(index: int) -> bool
删除方案。
业务规则:至少保留一个方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=删除成功, False=删除失败(违反业务规则或索引无效)。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | |
can_delete_plan
can_delete_plan() -> bool
检查是否可以删除方案。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=可以删除, False=不能删除(只有一个方案)。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
118 119 120 121 122 123 124 | |
rename_plan
rename_plan(index: int, new_name: str) -> bool
重命名方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
方案索引。 |
必需 |
new_name
|
str
|
新名称。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否成功。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
126 127 128 129 130 131 132 133 134 135 136 137 138 139 | |
get_current_plan
get_current_plan() -> Optional[MotionPlan]
获取当前方案。
返回:
| 类型 | 描述 |
|---|---|
Optional[MotionPlan]
|
Optional[MotionPlan]: 当前方案对象,无方案时返回 None。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
141 142 143 144 145 146 147 148 149 | |
get_plan_count
get_plan_count() -> int
获取方案数量。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
int |
int
|
方案数量。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
151 152 153 154 155 156 157 | |
add_point
add_point(point_data: dict)
添加节点到当前方案。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
point_data
|
dict
|
节点数据。 |
必需 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
161 162 163 164 165 166 167 168 169 | |
remove_point
remove_point(index: int)
删除节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
171 172 173 174 175 176 177 178 179 | |
move_point_up
move_point_up(index: int) -> bool
上移节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否成功。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
181 182 183 184 185 186 187 188 189 190 191 | |
move_point_down
move_point_down(index: int) -> bool
下移节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否成功。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
193 194 195 196 197 198 199 200 201 202 203 | |
update_point
update_point(index: int, point_data: dict)
更新节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
point_data
|
dict
|
新数据。 |
必需 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
205 206 207 208 209 210 211 212 213 214 | |
get_all_points
get_all_points() -> List[dict]
获取当前方案的所有节点。
返回:
| 类型 | 描述 |
|---|---|
List[dict]
|
List[dict]: 节点列表的副本。 |
源代码位于: src/controller/controller/domain/services/planning/motion_planning_domain_service.py
216 217 218 219 220 221 222 223 | |
CameraDomainService
CameraDomainService()
Bases: QObject
摄像头领域服务。
职责: - 管理 ROS2 摄像头订阅节点的生命周期 - 维护最新的彩色/深度图像数据(线程安全) - 发射图像接收信号 - 深度图可视化处理
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
color_image_received |
pyqtSignal
|
彩色图像接收信号,携带图像数据 (np.ndarray)。 |
depth_image_received |
pyqtSignal
|
深度图像接收信号,携带图像数据 (np.ndarray)。 |
connection_status_changed |
pyqtSignal
|
连接状态变更信号,携带 (connected, message)。 |
error_occurred |
pyqtSignal
|
错误信号,携带错误信息。 |
初始化摄像头领域服务。
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | |
connect
connect() -> bool
连接摄像头(启动 ROS 订阅)。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
连接成功返回 True,失败返回 False。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | |
disconnect
disconnect() -> bool
断开摄像头(关闭 ROS 订阅)。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
断开成功返回 True,失败返回 False。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | |
get_latest_color_image
get_latest_color_image() -> Optional[np.ndarray]
获取最新彩色图像(线程安全)。
返回:
| 类型 | 描述 |
|---|---|
Optional[ndarray]
|
Optional[np.ndarray]: 图像数据,无数据返回 None。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
249 250 251 252 253 254 255 256 | |
get_latest_depth_image
get_latest_depth_image() -> Optional[np.ndarray]
获取最新深度图像(线程安全)。
返回:
| 类型 | 描述 |
|---|---|
Optional[ndarray]
|
Optional[np.ndarray]: 图像数据,无数据返回 None。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
258 259 260 261 262 263 264 265 | |
is_color_available
is_color_available() -> bool
检查彩色图像是否可用。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否可用。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
267 268 269 270 271 272 273 | |
is_depth_available
is_depth_available() -> bool
检查深度图像是否可用。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否可用。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
275 276 277 278 279 280 281 | |
visualize_depth_image
visualize_depth_image(depth_image: ndarray) -> np.ndarray
深度图可视化为伪彩色图。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
depth_image
|
ndarray
|
原始深度图(16位或32位浮点)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 伪彩色深度图(BGR, uint8)。 |
源代码位于: src/controller/controller/domain/services/vision/camera_domain_service.py
283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | |
RecognitionDomainService
RecognitionDomainService()
Bases: QObject
零件识别领域服务。
职责: - 订阅 recognition_result ROS 话题 - 维护最新检测结果(线程安全) - 独立于摄像头服务运行 - 发射检测结果信号
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
detection_result_received |
pyqtSignal
|
检测结果接收信号,携带结果字典。 |
detection_status_changed |
pyqtSignal
|
检测状态变更信号,携带 (is_running, message)。 |
error_occurred |
pyqtSignal
|
错误信号,携带错误信息。 |
初始化零件识别领域服务。
源代码位于: src/controller/controller/domain/services/vision/recognition_domain_service.py
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | |
start_detection
start_detection() -> bool
开始检测(启动 ROS 订阅)。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
启动成功返回 True,失败返回 False。 |
源代码位于: src/controller/controller/domain/services/vision/recognition_domain_service.py
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | |
stop_detection
stop_detection() -> bool
停止检测(关闭 ROS 订阅)。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
停止成功返回 True,失败返回 False。 |
源代码位于: src/controller/controller/domain/services/vision/recognition_domain_service.py
144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 | |
get_latest_result
get_latest_result() -> Optional[Dict]
获取最新检测结果(线程安全)。
返回:
| 类型 | 描述 |
|---|---|
Optional[Dict]
|
Optional[Dict]: 检测结果字典,无结果返回 None。 |
源代码位于: src/controller/controller/domain/services/vision/recognition_domain_service.py
183 184 185 186 187 188 189 190 191 192 | |
is_detection_running
is_detection_running() -> bool
检查检测是否正在运行。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否正在运行。 |
源代码位于: src/controller/controller/domain/services/vision/recognition_domain_service.py
194 195 196 197 198 199 200 | |
clear_result
clear_result()
清除检测结果。
源代码位于: src/controller/controller/domain/services/vision/recognition_domain_service.py
202 203 204 205 | |
HandEyeTransformDomainService
HandEyeTransformDomainService(config: HandEyeCalibrationConfig, kinematic_service: KinematicDomainService)
手眼标定变换服务。
职责: 1. 像素坐标 → 相机坐标系 2. 相机坐标系 → 基坐标系 3. 计算目标位姿(包含偏移和姿态调整) 4. 提供逆运动学求解
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
config |
HandEyeCalibrationConfig
|
手眼标定配置。 |
kinematic_service |
KinematicDomainService
|
运动学服务实例。 |
初始化手眼标定变换服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config
|
HandEyeCalibrationConfig
|
手眼标定配置(通过DI注入)。 |
必需 |
kinematic_service
|
KinematicDomainService
|
运动学服务。 |
必需 |
源代码位于: src/controller/controller/domain/services/algorithm/hand_eye_transform_domain_service.py
25 26 27 28 29 30 31 32 33 34 35 36 37 | |
calculate_target_joint_angles
calculate_target_joint_angles(central_center: List[float], depth: float, real_center: List[float], real_depth: float, angle: float, current_joint_angles: List[float]) -> Optional[List[float]]
计算运动到零件位置所需的目标关节角度。
完整流程: 1. 像素坐标 → 相机坐标系 2. 正运动学:当前关节角度 → 末端位姿 3. 相机坐标系 → 基坐标系 4. 计算零件方向 + 偏移量 5. 逆运动学:目标位姿 → 目标关节角度
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
central_center
|
List[float]
|
中心点像素坐标 [u, v]。 |
必需 |
depth
|
float
|
中心点深度 (mm)。 |
必需 |
real_center
|
List[float]
|
实际中心点像素坐标 [u, v]。 |
必需 |
real_depth
|
float
|
实际中心点深度 (mm)。 |
必需 |
angle
|
float
|
零件角度(弧度)。 |
必需 |
current_joint_angles
|
List[float]
|
当前关节角度列表(弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[List[float]]
|
Optional[List[float]]: 目标关节角度列表(弧度),如果无解则返回 None。 |
源代码位于: src/controller/controller/domain/services/algorithm/hand_eye_transform_domain_service.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | |
get_z_rotation_matrix
get_z_rotation_matrix(angle: float) -> np.ndarray
获取绕 Z 轴旋转的齐次变换矩阵。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angle
|
float
|
旋转角度(弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 4x4 齐次变换矩阵。 |
源代码位于: src/controller/controller/domain/services/algorithm/hand_eye_transform_domain_service.py
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | |
get_y_rotation_matrix
get_y_rotation_matrix(angle: float) -> np.ndarray
获取绕 Y 轴旋转的齐次变换矩阵。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angle
|
float
|
旋转角度(弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 4x4 齐次变换矩阵。 |
源代码位于: src/controller/controller/domain/services/algorithm/hand_eye_transform_domain_service.py
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | |
get_x_rotation_matrix
get_x_rotation_matrix(angle: float) -> np.ndarray
获取绕 X 轴旋转的齐次变换矩阵。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
angle
|
float
|
旋转角度(弧度)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
ndarray
|
np.ndarray: 4x4 齐次变换矩阵。 |
源代码位于: src/controller/controller/domain/services/algorithm/hand_eye_transform_domain_service.py
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 | |
MotionPlan
dataclass
MotionPlan(name: str, points: List[dict] = list())
运动规划方案实体。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
name |
str
|
方案名称。 |
points |
List[dict]
|
节点列表。 |
add_point
add_point(point_data: dict)
添加节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
point_data
|
dict
|
节点数据。 |
必需 |
源代码位于: src/controller/controller/domain/entities/motion_plan.py
20 21 22 23 24 25 26 | |
remove_point
remove_point(index: int)
删除节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
源代码位于: src/controller/controller/domain/entities/motion_plan.py
28 29 30 31 32 33 34 35 | |
move_point_up
move_point_up(index: int) -> bool
上移节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否成功移动。 |
源代码位于: src/controller/controller/domain/entities/motion_plan.py
37 38 39 40 41 42 43 44 45 46 47 48 49 50 | |
move_point_down
move_point_down(index: int) -> bool
下移节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否成功移动。 |
源代码位于: src/controller/controller/domain/entities/motion_plan.py
52 53 54 55 56 57 58 59 60 61 62 63 64 65 | |
update_point
update_point(index: int, point_data: dict)
更新节点。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
index
|
int
|
节点索引。 |
必需 |
point_data
|
dict
|
新的节点数据。 |
必需 |
源代码位于: src/controller/controller/domain/entities/motion_plan.py
67 68 69 70 71 72 73 74 75 | |
PortScanner
串口端口扫描器。
负责扫描可用的串口端口,包含真实串口和虚拟串口。
scan_ports
staticmethod
scan_ports() -> List[str]
扫描可用的串口端口(包含真实串口和虚拟串口)。
返回:
| 类型 | 描述 |
|---|---|
List[str]
|
List[str]: 可用端口名称列表。 |
源代码位于: src/controller/controller/infrastructure/communication/port_scanner.py
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
get_port_info
staticmethod
get_port_info(port_name: str) -> Optional[Dict[str, str]]
获取指定端口的详细信息(支持真实串口和虚拟串口)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
port_name
|
str
|
端口名称。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
Optional[Dict[str, str]]
|
Optional[Dict[str, str]]: 端口信息字典,包含 description 和 hwid。如果端口不可用则返回 None。 |
源代码位于: src/controller/controller/infrastructure/communication/port_scanner.py
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | |
get_all_port_info
staticmethod
get_all_port_info() -> List[Dict[str, str]]
获取所有可用端口的详细信息(包含真实串口和虚拟串口)。
返回:
| 类型 | 描述 |
|---|---|
List[Dict[str, str]]
|
List[Dict[str, str]]: 所有端口信息列表。 |
源代码位于: src/controller/controller/infrastructure/communication/port_scanner.py
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | |
SerialAdapter
SerialAdapter()
串口连接适配器。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
serial_port |
Optional[Serial]
|
PySerial 实例。 |
current_config |
Optional[Dict[str, Any]]
|
当前配置字典。 |
初始化串口适配器。
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
17 18 19 20 | |
connect
connect(port: str, config: Dict[str, Any]) -> bool
连接串口。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
port
|
str
|
串口名称。 |
必需 |
config
|
Dict[str, Any]
|
串口配置参数。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
连接是否成功。 |
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | |
disconnect
disconnect() -> bool
断开串口连接。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
断开是否成功。 |
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | |
is_connected
is_connected() -> bool
检查串口是否已连接。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否已连接。 |
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
77 78 79 80 81 82 83 84 | |
get_serial_port
get_serial_port() -> Optional[serial.Serial]
获取串口对象。
返回:
| 类型 | 描述 |
|---|---|
Optional[Serial]
|
Optional[serial.Serial]: 串口对象,未连接时返回None。 |
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
86 87 88 89 90 91 92 93 94 | |
get_current_config
get_current_config() -> Optional[Dict[str, Any]]
获取当前连接配置。
返回:
| 类型 | 描述 |
|---|---|
Optional[Dict[str, Any]]
|
Optional[Dict[str, Any]]: 当前配置,未连接时返回 None。 |
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
96 97 98 99 100 101 102 | |
get_port_name
get_port_name() -> Optional[str]
获取当前连接的端口名称。
返回:
| 类型 | 描述 |
|---|---|
Optional[str]
|
Optional[str]: 端口名称,未连接时返回 None。 |
源代码位于: src/controller/controller/infrastructure/communication/serial_adapter.py
104 105 106 107 108 109 110 111 112 | |
SerialReader
SerialReader(serial_port: Optional[Serial] = None)
Bases: QObject
串口读取处理类。
负责在独立线程中读取串口数据,支持多种编码格式。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
data_received |
pyqtSignal
|
接收到数据时发送信号,携带十六进制字符串。 |
初始化串口读取器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
serial_port
|
Serial
|
串口对象。 |
None
|
源代码位于: src/controller/controller/infrastructure/communication/serial_reader.py
23 24 25 26 27 28 29 30 31 | |
stop
stop() -> None
停止读取。
源代码位于: src/controller/controller/infrastructure/communication/serial_reader.py
35 36 37 | |
read_data
read_data() -> None
读取串口数据 - 在独立线程中运行。
源代码位于: src/controller/controller/infrastructure/communication/serial_reader.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | |
SerialWriter
SerialWriter(serial_port: Optional[Serial] = None)
Bases: QObject
串口发送处理类。
负责在独立线程中发送串口数据,使用队列管理发送任务。
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
serial_port |
Optional[Serial]
|
串口对象。 |
send_queue |
Queue
|
发送任务队列。 |
初始化串口写入器。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
serial_port
|
Serial
|
串口对象。 |
None
|
源代码位于: src/controller/controller/infrastructure/communication/serial_writer.py
22 23 24 25 26 27 28 29 30 31 | |
stop
stop() -> None
停止发送。
源代码位于: src/controller/controller/infrastructure/communication/serial_writer.py
33 34 35 | |
add_to_queue
add_to_queue(cmd: Union[str, bytes]) -> None
添加命令到发送队列。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
cmd
|
Union[str, bytes]
|
待发送的命令(十六进制字符串或字节)。 |
必需 |
源代码位于: src/controller/controller/infrastructure/communication/serial_writer.py
37 38 39 40 41 42 43 | |
send_data
send_data() -> None
发送串口数据 - 在独立线程中运行。
源代码位于: src/controller/controller/infrastructure/communication/serial_writer.py
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | |
RecordRepository
RecordRepository(file_path: str = 'teach_record.json')
示教记录持久化仓库 - Infrastructure层。
职责: - 从JSON文件加载记录数据 - 保存记录数据到JSON文件 - 管理记录文件的读写
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
file_path |
str
|
记录文件路径。 |
初始化记录仓库。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file_path
|
str
|
记录文件路径. Defaults to "teach_record.json". |
'teach_record.json'
|
源代码位于: src/controller/controller/infrastructure/persistence/record_repository.py
21 22 23 24 25 26 27 | |
load_records
load_records() -> Dict[str, List[List[float]]]
从文件加载记录数据。
返回:
| 类型 | 描述 |
|---|---|
Dict[str, List[List[float]]]
|
Dict[str, List[List[float]]]: 记录数据字典 {记录名: 角度列表}。 |
源代码位于: src/controller/controller/infrastructure/persistence/record_repository.py
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
save_records
save_records(records: Dict[str, List[List[float]]]) -> bool
保存记录数据到文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
records
|
Dict[str, List[List[float]]]
|
记录数据字典。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否保存成功。 |
源代码位于: src/controller/controller/infrastructure/persistence/record_repository.py
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | |
delete_file
delete_file() -> bool
删除记录文件。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
是否删除成功。 |
源代码位于: src/controller/controller/infrastructure/persistence/record_repository.py
61 62 63 64 65 66 67 68 69 70 71 72 73 | |
MotionPlanRepository
MotionPlanRepository(file_path: str = './motion_planning_plans.json')
运动方案持久化仓库。
职责: 1. 保存/加载方案到JSON文件 2. 管理文件系统操作
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
file_path |
Path
|
方案文件路径。 |
初始化仓库。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
file_path
|
str
|
文件路径. Defaults to "./motion_planning_plans.json". |
'./motion_planning_plans.json'
|
源代码位于: src/controller/controller/infrastructure/persistence/motion_plan_repository.py
20 21 22 23 24 25 26 | |
save
save(plans_data: List[Dict], current_index: int)
保存方案数据到文件。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
plans_data
|
List[Dict]
|
方案数据列表。 |
必需 |
current_index
|
int
|
当前选中方案索引。 |
必需 |
源代码位于: src/controller/controller/infrastructure/persistence/motion_plan_repository.py
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | |
load
load() -> tuple[List[Dict], int]
从文件加载方案数据。
返回:
| 类型 | 描述 |
|---|---|
tuple[List[Dict], int]
|
tuple[List[Dict], int]: (plans_data, current_index)。 如果文件不存在或加载失败,返回默认方案。 |
源代码位于: src/controller/controller/infrastructure/persistence/motion_plan_repository.py
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | |
HandEyeCalibrationRepository
HandEyeCalibrationRepository(config_path: str = None)
手眼标定配置仓储 - Infrastructure层。
负责从文件系统读取配置。
职责: - 从 JSON 文件加载配置 - 转换为 Domain 层的值对象 - 处理文件不存在等异常
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
config_path |
Path
|
配置文件路径。 |
初始化配置仓储。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config_path
|
str
|
配置文件路径. Defaults to None. 如果为 None,则按以下优先级查找: 1. ROS2 share 目录 (controller/config/hand_eye_calibration.json) 2. 开发环境相对路径 (../../config/hand_eye_calibration.json) |
None
|
源代码位于: src/controller/controller/infrastructure/persistence/hand_eye_calibration_repository.py
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | |
load
load() -> HandEyeCalibrationConfig
加载手眼标定配置。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
HandEyeCalibrationConfig |
HandEyeCalibrationConfig
|
配置值对象。 |
引发:
| 类型 | 描述 |
|---|---|
FileNotFoundError
|
配置文件不存在。 |
ValueError
|
配置格式错误。 |
源代码位于: src/controller/controller/infrastructure/persistence/hand_eye_calibration_repository.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | |
save
save(config: HandEyeCalibrationConfig)
保存配置到文件(可选功能,用于标定工具)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
config
|
HandEyeCalibrationConfig
|
手眼标定配置对象。 |
必需 |
源代码位于: src/controller/controller/infrastructure/persistence/hand_eye_calibration_repository.py
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 | |
TrajectoryRepository
TrajectoryRepository(plans_dir: str = './plans')
轨迹数据仓库 - Infrastructure层。
职责: 1. 保存轨迹数据到文件系统 2. 加载轨迹数据 3. 管理存储目录
属性:
| 名称 | 类型 | 描述 |
|---|---|---|
plans_dir |
Path
|
轨迹存储目录。 |
初始化轨迹仓库。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
plans_dir
|
str
|
存储目录. Defaults to "./plans". |
'./plans'
|
源代码位于: src/controller/controller/infrastructure/persistence/trajectory_repository.py
22 23 24 25 26 27 28 29 | |
save_trajectory
save_trajectory(filename: str, positions: List[List[float]]) -> None
保存轨迹数据。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
filename
|
str
|
文件名(不含扩展名)。 |
必需 |
positions
|
List[List[float]]
|
轨迹点序列 [[q1,...,q6], ...]。 |
必需 |
源代码位于: src/controller/controller/infrastructure/persistence/trajectory_repository.py
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | |
load_trajectory
load_trajectory(filename: str) -> List[List[float]]
加载轨迹数据。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
filename
|
str
|
文件名(不含扩展名)。 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
List[List[float]]
|
List[List[float]]: 轨迹点序列。 |
源代码位于: src/controller/controller/infrastructure/persistence/trajectory_repository.py
51 52 53 54 55 56 57 58 59 60 61 62 | |
list_trajectory_files
list_trajectory_files() -> List[str]
列出所有可用的轨迹文件。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
List[str]
|
List[str]: 文件名列表(不带扩展名)。 |
|
例如 |
List[str]
|
["默认方案-0", "默认方案-1", "test_trajectory"] |
源代码位于: src/controller/controller/infrastructure/persistence/trajectory_repository.py
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | |
trajectory_exists
trajectory_exists(filename: str) -> bool
检查轨迹文件是否存在。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
filename
|
str
|
文件名(不含扩展名)。 |
必需 |
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
bool |
bool
|
True=文件存在, False=文件不存在。 |
源代码位于: src/controller/controller/infrastructure/persistence/trajectory_repository.py
80 81 82 83 84 85 86 87 88 89 90 | |
register_infrastructure_services
register_infrastructure_services(container: DIContainer) -> None
注册 Infrastructure 层服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
container
|
DIContainer
|
DI 容器实例。 |
必需 |
源代码位于: src/controller/controller/shared/config/service_registry.py
12 13 14 15 16 17 18 19 20 21 22 23 24 25 | |
register_domain_services
register_domain_services(container: DIContainer) -> None
注册 Domain 层服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
container
|
DIContainer
|
DI 容器实例。 |
必需 |
源代码位于: src/controller/controller/shared/config/service_registry.py
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | |
register_application_services
register_application_services(container: DIContainer) -> None
注册 Application 层服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
container
|
DIContainer
|
DI 容器实例。 |
必需 |
源代码位于: src/controller/controller/shared/config/service_registry.py
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
register_presentation_services
register_presentation_services(container: DIContainer) -> None
注册 Presentation 层服务。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
container
|
DIContainer
|
DI 容器实例。 |
必需 |
源代码位于: src/controller/controller/shared/config/service_registry.py
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | |
configure_services
configure_services() -> DIContainer
配置所有服务。
按层次注册所有依赖服务。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
DIContainer |
DIContainer
|
配置好的容器实例。 |
源代码位于: src/controller/controller/shared/config/service_registry.py
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | |
get_main_view_model
get_main_view_model() -> MainViewModel
便捷方法:获取主视图模型。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
MainViewModel |
MainViewModel
|
主视图模型实例。 |
源代码位于: src/controller/controller/shared/config/service_registry.py
132 133 134 135 136 137 138 | |
get_serial_service
get_serial_service() -> SerialApplicationService
便捷方法:获取串口服务。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
SerialApplicationService |
SerialApplicationService
|
串口应用服务实例。 |
源代码位于: src/controller/controller/shared/config/service_registry.py
141 142 143 144 145 146 147 | |
get_serial_view_model
get_serial_view_model() -> SerialViewModel
便捷方法:获取串口视图模型。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
SerialViewModel |
SerialViewModel
|
串口视图模型实例。 |
源代码位于: src/controller/controller/shared/config/service_registry.py
150 151 152 153 154 155 156 | |
get_display_view_model
get_display_view_model() -> DisplayViewModel
便捷方法:获取显示视图模型。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
DisplayViewModel |
DisplayViewModel
|
显示视图模型实例。 |
源代码位于: src/controller/controller/shared/config/service_registry.py
159 160 161 162 163 164 165 | |
get_listener_service
get_listener_service() -> MotionListener
便捷方法:获取监听服务。
返回:
| 名称 | 类型 | 描述 |
|---|---|---|
MotionListener |
MotionListener
|
监听服务实例。 |
源代码位于: src/controller/controller/shared/config/service_registry.py
167 168 169 170 171 172 173 | |