从 CadQuery 到 MuJoCo:参数化模型怎么自动变成仿真模型

0 阅读3分钟

机械改了一版尺寸,仿真模型要不要手工跟着改?如果每次都靠人在建模软件里导出、再到仿真文件里改坐标和质量,改到第三版就会有人偷懒,最后仿真里跑的已经不是实际要做的那台机器。官网的农业多功能机器人项目提供了另一条路:一个底盘配割草、除雪、集叶三种快换前挂模块,全部用 CadQuery 参数化建模,数百个零件,含装配爆炸图,并在 MuJoCo 里仿真全覆盖割草、避障、脱困、模块快换和自动回充。模型和仿真都在代码里,就有机会串成一条流水线。官网没有公开这条链路的细节,下面是按工具特性整理的通用思路,未经实机验证。

【为什么参数化模型适合接仿真】 CadQuery 是用 Python 写的建模库,零件尺寸是变量,装配关系也是代码。同一份参数,既能生成加工用的 STEP,也能顺手生成仿真需要的东西:网格、质量、惯量、关节位置。 MuJoCo 的模型文件 MJCF 是 XML,同样适合用脚本生成。两边都是文本和代码,中间不需要人去点鼠标,参数一改,重新跑一遍脚本即可。

【从零件到 MJCF 要导出什么】 几何:每个运动部件导出一份网格,用于显示;碰撞几何建议另外简化,用盒子、圆柱、胶囊或凸包代替,仿真更快也更稳定。 质量与惯量:CadQuery 能算出实体体积和质心,乘以材料密度得到质量,再算惯性张量。外购件如电机、电池内部不是实心,按实体算偏差会很大,应该用厂家给的质量覆盖计算值。 坐标系:每个 body 的原点和关节轴要和装配里的定义一致。可以在建模代码里给关键位置命名,比如前挂的连接点、轮轴中心,导出时直接读取这些点,不在 XML 里手填数字。 关节与执行器:转动副、滑动副、限位、阻尼写进 MJCF,执行器的力矩上限按电机参数设定。 三种前挂共用一个底盘,仿真里也可以这样组织:底盘是基础模型,前挂各自生成一个片段,通过统一的连接点挂上去,换模块就是换片段。连接点上再放一个可以开关的约束,模拟挂上和脱开的过程,模块快换本身也能拿来检查对位容差。

【怎么保证两边一致】 流水线最怕“看着对,其实错”。可以加几道自动检查: 比较 CAD 计算的总质量和 MJCF 里各 body 质量之和; 让模型在仿真里静止落地,看是否稳定,有没有穿模和抖动; 把轮距、前挂伸出长度这类关键尺寸,同时打印 CAD 值和仿真值; 每次参数变化都跑一遍,结果存档,便于追查是哪次改动引入了问题。 接触参数、摩擦系数这类东西从 CAD 里得不到,只能先凭经验设,再用少量实测数据校准,这部分往往是仿真和实物差异的主要来源。

【小结】 参数化建模的价值不只在出图快,还在于让设计成为仿真的单一来源。把导出和检查写进脚本,机械每改一版,仿真就自动跟上一版。 这套思路同样适用于机器狗上装。外壳和支架如果是参数化的,导出一份带质量的简化模型放进仿真,就能看重心变化,检查趴下、起身时会不会和腿干涉。官网先仿真后上机的原则里列的工具是 MuJoCo、Gazebo 和 ROS 2,Gazebo 用的 URDF 或 SDF 也能用同样的方式生成,机器狗上装和底盘模块都可以这样做。

机器人智能化改造与系统集成:www.yuanzhirobot.com/zh/service/… 本文部分内容由 AI 辅助生成。