【Gazebo入门教程】第八讲 Gazebo中的日志与回放

【Gazebo入门教程】第八讲 Gazebo中的日志与回放

在这里插入图片描述

前言在之前的Gazebo教程中,我们系统的学习了如何使用Gazebo进行机器人模型的创建、仿真环境的创建,并随着一个又一个的实例完成了对于SDF建模和可视化建模两种建模手段的使用,最后通过对于控制器插件的研究和与ROS系统的连接,搭建起来整个仿真世界与真实世界的桥梁,本节博客,也是整个入门教程中的最后一节(暂时),将会重点讲述Gazebo中的日志与回放方法,辅助我们进行研究和学习。


一、日志记录

1. 日志内容介绍

在这里插入图片描述

  • 日志简介:Gazebo的日志文件常存储于压缩文件.log中,其中主要包含的是“世界状态”的变化,初始状态的描述包括仿真世界内一切事物的完整信息,从场景(Scene)到存在的实体。运行之后,每次仿真发生变化,新的世界状态都会被记录,具体内容如下:
  1. 仿真数据(例如当前模拟时间,物理迭代次数等);
  2. 场景内每个模型的状态(当然也包含模型内的每个链接和关节的状态),所谓状态,指的就是一些信息,比如瞬时姿态,速度,加速度,力等等;
  3. 当前世界内光源的位置;

2. 日志记录

  • 2.1 GUI记录:

\qquad 1. 开始仿真,点击右侧上方的Log Data图标,或者使用Ctrl + D

在这里插入图片描述

\qquad 2. 存储位置:默认在~/.gazebo/log下,可以通过下图中的```Browse````进行修改:

在这里插入图片描述

\qquad 3. 开始录制后,字节数量随着模型和光源的移动进行增长(静止时不变),记录完毕后,打开
\qquad Recordings,可看到生成路径state.log,目录名按时间生成。


  • 2.2 命令行记录:

\qquad 1. 命令行可以记录任意时间仿真日志,例如用如下指令开启Gazebo,记录random_velocity.world

 	gazebo -r --record_path ~/logs/random_velocity worlds/random_velocity.world

在这里插入图片描述

\qquad 2. 命令行可通过gazebo --help查看多种后缀的功能,具体如下:

  1. -p arg--play arg: 播放一个日志文件
  2. -r--record:从Gazebo打开到关闭的期间,记录日志
  3. --record_encoding arg: 日志数据的压缩编码格式。选项为zlib(默认),bz2txt

\qquad 3. 测试:当Gazebo成功关闭时,日志才会终止,故可以通过ls目录查看是否生成日志state.log

	ls ~/logs/random_velocity/

  • 2.3 部分仿真记录:

\qquad 1. 概念:在任意时间点触发日志记录,主要通过gz log工具

\qquad 2. 使用方法:新建终端,使用如下命令:

	# 开始记录
	gz log -d 1
	
	# 停止记录
	gz log -d 0
	
	# 查看gz log的其他选项
	gz log --help

二、日志回放

  • 注意:当前并不支持使用GUI 进行回放日志,故这里只介绍使用命令行工具的方法;

  • 命令行方法:使用gz log工具处理日志文件,其中-u指启动暂停的日志:

	gz log -s -f ~/.gazebo/log/2022-08-23T024149.945167/gzserver/state.log

在这里插入图片描述

  • 日志中的世界描述如下:
<?xml version='1.0'?>
<gazebo_log>
<header>
<log_version>1.0</log_version>
<gazebo_version>7.0.0~pre1</gazebo_version>
<rand_seed>10622214</rand_seed>
<log_start>43 380000000</log_start>
<log_end>69 651000000</log_end>
</header>

<chunk encoding='txt'><![CDATA[
<sdf version ='1.6'>
<world name='default'>
  (...)
  <light name='sun' type='directional'>
    (...)
  </light>
  <model name='ground_plane'>
    (...)
  </model>
  <model name='double_pendulum_with_base'>
    (...)
  </model>
</world>
</sdf>]]></chunk>

--- Press space to continue, 'q' to quit ---
  • 使用空格后可以逐步浏览之后状态(只有改变的信息):
<chunk encoding='txt'><![CDATA[
<sdf version='1.6'>
<state world_name='default'>
<sim_time>43 380000000</sim_time>
<real_time>43 478499228</real_time>
<wall_time>1453763389 677873530</wall_time>
<iterations>43380</iterations>
<model name='double_pendulum_with_base'><pose>1.140 -1.074 -0.000 0.000 -0.000 0.000 </pose><scale>1.000 1.000 1.000</scale><link name='base'><pose>1.13998 -1.07367 -0.00000 0.00000 0.00000 -0.00042 </pose><velocity>-0.0000 0.0000 -0.0005 0.0004 0.0030 0.0001 </velocity></link><link name='lower_link'><pose>1.38969 -1.79815 1.41059 -2.45351 0.00000 -0.00042 </pose><velocity>0.0042 -0.2557 0.2659 1.9694 0.0048 0.0001 </velocity></link><link name='upper_link'><pose>1.13999 -1.07367 2.10000 2.33144 -0.00000 -0.00042 </pose><velocity>0.0063 -0.0008 -0.0005 -0.3739 0.0032 0.0001 </velocity></link></model><model name='ground_plane'><pose>0.000 0.000 0.000 0.000 -0.000 0.000 </pose><scale>1.000 1.000 1.000</scale><link name='link'><pose>0.00000 0.00000 0.00000 0.00000 -0.00000 0.00000 </pose><velocity>0.0000 0.0000 0.0000 0.0000 -0.0000 0.0000 </velocity></link></model></state></sdf>
]]></chunk>

--- Press space to continue, 'q' to quit ---

总结

  • 内容:本篇博客主要介绍了Gazebo中的日志与回放功能,帮助我们在学习和实际仿真中提高效率,并降低调试成本,本篇教程也是入门教程中的最后一节,希望大家都能有所收获,未来的RVIZ教程敬请期待。

在这里插入图片描述

  • 注意:本文参考了Gazebo官方网站以及古月居中的Gazebo有关教程、知乎Bruce的教程等,主要目的是方便自行查询知识,巩固学习经验,无任何商业用途。

猜你喜欢

转载自blog.csdn.net/lc1852109/article/details/126537408