事件改变视觉几何

时间:2019-07-17 15:22:18

标签: drake

我正在尝试可视化可视化碰撞和不同事件,并正在寻找在RegisterVisualGeometry注册后更新颜色或视觉元素属性的最佳方法。

我已经找到了GeometryInstance类,这似乎是改变可变插图属性的一个有希望的点,但是还没有找到并举例说明从植物中调用实例(例如从{ {3}}?)及其属性已更改。

作为一个基本示例,我想在两秒钟后更改框的视觉几何图形的颜色。我用预先注册的几何体

// box         : Body added to plant
// X_WA        : Identity transform
// FLAGS_box_l : box side length
geometry::GeometryId box_visual_id = plant.RegisterVisualGeometry(
        box, X_WA,
        geometry::Box(FLAGS_box_l, FLAGS_box_l, FLAGS_box_l),
        "BoxVisualGeometry",
        Eigen::Vector4d(0.7, 0.5, 0, 1));

然后,我有一个while循环,用于在两秒内创建一个定时事件,我想让盒子更改其颜色。

double current_time = 0.0;
const double time_delta = 0.008;
bool changed(false);

while( current_time < FLAGS_duration ){

    if (current_time > 2.0 && !changed) {
        std::cout << "Change color for id " << box_visual_id.get_value() << "\n";
        // Change color of box using its GeometryId
        changed = true;
    }
    simulator.StepTo(current_time + time_delta);
    current_time = simulator_context.get_time();
}

最终,我想用更具体的触发器来调用类似的东西,例如与另一个物体的接近或速度,但是现在我不确定如何注册一个简单的视觉几何变化。

1 个答案:

答案 0 :(得分:1)

感谢您提供详细信息。这足以让我对当前和未来的状况(近期和远期计划)提供有意义的答案。

以您的问题为代表的示例,更改视觉几何的颜色可能意味着两件事之一:

  1. 对象的颜色在“附加的”可视化器中发生变化(drake_visualizer是主要示例)。
  2. 对象的颜色在模拟的rgb相机(当前为dev::RgbdCamera,但即将为RgbdSensor)中改变。

根据模拟中可能要更改的其他属性,可能还会有其他细微差别。但是使用上面的跳板,以下是详细信息:

  • A。直到最近(拖动PR 11796),注册后仍无法更改属性
  • B。 PR 11796是实现这一目标的第一步。但是,仅 启用它来更改ProximityProperties。 (ProximityProperties与几何图形在邻近度查询中扮演的角色相关联-接触,有符号距离等。)
  • C。更改PerceptionProperties是该PR中的TODO,并且将在接下来的几个月内进行(除非出现更紧迫的需求来优先提高它,否则为个位数)。 (PerceptionProperties与几何形状在模拟传感器中的属性相关联-它们的外观等)
  • D。不支持更改IllustrationProperties,目前尚不清楚最好/正确的方法是什么。 ({IllustrationProperties被馈送到drake_visualizer之类的外部可视化器。)这是最棘手的,这是由于LCM通信当前的表达方式所致。

因此,当我们比较更改对象颜色(上面的1或2)与最新技术水平和近期艺术(上面的C&D)的可能含义时,我们得出以下结论:

  • 在不久的将来,您应该能够在合成的RGB图像中对其进行更改。
  • 没有在外部可视化器中进行更改的实际计划。

(对不起,答案似乎更多是“哎呀,你不能那样做”。)