< >
Home » ROS2与Gazebo11入门教程 » ROS2与Gazebo11入门教程-用相机创建视频

ROS2与Gazebo11入门教程-用相机创建视频

说明:

  • 介绍如何使用Gazebo仿真世界中的相机传感器创建视频

保存相机图像

  • Gazebo可以自动将相机图像保存到磁盘上。要实现这一点,必须向相机传感器模型添加一个save标签

  • 创建一个带有相机的仿真世界**

  • 下载这个仿真世界并将其保存为camera_tutorial.world文件,其内容如下:

<?xml version="1.0"?>
<sdf version='1.6'>
<world name='default'>
<model name='unit_box'>
<pose>0 0 2.5 0 -0 0</pose>
<link name='link'>
<visual name='visual'>
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</visual>
</link>
</model>
<light name='user_directional_light_0' type='directional'>
<pose>0 0 1 0 0 0</pose>
</light>
<model name='camera'>
<static>true</static>
<pose>-1 0 2 0 1 0</pose>
<link name='link'>
<visual name='visual'>
<geometry>
<box>
<size>0.1 0.1 0.1</size>
</box>
</geometry>
</visual>
<sensor name='my_camera' type='camera'>
<camera>
<save enabled="true">
<path>/tmp/camera_save_tutorial</path>
</save>
<horizontal_fov>1.047</horizontal_fov>
<image>
<width>1920</width>
<height>1080</height>
</image>
<clip>
<near>0.1</near>
<far>100</far>
</clip>
</camera>
<always_on>1</always_on>
<update_rate>30</update_rate>
</sensor>
</link>
</model>
</world>
</sdf>
  • 该仿真世界文件中最重要的部分是下面的内容:
<sensor name="my_camera">
<camera>
<image>
<width>1920</width>
<height>1080</height>
</image>
...
<save enabled="true">
<path>/tmp/camera_save_tutorial</path>
</save>
...
<update_rate>30</update_rate>
</camera>
</sensor>
  • 标签save有一个属性enabled,必须将该属性值设置为true才能保存图像。子标签path用于指定保存相机图像的目录。如果该目录不存在,则Gazebo将会尝试创建该目录。标签width和height用于设置图像的分辨率(宽和高)。标签update_rate用于设置每秒保存的图像数。此仿真相机模型将以每秒30帧的速度输出分辨率为1920×1080的图像。

运行仿真世界

  • 进入到存放下载的仿真世界文件的目录,并用以下命令启动Gazebo:
gazebo --verbose camera_tutorial.world
  • 运行仿真若干秒后关闭Gazebo。

  • 该仿真世界将会把图像保存到/tmp/camera_save_tutorial目录中。

检查图像

  • 在/tmp/camera_save_tutorial目录中,应该会有许多编号顺序相连的图像。这些图像具有与捕获它们的仿真相机模型一样的分辨率(1920×1080)。首幅图像名称是default_camera_link_my_camera(1)-0000.jpg

将图像转换成视频

  • 现在相机图像已经保存到磁盘上了,可以用ffmpeg将它们转换成视频。
  • 下面这条命令会以每秒30帧的速度创建一个文件名为my_camera.mp4的视频:
ffmpeg -r 30 -pattern_type glob -i '/tmp/camera_save_tutorial/default_camera_link_my_camera*.jpg' -c:v libx264 my_camera.mp4
  • 如果您的操作系统为Ubuntu Trusty或更高版本,则可能要使用avconv而不是ffmpeg(这里有一些背景知识)。

  • 下面这条命令可以使用avconv:

    avconv -framerate 30 -i /tmp/camera_save_tutorial/default_camera_link_my_camera(1)-%04d.jpg -c:v libx264 my_camera.mp4

  • 转换后的视频可以在这里下载。

参考:

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

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


标签: ros2与gazebo11入门教程