< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-性能分析工具(Profiler)

ROS2与Gazebo11入门教程-性能分析工具(Profiler)

说明:

  • 介绍使用性能分析工具

介绍

  • Gazebo 11使用Ignition通用性能分析工具(Common Profiler)来检查和可视化不同线程、函数和方法的性能。

  • 而Gazebo 9使用Ignition通用性能分析工具(Common’s profiler)的一个内部分支(fork)来检查和可视化性能。

如何为Gazebo运行和查看性能分析结果?

  • 要使用该编译器,必须用CMake标志-DENABLE_PROFILER = 1从源代码编译Gazebo,例如:
cmake .. --cmake-args -DENABLE_PROFILER=1
  • 例如,如果使用colcon来编译Gazebo,则命令为:
colcon build --cmake-args -DENABLE_PROFILER=1
  • 在编译Gazebo后,就可以启动待进行性能分析的仿真世界,例如:
gazebo profiler.world
  • 有一个方便的启动器脚本(Linux和macOS)用于启动Remotery。

  • 在Gazebo 11中其命令为:

ign_remotery_vis
  • 在Gazebo 9中其命令则为:
gz_remotery_vis
  • 该脚本应该会在一个浏览器中打开性能分析工具的输出结果。

  • Gazebo服务器和客户端进程的性能分析数据会分别配置到不同的端口上,可以在页面顶部选择端口:

  • gzserver进程的数据会配置到端口1500

  • gzclient进程的数据会配置到端口1501

  • 应该可以看到对应于不同线程的性能分析图,如以下线程:

  • gzserver

  • [Ode,Bullet,Symbody,Dart]Physics

  • SensorManager

  • 下图显示了传感器管理器的时间线。本示例中有5种不同的传感器:gps,imu,磁力计(magnetometer),高度计(altimeter)和接触式传感器(contact)。从该图中可以看到传感器管理器循环的持续时间(50毫秒)以及更新所有传感器所需的时间(约0.177毫秒),其余时间该线程都会进入休眠状态。

  • 从下图中可以看到每个传感器的更新时间,所有传感器都有两个子任务:生成数据和发布该数据(填充数据结构并对其进行发布)。

请输入图片描述

  • 从下面的两个图中,可以看出OdePhysics和gzserver线程循环的演变过程。

请输入图片描述

请输入图片描述

如何将性能分析工具添加到Gazebo自定义插件?

  • 使用Gazebo 11,可以将性能分析工具添加到Gazebo的任何插件。 而在Gazebo 9中这是不可能的。

  • 如果要将性能分析工具添加到Gazebo自定义插件中,需要执行以下步骤:

  • 把性能分析工具的头文件包含进来:

#include <ignition/common/Profiler.hh>
  • 链接到该性能分析工具库:
target_link_libraries(<your plugin name>

...

${IGNITION-COMMON_LIBRARIES}

)
  • 将该性能分析工具宏添加到更新方法或其他周期性方法中:
IGN_PROFILE("WindPlugin::OnUpdate");

IGN_PROFILE_BEGIN("Update");

...

IGN_PROFILE_END();

传感器类

  • 继承自gazebo::sensors::Sensor的类在其UpdateImpl方法中已经有了该性能分析工具宏。会定期调用该方法,而且该方法负责生成数据并发布该数据。

插件

  • 继承自gazebo::*Plugin的类可以使用gazebo::event::Events::ConnectWorldUpdateBegin连接到定期的仿真世界更新事件。例如,WindPlugin插件会为仿真的每次迭代调用WindPlugin::OnUpdate方法:
this->dataPtr->updateConnection = event::Events::ConnectWorldUpdateBegin(std::bind(&WindPlugin::OnUpdate, this));
  • 该回调函数是放置上面的性能分析工具宏的好地方。

参考: 

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

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


标签: ros2与gazebo11入门教程