Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add ability to record video based on sim time #414

Merged
merged 9 commits into from
Dec 21, 2020
Merged

Conversation

iche033
Copy link
Contributor

@iche033 iche033 commented Oct 16, 2020

The current default behavior of video recording in gui camera is to record using wall clock time as timestamp. This PR adds the ability to specify from the gui config to record videos using sim time. This is so that we can still produce smooth videos that run in real time even when the playback RTF is low or fluctuates often. To get perfect video timing, you'll also require this fix in gazebosim/gz-common#105

To test:

  1. add a <record_video><use_sim_time> flag to the scene3d plugin in your ~/.ignition/gazebo/gui.config (and maybe ~/.ignition/gazebo/playback_gui.config if you're doing playback - for me I just had to update gui.config), e.g.

    <!-- 3D scene -->
    <plugin filename="GzScene3D" name="3D View">
      <ignition-gui>
        <title>3D View</title>
        <property type="bool" key="showTitleBar">false</property>
        <property type="string" key="state">docked</property>
      </ignition-gui>
    
      <engine>ogre2</engine>
      <scene>scene</scene>
      <ambient_light>0.4 0.4 0.4</ambient_light>
      <background_color>0.8 0.8 0.8</background_color>
      <camera_pose>6 0 6 0 0.5 3.14</camera_pose>
      <record_video>
        <use_sim_time>true</use_sim_time>
      </record_video>
    </plugin>
    
  2. Launch ign-gazebo with a complex scene so that the RTF is low. Alternatively, artificially increase cpu usage using stress, e.g. stress -c 12

  3. Open the Video Recorder plugin (from top right menu) and start recording. Keep an eye on the duration of sim time that you record.

  4. Stop the video recorder and save to file

  5. Playback video and verify video length is the same as the duration of sim time that was recorded

Ideally this configuration is specified using a proper video record msg but adding that may introduce breaking changes.

Signed-off-by: Ian Chen ichen@osrfoundation.org

Signed-off-by: Ian Chen <ichen@osrfoundation.org>
@iche033 iche033 requested a review from chapulina as a code owner October 16, 2020 00:53
@github-actions github-actions bot added the 🏰 citadel Ignition Citadel label Oct 16, 2020
@iche033 iche033 requested review from jennuine and nkoenig October 16, 2020 00:54
@codecov
Copy link

codecov bot commented Oct 16, 2020

Codecov Report

Merging #414 (479bd9b) into ign-gazebo3 (7643e7b) will not change coverage.
The diff coverage is n/a.

Impacted file tree graph

@@             Coverage Diff              @@
##           ign-gazebo3     #414   +/-   ##
============================================
  Coverage        77.61%   77.61%           
============================================
  Files              208      208           
  Lines            11385    11385           
============================================
  Hits              8837     8837           
  Misses            2548     2548           

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 7643e7b...479bd9b. Read the comment docs.

Signed-off-by: Ian Chen <ichen@osrfoundation.org>
@nkoenig
Copy link
Contributor

nkoenig commented Oct 16, 2020

Loading levels can cause simulation to pause for a bit. Will this change make a resulting video look smooth? I think the answer is yes since it's using sim time.

@jennuine
Copy link
Contributor

Pauses seem to be more noticeable now. See gazebosim/gz-common#105 (comment)

@chapulina
Copy link
Contributor

Is this PR still under consideration?

@iche033
Copy link
Contributor Author

iche033 commented Dec 11, 2020

yes this is still needed. Waiting for another review on #419 first.

Copy link
Contributor

@nkoenig nkoenig left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm good with this and #419 . They have been used to successfully record a few hundred videos.

Copy link
Contributor

@chapulina chapulina left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, I just have a suggestion for retrieving the boolean XML value.

src/gui/plugins/scene3d/Scene3D.cc Outdated Show resolved Hide resolved
@iche033
Copy link
Contributor Author

iche033 commented Dec 21, 2020

CI looks good. Merging.

@iche033 iche033 merged commit 478dea6 into ign-gazebo3 Dec 21, 2020
@iche033 iche033 deleted the record_sim_time branch December 21, 2020 21:04
mjcarroll added a commit that referenced this pull request Jan 8, 2021
* Clarify how sim time is interpreted in a System's step (#467)
* add frame_id and child_frame_id attribute support for DiffDrive (#361)
* Add ability to record video based on sim time (#414)
* add ability to record video from gui camera using sim time
* add msg
* use QueryBoolText
* Add lockstep mode to video recording (#419)
* Disable right click menu when using measuring tool (#458)
* Bump to 3.6.0 (#524)
* Don't make docs on macOS (#528)
* Updates to ardupilot migration tutorial (#525)
* Update gtest to 1.10.0 for Windows compilation (ign-gazebo3) (#506)
* Compile new gtest with c++11
* Use INSTANTIATE_TEST_SUITE_P instead of deprecated -INSTANTIATE_TEST_CASE_P
* Apply suggestions from code review
* One more tutorial version bump
* Fix bad merge
* change nullptr to a int ptr for qt 5.15.2 bug (#527)
* Generate valid topics everywhere (support names with spaces) (#522)
* Change deprecated test case->suite

Co-authored-by: Ashton Larkin <ashton@openrobotics.org>
Co-authored-by: G.Doisy <doisyg@users.noreply.github.com>
Co-authored-by: Ian Chen <ichen@osrfoundation.org>
Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: Louise Poubel <louise@openrobotics.org>
Co-authored-by: John Shepherd <john@openrobotics.org>
Co-authored-by: Steve Peters <scpeters@openrobotics.org>
Co-authored-by: Jose Luis Rivero <jrivero@osrfoundation.org>
Co-authored-by: Akash Patel <17132214+acxz@users.noreply.github.com>
Lobotuerk added a commit to Lobotuerk/ign-gazebo that referenced this pull request Jan 11, 2021
* Initial commit

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Added plugin files

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Initial .sdf file

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Pipeline for getting sensor contacts

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Added visualization of postion and forces

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Added plugin for Transform Control

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Added initial interpolation

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Code check

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Update info after specified milliseconds

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Set marker lifetime for better performance

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Added Depth Camera

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Added callback and unpacking to Depth Camera messages

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Compute and visualize normal forces

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* PR Feedback 1

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Update sdf example to a more realistic environment

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Allow moving Depth Camera from model origin

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Make markers dimensions available as parameters

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Visualize sensor as a marker instead of <visual> and filter out normal forces outside sensor

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* PR Feedback 2

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* PR Feedback 3

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* Minor fixes for sdf, sensor marker and profiler

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* PR Feedback 4

Signed-off-by: Martiño Crespo <marticres@gmail.com>

* fix mac warning

Signed-off-by: Mabel Zhang <mabel@openrobotics.org>

* Helper function to set component data (gazebosim#436)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Remove unneeded if statement (gazebosim#432)

Signed-off-by: John Shepherd <john@openrobotics.org>

* Fixes flaky RecordAndPlayback test in INTEGRATION_log_system (gazebosim#463)

The flakiness comes from two sources:
1. Poses recorded by the LogRecorder are published by the
   SceneBroadcaster system throttled at 60 Hz. The throttle mechanism
   uses real-time instead of sim-time which causes a variance in the
   number of recorded poses from run to run. However, the expected number of
   recorded poses was calculated with the assumption that the simulation
   would run with a 1.0 RTF. If the CPU load is high, there could be a
   mismatch between the expected and the actual number of recorded
   poses, which causes the test to fail.
   This can be checked by running the test with
`cpulimit -l 20 -f  bin/INTEGRATION_log_system  -- --gtest_filter="*RecordAndPlayback"`

2. An attempt is made to match up played back poses with the closest
   timestamp in the recorded file. These poses are again published by
   the SceneBroadcaster, so they are subject to the same kind of timing
   issues as the recorded poses.

The solution in this patch for the first issue is to determine the
expected number of recorded poses by counting them in a separate system
that mimics the throttling mechanism of ign-transport. For the second
issue, a testing system is added to the playback server bypassing the
SceSceneBroadcaster altogether.

Signed-off-by: Addisu Z. Taddese <addisu@openrobotics.org>

* Make PeerTracker test more robust (gazebosim#452)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

Co-authored-by: Michael Carroll <michael@openrobotics.org>

* Clarify how sim time is interpreted in a System's step (gazebosim#467)

Signed-off-by: Ashton Larkin <ashton@openrobotics.org>

* 3 ➡️  4: fixes for gazebosim#463 (gazebosim#469)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Link link tutrial (gazebosim#472)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Switch to async state service request (gazebosim#461)

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

* Use a std::promise/std::future to avoid busy waiting the step ack messages in NetworkManagerPrimary (gazebosim#470)

Signed-off-by: Ivan Santiago Paunovic <ivanpauno@ekumenlabs.com>
Signed-off-by: Louise Poubel <louise@openrobotics.org>

Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Fix tests that use Fuel paths with uppercase letters (gazebosim#480)

As of gazebosim/gz-fuel-tools#130, fuel paths use all lowercase letters. This fixes some tests that had uppercase letters.
Signed-off-by: Addisu Z. Taddese <addisu@openrobotics.org>

* 4.1.0 (gazebosim#485)

Signed-off-by: Ashton Larkin <ashton@openrobotics.org>

* Update key event handling (gazebosim#466)

Signed-off-by: John Shepherd <john@openrobotics.org>

* Fix slot in Plotting plugin (gazebosim#490)

Signed-off-by: Alejandro Hernández <ahcorde@gmail.com>

* Tape Measure Plugin (gazebosim#456)

Signed-off-by: John Shepherd <john@openrobotics.org>

* Satisfy make codecheck (gazebosim#491)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Move deselect and preview termination to render thread (gazebosim#493)

Signed-off-by: John Shepherd <john@openrobotics.org>

* Fix codecheck (gazebosim#499)

Signed-off-by: Nate Koenig <nate@openrobotics.org>

Co-authored-by: Nate Koenig <nate@openrobotics.org>

* Logical Audio Sensor Plugin (gazebosim#401)

Signed-off-by: Ashton Larkin <ashton@openrobotics.org>

* Codecheck - initialize primitive in LogicalAudio component (gazebosim#502)

Signed-off-by: Ashton Larkin <ashton@openrobotics.org>

* 3 to 4: fix codecheck for ign-gazebo4

Signed-off-by: Ashton Larkin <ashton@openrobotics.org>

* 3 to 4: resolve codecheck warnings

Signed-off-by: Ashton Larkin <ashton@openrobotics.org>

* add frame_id and child_frame_id attribute support for DiffDrive (gazebosim#361)

Add configuration of the odom frame_id and child_frame_id fields from sdf attributes <frame_id> and <child_frame_id>

Signed-off-by: Guillaume <guillaume.doisy@wyca.fr>
Signed-off-by: Guillaume Doisy <guillaume.doisy@wyca.fr>

* Require ign-gui 4.1.0 (gazebosim#505)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Fix shadow artifacts by disabling double sided rendering (gazebosim#446)

* read double sided sdf param

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

* update migration

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

* Make the tunnels example world more interesting (gazebosim#462)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* add double sided msg to sdf conversion

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Add ability to record video based on sim time (gazebosim#414)

* add ability to record video from gui camera using sim time

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

* add msg

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

* use QueryBoolText

Signed-off-by: Ian Chen <ichen@osrfoundation.org>

Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Add lockstep mode to video recording (gazebosim#419)

Signed-off-by: Ian Chen <ichen@osrfoundation.org>
Signed-off-by: Louise Poubel <louise@openrobotics.org>

Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Kinetic energy monitor plugin (gazebosim#492)

Signed-off-by: Gonzalo de Pedro <gonzalo@depedro.com.ar>
Signed-off-by: Nate Koenig <nate@openrobotics.org>

Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Disable right click menu when using measuring tool (gazebosim#458)

Signed-off-by: John Shepherd <john@openrobotics.org>

Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Bump to 3.6.0 (gazebosim#524)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Don't make docs on macOS (gazebosim#528)

add comment about doxygen bug

Signed-off-by: Louise Poubel <louise@openrobotics.org>
Signed-off-by: Steve Peters <scpeters@openrobotics.org>

Co-authored-by: Louise Poubel <louise@openrobotics.org>

* Updates to ardupilot migration tutorial (gazebosim#525)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Update gtest to 1.10.0 for Windows compilation (ign-gazebo3) (gazebosim#506)

* Compile new gtest with c++11
* Use INSTANTIATE_TEST_SUITE_P instead of deprecated -INSTANTIATE_TEST_CASE_P

Signed-off-by: Jose Luis Rivero <jrivero@osrfoundation.org>

* Apply suggestions from code review

Signed-off-by: Michael Carroll <michael@openrobotics.org>

Co-authored-by: Louise Poubel <louise@openrobotics.org>

* change nullptr to a int ptr for qt 5.15.2 bug (gazebosim#527)

See: https://bugreports.qt.io/browse/QTBUG-89114
Signed-off-by: acxz <17132214+acxz@users.noreply.github.com>

Co-authored-by: Louise Poubel <louise@openrobotics.org>
Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Generate valid topics everywhere (support names with spaces) (gazebosim#522)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* One more tutorial version bump

Signed-off-by: Michael Carroll <michael@openrobotics.org>

* Fix bad merge

Signed-off-by: Michael Carroll <michael@openrobotics.org>

* change nullptr to a int ptr for qt 5.15.2 bug (gazebosim#527)

See: https://bugreports.qt.io/browse/QTBUG-89114
Signed-off-by: acxz <17132214+acxz@users.noreply.github.com>

Co-authored-by: Louise Poubel <louise@openrobotics.org>
Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Generate valid topics everywhere (support names with spaces) (gazebosim#522)

Signed-off-by: Louise Poubel <louise@openrobotics.org>

* Change deprecated test case->suite

Signed-off-by: Michael Carroll <michael@openrobotics.org>

* 3 ➡️ 4 (gazebosim#533)

* Clarify how sim time is interpreted in a System's step (gazebosim#467)
* add frame_id and child_frame_id attribute support for DiffDrive (gazebosim#361)
* Add ability to record video based on sim time (gazebosim#414)
* add ability to record video from gui camera using sim time
* add msg
* use QueryBoolText
* Add lockstep mode to video recording (gazebosim#419)
* Disable right click menu when using measuring tool (gazebosim#458)
* Bump to 3.6.0 (gazebosim#524)
* Don't make docs on macOS (gazebosim#528)
* Updates to ardupilot migration tutorial (gazebosim#525)
* Update gtest to 1.10.0 for Windows compilation (ign-gazebo3) (gazebosim#506)
* Compile new gtest with c++11
* Use INSTANTIATE_TEST_SUITE_P instead of deprecated -INSTANTIATE_TEST_CASE_P
* Apply suggestions from code review
* One more tutorial version bump
* Fix bad merge
* change nullptr to a int ptr for qt 5.15.2 bug (gazebosim#527)
* Generate valid topics everywhere (support names with spaces) (gazebosim#522)
* Change deprecated test case->suite

Co-authored-by: Ashton Larkin <ashton@openrobotics.org>
Co-authored-by: G.Doisy <doisyg@users.noreply.github.com>
Co-authored-by: Ian Chen <ichen@osrfoundation.org>
Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: Louise Poubel <louise@openrobotics.org>
Co-authored-by: John Shepherd <john@openrobotics.org>
Co-authored-by: Steve Peters <scpeters@openrobotics.org>
Co-authored-by: Jose Luis Rivero <jrivero@osrfoundation.org>
Co-authored-by: Akash Patel <17132214+acxz@users.noreply.github.com>

* Add support for topic statistics on breadcrumb deployments (gazebosim#532)

* Add support for topic statistics on breadcrumb deployments

Signed-off-by: Nate Koenig <nate@openrobotics.org>

* Require version 9.1 of ignition transport

Signed-off-by: Nate Koenig <nate@openrobotics.org>

* Move to after mutex

Signed-off-by: Nate Koenig <nate@openrobotics.org>

Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: Carlos Agüero <caguero@osrfoundation.org>

Co-authored-by: Martiño Crespo <marticres@gmail.com>
Co-authored-by: Louise Poubel <louise@openrobotics.org>
Co-authored-by: Mabel Zhang <mabel@openrobotics.org>
Co-authored-by: John Shepherd <john@openrobotics.org>
Co-authored-by: Addisu Z. Taddese <addisu@openrobotics.org>
Co-authored-by: Michael Carroll <michael@openrobotics.org>
Co-authored-by: Ashton Larkin <ashton@openrobotics.org>
Co-authored-by: Ian Chen <ichen@osrfoundation.org>
Co-authored-by: Ivan Santiago Paunovic <ivanpauno@ekumenlabs.com>
Co-authored-by: Alejandro Hernández Cordero <ahcorde@gmail.com>
Co-authored-by: Nate Koenig <nkoenig@users.noreply.github.com>
Co-authored-by: Nate Koenig <nate@openrobotics.org>
Co-authored-by: G.Doisy <doisyg@users.noreply.github.com>
Co-authored-by: Gonzo <42421541+gonzodepedro@users.noreply.github.com>
Co-authored-by: Steve Peters <scpeters@openrobotics.org>
Co-authored-by: Jose Luis Rivero <jrivero@osrfoundation.org>
Co-authored-by: Akash Patel <17132214+acxz@users.noreply.github.com>
Co-authored-by: Carlos Agüero <caguero@osrfoundation.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🏰 citadel Ignition Citadel
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants