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

bugfix (#3109) deadlock when costmap receives new map #3145

Merged

Conversation

daisukes
Copy link
Contributor

Basic Info

Info Please fill out this column
Ticket(s) this addresses #3109
Primary OS tested on Ubuntu22.04 on docker
Robotic platform tested on test code

Description of contribution in a few bullet points

Description of documentation updates required from your changes

N/A

Future work that may be required in bullet points

  • backporting

For Maintainers:

  • Check that any new parameters added are updated in navigation.ros.org
  • Check that any significant change is added to the migration guide
  • Check that any new features OR changes to existing behaviors are reflected in the tuning guide
  • Check that any new functions have Doxygen added
  • Check that any new features have test coverage
  • Check that any new plugins is added to the plugins page
  • If BT Node, Additionally: add to BT's XML index of nodes for groot, BT package's readme table, and BT library lists

@mergify
Copy link
Contributor

mergify bot commented Aug 23, 2022

@daisukes, please properly fill in PR template in the future. @SteveMacenski, use this instead.

  • Check that any new parameters added are updated in navigation.ros.org
  • Check that any significant change is added to the migration guide
  • Check that any new features OR changes to existing behaviors are reflected in the tuning guide
  • Check that any new functions have Doxygen added
  • Check that any new features have test coverage
  • Check that any new plugins is added to the plugins page
  • If BT Node, Additionally: add to BT's XML index of nodes for groot, BT package's readme table, and BT library lists

Copy link
Member

@SteveMacenski SteveMacenski left a comment

Choose a reason for hiding this comment

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

@gimait can you take a look at this since you added that logic to make sure you think this is sensible? To deal with a deadlock issue, we're moving processing of maps always at the start of updateBounds so that there's sequential execution of map updates with the costmap processing. The only exception is for the very first map we receive just so we get up and running faster

@SteveMacenski SteveMacenski linked an issue Aug 23, 2022 that may be closed by this pull request
Copy link
Contributor

@gimait gimait left a comment

Choose a reason for hiding this comment

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

I think this is great! We should have moved the processing of the map to the main loop from the beginning, all the threading hell we had here disappeared.

My only comment is that it would be great to remove that last call to processMap from incomingMap.
I also think that we should retest #1625 just in case we are missing something in the review, but I don't see how this might have been broken.

}
if (update_in_progress_.load()) {
map_buffer_ = new_map;
} else {
processMap(*new_map);
Copy link
Contributor

@gimait gimait Aug 27, 2022

Choose a reason for hiding this comment

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

This will probably never be a problem, but please note that part of the processMap method is not thread-safe if we don't lock the Costmap2D mutex here as well. There is also a second call to this mutex within processMap, which might be able to produce the same deadlock that we are fixing.
The best way to go would probably find a way to move processMap to the main thread completely.
Again, this will probably never be a problem, and I might be wrong about this, but just in case.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Actually, I removed it once, but I got some errors in the test.

[133.395s] The following tests FAILED:
[133.395s] 	 15 - test_collision_checker (Timeout)
[133.395s] 	 17 - inflation_tests (Timeout)

These tests use LayeredCostmap and StaticLayer, but do not call updateMap and wait for the costmap to be ready. So they got a timeout.

So I needed to keep this call here and keep it mutex free because the mutex can cause a deadlock at the very beginning.

Do you want me to remove the call and fix the tests too?

Copy link
Contributor

@gimait gimait Aug 29, 2022

Choose a reason for hiding this comment

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

I don't think you can simply remove it. If we want to remove it from here, we will need to do some other changes. There might be several places where the main loop might attempt to make use of the first map when was received, but not yet processed. We need to ensure that all places where the processed map is used are aware of the possibility of the map not being yet initialised.

Then, in my opinion, it is good that that test fails, it should, because you are changing the behaviour of this plugin. However, the tests failing are not a reason to not do the full change to processing in the main loop. If we want to move that last call to processMap, then we should fix these tests and/or write new ones that fit the current implementation.

So I needed to keep this call here and keep it mutex free because the mutex can cause a deadlock at the very beginning.

I understand that you are focused on fixing the deadlock, but that doesn't mean you can simply leave unprotected code behind.
There are three points I want to do here, which I'm not sure have been considered yet:

First, in line 225 of the static layer we are locking the same mutex. This means you might not have fixed the lock entirely, only you don't see it anymore because it only happens with subsequent calls to incomingMap.

Second, all this code is retrieving data and performing operations on the layered costmap without protection, which to me, sounds like a very bad idea.

Lastly, setting map_received_ without protection might bring undesired behaviour when checking it from the main loop. For example, in the main thread, you could have just called updateBounds with map_received_ set to false, followed by a updateCosts with map_received_ set to false.

As a rule of thumb, never leave a variable shared between threads unprotected. I am sorry, I know I am being a bit bipolar about this. I sometimes feel like it's okay to break that rule, but things here look a bit too complex to leave the code unprotected. I think I wasn't thorough enough about the threading issues before my previous review, I apologize.


To sum up, you should move back the lock to the beginning of this method. I don't think you will see the deadlock if you do so. Then it's up to you to remove the last processMap call here and fix the tests.

Any thoughts @SteveMacenski? I think you know better if it's best to remove that last call to processMap or keep it.

Copy link
Member

@SteveMacenski SteveMacenski Aug 29, 2022

Choose a reason for hiding this comment

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

I don't quite understand the issue. In steady state, processMap is only called in the updateBounds function, so we're really only talking about the very first map when the current costmap is not set to any particular valid size/content.

In the situation we're talking about with the first map, the map_received_ boolean at the start of both Update functions will make them immediately return without trying to do anything (if false) - which is before any map is processed.

So, if no map is processed before updateBounds its OK. If its processed before that point in the map callback, also OK.

If no map is processed before updateCosts and updateBounds, OK. If its processed after updateBounds but before updateCosts, that's where it could potentially be not OK. I think my comment just below lays out a solution to that (maintain the state of the "updatedness" from updateBounds to also use in updateCosts).

But in terms of leaving things unprotected, this seems like it does that fine? Because of the special case that map_received_ immediately returns the functions without doing anything.

@SteveMacenski
Copy link
Member

SteveMacenski commented Aug 29, 2022

From #1625

The problem is that the dimension of the costmaps should not change between the updateBounds and the updateCosts calls in the updateMap function of the LayeredCostmap.

Now the updates are sequential in updateBounds so that should work fine. The exception is that first map coming in which I suppose could cause a problem in odd situations where map_received_ is set to true so in updateCosts, its not passed through.

I suppose we could re-introduce that atomic bool for if there's processing currently happening, though I don't love that logic bleeding into all of the functions - both updates + the callback.

Another option would be to introduce a new class member boolean map_received_in_update_bounds_ which is set to true/false based on the value of map_updated_ in updateBounds so that we use the global state for the first update function, and then use whatever status was there for updateCosts instead of the global state. That variable would never touch the map callback thread so it doesn't need a mutex or be atomic. That would deal with the 1st map problem without blocking the threads anymore than necessary.

Or maybe even has_updated_data_ would do that already if that's set to true?

… will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>
@daisukes
Copy link
Contributor Author

daisukes commented Aug 30, 2022

@gimait, @SteveMacenski, Thank you for the comments!

Let me summarize based on my understanding.

  • The current main code has two issues; (1) deadlock in incomingMap and (2) map_received_ can be changed between updateBounds and updateCosts at the first incomingMap call
  • My PR focused on issue (1) and does not fix issue (2)
  • To fix issue (2), introducing map_received_in_update_bounds_ would be good

Then it’s up to you to remove the last processMap call here and fix the tests.
I like removing the last processMap call in incomingMap to make it as simple as possible, but as @gimait mentioned, it will change the behavior of the system.

How about

  1. I will make a change to fix (2) in this PR
  2. I will also make another PR that will be a version having no processMap in incomingMap and fixed tests

and then, you will decide on which version you will merge. What do you think?

Copy link
Member

@SteveMacenski SteveMacenski left a comment

Choose a reason for hiding this comment

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

LGTM - can you confirm the deadlock is gone still (just sanity checking)?

Are some tests still failing for static layer due to these changes? That absolutely needs to be fixed before merging this PR. Why remove processMap in incomingMap? I thought we found the solution to that via map_received_in_update_bounds_.

Can you rebase / pull in main? There are some test failures that should be green b/c its outdated. I want to see CI green on all PRs from now on :-)

@daisukes
Copy link
Contributor Author

I've merged the latest main branch and checked the deadlock is gone with my test code (15 mins).

@codecov
Copy link

codecov bot commented Aug 30, 2022

Codecov Report

Merging #3145 (6cd3a4f) into main (7813fee) will decrease coverage by 0.19%.
The diff coverage is 100.00%.

@@            Coverage Diff             @@
##             main    #3145      +/-   ##
==========================================
- Coverage   83.04%   82.85%   -0.20%     
==========================================
  Files         339      339              
  Lines       15233    15233              
==========================================
- Hits        12650    12621      -29     
- Misses       2583     2612      +29     
Impacted Files Coverage Δ
...ostmap_2d/include/nav2_costmap_2d/static_layer.hpp 0.00% <ø> (ø)
nav2_costmap_2d/plugins/static_layer.cpp 70.68% <100.00%> (-4.19%) ⬇️
...av2_dwb_controller/dwb_critics/src/oscillation.cpp 72.00% <0.00%> (-24.00%) ⬇️
...ostmap_2d/plugins/costmap_filters/speed_filter.cpp 94.49% <0.00%> (-1.84%) ⬇️
nav2_lifecycle_manager/src/lifecycle_manager.cpp 91.98% <0.00%> (-0.95%) ⬇️
nav2_amcl/src/amcl_node.cpp 71.79% <0.00%> (+0.14%) ⬆️

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

@SteveMacenski
Copy link
Member

In your view, is this ready to merge or are there some updates to tests you want to make?

@daisukes
Copy link
Contributor Author

I think it is ready.

@SteveMacenski SteveMacenski merged commit 6d58247 into ros-navigation:main Aug 31, 2022
@SteveMacenski
Copy link
Member

SteveMacenski commented Aug 31, 2022

Awesome, thanks for helping identify and fix the issue!

SteveMacenski pushed a commit that referenced this pull request Nov 8, 2022
* bugfix (#3109) deadlock when costmap receives new map

Signed-off-by: Daisuke Sato <[email protected]>

* introduce map_received_in_update_bounds_ flag to make sure processMap will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>

Signed-off-by: Daisuke Sato <[email protected]>
SteveMacenski added a commit that referenced this pull request Nov 8, 2022
* standalone assisted teleop (#2904)

* standalone assisted teleop

* added in action message

* code review

* moved to behavior server

* added assisted teleop bt node

* revert

* added bt node for assisted teleop

* lint fix

* added cancel assisted teleop node

* code review

* working

* cleanup

* updated feeback

* code review

* update compute velocity

* cleanup

* lint fixes

* cleanup

* test fix

* starting to add tests for assisted teleop

* fixed tests

* undo

* fixed test

* is_recovery

* adjust abort result based on recovery or not

* code review

* added preempt velocity

* working preempt assisted teleop test

* completed assisted teleop tests

* code review

* undo

* code review

* remove sleep

* topic rename

* missing comma

* added comma :(

* added comma

Co-authored-by: Steve Macenski <[email protected]>

* Add the support of range sensors to Collision Monitor (#3099)

* Support range sensors in Collision Monitor

* Adjust README.md

* Meet review fixes

* Fix #3152: Costmap extend did not include Y component (#3153)

* missing nodes added to nav2_tree_nodes.xml (#3155)

* Change deprecated ceres function (#3158)

* Change deprecated function

* Update smoother_cost_function.hpp

* remove camera_rgb_joint since child frame does not exist (#3162)

* bugfix (#3109) deadlock when costmap receives new map (#3145)

* bugfix (#3109) deadlock when costmap receives new map

Signed-off-by: Daisuke Sato <[email protected]>

* introduce map_received_in_update_bounds_ flag to make sure processMap will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>

Signed-off-by: Daisuke Sato <[email protected]>

* simple command costmap api - first few functions (#3159)

* initial commit costmap_2d template

Signed-off-by: Stevedan Omodolor <[email protected]>

* finish task A and tested

* lint

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

Co-authored-by: Steve Macenski <[email protected]>

* fix trailing underscores

Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Steve Macenski <[email protected]>

* Fix missing dependency on nav2_collision_monitor (#3175)

* fixed start (#3168)

* fixed start

* return true

* fix tests

* Fix velocities comparison for rotation at place case (#3177)

* Fix velocities comparison for rotation at place case

* Meet review item

* Remove unnecessary header

* Change the comment

* set a empty path on halt (#3178)

* set a empty path on halt

* fixed issues

* remove path reset

* fixing

* reverting

* revert

* revert

* fixed lint

* test fix

* uncrusify fix

* simple command costmap api - update few functions (#3169)

* * add aditional function to costmap_2d.py

Signed-off-by: Stevedan Omodolor <[email protected]>

Updated-by: Jaehun Kim <[email protected]>

* finish task B

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

* Update method docs

* Remove underscores at parameters and split getCost into getCostXY and getCostIdx

* Update method docstrings

* lint code & update docstring, remove default value of getCostXY

* lint code with pep257 & flake8

* clear names for bt nodes (#3183)

* [Smac] check if a node exists before creating (#3195)

* check if a node exists before creating

* invert logic to group like with like

* Update a_star.cpp

* fixing benchmarkign for planners (#3202)

* [Smac] Robin hood data structure improves performance by 10-15%! (#3201)

* adding robin_hood unordered_map

* using robin_hood node map

* ignore robin_hood file

* linting

* linting cont. for triple pointers

* linting cont. for uncrustify

* [RPP] Add parameter to enable/disable collision detection (#3204)

* [RPP] Add parameter to enable/disable collision detection

* [RPP] Update README

* Update waffle.model

* add benchmark launch file + instructions (#3218)

* removing hypotf from smac planner heuristic computation (#3217)

* removing hypotf

* swapping to node2d sqrt

* complete smac planner tolerances (#3219)

* Disable Output Buffering (#3220)

To ensure await asyncio prints [Processing: %s]' every 30s as expected

* fix majority of python linting errors introduced in python costmap API additions to get CI turning over again (#3223)

* fix majority of python linting errors

* finish linting

* Assisted teleop simple commander (#3198)

* add assisted teleop to python api

* cleanup

* assisted teleop demo

* rename

* lint

* code review

* trigger build

* flake8 fix

* break cashe

* moved all v11 to v12

* lint fix

* remove package dep

* change default time allowance

* Costmap Filter enabling service (#3229)

* Add enabling service to costmap filters

* Add service testcase

* Fix comment

* Use toggle_filter service name

* Add binary flip costmap filter (#3228)

* Add binary flip costmap filter

* Move transformPose, worldToMask, getMaskData to CostmapFilter

* Added default parametrized binary filter state

* Switched to std_msgs/msg/Bool.msg

* Use arbitrary filter values

* Update waffle.model

* Update waffle.model

* Update test_actions.cpp

* odom alpha restriction to avoid overflow caused by user-misconfiguration (#3238)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* Update controller server goal checker (#3240)

* [FIX] Update controller server goal checker

* [FIX] Autoformat code

* [FIX] Misplaced tabs.

Co-authored-by: Pedro Alejandro González <[email protected]>

* map-size restriction to avoid overflow and nullptr caused by user-misconfiguration (#3242)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* map-size restriction

* map-size code style

* map-size rejection

* map-size codestyle

* map-size return false

* Add Path Smoothers Benchmarking suite (#3236)

* Add Path Smoothers Benchmarking suite

* Meet review items

* Update tools/smoother_benchmarking/README.md

Co-authored-by: Steve Macenski <[email protected]>

* Move optional performance patch to the end of README

* Fix README

Co-authored-by: Steve Macenski <[email protected]>

* Fix typo (#3262)

* Adding new Nav2 Smoother: Savitzky-Golay Smoother (#3264)

* initial prototype of the Savitzky Golay Filter Path Smoother

* fixed indexing issue - tested working

* updates for filter

* adding unit tests for SG-filter smoother

* adding lifecycle transitions

* Added Line Iterator (#3197)

* Added Line Iterator

* Updated Line Iterator to a new iteration method

* Added the resolution as a parameter/ fixed linting

* Added the resolution as a parameter/ fixed linting

* Added unittests for the line iterator

* Added unittests based on "unittest" package

* Fixed __init__.py and rephrased some docstrings

* Fixed linting errors

* Fixed Linting Errors

* Added some unittests and removed some methods

* Dummy commit for CircleCI Issue

Co-authored-by: Afif Swaidan <[email protected]>

* bumping to 1.1.3 for release

Signed-off-by: Daisuke Sato <[email protected]>
Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Joshua Wallace <[email protected]>
Co-authored-by: Alexey Merzlyakov <[email protected]>
Co-authored-by: Abdullah Enes BEDİR <[email protected]>
Co-authored-by: Tobias Fischer <[email protected]>
Co-authored-by: Tejas Kumar Shastha <[email protected]>
Co-authored-by: Daisuke Sato <[email protected]>
Co-authored-by: Stevedan Ogochukwu Omodolor <[email protected]>
Co-authored-by: Lukas Fanta <[email protected]>
Co-authored-by: Jackson9 <[email protected]>
Co-authored-by: Ruffin <[email protected]>
Co-authored-by: Hao-Xuan Song <[email protected]>
Co-authored-by: Nicolas Rocha Pacheco <[email protected]>
Co-authored-by: Pedro Alejandro González <[email protected]>
Co-authored-by: jaeminSHIN <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
hyunseok-yang pushed a commit to lge-ros2/navigation2 that referenced this pull request Nov 23, 2022
* standalone assisted teleop (ros-navigation#2904)

* standalone assisted teleop

* added in action message

* code review

* moved to behavior server

* added assisted teleop bt node

* revert

* added bt node for assisted teleop

* lint fix

* added cancel assisted teleop node

* code review

* working

* cleanup

* updated feeback

* code review

* update compute velocity

* cleanup

* lint fixes

* cleanup

* test fix

* starting to add tests for assisted teleop

* fixed tests

* undo

* fixed test

* is_recovery

* adjust abort result based on recovery or not

* code review

* added preempt velocity

* working preempt assisted teleop test

* completed assisted teleop tests

* code review

* undo

* code review

* remove sleep

* topic rename

* missing comma

* added comma :(

* added comma

Co-authored-by: Steve Macenski <[email protected]>

* Add the support of range sensors to Collision Monitor (ros-navigation#3099)

* Support range sensors in Collision Monitor

* Adjust README.md

* Meet review fixes

* Fix ros-navigation#3152: Costmap extend did not include Y component (ros-navigation#3153)

* missing nodes added to nav2_tree_nodes.xml (ros-navigation#3155)

* Change deprecated ceres function (ros-navigation#3158)

* Change deprecated function

* Update smoother_cost_function.hpp

* remove camera_rgb_joint since child frame does not exist (ros-navigation#3162)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map (ros-navigation#3145)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map

Signed-off-by: Daisuke Sato <[email protected]>

* introduce map_received_in_update_bounds_ flag to make sure processMap will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>

Signed-off-by: Daisuke Sato <[email protected]>

* simple command costmap api - first few functions (ros-navigation#3159)

* initial commit costmap_2d template

Signed-off-by: Stevedan Omodolor <[email protected]>

* finish task A and tested

* lint

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

Co-authored-by: Steve Macenski <[email protected]>

* fix trailing underscores

Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Steve Macenski <[email protected]>

* Fix missing dependency on nav2_collision_monitor (ros-navigation#3175)

* fixed start (ros-navigation#3168)

* fixed start

* return true

* fix tests

* Fix velocities comparison for rotation at place case (ros-navigation#3177)

* Fix velocities comparison for rotation at place case

* Meet review item

* Remove unnecessary header

* Change the comment

* set a empty path on halt (ros-navigation#3178)

* set a empty path on halt

* fixed issues

* remove path reset

* fixing

* reverting

* revert

* revert

* fixed lint

* test fix

* uncrusify fix

* simple command costmap api - update few functions (ros-navigation#3169)

* * add aditional function to costmap_2d.py

Signed-off-by: Stevedan Omodolor <[email protected]>

Updated-by: Jaehun Kim <[email protected]>

* finish task B

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

* Update method docs

* Remove underscores at parameters and split getCost into getCostXY and getCostIdx

* Update method docstrings

* lint code & update docstring, remove default value of getCostXY

* lint code with pep257 & flake8

* clear names for bt nodes (ros-navigation#3183)

* [Smac] check if a node exists before creating (ros-navigation#3195)

* check if a node exists before creating

* invert logic to group like with like

* Update a_star.cpp

* fixing benchmarkign for planners (ros-navigation#3202)

* [Smac] Robin hood data structure improves performance by 10-15%! (ros-navigation#3201)

* adding robin_hood unordered_map

* using robin_hood node map

* ignore robin_hood file

* linting

* linting cont. for triple pointers

* linting cont. for uncrustify

* [RPP] Add parameter to enable/disable collision detection (ros-navigation#3204)

* [RPP] Add parameter to enable/disable collision detection

* [RPP] Update README

* Update waffle.model

* add benchmark launch file + instructions (ros-navigation#3218)

* removing hypotf from smac planner heuristic computation (ros-navigation#3217)

* removing hypotf

* swapping to node2d sqrt

* complete smac planner tolerances (ros-navigation#3219)

* Disable Output Buffering (ros-navigation#3220)

To ensure await asyncio prints [Processing: %s]' every 30s as expected

* fix majority of python linting errors introduced in python costmap API additions to get CI turning over again (ros-navigation#3223)

* fix majority of python linting errors

* finish linting

* Assisted teleop simple commander (ros-navigation#3198)

* add assisted teleop to python api

* cleanup

* assisted teleop demo

* rename

* lint

* code review

* trigger build

* flake8 fix

* break cashe

* moved all v11 to v12

* lint fix

* remove package dep

* change default time allowance

* Costmap Filter enabling service (ros-navigation#3229)

* Add enabling service to costmap filters

* Add service testcase

* Fix comment

* Use toggle_filter service name

* Add binary flip costmap filter (ros-navigation#3228)

* Add binary flip costmap filter

* Move transformPose, worldToMask, getMaskData to CostmapFilter

* Added default parametrized binary filter state

* Switched to std_msgs/msg/Bool.msg

* Use arbitrary filter values

* Update waffle.model

* Update waffle.model

* Update test_actions.cpp

* odom alpha restriction to avoid overflow caused by user-misconfiguration (ros-navigation#3238)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* Update controller server goal checker (ros-navigation#3240)

* [FIX] Update controller server goal checker

* [FIX] Autoformat code

* [FIX] Misplaced tabs.

Co-authored-by: Pedro Alejandro González <[email protected]>

* map-size restriction to avoid overflow and nullptr caused by user-misconfiguration (ros-navigation#3242)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* map-size restriction

* map-size code style

* map-size rejection

* map-size codestyle

* map-size return false

* Add Path Smoothers Benchmarking suite (ros-navigation#3236)

* Add Path Smoothers Benchmarking suite

* Meet review items

* Update tools/smoother_benchmarking/README.md

Co-authored-by: Steve Macenski <[email protected]>

* Move optional performance patch to the end of README

* Fix README

Co-authored-by: Steve Macenski <[email protected]>

* Fix typo (ros-navigation#3262)

* Adding new Nav2 Smoother: Savitzky-Golay Smoother (ros-navigation#3264)

* initial prototype of the Savitzky Golay Filter Path Smoother

* fixed indexing issue - tested working

* updates for filter

* adding unit tests for SG-filter smoother

* adding lifecycle transitions

* Added Line Iterator (ros-navigation#3197)

* Added Line Iterator

* Updated Line Iterator to a new iteration method

* Added the resolution as a parameter/ fixed linting

* Added the resolution as a parameter/ fixed linting

* Added unittests for the line iterator

* Added unittests based on "unittest" package

* Fixed __init__.py and rephrased some docstrings

* Fixed linting errors

* Fixed Linting Errors

* Added some unittests and removed some methods

* Dummy commit for CircleCI Issue

Co-authored-by: Afif Swaidan <[email protected]>

* bumping to 1.1.3 for release

Signed-off-by: Daisuke Sato <[email protected]>
Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Joshua Wallace <[email protected]>
Co-authored-by: Alexey Merzlyakov <[email protected]>
Co-authored-by: Abdullah Enes BEDİR <[email protected]>
Co-authored-by: Tobias Fischer <[email protected]>
Co-authored-by: Tejas Kumar Shastha <[email protected]>
Co-authored-by: Daisuke Sato <[email protected]>
Co-authored-by: Stevedan Ogochukwu Omodolor <[email protected]>
Co-authored-by: Lukas Fanta <[email protected]>
Co-authored-by: Jackson9 <[email protected]>
Co-authored-by: Ruffin <[email protected]>
Co-authored-by: Hao-Xuan Song <[email protected]>
Co-authored-by: Nicolas Rocha Pacheco <[email protected]>
Co-authored-by: Pedro Alejandro González <[email protected]>
Co-authored-by: jaeminSHIN <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
jwallace42 pushed a commit to jwallace42/navigation2 that referenced this pull request Dec 14, 2022
…os-navigation#3145)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map

Signed-off-by: Daisuke Sato <[email protected]>

* introduce map_received_in_update_bounds_ flag to make sure processMap will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>

Signed-off-by: Daisuke Sato <[email protected]>
shrijitsingh99 pushed a commit to moss-ag/navigation2 that referenced this pull request Mar 4, 2023
* standalone assisted teleop (ros-navigation#2904)

* standalone assisted teleop

* added in action message

* code review

* moved to behavior server

* added assisted teleop bt node

* revert

* added bt node for assisted teleop

* lint fix

* added cancel assisted teleop node

* code review

* working

* cleanup

* updated feeback

* code review

* update compute velocity

* cleanup

* lint fixes

* cleanup

* test fix

* starting to add tests for assisted teleop

* fixed tests

* undo

* fixed test

* is_recovery

* adjust abort result based on recovery or not

* code review

* added preempt velocity

* working preempt assisted teleop test

* completed assisted teleop tests

* code review

* undo

* code review

* remove sleep

* topic rename

* missing comma

* added comma :(

* added comma

Co-authored-by: Steve Macenski <[email protected]>

* Add the support of range sensors to Collision Monitor (ros-navigation#3099)

* Support range sensors in Collision Monitor

* Adjust README.md

* Meet review fixes

* Fix ros-navigation#3152: Costmap extend did not include Y component (ros-navigation#3153)

* missing nodes added to nav2_tree_nodes.xml (ros-navigation#3155)

* Change deprecated ceres function (ros-navigation#3158)

* Change deprecated function

* Update smoother_cost_function.hpp

* remove camera_rgb_joint since child frame does not exist (ros-navigation#3162)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map (ros-navigation#3145)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map

Signed-off-by: Daisuke Sato <[email protected]>

* introduce map_received_in_update_bounds_ flag to make sure processMap will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>

Signed-off-by: Daisuke Sato <[email protected]>

* simple command costmap api - first few functions (ros-navigation#3159)

* initial commit costmap_2d template

Signed-off-by: Stevedan Omodolor <[email protected]>

* finish task A and tested

* lint

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

Co-authored-by: Steve Macenski <[email protected]>

* fix trailing underscores

Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Steve Macenski <[email protected]>

* Fix missing dependency on nav2_collision_monitor (ros-navigation#3175)

* fixed start (ros-navigation#3168)

* fixed start

* return true

* fix tests

* Fix velocities comparison for rotation at place case (ros-navigation#3177)

* Fix velocities comparison for rotation at place case

* Meet review item

* Remove unnecessary header

* Change the comment

* set a empty path on halt (ros-navigation#3178)

* set a empty path on halt

* fixed issues

* remove path reset

* fixing

* reverting

* revert

* revert

* fixed lint

* test fix

* uncrusify fix

* simple command costmap api - update few functions (ros-navigation#3169)

* * add aditional function to costmap_2d.py

Signed-off-by: Stevedan Omodolor <[email protected]>

Updated-by: Jaehun Kim <[email protected]>

* finish task B

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

* Update method docs

* Remove underscores at parameters and split getCost into getCostXY and getCostIdx

* Update method docstrings

* lint code & update docstring, remove default value of getCostXY

* lint code with pep257 & flake8

* clear names for bt nodes (ros-navigation#3183)

* [Smac] check if a node exists before creating (ros-navigation#3195)

* check if a node exists before creating

* invert logic to group like with like

* Update a_star.cpp

* fixing benchmarkign for planners (ros-navigation#3202)

* [Smac] Robin hood data structure improves performance by 10-15%! (ros-navigation#3201)

* adding robin_hood unordered_map

* using robin_hood node map

* ignore robin_hood file

* linting

* linting cont. for triple pointers

* linting cont. for uncrustify

* [RPP] Add parameter to enable/disable collision detection (ros-navigation#3204)

* [RPP] Add parameter to enable/disable collision detection

* [RPP] Update README

* Update waffle.model

* add benchmark launch file + instructions (ros-navigation#3218)

* removing hypotf from smac planner heuristic computation (ros-navigation#3217)

* removing hypotf

* swapping to node2d sqrt

* complete smac planner tolerances (ros-navigation#3219)

* Disable Output Buffering (ros-navigation#3220)

To ensure await asyncio prints [Processing: %s]' every 30s as expected

* fix majority of python linting errors introduced in python costmap API additions to get CI turning over again (ros-navigation#3223)

* fix majority of python linting errors

* finish linting

* Assisted teleop simple commander (ros-navigation#3198)

* add assisted teleop to python api

* cleanup

* assisted teleop demo

* rename

* lint

* code review

* trigger build

* flake8 fix

* break cashe

* moved all v11 to v12

* lint fix

* remove package dep

* change default time allowance

* Costmap Filter enabling service (ros-navigation#3229)

* Add enabling service to costmap filters

* Add service testcase

* Fix comment

* Use toggle_filter service name

* Add binary flip costmap filter (ros-navigation#3228)

* Add binary flip costmap filter

* Move transformPose, worldToMask, getMaskData to CostmapFilter

* Added default parametrized binary filter state

* Switched to std_msgs/msg/Bool.msg

* Use arbitrary filter values

* Update waffle.model

* Update waffle.model

* Update test_actions.cpp

* odom alpha restriction to avoid overflow caused by user-misconfiguration (ros-navigation#3238)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* Update controller server goal checker (ros-navigation#3240)

* [FIX] Update controller server goal checker

* [FIX] Autoformat code

* [FIX] Misplaced tabs.

Co-authored-by: Pedro Alejandro González <[email protected]>

* map-size restriction to avoid overflow and nullptr caused by user-misconfiguration (ros-navigation#3242)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* map-size restriction

* map-size code style

* map-size rejection

* map-size codestyle

* map-size return false

* Add Path Smoothers Benchmarking suite (ros-navigation#3236)

* Add Path Smoothers Benchmarking suite

* Meet review items

* Update tools/smoother_benchmarking/README.md

Co-authored-by: Steve Macenski <[email protected]>

* Move optional performance patch to the end of README

* Fix README

Co-authored-by: Steve Macenski <[email protected]>

* Fix typo (ros-navigation#3262)

* Adding new Nav2 Smoother: Savitzky-Golay Smoother (ros-navigation#3264)

* initial prototype of the Savitzky Golay Filter Path Smoother

* fixed indexing issue - tested working

* updates for filter

* adding unit tests for SG-filter smoother

* adding lifecycle transitions

* Added Line Iterator (ros-navigation#3197)

* Added Line Iterator

* Updated Line Iterator to a new iteration method

* Added the resolution as a parameter/ fixed linting

* Added the resolution as a parameter/ fixed linting

* Added unittests for the line iterator

* Added unittests based on "unittest" package

* Fixed __init__.py and rephrased some docstrings

* Fixed linting errors

* Fixed Linting Errors

* Added some unittests and removed some methods

* Dummy commit for CircleCI Issue

Co-authored-by: Afif Swaidan <[email protected]>

* bumping to 1.1.3 for release

Signed-off-by: Daisuke Sato <[email protected]>
Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Joshua Wallace <[email protected]>
Co-authored-by: Alexey Merzlyakov <[email protected]>
Co-authored-by: Abdullah Enes BEDİR <[email protected]>
Co-authored-by: Tobias Fischer <[email protected]>
Co-authored-by: Tejas Kumar Shastha <[email protected]>
Co-authored-by: Daisuke Sato <[email protected]>
Co-authored-by: Stevedan Ogochukwu Omodolor <[email protected]>
Co-authored-by: Lukas Fanta <[email protected]>
Co-authored-by: Jackson9 <[email protected]>
Co-authored-by: Ruffin <[email protected]>
Co-authored-by: Hao-Xuan Song <[email protected]>
Co-authored-by: Nicolas Rocha Pacheco <[email protected]>
Co-authored-by: Pedro Alejandro González <[email protected]>
Co-authored-by: jaeminSHIN <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
shrijitsingh99 pushed a commit to moss-ag/navigation2 that referenced this pull request Mar 4, 2023
* standalone assisted teleop (ros-navigation#2904)

* standalone assisted teleop

* added in action message

* code review

* moved to behavior server

* added assisted teleop bt node

* revert

* added bt node for assisted teleop

* lint fix

* added cancel assisted teleop node

* code review

* working

* cleanup

* updated feeback

* code review

* update compute velocity

* cleanup

* lint fixes

* cleanup

* test fix

* starting to add tests for assisted teleop

* fixed tests

* undo

* fixed test

* is_recovery

* adjust abort result based on recovery or not

* code review

* added preempt velocity

* working preempt assisted teleop test

* completed assisted teleop tests

* code review

* undo

* code review

* remove sleep

* topic rename

* missing comma

* added comma :(

* added comma

Co-authored-by: Steve Macenski <[email protected]>

* Add the support of range sensors to Collision Monitor (ros-navigation#3099)

* Support range sensors in Collision Monitor

* Adjust README.md

* Meet review fixes

* Fix ros-navigation#3152: Costmap extend did not include Y component (ros-navigation#3153)

* missing nodes added to nav2_tree_nodes.xml (ros-navigation#3155)

* Change deprecated ceres function (ros-navigation#3158)

* Change deprecated function

* Update smoother_cost_function.hpp

* remove camera_rgb_joint since child frame does not exist (ros-navigation#3162)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map (ros-navigation#3145)

* bugfix (ros-navigation#3109) deadlock when costmap receives new map

Signed-off-by: Daisuke Sato <[email protected]>

* introduce map_received_in_update_bounds_ flag to make sure processMap will not be called between updateBounds and updateCosts

Signed-off-by: Daisuke Sato <[email protected]>

Signed-off-by: Daisuke Sato <[email protected]>

* simple command costmap api - first few functions (ros-navigation#3159)

* initial commit costmap_2d template

Signed-off-by: Stevedan Omodolor <[email protected]>

* finish task A and tested

* lint

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

Co-authored-by: Steve Macenski <[email protected]>

* fix trailing underscores

Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Steve Macenski <[email protected]>

* Fix missing dependency on nav2_collision_monitor (ros-navigation#3175)

* fixed start (ros-navigation#3168)

* fixed start

* return true

* fix tests

* Fix velocities comparison for rotation at place case (ros-navigation#3177)

* Fix velocities comparison for rotation at place case

* Meet review item

* Remove unnecessary header

* Change the comment

* set a empty path on halt (ros-navigation#3178)

* set a empty path on halt

* fixed issues

* remove path reset

* fixing

* reverting

* revert

* revert

* fixed lint

* test fix

* uncrusify fix

* simple command costmap api - update few functions (ros-navigation#3169)

* * add aditional function to costmap_2d.py

Signed-off-by: Stevedan Omodolor <[email protected]>

Updated-by: Jaehun Kim <[email protected]>

* finish task B

* Update nav2_simple_commander/nav2_simple_commander/costmap_2d.py

* Update method docs

* Remove underscores at parameters and split getCost into getCostXY and getCostIdx

* Update method docstrings

* lint code & update docstring, remove default value of getCostXY

* lint code with pep257 & flake8

* clear names for bt nodes (ros-navigation#3183)

* [Smac] check if a node exists before creating (ros-navigation#3195)

* check if a node exists before creating

* invert logic to group like with like

* Update a_star.cpp

* fixing benchmarkign for planners (ros-navigation#3202)

* [Smac] Robin hood data structure improves performance by 10-15%! (ros-navigation#3201)

* adding robin_hood unordered_map

* using robin_hood node map

* ignore robin_hood file

* linting

* linting cont. for triple pointers

* linting cont. for uncrustify

* [RPP] Add parameter to enable/disable collision detection (ros-navigation#3204)

* [RPP] Add parameter to enable/disable collision detection

* [RPP] Update README

* Update waffle.model

* add benchmark launch file + instructions (ros-navigation#3218)

* removing hypotf from smac planner heuristic computation (ros-navigation#3217)

* removing hypotf

* swapping to node2d sqrt

* complete smac planner tolerances (ros-navigation#3219)

* Disable Output Buffering (ros-navigation#3220)

To ensure await asyncio prints [Processing: %s]' every 30s as expected

* fix majority of python linting errors introduced in python costmap API additions to get CI turning over again (ros-navigation#3223)

* fix majority of python linting errors

* finish linting

* Assisted teleop simple commander (ros-navigation#3198)

* add assisted teleop to python api

* cleanup

* assisted teleop demo

* rename

* lint

* code review

* trigger build

* flake8 fix

* break cashe

* moved all v11 to v12

* lint fix

* remove package dep

* change default time allowance

* Costmap Filter enabling service (ros-navigation#3229)

* Add enabling service to costmap filters

* Add service testcase

* Fix comment

* Use toggle_filter service name

* Add binary flip costmap filter (ros-navigation#3228)

* Add binary flip costmap filter

* Move transformPose, worldToMask, getMaskData to CostmapFilter

* Added default parametrized binary filter state

* Switched to std_msgs/msg/Bool.msg

* Use arbitrary filter values

* Update waffle.model

* Update waffle.model

* Update test_actions.cpp

* odom alpha restriction to avoid overflow caused by user-misconfiguration (ros-navigation#3238)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* Update controller server goal checker (ros-navigation#3240)

* [FIX] Update controller server goal checker

* [FIX] Autoformat code

* [FIX] Misplaced tabs.

Co-authored-by: Pedro Alejandro González <[email protected]>

* map-size restriction to avoid overflow and nullptr caused by user-misconfiguration (ros-navigation#3242)

* odom alpha restriction

* odom alpha code style

* odom alpha code style

* odom alpha code style

* map-size restriction

* map-size code style

* map-size rejection

* map-size codestyle

* map-size return false

* Add Path Smoothers Benchmarking suite (ros-navigation#3236)

* Add Path Smoothers Benchmarking suite

* Meet review items

* Update tools/smoother_benchmarking/README.md

Co-authored-by: Steve Macenski <[email protected]>

* Move optional performance patch to the end of README

* Fix README

Co-authored-by: Steve Macenski <[email protected]>

* Fix typo (ros-navigation#3262)

* Adding new Nav2 Smoother: Savitzky-Golay Smoother (ros-navigation#3264)

* initial prototype of the Savitzky Golay Filter Path Smoother

* fixed indexing issue - tested working

* updates for filter

* adding unit tests for SG-filter smoother

* adding lifecycle transitions

* Added Line Iterator (ros-navigation#3197)

* Added Line Iterator

* Updated Line Iterator to a new iteration method

* Added the resolution as a parameter/ fixed linting

* Added the resolution as a parameter/ fixed linting

* Added unittests for the line iterator

* Added unittests based on "unittest" package

* Fixed __init__.py and rephrased some docstrings

* Fixed linting errors

* Fixed Linting Errors

* Added some unittests and removed some methods

* Dummy commit for CircleCI Issue

Co-authored-by: Afif Swaidan <[email protected]>

* bumping to 1.1.3 for release

Signed-off-by: Daisuke Sato <[email protected]>
Signed-off-by: Stevedan Omodolor <[email protected]>
Co-authored-by: Joshua Wallace <[email protected]>
Co-authored-by: Alexey Merzlyakov <[email protected]>
Co-authored-by: Abdullah Enes BEDİR <[email protected]>
Co-authored-by: Tobias Fischer <[email protected]>
Co-authored-by: Tejas Kumar Shastha <[email protected]>
Co-authored-by: Daisuke Sato <[email protected]>
Co-authored-by: Stevedan Ogochukwu Omodolor <[email protected]>
Co-authored-by: Lukas Fanta <[email protected]>
Co-authored-by: Jackson9 <[email protected]>
Co-authored-by: Ruffin <[email protected]>
Co-authored-by: Hao-Xuan Song <[email protected]>
Co-authored-by: Nicolas Rocha Pacheco <[email protected]>
Co-authored-by: Pedro Alejandro González <[email protected]>
Co-authored-by: jaeminSHIN <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
Co-authored-by: Afif Swaidan <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Deadlock when a static layer gets map updated
3 participants