-
Notifications
You must be signed in to change notification settings - Fork 277
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
Map canonical links to their models #736
Conversation
de6da01
to
fb4a177
Compare
Codecov Report
@@ Coverage Diff @@
## ign-gazebo5 #736 +/- ##
===============================================
+ Coverage 65.32% 65.41% +0.08%
===============================================
Files 240 241 +1
Lines 17624 17650 +26
===============================================
+ Hits 11513 11545 +32
+ Misses 6111 6105 -6
Continue to review full report at Codecov.
|
d209de7
to
b2b0ee8
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nice I also see a good increase in RTF. For static models in TPE, I get 30% on my laptop and 55% on desktop.
Just some minor comments but changes look good to me
After some discussion that was had offline, I have moved this new canonical link mapping functionality into a class internal to the physics system in 24ebe9e. This approach has the following advantages:
The topological ordering works here based on the assumption that entities are created from parent to child, with entity IDs created in ascending order (notice how links are stored in a All tests still pass for me, and I also re-ran performance tests to verify that this still helps TPE performance. This should now be ready for final review! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
latest changes look good to me.
There was a problem hiding this 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 couple of comments.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great! Feel free to merge with happy CI ✔️
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe that the only edge case here would be if a user created a child link/model entity before creating the parent, because then, the child entity ID would be less than the parent entity ID, but is this even possible with our current API?
This is certainly possible if users create link/model entities without going through the SdfEntityCreator
. They can first create a link, then the model and set the model as the parent of the link. Of course, this is not a common use case, so I'm good with merging this PR. But perhaps we can leave #706 open until we implement the topological ordering by using parent-child relationships encoded by the ParentEntity
component or the relationships maintained by the graph in the ECM.
Signed-off-by: Ashton Larkin <[email protected]>
3b80549
to
570cb2b
Compare
Sounds good to me 👍 I updated the PR description so that this doesn't close #706. I also went ahead and left a comment in #706 that links to the discussion we had here to give others an update: #706 (comment) I'm just waiting for all checks to run one last time, but if they come back green, I'll merge this. |
Signed-off-by: Ashton Larkin <[email protected]>
570cb2b
to
48acd0e
Compare
* 🎈 3.8.0 (#688) Signed-off-by: Louise Poubel <[email protected]> * Make it so joint state publisher is quieter (#696) Signed-off-by: Michael Carroll <[email protected]> * [BULLET] Making GetContactsFromLastStepFeature optional in Collision Features (#690) * GetContactsFromLastStepFeature made optional Signed-off-by: Tomas Lorente <[email protected]> Co-authored-by: Addisu Z. Taddese <[email protected]> * Add test for thermal object temperatures below 0 kelvin (#621) Signed-off-by: Ashton Larkin <[email protected]> * Scenebroadcaster sensors (#698) * Add sensors to scene broadcaster Signed-off-by: Nate Koenig <[email protected]> * Update src/systems/scene_broadcaster/SceneBroadcaster.cc Co-authored-by: Michael Carroll <[email protected]> * Fix codecheck Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> Co-authored-by: Michael Carroll <[email protected]> * Fix diffuse and ambient values for ackermann example (#707) Signed-off-by: Ammaar Solkar <[email protected]> * 🎈 5.0.0 (#731) Signed-off-by: Louise Poubel <[email protected]> * Support configuring particle scatter ratio in particle emitter system (#674) * set particle scatter ratio through sdf Signed-off-by: Ian Chen <[email protected]> * address feedback Signed-off-by: Ian Chen <[email protected]> * add todo note about merging forward Signed-off-by: Ian Chen <[email protected]> Co-authored-by: Ashton Larkin <[email protected]> * Update PlaybackScrubber description (#733) Signed-off-by: Ammaar Solkar <[email protected]> * Iterate through changed links only in UpdateSim (#678) Signed-off-by: Ashton Larkin <[email protected]> * Do not pass -Wno-unused-parameter to MSVC compiler (#716) Signed-off-by: Silvio Traversaro <[email protected]> * Use Protobuf_IMPORT_DIRS instead of PROTOBUF_IMPORT_DIRS for compatibility with Protobuf CMake config (#715) Signed-off-by: Silvio Traversaro <[email protected]> * Fix component inspector shutdown crash (#724) Signed-off-by: Louise Poubel <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> * Validate step size and RTF parameters (#740) Only set them if they are strictly positive. Signed-off-by: Luca Della Vedova <[email protected]> * Fix compute_rtfs arguments (#737) Signed-off-by: Caio Amaral <[email protected]> * Fixed collision visual bounding boxes (#746) Signed-off-by: Jenn Nguyen <[email protected]> * Fix CMakelists.txt merge Signed-off-by: Nate Koenig <[email protected]> * ECM's ChangedState gets message with modified components (#742) * ecm's ChangedState to contain modified components Signed-off-by: Jenn Nguyen <[email protected]> * updated log_system test Signed-off-by: Jenn Nguyen <[email protected]> * removed unnecessary calls Signed-off-by: Jenn Nguyen <[email protected]> Co-authored-by: Ian Chen <[email protected]> * fixed particle emitter forward playback (#745) Signed-off-by: Jenn Nguyen <[email protected]> * Merge pull request #730 from ignitionrobotics/particle_emitter Particle emitter based on SDF * 4 7 0 prep (#755) * Prepare for 4.7.0 Signed-off-by: Nate Koenig <[email protected]> * Added placeholder Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * Fix 'invalid animation update data' msg for actors (#754) Signed-off-by: Ashton Larkin <[email protected]> * Update benchmark comparison instructions (#766) (#766) Signed-off-by: Ashton Larkin <[email protected]> * [DiffDrive] add enable/disable (#772) * add enable/disable diffdrive Signed-off-by: Guillaume Doisy <[email protected]> * remove debug Signed-off-by: Guillaume Doisy <[email protected]> * do not subscribe to enable if topic is empty Signed-off-by: Guillaume Doisy <[email protected]> * add test Signed-off-by: Guillaume Doisy <[email protected]> * lint and style Signed-off-by: Guillaume Doisy <[email protected]> * change enable type to bool and renamed to enabled Signed-off-by: Guillaume Doisy <[email protected]> * Add odometry publisher system (#547) * Create Initial Odometry Publisher system plugin Add code for initial plugin that gets position from Pose component and calculates velocities based on rolling mean from displacement data. Signed-off-by: Maganty Rushyendra <[email protected]> * Remove Linear and Angular Velocity components Also renames frames in Odometry msg to include model name, and makes various style changes. Signed-off-by: Maganty Rushyendra <[email protected]> * Get World pose instead of pose of robot base frame Signed-off-by: Maganty Rushyendra <[email protected]> * Add documentation for variables and functions Includes minor stylistic changes. Signed-off-by: Maganty Rushyendra <[email protected]> * Check for valid odomTopic and update copyright year Signed-off-by: Maganty Rushyendra <[email protected]> * Add tests for OdometryPublisherSystem and fix velocity calculation bug Swap X and Y linear velocities when calculating odometry velocities relative to robotBaseFrame. Signed-off-by: Maganty Rushyendra <[email protected]> Co-authored-by: ahcorde <[email protected]> * Patch particle emitter2 service (#777) * Patch particle emitter2 service Signed-off-by: Nate Koenig <[email protected]> * Remove condition variable Signed-off-by: Nate Koenig <[email protected]> * Set emitter frame and relative pose Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * Preparing for 4.8.0 release (#780) Signed-off-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> * 👩🌾 Enable Focal CI (#646) Signed-off-by: Louise Poubel <[email protected]> Co-authored-by: Michael Carroll <[email protected]> * [TPE] Support setting individual link velocity (#427) Signed-off-by: claireyywang <[email protected]> Signed-off-by: Ian Chen <[email protected]> Co-authored-by: Ian Chen <[email protected]> Co-authored-by: Louise Poubel <[email protected]> * Don't store duplicate ComponentTypeId in ECM (#751) Signed-off-by: Louise Poubel <[email protected]> * Feature/hydrodynamics (#749) Implement hydrodynamics and thruster plugin. Signed-off-by: Arjo Chakravarty <[email protected]> Co-authored-by: Mabel Zhang <[email protected]> Co-authored-by: Carlos Agüero <[email protected]> * Fix macOS build: components::Name in benchmark (#784) Signed-off-by: Louise Poubel <[email protected]> Co-authored-by: Steve Peters <[email protected]> * Fix ColladaExporter submesh index bug (#763) Signed-off-by: Jorge Perez <[email protected]> * 👩🌾 Fix Windows build and some warnings (#782) Signed-off-by: Louise Poubel <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> * Prevent crash on Plotting plugin with mutex (#747) Signed-off-by: Louise Poubel <[email protected]> * Bump ign-physics version to 3.2 (#792) Signed-off-by: Louise Poubel <[email protected]> * Bump to ign-msgs 7.1 / sdformat 11.1, Windows fixes (#758) Signed-off-by: Louise Poubel <[email protected]> * Util: Use public API from libsdformat for detecting non-file source (#794) Signed-off-by: Eric Cousineau <[email protected]> * Fix included nested model expansion in SDF generation (#768) * fixed included nested model expansion Signed-off-by: Jenn Nguyen <[email protected]> * added resource path to test Signed-off-by: Jenn Nguyen <[email protected]> * use orig URIs & support multi level nesting Signed-off-by: Jenn Nguyen <[email protected]> * save fuel version when enabled Signed-off-by: Jenn Nguyen <[email protected]> * retrieve uri from map Signed-off-by: Jenn Nguyen <[email protected]> * copy included element Signed-off-by: Jenn Nguyen <[email protected]> * clear attributes before copying include element Signed-off-by: Jenn Nguyen <[email protected]> * Map canonical links to their models (#736) Signed-off-by: Ashton Larkin <[email protected]> * ColladaExporter, export submesh selected (#802) * Export only submesh if selected * Add test case for the PR * Attempting a unified solution Signed-off-by: Jorge Perez <[email protected]> Co-authored-by: Nate Koenig <[email protected]> Co-authored-by: Michael Carroll <[email protected]> Co-authored-by: Jose Tomas Lorente <[email protected]> Co-authored-by: Addisu Z. Taddese <[email protected]> Co-authored-by: Ashton Larkin <[email protected]> Co-authored-by: Nate Koenig <[email protected]> Co-authored-by: Nate Koenig <[email protected]> Co-authored-by: Ammaar Solkar <[email protected]> Co-authored-by: Ian Chen <[email protected]> Co-authored-by: Ashton Larkin <[email protected]> Co-authored-by: Silvio Traversaro <[email protected]> Co-authored-by: Alejandro Hernández Cordero <[email protected]> Co-authored-by: Luca Della Vedova <[email protected]> Co-authored-by: Caio Amaral <[email protected]> Co-authored-by: Jenn Nguyen <[email protected]> Co-authored-by: G.Doisy <[email protected]> Co-authored-by: Rushyendra Maganty <[email protected]> Co-authored-by: Claire Wang <[email protected]> Co-authored-by: Arjo Chakravarty <[email protected]> Co-authored-by: Mabel Zhang <[email protected]> Co-authored-by: Carlos Agüero <[email protected]> Co-authored-by: Steve Peters <[email protected]> Co-authored-by: Jorge Perez <[email protected]> Co-authored-by: Eric Cousineau <[email protected]> Co-authored-by: Jorge Perez <[email protected]>
Signed-off-by: Ashton Larkin [email protected]
🎉 New feature
Related to #706
Follow-up to #685 and #678
Summary
When calling
UpdateSim
in the physics system, we have to update a model's pose if the model's canonical link changed. We are currently handling this by iterating through all models in the ECM because:This PR should resolve both of these issues, and also removes the need for looping through the ECM to check for model updates, which should result in a performance improvement for worlds with a lot of non-static models that do not change often (see #711 to learn more about why this change results in a performance improvement).
Test it
The physics system integration test has been modified in this PR (click on the
files changed
tab). However, to get a better grasp of the performance improvement that this PR creates, a testing methodology similar to #678 was used:-s
), with the default server configTest results are shown below. "Before this PR" uses commit 4e40b36 of
ign-gazebo
. Notice how the yellowModels
block is now essentially gone for most of the tests cases now, except for the non-static case with DART (see theTakeaways
section below for more information about this).It's important to note that running the profiler decreases performance, so the RTF numbers reported here are with the profiler turned off.
TPE
Static
Before this PR:
UpdateSim
time: 0.67msAfter this PR:
UpdateSim
time: 0.004msNon-Static
Before this PR:
UpdateSim
time: 0.8msAfter this PR:
UpdateSim
time: 0.003msDART
Static
Before this PR:
UpdateSim
time: 1.1msAfter this PR:
UpdateSim
time: .011msNon-Static
Before this PR:
UpdateSim
time: 2.8msAfter this PR:
UpdateSim
time: 1.7msTakeaways
Step
in DART still accounts for most of the work being done in a physics cycle.Models
profiler block for non-static models with DART? -> For non-static models with DART, some models are still processed as changed due to contact forces (this isn't an issue for TPE). If gravity is set to 0 for a world that uses DART, then no models are perceived as changed. I have found that around 25-50% of models that are affected by contact forces in DART are registered as "changed" byign-physics
, but we are still better off only updating a subset of the models than all of them inUpdateSim
.std::map
instead of astd::unordered_map
in theChangedLinks
method in order to guarantee topological ordering of links (consider a nested model where each model has its own canonical link - we still want to make sure the parent model is updated first, so we must process the parent's canonical link first in order to preserve topological ordering/update behavior). Because of this change, inserting changed links into this map is now of time complexity O(log(n)) instead of O(1). However, we still have the advantage of only iterating through the changed links inUpdateSim
to update models instead of updating through every model, so I don't believe that the changes in this PR would cause any noticeable performance decreases (especially since the use case of a lot of non-static models that move often is probably rare anyways). In fact, if we look at the non-static test case for DART above (where 25-50% of the 3000 models are still being processed as "changed" due to contact forces, which means we are inserting into this map often),UpdateSim
time still improved by about1ms
.Future work
Next, I'd like to work on #711. After this, it would be worth investigating performance when using a GUI (so far, all testing has been done headless). I spoke with @iche033 offline, and we found that the RTF between headless and GUI simulation results in significantly different RTF numbers when using the changes in this PR (on my machine, I saw that RTF dropped from 80%-30% once the GUI was populated for the 3000 static shapes test with TPE). We also found that RTF drops significantly (from 90% to 10% for me running headless, 3000 static shapes with TPE) when echoing the
/world/shapes/dynamic_pose/info
topic). Here are a few more issues that I created so that I can address them as I continue to work on performance improvements:Checklist
codecheck
passed (See contributing)Note to maintainers: Remember to use Squash-Merge