我正在尝试直观地可视化碰撞和不同事件,并且正在寻找在注册后更新颜色或视觉元素属性的最佳方法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();
}
最终我想用更具体的触发器来调用这样的东西,比如接近另一个物体或速度,但现在我不确定如何记录一个简单的视觉几何变化。