改变视觉几何的事件
Events changing visual geometries
我正在尝试可视化碰撞和不同的事件,并且正在寻找在 RegisterVisualGeometry 注册后更新颜色或视觉元素属性的最佳方法。
我找到了 GeometryInstance class, which seems like a promising point for changing mutable illustration properties, but have yet to find and example where an instance is called from the plant (from a GeometryId from something like GetVisualGeometriesForBody?) 并且它的属性已更改。
作为一个基本示例,我想在两秒后更改框的视觉几何形状的颜色。我用
注册了预先确定的几何图形
// 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();
}
最终我想用一个更具体的触发来调用这样的东西,比如接近另一个对象或速度,但现在我不确定我将如何注册一个简单的视觉几何变化。
感谢您提供详细信息。这足以让我对当前事态和未来(近期和 far-term 计划)提供有意义的答案。
以您的问题为例,更改视觉几何体的颜色可能意味着以下两种情况之一:
- 对象的颜色在 "attached" 可视化工具中发生变化(
drake_visualizer
是主要示例)。
- 对象的颜色在模拟 rgb 相机中发生变化(当前
dev::RgbdCamera
,但即将 RgbdSensor
)。
根据您可能希望在模拟中更改的其他属性,可能还有其他 subtleties/nuances。但是使用上面的跳板,这里是详细信息:
- 一个。直到最近 (drake PR 11796),根本无法在注册后更改属性。
- 乙。 PR 11796 是实现这一目标的第一步。但是,它 仅 启用它以更改
ProximityProperties
。 (ProximityProperties
与几何在邻近查询中扮演的角色相关联——接触、符号距离等)
- C。更改
PerceptionProperties
是该 PR 中的一个 TODO,并将在接下来的几个月内跟进(个位数,除非出现更紧迫的需要来提高它的优先级)。 (PerceptionProperties
与几何在模拟传感器中的属性相关联——它们的外观等)
- D.不支持更改
IllustrationProperties
,并且不清楚 best/right 的方法可能是什么。 (IllustrationProperties
是像 drake_visualizer
这样的外部可视化工具。)这是最棘手的,因为 LCM 通信当前的表达方式。
因此,当我们将改变对象颜色(上面的 1 或 2)的可能影响与现有技术和 near-term 艺术(上面的 C 和 D)进行比较时,我们得出以下结论:
- 在不久的将来,你应该可以在合成的RGB图像中改变它。
- 没有在外部可视化器中更改它的实际计划。
(抱歉,答案似乎更接近 "oops...you can't do that"。)
我正在尝试可视化碰撞和不同的事件,并且正在寻找在 RegisterVisualGeometry 注册后更新颜色或视觉元素属性的最佳方法。
我找到了 GeometryInstance class, which seems like a promising point for changing mutable illustration properties, but have yet to find and example where an instance is called from the plant (from a GeometryId from something like GetVisualGeometriesForBody?) 并且它的属性已更改。
作为一个基本示例,我想在两秒后更改框的视觉几何形状的颜色。我用
注册了预先确定的几何图形// 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();
}
最终我想用一个更具体的触发来调用这样的东西,比如接近另一个对象或速度,但现在我不确定我将如何注册一个简单的视觉几何变化。
感谢您提供详细信息。这足以让我对当前事态和未来(近期和 far-term 计划)提供有意义的答案。
以您的问题为例,更改视觉几何体的颜色可能意味着以下两种情况之一:
- 对象的颜色在 "attached" 可视化工具中发生变化(
drake_visualizer
是主要示例)。 - 对象的颜色在模拟 rgb 相机中发生变化(当前
dev::RgbdCamera
,但即将RgbdSensor
)。
根据您可能希望在模拟中更改的其他属性,可能还有其他 subtleties/nuances。但是使用上面的跳板,这里是详细信息:
- 一个。直到最近 (drake PR 11796),根本无法在注册后更改属性。
- 乙。 PR 11796 是实现这一目标的第一步。但是,它 仅 启用它以更改
ProximityProperties
。 (ProximityProperties
与几何在邻近查询中扮演的角色相关联——接触、符号距离等) - C。更改
PerceptionProperties
是该 PR 中的一个 TODO,并将在接下来的几个月内跟进(个位数,除非出现更紧迫的需要来提高它的优先级)。 (PerceptionProperties
与几何在模拟传感器中的属性相关联——它们的外观等) - D.不支持更改
IllustrationProperties
,并且不清楚 best/right 的方法可能是什么。 (IllustrationProperties
是像drake_visualizer
这样的外部可视化工具。)这是最棘手的,因为 LCM 通信当前的表达方式。
因此,当我们将改变对象颜色(上面的 1 或 2)的可能影响与现有技术和 near-term 艺术(上面的 C 和 D)进行比较时,我们得出以下结论:
- 在不久的将来,你应该可以在合成的RGB图像中改变它。
- 没有在外部可视化器中更改它的实际计划。
(抱歉,答案似乎更接近 "oops...you can't do that"。)