Create a Video with a Camera - modulabs/gazebo-tutorial GitHub Wiki

Introduction

์ด๋ฒˆ ํŠœํ† ๋ฆฌ์–ผ์€ gazebo world์—์„œ ์นด๋ฉ”๋ผ ์„ผ์„œ๋กœ๋ถ€ํ„ฐ ๋น„๋””์˜ค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์ธ๋‹ค.

Save Camera Images

Gazebo๋Š” ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€๋ฅผ ๋””์Šคํฌ์— ์ž๋™์ ์œผ๋กœ ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ด๋ฅผ ์œ„ํ•ด, <save> tag๊ฐ€ camera sensor์— ๋ฐ˜๋“œ์‹œ ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•œ๋‹ค.

Create a world with a camera

this world๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  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> tag๋Š” enabled ๋ผ๋Š” ํŠน์„ฑ์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” ๋ฐ˜๋“œ์‹œ ์ €์žฅ๋˜์–ด์•ผํ•  ์ด๋ฏธ์ง€๋ฅผ ์œ„ํ•ด true๋กœ ์„ค์ •๋˜์–ด์•ผ ํ•œ๋‹ค. child tag <path>๋Š” ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€๊ฐ€ ์ €์žฅ๋˜๋Š” ํด๋”์ด๋‹ค. ๋งŒ์•ฝ ํด๋”๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, gazebo์—์„œ ์ด๋ฅผ ๋งŒ๋“ค๊ฒƒ์ด๋‹ค. <width> and <height>๋Š” ์ด๋ฏธ์ง€์˜ resolution์„ ์„ค์ •ํ•œ๋‹ค. update_rate๋Š” ์ผ์ดˆ์— ์ €์žฅ๋˜๋Š” ์ด๋ฏธ์ง€ ํŒŒ์ผ์˜ ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ์ด ์นด๋ฉ”๋ผ๋Š” 1์ดˆ์— 30ํ”„๋ ˆ์ž„, 1920x1080 resolution๋ฅผ ๊ฐ–๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

Run the world

worldํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํด๋”๋กœ ์ด๋™ํ•˜๊ณ , ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด ๊ฐ€์ œ๋ณด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

gazebo --verbose camera_tutorial.world

๋ช‡์ดˆ๊ฐ€ ์ง€๋‚œ ํ›„ Gazebo๋ฅผ ๋‹ซ๋Š”๋‹ค.

์œ„ World๋Š” /tmp/camera_save_tutorial ์ฃผ์†Œ๋กœ ์ด๋ฏธ์ง€๋ฅผ ์ €์žฅํ•  ๊ฒƒ์ด๋‹ค.

Examine the images

/tmp/camera_save_tutorials ํด๋”์•ˆ์—, ๋งŽ์€ ์ด๋ฏธ์ง€๊ฐ€ ์ˆœ์„œ๋Œ€๋กœ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ ์‚ฌ์ง„๋“ค์€ ๊ฐ™์€ resolution(1920x1080)๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ฒ˜์Œ ์ด๋ฏธ์ง€๋Š” default_camera_link_my_camera(1)-0000.jpg๋ฅผ ๊ฐ€๋ฅดํ‚จ๋‹ค.

Convert Images to Video

์ง€๊ธˆ๋ถ€ํ„ฐ๋Š” ๋””์Šคํฌ์— ์ €์žฅ๋œ ์นด๋ฉ”๋ผ ์ด๋ฏธ์ง€๋ฅผ ffmpeg๋ฅผ ์ด์šฉํ•ด ๋น„๋””์˜ค๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด command๋Š” 30 frames๋ฅผ ๊ฐ–๋Š” 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 or a newer version๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค๋ฉด, ๋‹น์‹ ์€ ffmpeg ๋Œ€์‹ ์— avconv๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด์•ผ ํ• ๊ฒƒ์ด๋‹ค. (here is some of the backstory). avconv๋ฅผ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ธ Command๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค:

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

๋น„๋””์˜ค ๋‹ค์šด๋กœ๋“œ here.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ