< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-性能指标

ROS2与Gazebo11入门教程-性能指标

说明:

  • 介绍性能指标

简介

  • Gazebo 9和11会发布一条名为/gazebo/performance_metrics的消息,该消息允许对仿真世界中每个传感器的性能进行检查

了解如何读取测量值

  • 下面将会对基于物理仿真(接触式)传感器和基于渲染(相机)传感器的结果以及当lockstep标志处于活动状态时的差异进行比较。

相机

  • 对于基于渲染的传感器,下面将会使用camerastrictrate.world仿真世界。该仿真世界包含两台相机:一台高分辨率(1280×720)高帧率(500fps)相机和一台低分辨率(320×240)低帧率(30fps)相机。

  • 不锁步情况下运行仿真世界

  • 禁用lockstep标志的情况下,无法保证相机传感器的更新与物理仿真同时迭代。这意味着sim_update_rate不能与仿真世界中定义的实际值相对应。查看高分辨率高帧率相机的sim_update_rate字段值会发现,该值很可能无法达到指定的值500fps。另一台低分辨率相机则能够达到指定的值30fps。请注意实时因子real time factor的值,该值应该接近于1.0。

real_time_factor: 0.99798848700000009
sensor {
name: "default::camera_model::link::camera_sensor"
real_update_rate: 191.64276561974779
sim_update_rate: 166.66666666666666
fps: 213.16120910644531
}
sensor {
name: "default::camera_model::link::camera_sensor_regular"
real_update_rate: 31.1463905584825
sim_update_rate: 30.3030303030303
fps: 29.975315093994141
}
...
real_time_factor: 0.9913419670000001
sensor {
name: "default::camera_model::link::camera_sensor"
real_update_rate: 224.15729745202637
sim_update_rate: 200
fps: 213.16120910644531
}
sensor {
name: "default::camera_model::link::camera_sensor_regular"
real_update_rate: 31.294063018669757
sim_update_rate: 31.25
fps: 29.895561218261719
}
  • 锁步情况下运行仿真世界

  • 在激活lockstep标志的情况下,sim_update_rate必须与仿真世界中定义的实际值相对应。在本示例中,期望高分辨率相机的sim_update_rate值等于500,而低分辨率相机的sim_update_rate值等于30。这样,fps值意味着Gazebo能够在现实的一秒钟内平均生成337帧图像。

  • 实时因子值很大可能性小于1.0。确切的数值取决于您计算机的计算能力。这表明严格遵循了传感器的更新速率,而且为了适应高更新速率,物理仿真速率已经有所降低。

real_time_factor: 0.5083145
sensor {
name: "default::camera_model::link::camera_sensor"
real_update_rate: 254.39207924822054
sim_update_rate: 500
fps: 279.38592529296875
}
sensor {
name: "default::camera_model::link::camera_sensor_regular"
real_update_rate: 12.626295945654704
sim_update_rate: 30.3030303030303
fps: 16.778518676757812
}

接触式传感器

  • 对于基于物理仿真的传感器,下面将使用contactstrictrate.world仿真世界。该仿真世界包含一个接触传感器(更新频率1000Hz)。

  • 在本示例中,即使更新速率如此之高,不锁步和锁步情况下的两个仿真世界看起来仍很相似。这是因为本示例中的更新循环很小。在仿真世界中含有更复杂物体的情况下,这种状况可能会发生变化。

  • 不锁步情况下运行仿真世界

  • 不锁步情况下运行该仿真世界,结果应该会如下所示:

real_time_factor: 0.988433204
sensor {
name: "world_1::model_1::link_1::sensor_contact"
real_update_rate: 964.34805249910789
sim_update_rate: 1000
}
  • 锁步情况下运行仿真世界
  • 锁步情况下运行该仿真世界,则结果应该会如下所示:
real_time_factor: 1.003396497
sensor {
name: "world_1::model_1::link_1::sensor_contact"
real_update_rate: 1006.3885545442469
sim_update_rate: 1000
}

实时更新速率

  • 可以在物理引擎中修改实时更新速率。本示例中将实时更新速率设置为10,这样会使仿真速度变慢。如您所见,两个相机的sim_update_rate期望的值分别为500和30。由于仿真运行的速度比实时更慢,因此real_update_rate和fps(实时情况下每秒的平均帧率)会更低,而且如果在没有相机发生数据更新期间进行采样的话,它们的值有时会为0。

  • 锁步情况下运行仿真世界

  • 锁步情况下运行该仿真世界,其结果应该如下所示:

real_time_factor: 0.010068691000000001
sensor {
name: "default::camera_model::link::camera_sensor"
real_update_rate: 5.0011468129756835
sim_update_rate: 500
fps: 53.769622802734375
}
sensor {
name: "default::camera_model::link::camera_sensor_regular"
real_update_rate: 6.90647889204339e-310
sim_update_rate: 3.8230348098869816e-171
fps: 4.67267173345723e-310
}

real_time_factor: 0.010036926
sensor {
name: "default::camera_model::link::camera_sensor"
real_update_rate: 5.0083617102934195
sim_update_rate: 500
fps: 53.769622802734375
}
sensor {
name: "default::camera_model::link::camera_sensor_regular"
real_update_rate: 0.095422706503929658
sim_update_rate: 30.3030303030303
fps: 12.767441749572754
}
  • 不锁步情况下运行仿真世界

  • 在本示例中,再次在不锁步的情况下运行该仿真世界,这样不能保证相机传感器的更新与物理仿真同时迭代,且real_update_rate值会受到很大影响,该值应该接近500,但在本示例中该值接近5。

real_time_factor: 0
sensor {
name: "default::camera_model::link::camera_sensor"
real_update_rate: 5.33382822725157
sim_update_rate: 1000
fps: 52.516761779785156
}
sensor {
name: "default::camera_model::link::camera_sensor_regular"
real_update_rate: 0.29837649072676692
sim_update_rate: 29.411764705882351
fps: 9.8744449615478516
}
  • 最大步长(Max step size)

  • 仿真过程中,可变步长求解器(例如simbody)可以使用最大步长(max step size)。对于具有固定步长求解器(例如ODE)的物理引擎,这只能是步长。Gazebo中默认步长值为0.001秒。

  • 在选择传感器的update rate时,如果在max step size中定义了足够的精度,则需要考虑到这一点。例如:

1/250 = 0.004,可以使用默认值(即0.001秒)。
  • 1/400 = 0.0025,这样就需要将max step size减小至0.0025的某个因数或约数(factor),如 0.0001,这会使仿真变慢。更改这个参数会对物理仿真的准确性和速度产生负面影响,有关更多信息,请参阅这个教程。

  • 下面的示例中包含一个更新频率为400Hz的IMU传感器。您会看到,由于最大步长精度不够,sim_update_rate的值与定义的值不对应。

sensor {
name: "world_1::model_1::link_1::sensor_contact"
real_update_rate: 181.87525758083353
sim_update_rate: 200
}
...
sensor {
name: "world_1::model_1::link_1::sensor_contact"
real_update_rate: 252.94164813236739
sim_update_rate: 333.33333333333331
}
  • 如果将max step size修改为0.0001,则可以看到sim_update_rate的正确值。
sensor {
name: "world_1::model_1::link_1::sensor_contact"
real_update_rate: 39.899370595408726
sim_update_rate: 400
}

参考:

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2与gazebo11入门教程