Mujoco 物体pickup总失败?摩擦力有哪些(切向、扭转、滚动)
视频讲解:https://www.bilibili.com/video/BV1dZAuzLEh2/?vd_source=5ba34935b7845cd15c65ef62c64ba82f
代码仓库:GitHub - LitchiCheng/mujoco-learning · GitHub
前面分享了运动学和碰撞等相关的仿真实验,有一些小伙伴希望去Pick up物体,但碰到了如下几种问题:
- 一碰就”飞“
- 提起来就滑掉
- 无法移动
回到模型配置,如下是一个body,定义geom几何体为0.02的立方体,使用这个模型就会碰到如上问题
<body name="cube" pos="0.45 0 0.05"> <geom type="box" size="0.02 0.02 0.02" rgba="1 0 0 1"/> </body>Modeling - MuJoCo Documentation
Computation - MuJoCo Documentation
condim:接触约束的自由度(默认3)
- condim=1,法向作用力(压紧)
- condim=3,法向+2个切向(tangential)
- condim=4,法向+2个切向+扭转(torsional 阻止绕接触法线的旋转,防止"打转")
- condim=6,法向+2个切向+扭转+2个滚动(rolling 阻止物体滚动)
contact:最多支持 5 个摩擦系数(2 切向、1 扭转、2 滚动)
geom:定义 3 个摩擦系数(切向两轴同值、滚动两轴同值),3 维向量扩展为 5 维接触
<body name="cube" pos="0.45 0 0.05"> <freejoint name="cube_joint"/> <geom type="box" size="0.02 0.02 0.02" rgba="1 0 0 1" condim="4" friction="1.0 0.005 0.0001"/> </body>我们来看一下默认friction和condim,通过geom的属性即可
geom_id = self.getGeomIdByName("cube_geom") friction = self.model.geom_friction[geom_id] condim = self.model.geom_condim[geom_id] print(f"condim: {condim} sliding: {friction[0]} torsional: {friction[1]} rolling: {friction[2]}")默认的如下,只用到滑动摩擦
修改后,可以增加扭转摩擦,对应的数值也是变化的
如下图,简单的3种形式的示意
拎起来的状态,完整代码在仓库中
