0

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

我找到了GeometryInstance类,这似乎是更改可变插图属性的一个有希望的点,但尚未找到从工厂调用实例的示例(从GetVisualGeometriesForBody 之类的 GeometryId 调用?)及其属性已更改.

作为一个基本示例,我想在两秒钟后更改盒子视觉几何图形的颜色。我注册几何预定型

// 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();
}

最终我想用更具体的触发器来调用这样的东西,比如接近另一个物体或速度,但现在我不确定如何记录一个简单的视觉几何变化。

4

1 回答 1

1

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

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

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

根据您可能希望在模拟中更改的其他属性,可能会有其他细微之处/细微差别。但是使用上面的跳板,这里是细节:

  • A. 直到最近(德雷克PR 11796 ),注册后更改属性根本不可能。
  • B. PR 11796 是实现这一目标的第一步。但是,它使其能够更改ProximityProperties. (ProximityProperties与几何在邻近查询中所扮演的角色相关联——接触、有符号距离等)
  • C. 更改PerceptionProperties是该 PR 中的待办事项,并将在接下来的几个月内跟进(除非有更迫切的需要将其提高优先级,否则为个位数)。(PerceptionProperties与几何在模拟传感器中的属性相关联——它们如何出现等)
  • D.IllustrationProperties不支持更改,也不清楚最好/正确的方法是什么。(IllustrationProperties是被馈送到外部可视化器的东西drake_visualizer。)这是最棘手的,因为 LCM 通信目前的表达方式。

因此,当我们将更改对象颜色(上文中的 1 或 2)与现有技术和近期艺术(上文 C 和 D)的可能影响进行比较时,我们得出以下结论:

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

(抱歉,答案似乎更像是“哎呀......你不能那样做”。)

于 2019-07-19T14:19:53.477 回答