标签: drake

何时使用 drake-visualizer 与 meshcat 可视化工具

drake 提供的这 2 个可视化工具有什么区别?我什么时候应该使用其中一种而不是另一种?

drake

6
推荐指数
1
解决办法
681
查看次数

水弹性接触未给出预期的接触表面

我一直在使用 Hydroelastic Contact 来模拟孔中钉任务。模拟场景是这样的 在此输入图像描述

蓝色的钉子是柔顺的水弹性圆柱体,孔是刚性的水弹性网格。孔网格的线框视图为 在此输入图像描述

当我将钉子向下推并对其施加外力(钉子左端向下的力,指向孔的表面)时,我发现钉子意外倾斜。 在此输入图像描述

在此输入图像描述

可以看出,销钉尖端的左侧部分刺入孔的表面,从而产生倾斜角度。由于挂钉是柔顺体,因此预期会发生穿透。然而,令我困惑的是倾斜角度和接触面。我期望的是接触面应该包含钉子穿透部分的所有区域,但是,我真正得到的只是一条条带。示意图如下图所示。左边显示了我真正得到的接触面,右边显示了我期望的接触面。 在此输入图像描述 由于孔的表面和销钉的末端之间的接触是面对面的,我预计在孔的表面和销钉的末端接触后,销钉将处于正常位置(垂直方向)并且倾斜角度尽管有外力作用,钉子仍会很小。然而,由于接触表面是条带,因此挂钉可以沿着该条带旋转并且倾斜角度可以很大。起初我怀疑原因是我的孔网格的三角形很稀疏。然而,在我向孔的表面添加更多三角形后,我得到了几乎相同的结果。增加水弹性模量也无济于事。我还尝试在钉的尖端添加小碰撞球,就像点接触情况一样。但是,我得到

RuntimeError: Bad tetrahedron. Cannot compute gradient.
Run Code Online (Sandbox Code Playgroud)

我应该进行哪些修改才能获得正确的接触面?或者是否有解决方法可以使面对面接触后钉的穿透倾斜角变小?

我运行了ball and plate水弹性接触示例,发现板和平面之间的接触似乎没有这个问题。

非常感谢您的回答!

drake

6
推荐指数
1
解决办法
245
查看次数

drake 中基于网格的碰撞几何体

我想基于物理引擎生成用于感知和抓取的数据集。我尝试将谷歌研究最近发布的以下 3D 模型(https://app.ignitionrobotics.org/GoogleResearch )导入到 drake 中,并为各种鞋子创建分割数据集,即将网格放入垃圾箱/让它停下来读取RGB/深度和分割图像。

然而,在 drake 中将对象网格(.obj 文件)指定为碰撞几何体似乎不起作用,因为鞋子只是穿透垃圾箱并不断落入深渊(附加快照)。

在此输入图像描述

我还注意到 YCB 对象具有使用简单框和点接触描述的碰撞几何形状。这是相同的可视化(您可能已经熟悉)。绿色是碰撞几何体。

在此输入图像描述

如果我必须模拟上述内容,我是否需要描述谷歌研究数据集中所有对象的简单几何形状?如果有,它们是如何产生的?是否有一些工具可以用来生成这个或者它是手动完成的?或者当网格用于碰撞几何体时我应该启用水弹性接触模拟以使其工作吗?

如果它可以处理任何凸网格,另一种方法是将原始网格的凸包作为碰撞几何体。

另外,作为替代方案,我尝试使用 pybullet 进行相同的操作。我没有使用垃圾箱,而是使用了飞机。Pybullet 似乎正在正确处理将网格指定为碰撞几何体。这是 pybullet 中数据的快照。

在此输入图像描述

中间解决方案(尚未解决抓取部分):

在与 Sean 和 Russ 讨论后,我创建了三角形网格的凸包(使用 open3D),并且似乎使用此凸包作为碰撞网格和 <drake:declare_convex/>网格标签的注释,鞋子达到了稳定的姿势。我认为这个解决方案足以让我使用 drake 生成感知数据。这是使用以下解决方案后的快照:

在此输入图像描述

collision-detection drake

5
推荐指数
1
解决办法
812
查看次数

drake gurobi 无法处理二次约束

我目前正在努力对优化问题实现一个简单的二次约束。Gurobi 的网站称可以实施二次约束。drake 没有使用 Gurobi 与此约束的接口吗?

代码如下。

#include <Eigen/Dense>
#include <math.h>
#include <iostream>

#include "drake/solvers/mathematical_program.h"
#include "drake/solvers/solve.h"
#include "drake/solvers/gurobi_solver.h"
#include "drake/solvers/scs_solver.h"

using namespace std;
using namespace Eigen;
using namespace drake;

int main(){
    solvers::MathematicalProgram prog; 

    // Instantiate the decision variables
    solvers::VectorXDecisionVariable x = prog.NewContinuousVariables(2, "x");

    // Define constraints 
    for(int i = 0; i < 2; i++){
      prog.AddConstraint(x[i]*x[i] <= 2); //Replacing this with a linear constraint 
                                          //such as prog.AddLinearConstraint(-5 <= x[i] && x[i] <= 5); 
                                          //will work
    }

    // Define the …
Run Code Online (Sandbox Code Playgroud)

drake

5
推荐指数
1
解决办法
193
查看次数

对 pydrake 中的对象施加外力

这个问题与以下问题密切相关这个问题与“adding-forces-to-body-post-finalize”

我希望能够对 pydrake 中的简单几何图元施加外力。这是为了对机构之间的相互作用进行评估。

我当前的实现:


builder = DiagramBuilder()
plant = builder.AddSystem(MultibodyPlant(0.001))
parser = Parser(plant)
cube_instance = parser.AddModelFromFile('cube.urdf', model_name='cube')

plant.Finalize()

force = builder.AddSystem(ConstantVectorSource(np.zeros(6)))
builder.Connect(force.get_output_port(0), plant.get_applied_spatial_force_input_port())

diagram = builder.Build()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行它时,我收到以下错误:

builder.Connect(force.get_output_port(0), plant.get_applied_spatial_force_input_port())
RuntimeError: DiagramBuilder::Connect: Cannot mix vector-valued and abstract-valued ports while connecting output port y0 of System drake/systems/ConstantVectorSource@0000000002db5aa0 to input port applied_spatial_force of System drake/multibody/MultibodyPlant@0000000003118680
Run Code Online (Sandbox Code Playgroud)

我倾向于实现一个 LeafSystem,它在工厂上实现抽象值端口。

根据建议更新

使用:AbstractValue 和 ConstantValueSource

value = AbstractValue.Make([np.zeros(6)])
force = builder.AddSystem(ConstantValueSource(value))

ref_vector_externally_applied_spatial_force = plant.get_applied_spatial_force_input_port()
builder.Connect(force.get_output_port(0), ref_vector_externally_applied_spatial_force)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

RuntimeError: DiagramBuilder::Connect: Mismatched value types while connecting
output …
Run Code Online (Sandbox Code Playgroud)

drake

4
推荐指数
2
解决办法
707
查看次数

关于 Drake 当前逆运动学代码的问题

我一直在研究一些关于机械臂的逆运动学规划和避免碰撞的论文。我发现这篇论文名为“通过混合整数凸优化进行全局逆运动学”,我相信上面有 Drake 的一些开发人员的名字。

在这篇论文中,它说代码已经是 drake 的一部分。然而,当我找到它时,代码被放在阁楼上。(https://github.com/RobotLocomotion/drake/blob/master/attic/multibody/global_inverse_kinematics.h

在 move_iiwa_ee 下的当前 kuka 手臂示例中,使用名为 ConstraintRelaxingIk 的 IK 代码。

  1. 我想知道为什么“通过混合整数凸优化的全局逆运动学”IK 代码被放在一边,以及它是否有任何问题。

  2. 另外,我不确定当前的 ConstraintRelashingIk 是否可以避免碰撞。有人可以澄清这一点吗?

(如果是的话,除了插入障碍物模型之外,还需要采取任何额外的步骤吗?)

谢谢

drake

4
推荐指数
1
解决办法
508
查看次数

为什么这个用于查找 2 个四元数之间角速度的简单 MP 会失败?

这是约束浮动基四元数位置和角速度的推荐方法是什么?

作为一个示例问题,我试图按照链接的建议,使用数学程序找到给定起始四元数、结束四元数和特定 dt 的角速度。

import numpy as np
from pydrake.all import Quaternion
from pydrake.all import MathematicalProgram, Solve, eq, le, ge, SolverOptions, SnoptSolver
from pydrake.all import Quaternion_, AutoDiffXd
import pdb

epsilon = 1e-9
quaternion_epsilon = 1e-9

# Following the suggestion from:
# /sf/answers/4445709201/
def apply_angular_velocity_to_quaternion(q, w, t):
    # This currently returns a runtime warning of division by zero
    # https://github.com/RobotLocomotion/drake/issues/10451
    norm_w = np.linalg.norm(w)
    if norm_w <= epsilon:
        return q
    norm_q = np.linalg.norm(q)
    if abs(norm_q - 1.0) > quaternion_epsilon:
        print(f"WARNING: Quaternion …
Run Code Online (Sandbox Code Playgroud)

python-3.x drake

4
推荐指数
1
解决办法
151
查看次数

使用 meshcat 保存视频?

使用 MeshcatVisualizer 保存视频的标准方法是什么?我知道以下适用于 PyPlotVisualizer 的包装器:

visualizer.start_recording()
simulator.AdvanceTo(T)
ani = visualizer.get_recording_as_animation()
Run Code Online (Sandbox Code Playgroud)

但这两个相关方法不适用于 MeshcatVisualizer,并且存储库中似乎没有任何使用它创建视频的示例,并且该类所提供的方法似乎都不是有前途的候选者。如果做不到这一点,是否还有另一种方法来保存视频以进行 3D 可视化?

drake

3
推荐指数
1
解决办法
739
查看次数

德雷克的接触力学

我有一个关于 Drake 接触力学准确性的一般性问题。到目前为止,我已经尝试了一些不同的开源机器人模拟工具。在模拟两个网格物体之间的接触时,它们似乎都存在相同的问题,即物体不稳定并相互脱落。例如。在 Gazebo 中,我尝试堆叠两个网格对象(请参阅https://youtu.be/_4qQh3pvAZ8),但没有成功。

我正在尝试使用强化学习来学习组装任务。强化学习需要大量迭代(模拟)才能收敛到有效的策略。由于强化学习需要在合理的时间内学习一些东西,因此不可能提高精度(通过减小步长),因为这也会增加太多的计算时间。最后唯一的解决方案是使用 Adams,这是一个(昂贵的)多体力学软件工具箱,可以更自由地优化两个特定物体之间的接触。我还尝试了模拟器 Klampt,其中接触更准确,但它还在每个对象周围添加了一层。

今天我遇到了 Drake,发现视频中的接触机制非常准确。但大多数对象看起来都是非网格对象(块和圆柱体),其行为更容易近似。所以我想知道德雷克是否也表现出不准确的行为,就像视频中那样,网格物体彼此堆叠?另外,模拟的速度是否与现实世界的速度大致相同?

drake

2
推荐指数
1
解决办法
358
查看次数

由自由体基座组成的机器人的广义速度结构是什么?

我在使用Drake库时遇到了一个相当理论上的问题。我的机器人由一个自由主体底座(浮动底座)组成,其上连接着一个由关节和连杆组成的传统机器人手臂。

假设该机器人的广义状态向量的大小为 63(来自 Drake)。该状态向量的前 7 个条目是 3 个笛卡尔位置和 4 个方向四元数。这意味着广义速度矢量为 62(线速度和角速度有 6 个条目)。如果我根据前面描述的顺序方案构建状态向量(首先是 3 个位置,其次是 4 个四元数,然后是机器人手臂的 56 个关节状态),然后相应地设置机器人的位置,那么 Drake 会运行并且不会运行给出任何错误。

然而,采用机器人末端执行器的雅可比行列式会产生奇怪的不匹配。在我看来,当x_dot = J * q_dotCalcJacobianTranslationalVelocity命令获取雅可比行列式时,广义速度矢量的顺序被交换。更准确地说,顺序是:

  1. 底座的3个角速度
  2. 底座的3个线速度
  3. 机器人手臂的 56 个其他广义速度

我对此感到非常困惑,因为我可以使用状态和速度向量来操纵和设置机器人的状态SetPositionsSetVelocities其中上面列表中的点 1. 和 2. 被交换。我错过了什么吗?

预先感谢您的任何帮助,

此致,

罗伯特

drake

2
推荐指数
1
解决办法
182
查看次数

drake 是如何检测碰撞的?

drake 用于碰撞检测的库与 FCL 不同(https://github.com/flexible-collision-library/fcl)?Drake碰撞检测是基于FCL的吗?或者我可以在哪里找到差异?

我可以使用FCL来获取球体和盒子之间的接触力吗?或者德雷克能实现吗?

非常感谢!

fcl drake

2
推荐指数
1
解决办法
379
查看次数

标签 统计

drake ×11

collision-detection ×1

fcl ×1

python-3.x ×1