跳转至

Motion Planning ViewModel

controller.presentation.view_models.motion_planning_view_model

运动规划ViewModel

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
def __init__(
    self, 
    app_service: MotionPlanningApplicationService,
    dynamics_vm: DynamicsViewModel
):
    """初始化运动规划 ViewModel。

    Args:
        app_service (MotionPlanningApplicationService): 运动规划应用服务。
        dynamics_vm (DynamicsViewModel): 动力学 ViewModel。
    """
    super().__init__()
    self.app_service = app_service
    self.dynamics_vm = dynamics_vm

    # 连接Application Service的信号
    self.app_service.plan_list_changed.connect(self.plan_list_changed.emit)
    self.app_service.current_plan_changed.connect(self.current_plan_changed.emit)
    self.app_service.point_list_changed.connect(self.point_list_changed.emit)
    self.app_service.current_position_received.connect(self.current_position_received.emit)
    self.app_service.trajectory_preview_signal.connect(self.trajectory_preview_signal.emit)

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
def create_plan(self, name: str):
    """创建方案。

    Args:
        name (str): 方案名称。
    """
    self.app_service.create_plan(name)

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
def delete_plan(self, index: int) -> bool:
    """删除方案。

    Args:
        index (int): 方案索引。

    Returns:
        bool: True=删除成功, False=删除失败(违反业务规则)。
    """
    return self.app_service.delete_plan(index)

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
def switch_plan(self, index: int):
    """切换方案。

    Args:
        index (int): 方案索引。
    """
    self.app_service.switch_plan(index)

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
def rename_plan(self, index: int, new_name: str):
    """重命名方案。

    Args:
        index (int): 方案索引。
        new_name (str): 新名称。
    """
    self.app_service.rename_plan(index, new_name)

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
def get_plan_names(self) -> List[str]:
    """获取所有方案名称。

    Returns:
        List[str]: 方案名称列表。
    """
    return self.app_service.domain_service.get_plan_names()

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
def get_current_plan_index(self) -> int:
    """获取当前方案索引。

    Returns:
        int: 当前索引。
    """
    return self.app_service.domain_service.get_current_index()

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
def get_plan_count(self) -> int:
    """获取方案数量。

    Returns:
        int: 方案数量。
    """
    return self.app_service.domain_service.get_plan_count()

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
def add_point(self, point_data: dict):
    """添加节点。

    Args:
        point_data (dict): 节点数据。
    """
    self.app_service.add_point(point_data)

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
def delete_point(self, index: int):
    """删除节点。

    Args:
        index (int): 节点索引。
    """
    self.app_service.delete_point(index)

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
def move_point_up(self, index: int):
    """上移节点。

    Args:
        index (int): 节点索引。
    """
    self.app_service.move_point_up(index)

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
def move_point_down(self, index: int):
    """下移节点。

    Args:
        index (int): 节点索引。
    """
    self.app_service.move_point_down(index)

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
def update_point(self, index: int, point_data: dict):
    """更新节点。

    Args:
        index (int): 节点索引。
        point_data (dict): 节点数据。
    """
    self.app_service.update_point(index, point_data)

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
def get_all_points(self) -> List[dict]:
    """获取当前方案的所有节点。

    Returns:
        List[dict]: 节点列表。
    """
    return self.app_service.domain_service.get_all_points()

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
def get_single_point(self, index: int) -> dict:
    """获取单个节点数据。

    Args:
        index (int): 节点索引。

    Returns:
        dict: 节点数据。
    """
    return self.app_service.get_single_point(index)

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
def get_teach_record_names(self) -> List[str]:
    """获取所有示教记录名称(委托给 DynamicsViewModel)。

    Returns:
        List[str]: 记录名称列表。
    """
    return self.dynamics_vm.get_record_names()

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
def get_teach_record(self, name: str) -> List[List[float]]:
    """获取指定示教记录的数据(委托给 DynamicsViewModel)。

    Args:
        name (str): 记录名称。

    Returns:
        List[List[float]]: 记录数据。
    """
    angles_list = self.dynamics_vm.teach_record_service.get_record(name)
    return angles_list if angles_list else []

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
def execute_single_point(self, index: int):
    """执行单个节点。

    Args:
        index (int): 节点索引。
    """
    self.app_service.execute_single_point(index)

execute_motion_plan

execute_motion_plan()

执行整个运动规划方案。

源代码位于: src/controller/controller/presentation/view_models/motion_planning_view_model.py
217
218
219
def execute_motion_plan(self):
    """执行整个运动规划方案。"""
    self.app_service.execute_motion_plan()

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
def request_current_position(self):
    """请求获取当前位置(仅用于UI显示)。

    委托给 Application Service 处理。
    """
    self.app_service.request_current_position()

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
def save_node_trajectory(self, node_index: int) -> bool:
    """保存单个节点的轨迹。

    Args:
        node_index (int): 节点索引。

    Returns:
        bool: True=准备成功, False=准备失败。
    """
    return self.app_service.save_node_trajectory(node_index)

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
def save_plan_trajectory(self) -> bool:
    """保存整个方案的轨迹。

    Returns:
        bool: True=准备成功, False=准备失败。
    """
    return self.app_service.save_plan_trajectory()

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
def preview_node_trajectory(self, node_index: int) -> bool:
    """预览单个节点的轨迹曲线。

    Args:
        node_index (int): 节点索引。

    Returns:
        bool: True=准备成功, False=准备失败。
    """
    return self.app_service.preview_node_trajectory(node_index)

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
def preview_plan_trajectory(self) -> bool:
    """预览整个方案的轨迹曲线。

    Returns:
        bool: True=准备成功, False=准备失败。
    """
    return self.app_service.preview_plan_trajectory()

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
def load_local_trajectory(self, file_path: str) -> bool:
    """从 plans 目录加载轨迹文件。

    Args:
        file_path (str): 轨迹文件的完整路径或文件名。

    Returns:
        bool: True=加载成功, False=加载失败。
    """
    return self.app_service.load_local_trajectory(file_path)

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
def get_local_trajectory_files(self) -> List[str]:
    """获取所有可用的本地轨迹文件。

    Returns:
        List[str]: 文件名列表(不带扩展名)。
    """
    return self.app_service.get_local_trajectory_files()