跳到主要内容

LambdaSim 0.6 Release Note

LambdaSim 0.6 以全新的 LambdaEngine 可视化编辑器为核心,将场景搭建、参数配置、机器人控制和仿真观察整合到同一工作空间。新版本支持 USD 与 URDF 资产工作流,扩展多末端与批量 IK、GripperSlot 抓取目标编辑、导航及多车巡航,完善 MuJoCo Ektro 刚体、Vera IPC 柔性体和 DFSPH 流体仿真接入,并提供材质灯光编辑、无窗口渲染与多相机图像输出。同时,针对大型场景加载、OpenGL 绘制和动态数据更新进行优化,配合可扩展的组件与 Python API,让机器人应用的搭建、调试和验证更加便捷。

LambdaEngine 编辑器与工具扩展​

Lambda Engine 是 LambdaSim 的可视化场景编辑与仿真调试工具,基于 USD 场景描述和 LambdaSim 组件体系,提供场景大纲、参数面板、资产管理、3D 视口和时间轴等功能模块,支持资产浏览与收藏、场景搭建、对象变换、材质编辑及组件配置

面向机器人应用,可通过 GripperSlot 标定抓取位置、方向和插入角度范围,配合 IK 与物理求解器进行动作规划和仿真,并通过 OpenGL、LambdaRender 查看场景与计算结果,实现从场景配置到仿真运行的可视化工作流程。

alt text

如图(上): 以电池工位展示 LambdaEngine 的场景编辑工作区。左侧场景大纲展开 USD 节点层级,中间视口用于观察和选择机器人及工装,右侧参数面板可调整对象变换与材质,底部材质库便于浏览和复用场景材质,在同一界面完成对象定位、参数编辑与渲染效果检查。

编辑器工作区​

  • 场景大纲:以场景对象为入口,展开资产内部的 USD Prim(场景节点)层级,展示 Xform、Mesh 等节点的名称、类型和父子关系,便于浏览场景结构并定位机器人及零件。

  • 三维视口:呈现机器人、环境和场景几何;支持创建多个视口,各视口可独立选择自由视角或机器人头部、手腕等位置的挂载相机,同时查看整体场景与多个相机画面。

  • 参数面板:集中查看和编辑场景对象及组件参数,包括变换、材质与灯光属性;配套 Render Parameter 页可调整采样、降噪等渲染设置,并在视口中观察效果。

  • 资源管理:展示硬盘上的资产文件和文件夹,通过 Favourite 预设常用资产目录入口,支持按目录浏览并将资产拖入视口,方便复用本地资源。

  • 时间轴:展示并操作场景时间,组织场景求值过程。

  • 日志:显示运行状态和诊断信息,辅助观察与排查问题。

场景交互与显示​

  • 对象选择与变换编辑:支持对象选择、聚焦以及平移、旋转、尺寸编辑。

  • 多视口与场景显示:提供多视口观察、自适应坐标网格,以及场景求值后的自动姿态同步。

  • 高 DPI 显示适配:适配高 DPI 显示环境,改善编辑器界面的尺寸与显示效果。

资产与场景管理​

alt text

如图(上): 展示了由 AGV、货架及多种规格纸箱组成的仓储资产预览场景。底部 Asset Manager 通过 Favourite 集中展示硬盘上的常用资产目录,可浏览 USD 文件并将其拖入视口搭建场景;左侧场景大纲用于定位对象,右侧参数面板用于调整位置、姿态与材质,配合 LambdaRender 检查模型外观、贴图和灯光效果。

  • USD 与 URDF 文件格式兼容:加载 USD 场景与 URDF 机器人。

  • URDF 扩展属性:URDF 可携带有类型的 LambdaSim 扩展属性,使驱动增益、初始状态和重力补偿等配置随资产传递。

  • URDF 物理描述转换:提供显式的 convert_urdf_physics_to_usd(),转换支持的刚体、惯量、碰撞和关节描述,并报告未映射的源字段;该接口不代表所有 URDF 导入已自动切换为 USD 物理解释。

  • USD 场景保存、合并导入与实例关系处理:区分原型与运行时实例;按 /root/obj 的实际层级识别并合并完整场景,无需额外场景清单标记。保存对象的世界摆放、相机、灯光、物理属性及组件配置;对象路径独立于运行时 SceneObject.parent,导入后避免重复的对象根节点。

  • 路径解析:通过 resolve_path() 按完整路径定位场景对象、几何视图、相机描述或灯光;通过 resolve_xform_node() 获取变换节点及其所属对象。

  • 路径筛选:通过 query_paths() 按路径、标签、层级范围及包含/排除规则筛选,目前支持网格(mesh)和刚体(body)。

  • 物理数据查询:通过 get_collider_data()、get_physics_data()、get_body_data() 读取路径对应的碰撞几何、物理属性及刚体描述。

物体语义标签(Tag)​

  • 标签编辑与分类:通过 add_tags()、set_tags()、remove_tags() 为场景节点添加、替换或删除标签,并通过 taxonomy 组织不同类别的标签。

  • 标签读取与继承:通过 get_tags() 读取节点自身标签,通过 get_inherited_tags() 获取包含祖先节点标签的结果,支持统一标记整组场景内容。

  • 按标签选择场景输入:通过 Scene.query_paths(tags=...) 筛选网格或刚体,支持多个标签之间的 OR 匹配、包含或排除,以及与路径层级范围联合查询,用于组织求解器和业务脚本的输入。

二次开发​

  • Component 自定义组件:以组件定义业务参数、编辑界面和更新逻辑,通过工厂注册后使用;支持数值、颜色、下拉、列表和结构化参数,并提供配置保存与恢复。

  • Viewport Guide 自定义空间交互:为组件绘制传感器范围、抓取区域、目标位置等辅助形状,支持拾取、高亮、聚焦,以及通过 Gizmo 将视口拖动绑定到组件参数。组件提交数据后可调用 invalidate_guides() 通知编辑器刷新辅助形状。

G1D 双臂 IK Gizmo 旋转操作G1D 双臂 IK Gizmo 位姿调整

如图: Gizmo 绑定双臂 IK 的末端目标,拖动平移轴或旋转环即可调整目标位姿,由 IK 实时求解并更新机器人姿态。(左)局部坐标轴随夹爪姿态旋转,便于沿夹爪自身方向调整;(右)世界坐标轴始终与世界坐标系对齐,便于沿场景固定方向调整。悬停操作柄并右键,可切换两种坐标模式。

机器人运动学与抓取规划​

运动学与轨迹​

  • 多末端约束 IK:支持单末端和多末端位姿求解,并提供方向及 Direction-Up 约束,用于表达不同机器人任务的末端要求;配套双臂 Gizmo 示例可拖动两个末端目标并查看 IK 结果。

  • 批量 IK (IK Batch) 候选求解:一次提交多个候选,获得关节解、收敛状态和代价;按位置与姿态要求筛选可行结果,再根据关节运动成本选优。G1D 示例按代价排序展示成功候选,以半透明上半身姿态区分结果,并在时间轴上播放候选的接近与抓取预览。

G1D IK 初始姿态G1D 批量 IK 候选预览

如图(左): 机器人初始姿态与抓取场景;(右)批量 IK 生成的抓取候选以半透明姿态叠加预览,伪彩(FalseColor)色由蓝到红表示关节运动代价由低到高,越红表示抓取该轨迹的抓取代价越大,IK Batch 会选择相对初始姿态关节变化更小的抓取动作。

  • 末端轨迹编辑与插值:通过可视化界面编辑末端轨迹关键帧,并在关键帧之间插值,组织连续的末端目标。

抓取目标与采样​

  • GripperSlot 抓取目标编辑:统一描述抓取位置、插入方向、跨距方向和采样范围,支持在视口中编辑抓取区域,并随父对象变换。

  • 分组抓取候选采样:按抓取槽分组生成末端候选,供多末端批量 IK 使用,将抓取目标描述衔接到机器人求解流程。

导航与移动机器人​

新增 NavigationAgent 路径跟随与 NavigationPatrol 多车巡航对象,支持场景导航网格构建、绕障路径规划、差速底盘控制及挂载相机随车运动,方便搭建和验证仓储移动机器人场景。

alt text

如图: 在仓储场景中同时观察 AGV 与挂载相机画面。(左)自由视角展示车辆及周围通道;(右上)后置相机展示车后环境;(右下)货架识别相机展示货架标识区域。各视口可独立选择相机及 OpenGL、LambdaRender 显示方式,便于结合外部视角与机器人视角检查行驶环境和相机安装位置。

导航规划​

  • 场景导航与路径规划:从场景网格建立导航区域并计算路径,统一处理障碍、通道边界和路径间隙;配套程序化网格工具及货架绕障、停靠示例,用于检查规划路径与机器人行驶过程。

运动控制​

  • 移动机器人路径跟随与多车巡航:支持路径跟随、转向和停车控制;NavigationAgent 可直接驱动普通 USD 节点在静态平面导航网格中运动,无需虚构轮关节;NavigationPatrol 为多台独立对象分配可达巡航目标,并在时间轴回退时恢复初始姿态与随机序列。AGV 集群示例另提供主干道路线和间距停车规则;这套规则不等同于通用多车动态避障。

  • 差速底盘换算与轮式机器人绑定:提供底盘线速度、角速度与左右轮速之间的转换;轮式机器人绑定统一读取 URDF 和 USD 的实际刚体、关节与几何归属,处理关节单位和中间变换层级。可从声明的滚动几何推导轮半径与轮距,驱动车轮、车体及挂载相机同步运动。

物理仿真​

MuJoCo Ektro Solver 正式接入​

MuJoCo Ektro 是基于 Ektro 计算框架的 MuJoCo 物理仿真后端,本次由实验版本升级为正式接入,支持机器人关节驱动、刚体碰撞与接触求解,并与 LambdaSim 的场景配置、仿真控制和可视化工作流集成。同时,针对 MUSA 平台完成多项性能优化,提升摩尔线程 GPU 上的仿真执行效率,方便用户在国产 GPU 环境中开展机器人仿真与控制验证。

alt text

如图(上): G1-D 双臂机器人夹持装有金属零件的料箱,视口中的 GripperSlot 辅助框标示抓取位置与方向,右侧参数面板可调整抓取目标。金属零件使用 MuJoCo Ektro 仿真并使用 LambdaRender 在Viewport中显示,可观察双臂姿态、夹爪与料箱的接触位置,以及箱内零件的运动,辅助调试双臂搬运任务。

alt text

如图: 同一搬运场景通过机器人挂载的三台相机同步观察。(左)头部相机展示料箱与双臂的整体布局;(右上)左手腕相机和(右下)右手腕相机分别展示夹持区域的局部画面。相机随机器人运动更新,便于同时检查整体动作与末端操作细节。

  • MuJoCo Ektro 机器人与刚体仿真:从场景组织刚体、关节、碰撞形状和执行器,接收控制输入并回写仿真状态;提供可选 graph 执行方式。场景 finalize 可先构建共享刚体描述,再交给求解器;根部固定或自由状态由资产表达。支持初始休眠物体及接触唤醒,并将关节速度上限传给每个物理子步的控制目标限速逻辑;控制目标限速不等于直接截断真实关节速度。

接触正确性​

GJK/EPA 碰撞检测改进

  • GJK 搜索方向修正:接近接触时,根据边或三角面的方向修正搜索方向,减少浮点噪声干扰;增加明确的“仍然分离”判定。
  • EPA 退化四面体处理:拆分不同维度的退化阈值,四面体面距离平方的判定阈值从 1e-10 调整为 1e-17,并按最近面执行回退。
  • EPA 外法向与数值精度修正:依据多面体中心统一面朝向,计算距离上界时改为先点乘、后除以长度。
  • 接触 margin 与搜索缓存修正:恢复原始几何尺寸和 margin,正确传递支持点缓存。
  • 碰撞与约束容量越界修复:限制候选写入到实际工作区容量,处理被截断约束的无效地址与 MultiCCD 元数据,清理残留的基本几何 dispatch,避免越界和重复接触。

求解与结果稳定性​

  • 图外求解收敛退出修复:删除 MuJoCo-Ektro 实验版中 “首次前 5 轮未收敛,此后永久提交完整预算”的策略。开启 graph_conditional 时,每次 solve 都按当前 nsolving 判断停止;关闭时保留固定轮数。

  • 矩阵分解与 solver 索引修复:修复 dense/sparse Hessian 路径选择、分块 gather 边界、packed Cholesky pivot 竞态及小 pivot 处理,避免空 sparse 元数据读取、错误分解和非有限结果。

  • 接触传感器槽位与状态传递修复:用稳定接触标识组织未指定 reduction 的接触传感器结果,修正 tiled 索引、IO 状态初始化与常量传递,减少跨设备发射顺序导致的结果槽位交换。

VeraFiber IPC Solver 正式接入​

LambdaSim 0.6 开始,正式接入 VeraFiber IPC Solver,用于布料、线缆的形变、接触与摩擦仿真,通过IPC (Incremental Potential Contact) 接触屏障和连续碰撞检测,是一种无穿动力学,可豁免多层布料折叠、线缆缠绕及挤压过程中的穿透,方便搭建机器人叠衣、布料拖拽和线缆整理等柔性抓取场景。

  • VeraFiber IPC 布料、线缆与仿射 (affine) 体仿真:从 Scene 的 GeoView 和原始拓扑读取几何、物理属性和约束,支持布、线及 affine 物体相关仿真,并组织显式碰撞组配对、状态输出与重置。
VeraFiber IPC 仿真展示 1VeraFiber IPC 仿真展示 2

如图(上): 双臂机械臂与桌面衣物的操作场景。(左)自由视角展示衣物折叠形态及机械臂布局;(右)场景相机展示双侧夹爪与衣物的相对位置。通过 LambdaRender 查看布料褶皱、表面纹理和夹爪位置,便于从不同角度检查布料操作过程。

问题构建与材料​

  • 统一的 IPC 问题与状态生命周期:使用 IPCProblemBuilder 编译场景,再创建 IPCState、IPCControls 和 IPCSolver;将不变拓扑、当前状态、控制目标和求解工作区分开管理。支持状态数组绑定、重置、恢复初始状态、重新绑定与资源释放。

  • 三角膜材料与弯曲模型:通过 TriangleFEM 组织质量、厚度、拓扑与材料,支持距离弹簧、StVK、Stable Neo-Hookean 膜及二面角弯曲,用于薄片和布料的弹性变形。

  • Affine Body 动力学:通过 AffineBodySet 描述动态或固定的 affine 物体,配置质量、惯性相关数据和形状保持刚度,以 affine 自由度参与统一能量最小化。Affine 物体不等同于严格刚体。

混合接触与控制​

  • 布料与 affine 物体的统一接触:将布料自接触、布料—affine 及 affine—affine 接触纳入同一求解系统,统一组织接触能量、摩擦和状态更新;接触对两侧的响应由各自自由度承接。

  • 碰撞组与材料对规则:显式启用或禁用碰撞组配对,为材料对设置摩擦系数,区分不同对象组合的接触行为。采用配对规则,不继续使用已删除的逐点 IPC frictionRate 接口。

  • 固定点与外部位姿目标驱动:通过 Dirichlet 顶点约束和 Soft Transform 约束驱动布料或 affine 物体;平移与旋转目标可分别配置强度,用于夹爪、边界及外部控制器接入。

  • 接触屏障、ACCD 与 Newton/PCG 求解:在隐式能量求解中结合 IPC/GIPC 接触屏障、摩擦、连续碰撞限制和线搜索,使用稀疏 BSR 与预条件共轭梯度计算搜索方向,提供接触刚度及收敛配置。

DFSPH 流体求解 (实验版本)​

  • DFSPH 流体仿真:提供流体实体、静态边界资产和初始粒子采样,区分容器内部区域、碰撞边界与视觉几何;支持 host、device、graph 执行配置及收敛策略选择。
DFSPH 流体仿真 B-1DFSPH 流体仿真 B-2DFSPH 流体仿真 B-3DFSPH 流体仿真 B-4

如图(上): 四张图展示液体在两个玻璃杯之间倾倒的不同阶段,可观察液流下落、飞溅及接收杯内的液面变化。

物理资产配置​

  • Scene 物理参数编辑与批量配置:在构建仿真前,通过统一接口编辑接触摩擦、刚体质量与惯量、关节限位及初始状态、驱动参数、重力与时间步。支持对选定的刚体、关节和驱动批量应用相同配置;整批完成校验后再提交,失败不留下部分修改。配置写回场景拥有的源记录,可由后续 finalize 和 USD 保存流程消费。

结果显示​

  • 流体结果可视化:支持粒子显示与流体表面重建,用于观察粒子分布、运动及重建后的表面形态。

材质、灯光、相机与渲染​

场景外观与观测​

  • 材质编辑、贴图设置与赋值:提供材质预览、重命名、复制和拖放赋材质;SceneMaterialAsset.set_texture() 可给现有颜色或标量输入设置贴图、颜色空间、UV 名称与缩放。修改保留共享材质描述及其它输入的连接,并通知已有视口刷新。

  • 灯光与环境照明:统一编辑灯光颜色、强度、色温和空间姿态,并支持 HDR 环境光及 USD 灯光读取。

  • SceneCamera 设置与机器人挂载:配置相机局部变换、FOV、焦距、裁剪距离和分辨率;相机可挂载到机器人节点并随父层级运动。

渲染显示​

  • OpenGL 与 LambdaRender 渲染接入:将 OpenGL 视口及 LambdaRender 接入场景显示流程,支持编辑器中的交互观察与渲染输出;LambdaRender 相机接入消费视口设置的 near/far 裁剪距离。

  • 透明贴图、裁切与分面材质显示:支持透明材质、共享颜色贴图的 alpha 覆盖、透明阈值裁切,以及通过 GeomSubset 为不同面指定材质。支持解析串联的 UsdTransform2d,将 UV 缩放、旋转和平移用于 OpenGL 视口和材质预览;LambdaRender 当前只接收可用 scale/bias 表达的对角 UV 变换,其余明确报错。材质预览同时修复共享 alpha、裁切和非活动镜面参数导致的不一致显示。

  • 渲染图像质量控制:提供降噪、时间累积参数和相关历史处理,配合场景变化及重网格更新维护渲染结果。

  • 3DGS 背景合成:提供基于 LiteGS 的可选 3DGS 背景合成,将高斯场景背景与已有渲染流程结合。

alt text

无窗口输出​

  • 无窗口渲染与多相机序列输出:通过 create_render() 创建绑定 Scene 的 LambdaRender,支持同步场景、按相机路径渲染单张图像并保存 PNG,以及按帧范围输出多相机图像序列。同一序列帧只推进一次场景,再依次读取各相机的当前姿态和分辨率;返回独立的 RGB 图像,支持上下文管理和资源释放。当前要求显式 musa:N 及对应渲染依赖,不依赖 Qt 窗口;配套 AGV 三相机输出示例。

场景构建与配套资产​

程序化几何​

  • 程序化球体与物理球体创建:create_sphere_mesh() 生成可直接用于场景的球体 GeoDomain,包含拓扑、局部位置和光滑法线;Scene.add_sphere__ektro() 同时注册显示网格和解析球形碰撞体,可配置静态或动态状态、尺寸及质量参数。显示网格精度与解析碰撞形状分别承担显示和物理职责。

工业场景与资产​

  • 仓储物流与机加工资产示例:提供仓库、AGV 和导航网格的仓库内依赖资产,补充包裹货架及疏密变体、法兰套筒和九种机加工参考零件,配套仓储导航、设备展示与零件预览脚本。资产与示例用于搭建和观察场景,不把模型外观视为已经验证的碰撞、抓取或制造精度。

场景调度与外部系统扩展​

仿真与业务逻辑​

  • 目标时间求值与事件回调:按请求的目标时间组织场景求值,提供求值前、求值后和完成通知,用于接入控制器、目标更新、状态处理和结果同步。

  • 自定义物理求解器接入:通过 SolverBase 的生命周期、时间推进和输入范围配置,结合路径、GeoView、刚体及物理属性查询,组织外部求解器的输入与执行流程。可选求解器改为按需导入,减少只用基础场景、编辑器或 MuJoCo Ektro 时的无关依赖加载。

渲染与采样扩展​

  • 自定义渲染器与场景采样扩展:保留渲染器注册、视口回调及请求和帧返回格式;新增 SceneSampler 基类,以统一的场景、显式设备、关闭与失败状态约束组织离线采样,供 LambdaRender 等采样器复用。

性能优化​

编辑器交互与场景数据​

  • 视口交互与组件更新开销优化:在原有大纲缓存、变换复用和相机无关更新裁剪上,改为按组件绑定、参数提交和姿态变化刷新 Guide;选中材质的局部查询不再触发全场材质发现。缓存固定 shader 路径和纹理请求,组件恢复只深入处理带相关元数据的节点,并按实际挂载清理组件;直接写入原始组件元数据仍会在后续更新中被发现。

  • 大场景矩阵读取优化:GeoView 按当前节点读取世界矩阵,消除逐个视图反复导出整表的问题;工位场景抽样配对测试中,局部读取中位耗时从 0.853508 秒降至 0.002431 秒。该数据来自原清单对应的局部函数测试,不代表整个启动流程的倍率。

OpenGL 视口与交互性能优化​

  • 材质与实例合批:兼容材质的不同几何合并绘制,共享原型的对象使用实例绘制;覆盖不透明、贴图及透明裁切材质,减少逐零件提交。

  • Object-ID 拾取合批与按需更新:减少拾取通道的绘制次数,复用有效的拾取结果;保留同深度重叠面的原有选择顺序,保持对象选择和高亮定位正确。

  • 刚体矩阵增量更新:机器人和关节运动时复用局部几何与 GPU 缓冲,更新变化部分的矩阵,避免逐点变换及重建几何批次。

  • 原型顶点无损去重:对支持的静态顶点流按位置和 UV 的完整字节去重,重建索引并保留 UV 接缝,减少重复顶点存储与处理。

  • CPU 绘制计划复用:复用批次分组、矩阵编号和资源映射,减少每帧重复遍历;材质、结构或资源绑定变化时重新建立相应计划。

  • Shader 与纹理查询缓存:缓存固定 Shader 路径和纹理请求,减少每次绘制中的路径解析与重复文件系统访问。

  • 组件与交互辅助更新优化:根据组件绑定、参数和姿态变化刷新 Guide;选中材质使用局部查询,减少全场组件和材质扫描。

  • 资源准备与内存优化:按可见范围创建材质卡片,按需准备节点组件,紧凑保存矩阵及包围盒数据,并将连续姿态修改合并到实际包围盒查询时处理。

  • 启动内存与资源准备优化:紧凑保存矩阵、拓扑偏移和包围盒等数据,按需创建节点组件及可见材质卡片,减少启动时的 Python 对象和预览准备。姿态变化先标记包围盒过期,查询时再合并更新。此条记录默认路径中的优化,不把实验性 USD 持久缓存的命中速度写成首次加载收益。

动态几何更新​

  • 动态几何与流体表面更新优化:分离静态几何资源与动态姿态更新,使用固定容量顶点、索引缓冲和增量同步,复用渲染器及资源,并维护重网格后的渲染历史,减少整场景重建。

物理属性设置​

Scene Physics API​

Scene 物理参数编辑与批量配置接口用于尚未 finalize、未注入显式刚体描述的场景;不是运行时控制命令。共享 GeoDomain、实例代理及程序化物理对象存在编辑限制;程序化物体按创建接口配置。批量接口是对多个目标应用相同参数,不接受按目标位置猜测含义的逐项值数组。

  • 物理属性设置:Scene统一使用 set_*_physics_properties() 系列接口,分别配置接触、刚体、关节、驱动和场景的物理属性。

  • 刚体根约束:资产物理配置复用:机器人根部的固定或自由状态随资产保存,加载后自动应用到仿真构建,减少各场景脚本中的重复配置,保持资产物理行为一致。

    读取 USD 中的刚体状态、PhysicsFixedJoint 及其 physics:body0、physics:body1 连接关系,以及 URDF 中 type="fixed" 的关节与父子 link 关系,按资产描述构建根部约束,支持在同一场景中组合固定底座机器人与可自由运动的物体,减少场景脚本中的重复配置。

使用体验改进​

  • 更顺畅的三维观察:修复旋转3D Viewport 时,摄影机观测角度翻转bug ,保证绕机器人或零件旋转视角时,保持拖动方向一致和画面水平,方便连续检查模型结构与空间关系。
  • 更灵活的工作区布局:可收小底部资产管理和参数区域,为三维视口留出更多空间;较长的参数列表通过滚动查看,兼顾场景观察与参数编辑。
  • 更准确的仿真时间推进:按设定时间步推进物理计算,避免重复计算影响仿真过程,便于对照时间轴检查机器人动作与控制结果。