首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pydrake:关于离散时间模拟中的穿透

Pydrake:关于离散时间模拟中的穿透
EN

Stack Overflow用户
提问于 2021-05-19 13:17:19
回答 2查看 125关注 0票数 2

我在皮德雷克做一个两足机器人模拟。当步长为0.0001s时,我的机器人现在可以用逆动力学和优化接触力来很好地站立甚至跳跃。然而,当我设定踏步时间0.001秒时,脚会穿透地面。因为时间步长0.001s通常用于实时离散系统中。

是否有可能防止(站立时脚和地面之间的)相互渗透?我认为我所使用的接触是pydrake中的惩罚方法,与此相关的参数如下所示。

    1. 参数(当步长时间为0.0001s):

代码语言:javascript
复制
plant.set_penetration_allowance(0.0001)
plant.set_stiction_tolerance(0.001)
  • 地面设置如下:
代码语言:javascript
复制
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)

这里没有渗透。

当步数为0.0001时站立

    1. 参数(当步长时间为0.001s):

代码语言:javascript
复制
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.001时站立

EN

回答 2

Stack Overflow用户

发布于 2021-05-19 13:37:22

首先要认识到的是,接触总会导致德雷克的渗透。德雷克的接触类似于一种基于惩罚的方法--穿透越深,法线力越大。你可以调整各种参数,这样对于一个具有给定质量的机器人来说,穿透量就会减少,但它永远不会降到零。

您可以通过调优set_penetration_allowance()值来改变渗透的程度。越大的价值,你就会得到更多的渗透。但是,这个值越小,您的系统就越僵硬,模拟起来就越昂贵(也更困难)。原则上,您不应该仅仅因为更改了离散的时间步骤而增加这个值(尽管,非常不兼容的穿透允许和时间步骤可能导致无法溶解的配置)。

我的建议是将离散的时间步骤设置为您想要的值,然后逐步将“穿透允许”降到给您提供“好”结果的最大值(使用任何“良好”度量)。

出于好奇,我不清楚到底是什么问题。渗透会引起问题吗?还是仅仅是令人惊讶呢?当然,任何假设脚底不能低于地面的代码都是错误的,所以你可能需要在那里做一些调整。

如果你能更清楚地知道报告的渗透导致了什么问题,这可能会帮助你提供建议。它将使社区更好地理解问题,并从更大的工具箱中提供建议。

票数 3
EN

Stack Overflow用户

发布于 2021-09-02 08:23:25

幸运的是,我现在知道我的机器人出了什么事。这种渗透的原因是碰撞几何的obj格式。我现在使用的是一个简单的长方体,而不是在我的URDF中的obj碰撞,然后问题就消失了(没有渗透)!我认为主要原因是由于drake中的接触函数在离散时间内可能不能很好地解决obj碰撞问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67604078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档