环境要求

  • Python 3.12
  • FastSim 0.1.0a6
  • UniRoboSim Core 0.10.0
  • UniRoboSim Isaac Lab adapter 0.10.1
  • Isaac Lab 3.0 / Isaac Sim 6.0,以及可用显示环境

Run 中明确配置了 launch_profile: visible

配置

run.yaml 在 Isaac Lab 中创建共享的双关节机械臂。物理和控制频率都是 60 Hz。 joint_1joint_2 的初始值均为 0,与 linear_path() 生成的第一行一致。

关键代码逐行说明

python
operation = await simulation.control.submit_joints(  # 非阻塞提交。
    actor="arm",                                     # Scenario 中的机器人别名。
    group="arm",                                     # 公共执行器资源组。
    path=linear_path(240),                           # 60 Hz 下共四秒。
    dt=1.0 / 60.0,                                   # 相邻 path 行的时间。
    timeout=10.0,                                    # 控制接纳超时。
)

submit_joints() 立即返回 operation handle。240 帧明显长于本例准备执行的 24 帧,因此取消 发生时 chunk 不可能已经正常完成。

python
status = await operation.status()                    # 读取可移植进度。
if status.progress.applied_frames >= 24:             # 到达指定边界即停止步进。
    break
await simulation.single_step()                       # 精确推进一个物理步。

应用保持 paused,因此每一次推进都来自显式 single_step()。代码不使用 wall-clock sleep 猜测仿真已经执行了多少帧。

python
cancellation_accepted = await operation.cancel(timeout=5.0)
result = await operation.result(timeout=5.0)         # 等待取消终态。
await operation.release()                            # 释放已结束记录。

cancel() 请求控制权威在控制边界上线性化取消操作。随后 result.status 必须为 cancelled,且 applied_frames 必须小于 planned_frames

运行

从本案例目录运行:

bash
cd demo/fundamentals/14_cancel_control_operation
fastsim config validate run.yaml --json
python main.py

预期最后输出:

text
Cancellation accepted: True
Status: cancelled
Frames before cancel: 24
Applied/planned frames: 24/240

取消 operation 不等于关闭 application。result() 之后仍可查询场景、提交新命令、reset 或正常 stop。

验证等级

真实 visible Isaac 已通过。 已使用 Python 3.12、Core 0.10.0、Isaac adapter 0.10.1、 Isaac Lab 3.0 和 Isaac Sim 6.0 运行;原生终态精确为 cancelled,执行帧为 24/240。 Python 语法与 Run 编译也已通过。

常见错误

  • result() 正常完成后才调用 cancel():此时 operation 已是终态,没有活动命令可取消。
  • 用 wall-clock sleep() 代替 status().progress:物理速度不一定等于墙钟时间。
  • 忘记 release():完成记录会一直由 application 持有,直到主动释放或关闭。

下一步:15 · 多资源 ControlTrack