尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

MuJoCo 机械臂抓取仿真不稳?指尖几何、摩擦与求解器怎么调

MuJoCo 机械臂抓取仿真不稳?指尖几何、摩擦与求解器怎么调 MuJoCo 机械臂抓取仿真不稳指尖几何、摩擦与求解器怎么调【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco手合拢、物体却从指尖滑走或者刚抓住腕部受力就一阵漂移——这两个翻车瞬间大概是跑过抓取仿真的同学都见过的。这篇只讲三件事指尖接触几何、摩擦与 solimp/solref 参数、接触求解器的 iterations 和 tolerance。按顺序过一遍大约 30 分钟能跑通一轮验证。先读模型30 秒定位 robot_arm.xml 的抓取相关配置打开 test/user/testdata/robot_arm.xml只看四个地方别通读指尖 geomfingertip这个 default class 下是一个box尺寸0.02 0.005 0.011带一个quat1 0 0 -0.235的倾斜并且condim4——condim 就是接触时计几个自由度4 表示 3 个平移分量加 1 个旋转分量都参与接触计算。指尖 site同名位置各有一个 sitefingertip1/2/3它们是传感器挂点位置必须和指尖 geom 对齐否则读数会误导你。sensor 区每个指尖一个touch传感器另有force/torque挂在wristsite和basesite。touch 的维数等于对应 geom 的 condim所以这里每个指尖是 4 维腕部力是 3 维。contact排除项文件末尾把指与指、底座与首连杆之间的接触排除了。你自己加新 geom 时照这个写法排除不然仿真速度会被自碰撞拖垮。多指灵巧手的接触点分布问题在这个测试场景里更直观。调参主线按收益从高到低改三处指尖几何box 边缘接触改 capsule 或加厚看到什么现象接触力曲线在指尖处周期性掉到接近零、物体从指尖棱边滑出去。这说明有效接触面太窄box 的棱边只贡献了一条线接触。改哪个标签还是fingertip这个 default把指尖 geom 换成typecapsule胶囊体接触压力沿弧面分布更均匀或者保持 box 但把size中间一维从 0.005 提到 0.008 左右加厚quat保持不动。default classfingertip geom typecapsule pos0.065 -0.022 0 size0.018 0.005 quat1 0 0 -0.235 condim4/ /default这段只做一件事把指尖从薄盒换成同位置的胶囊。跑一遍确认生效的标准物体静止悬停时touch 传感器四个分量不再出现接触—断开的锯齿力值连续非零即算生效。摩擦系数怎么设三个分量各管什么看到什么现象物体贴着指尖表面横向滑动、抓得住却拿不稳。这时怀疑摩擦而不是几何。改哪个标签指尖 geom 的friction共三个数依次是主摩擦、滚动摩擦、自旋摩擦。robot_arm.xml 的 default 里是.1 .1等于三个都给了 0.1对多数物体偏低。保守起步橡胶类表面主摩擦取 0.8~1.5金属/塑料取 0.5~1.0另两个分量保持 0.1 量级即可抓平放物体时轮转摩擦几乎不起作用。改完跑一遍物体在指尖表面不再横向位移touch 主分量平稳即算生效如果物体开始高频颤动说明摩擦偏高或接触偏硬回到下一节。solimp / solref三个参数分别管什么看到什么现象接触瞬间物体回弹或明显陷入指尖。这两个参数控制接触被软弹簧阻尼建模时的响应。改哪个标签solimp三个数中第一个管回弹比例越小越不弹0.99 已接近完全无弹后两个是恢复系数与最小恢复速度solref前一个是接触响应的时间常数越小接触越硬。robot_arm.xml 默认solimp.95 .98 .0005 solref0.02 1.1保守改法是把 solimp 第一个数从 0.95 提到 0.99solref 保持不动。验证标准接触后物体不再回弹、穿透深度肉眼不可见即生效。注意方向——solref 第一数调得太小比如 0.001 以下接触变得很硬会直接引发抖动此时该调 timestep 而不是继续压 solref。iterations / tolerance接触求解器调多少才够看到什么现象物体穿透指尖或力曲线长期小幅震荡收不住。改哪个标签option里的iterations主求解器最大迭代次数MuJoCo schema 默认是 100不是有些旧文档写的 10和tolerance收敛容差默认 1e-8。option timestep0.001 iterations50 tolerance1e-8/这段把迭代上限降到 50、步长收紧到 0.001接触点不多的抓取场景50 次通常已经收敛能省一半求解开销如果降了之后物体开始穿透说明接触复杂加回 100 再谈。验证标准simulate 里按 F8 看求解器诊断若未达上限就收敛当前 iterations 就够用穿透消失、力曲线震荡衰减即算生效。用数据验证1000 步仿真里两条曲线怎么读几何和参数都改完后跑一段固定步数的记录比盯着画面猜可靠得多import mujoco import numpy as np m mujoco.MjModel.from_xml_path(robot_arm.xml) d mujoco.MjData(m) rec [] for _ in range(1000): mujoco.mj_step(m, d) rec.append([*d.sensordata[mj.mj_name2id(m, mjOBJ_SENSOR, fingertip1).adr:][:4], *d.sensordata[mj.mj_name2id(m, mjOBJ_SENSOR, wristforce).adr:][:3]]) np.savetxt(grasp_log.csv, rec, delimiter,)这段跑 1000 步记录指尖 touch 的 4 个分量和腕部力 3 个分量。读法很简单touch 曲线取四个分量的模长抓取段应是一条非零的连续曲线出现锯齿归零就是接触在断断续续——回到指尖几何那一节。wristforce 曲线合拢瞬间抬升、随后水平走平且无周期性起伏就是稳定的形态若持续上下摆动先怀疑 solref 偏硬再怀疑 iterations 不足。对比时也可以换 timestep 维度做实验同一模型分别在 0.002 与 0.001 下跑若小步长下力曲线抖动明显减少而物体轨迹几乎不变说明之前的抖来自接触太硬应该优先降 solref 硬度和 timestep而不是加摩擦。故障速查现象首选怀疑对象修改位置物体从指尖滑出主摩擦过低 / 接触面太窄geom 的friction第一数、size抓取后姿态漂移指尖 geom 尺寸与 site 不一致fingertipdefault 下的 geom 与 site接触后回弹、物体弹开solimp 第一个数偏小default 的solimp高频抖动solref 过硬 / timestep 过大solref与option的timestep物体穿透求解器未收敛iterations、tolerance仿真变慢迭代上限过高 / 自碰撞未排除iterations、contactexclude模型资产里的这个 mug 是现成的简单抓取验证目标比抽象方块更接近真实物体。改的顺序比改什么更重要先几何、再摩擦、最后动求解器每一步都用上面的 1000 步记录确认再往下走就不会在三个参数之间来回抵消。想继续深入强化学习力控可以参考 python/rollout.ipynb 的批量仿真接口可变形指尖可以看 model/flex/ 里的弹性体示例湿滑、带液膜的物体抓取则涉及 doc/computation/fluid.rst 提到的流体-固体耦合是另一个量级的课题。【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表