wuji user 管理这些 Profile。Profile 以用户名为标识。所有子命令都是 ~/.wuji/sdk 下的本地操作,不连接设备。全部子命令支持 --json。
标定中的 Profile 作用
手部模型标定会写入按 Profile 隔离的 URDF。默认用户无法执行手部模型标定:需先新建并切换到命名 Profile,再运行标定。触觉标定按设备归属,不受此限制。管理 Profile
list 用 * 标记当前 Profile,把 Default 标为「不可标定」,并显示各命名 Profile 的左右手标定状态。show 列出左右手手部模型(状态/文件/大小/时间)与按设备 SN 分组的触觉模型。模型文件不全的设备会标出缺失文件,与从未标定的设备区分开。
终端中执行不带名称的 switch 会打开 Profile 选择器。不带名称的 delete 会打开删除选择器,排除 Default、标记当前 Profile,并默认停在 Cancel operation。选中 Profile 后,命令会列出待删除内容、提示可先用 wuji user export 备份,并在默认选择 No 的确认步骤等待操作。非终端环境删除时必须同时提供明确的 Profile 名称和 --yes。Default 不可删除或重命名。删除当前用户后,当前 Profile 回退为 Default。
在机器间迁移标定
标定数据——按 Profile 隔离的手部模型 URDF,加上每只手套的触觉模型、触觉参数与最近一次完整触觉 run——打包为单个.zip。
导出
--force 才能覆盖文件。如果当前 Profile 没有标定产物,命令不会生成空 bundle,而是提示先完成标定并返回退出码 1。命名 Profile 可运行 wuji calib hand-model 生成标定产物。Default 无法执行手部模型标定,需先新建并切换到命名 Profile,或执行设备级触觉标定。
触觉模型由 contact.safetensors、contact.npz、contact.json 三个文件组成,缺任一文件即不完整,不会打进 bundle。导出清单会把这类模型标为 skipped 并列出缺失文件,而不是静默丢弃。当前 Profile 只有不完整的触觉模型时,报错会点名设备 SN 与缺失文件,并引导对这些设备重新运行 wuji calib tactile,同样返回退出码 1。
导入
--as <name> 导入到新建 Profile。导入到新 Profile 成功后,该 Profile 自动成为当前用户。终端流程先预览来源用户、bundle 内容和冲突。当前 Profile 存在标定产物冲突且未指定 --as 时,可选择覆盖当前 Profile、新建 Profile 或取消。其他情况下,确认目标 Profile 后开始导入。结构化输出或重定向输出需用 --preview 只读检查,或用 --yes 确认写入。Default 无法接收包含手部模型的 bundle。请指定 --as <name>,或先创建并切换到命名 Profile 再导入。导入的手部模型会在线热加载,无需重连手套。导入的触觉模型在对应手套已连接时自动重新加载,否则在下次连接时加载。当 bundle 来自不同用户且目标已有标定产物时,原产物会先备份到 calibration-import-backups/ 再覆盖。空 Profile 不会产生空备份目录。备份会保留到手动删除。
预览与导入清单会如实列出被跳过的触觉模型及原因:bundle 内的模型文件不全、bundle 未携带该设备的模型,或 bundle 带了模型文件但 manifest 未声明。manifest 未声明的产物不会被安装,清单会把它们列出来,不再静默丢弃。
自动化调用
--json 每条命令输出一个文档,错误输出 {"error":{"code":…,"message":…}}。非交互导入使用 --preview 只读检查,或使用 --yes 确认写入。非交互删除需同时提供明确的 Profile 名称和 --yes,不支持 --preview。
create、switch、rename、delete 的 --json 输出固定带 current_user 字段,写明命令跑完后当前用的是哪个 Profile,脚本不用再跑一次 user list 确认。rename 另返回 previous_name(改名前的用户名)与 name(新名):
show --json 为不完整的触觉模型输出 missing_model_files(缺失文件名列表)。export、import、import --preview 清单里被跳过的组件行带 reason 与可选的 detail,detail 补充缺失文件名等说明。触觉模型的 reason 取值:导出清单只出现 incomplete_model(模型文件不全),导入与预览清单还可能出现 not_in_bundle(bundle 未携带模型)与 not_declared_in_manifest(manifest 未声明)。
手部模型组件还可能出现以下 reason:
legacy_hand_model_ignored:bundle manifest 版本1或2中按设备保存的手部模型不会安装到用户 Profiledefault_user_hand_model_disabled:目标为无法保存手部模型的Default
Default,CLI 会在写入数据前返回退出码 5。