Create a new MutuallyExclusive callback group for every timer, use a multithreaded executor #40
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes: microsoft#4428
Fixes: microsoft#4569 (comment)
About
This will fix the issue by using a multithreaded executor and adding a MutuallyExclusive callback group to every lidar, camera, and airsim control timer. That way they can all execute in parallel and not block each other. Also removed unreachable code in airsim_node.cpp.
This pr also fixes the issue of timestamps being mixed up, the previous iteration used reentrant callbacks which allowed out-of-order execution of timers.
How Has This Been Tested?
Added a settings file with multiple cameras and a lidar, did a /airsim_node/local_position_goal service call.
Screenshots (if appropriate):
The following are two videos depicting ros2 performance with and without the fixes:
https://drive.google.com/file/d/1uIuTfWGhaD56h-wfzxXaOMoVkZL451wI/view?usp=sharing
https://drive.google.com/file/d/1M9JUGOquZmnV6HBqtH7uRjbOCeHgpJfi/view?usp=share_link