我正在尝试可视化可视化碰撞和不同事件,并正在寻找在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();
}
最终,我想用更具体的触发器来调用类似的东西,例如与另一个物体的接近或速度,但是现在我不确定如何注册一个简单的视觉几何变化。
答案 0 :(得分:1)
感谢您提供详细信息。这足以让我对当前和未来的状况(近期和远期计划)提供有意义的答案。
以您的问题为代表的示例,更改视觉几何的颜色可能意味着两件事之一:
drake_visualizer
是主要示例)。dev::RgbdCamera
,但即将为RgbdSensor
)中改变。根据模拟中可能要更改的其他属性,可能还会有其他细微差别。但是使用上面的跳板,以下是详细信息:
ProximityProperties
。 (ProximityProperties
与几何图形在邻近度查询中扮演的角色相关联-接触,有符号距离等。)PerceptionProperties
是该PR中的TODO,并且将在接下来的几个月内进行(除非出现更紧迫的需求来优先提高它,否则为个位数)。 (PerceptionProperties
与几何形状在模拟传感器中的属性相关联-它们的外观等)IllustrationProperties
,目前尚不清楚最好/正确的方法是什么。 ({IllustrationProperties
被馈送到drake_visualizer
之类的外部可视化器。)这是最棘手的,这是由于LCM通信当前的表达方式所致。因此,当我们比较更改对象颜色(上面的1或2)与最新技术水平和近期艺术(上面的C&D)的可能含义时,我们得出以下结论:
(对不起,答案似乎更多是“哎呀,你不能那样做”。)