【发布时间】:2021-05-19 13:17:19
【问题描述】:
我正在 pydrake 中进行双足机器人模拟。当步长为 0.0001 秒时,我的机器人现在可以通过使用逆动力学和优化接触力来很好地站立甚至跳跃。但是,当我将步长时间设置为 0.001 秒时,脚会穿透地面。因为实时离散系统中通常使用时间步长0.001s。
在pydrake中是否可以防止相互渗透(站立时脚和地面之间)?我认为我使用的联系人是pydrake中的惩罚方法,与此相关的参数如下所示。
-
- 参数(步长为0.0001s时):
plant.set_penetration_allowance(0.0001)
plant.set_stiction_tolerance(0.001)
- 地面设置如下:
ground_friction = CoulombFriction(static_friction=1,static_friction=1)
plant.RegisterVisualGeometry(plant.world_body(), RigidTransform(),HalfSpace(), "GroundVisualGeometry", diffuse_color=[1., 0.64, 0.0, 0.5])
plant.RegisterCollisionGeometry(plant.world_body(), RigidTransform(), HalfSpace(), "GroundCollisionGeometry", ground_friction)
这里没有渗透。
Standing when steptime is 0.0001
-
- 参数(步长为0.001s时):
plant.set_penetration_allowance(0.001) # if this param smaller than the step time 0.001, an error will be there
plant.set_stiction_tolerance(0.001)
- 地面参数相同。
是否可以修复脚的穿透?
【问题讨论】:
-
我其实和肖恩有同样的问题,实际问题不清楚。你说,“因为实时离散系统中通常使用时间步长 0.001s”。你是什么意思?这是您的控制器中的某种要求吗?或者你是想说如果时间步长更小,那么模拟程序就不会实时运行? (我会感到惊讶,您的系统看起来很小?)。但 Sean 关于穿透余量(刚度)和 sim 稳定性之间权衡的答案是准确的。
-
抱歉我的问题不清楚。由于我们的机器人实时系统使用时间步长0.001s,我希望我在drake中模拟的时间步长与现实世界中的时间步长相同。这就是为什么我需要将步长从 0.0001s 增加到 0.001s。
-
TBH 我不明白你说的“我们的机器人实时使用时间步长0.001s”是什么意思,你的意思是你测量1kHz的状态?如果是这样,那并不意味着您的 sim 的时间步长必须与该频率匹配。对于 sim,时间步长通常由您尝试解决的动力学速度 + 稳定性给出。你的实际物理系统是连续的。 dt 仅告诉您我们正在使用该系统的离散近似值。无论测量。我的问题是,为什么 dt=1e-4 对你不利?是否合理符合现实?