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

UP-350 Upgrade nav2 to latest foxy version and add nav2_controllers #7

Merged
merged 35 commits into from
May 18, 2022

Conversation

sergigraum
Copy link

@sergigraum sergigraum commented Feb 24, 2022


Basic Info

Issue ticket is not created due that I do not have permission. Please check permissions and let me know.

Info Please fill out this column
Ticket(s) this addresses (# see quote on top)
Primary OS tested on (Ubuntu 20.04 LTS)
Reviewers (@ashwinsushil @vicmassy )
Robotic platform tested on (Gazebo simulation Search mission 3x Copter)

How to run this PR feature

  • The source changes are done in the following repositories: umd_nav2, umd_copter, umd_mission branch correspondency feat/upgrade_nav2.

Considering ROS_DOMAIN_ID=60 and NETWORK=local

Launch simulation for three copters as follows:

xhost +local:root

docker run -it --rm --net host --privileged --gpus all -e DISPLAY=$DISPLAY -e NVIDIA_VISIBLE_DEVICES=all -e NVIDIA_DRIVER_CAPABILITIES=graphics -e ROBOT_NAME=1 --mount type=bind,source=/tmp/.X11-unix,target=/tmp/.X11-unix --mount type=bind,source=$HOME/umd2_ws/src/umd_robots,target=/umd_ws/src/umd_robots umdlife/umd-copter-simulation:v1.1 roslaunch umd_robots three_iris_mavros_sitl.launch

Modify three_copter_sim.yml docker-compose file as follows:

version: "3.4"

services:
  bridge:
    container_name: bridge
    image: umdlife/umd-bridge:v2.0.0
    network_mode: host
    environment:
      ROS_DOMAIN_ID: 60
      RMW_IMPLEMENTATION: rmw_cyclonedds_cpp
      CYCLONEDDS_URI: file:///dds.xml
    volumes:
      - type: bind
        source: $HOME/umd2_ws/src/umd_utils/cfg/local.xml
        target: /dds.xml
    command: ros2 run ros1_bridge parameter_bridge /bridge_topics /bridge_service_1_to_2 /bridge_service_2_to_1
  copter100:
    container_name: copter100
    image: umdlife/umd-copter-dev:vupgradenav2
    network_mode: host
    environment:
      ROBOT_MODEL: iris
      ROBOT_ID: 100/sitl
      ROS_DOMAIN_ID: 60
      NETWORK: local
    command: ros2 launch umd_copter_bt px4_bt_navigator.launch.py run_sim:=true
  copter101:
    container_name: copter101
    image: umdlife/umd-copter-dev:vupgradenav2
    network_mode: host
    environment:
      ROBOT_MODEL: iris
      ROBOT_ID: 101/sitl
      ROS_DOMAIN_ID: 60
      NETWORK: local
    command: ros2 launch umd_copter_bt px4_bt_navigator.launch.py run_sim:=true
  copter102:
    container_name: copter102
    image: umdlife/umd-copter-dev:vupgradenav2
    network_mode: host
    environment:
      ROBOT_MODEL: iris
      ROBOT_ID: 102/sitl
      ROS_DOMAIN_ID: 60
      NETWORK: local
    command: ros2 launch umd_copter_bt px4_bt_navigator.launch.py run_sim:=true
  mission:
    container_name: mission
    image: umdlife/umd-mission-dev:vupgradenav2
    network_mode: host
    environment:
      VPN: disable
      ROS_DOMAIN_ID: 60
      NETWORK: local
    command: ros2 launch umd_mission_core vienna_mission_core.launch.py run_sim:=true

Finally launch web as follows:

docker run -it --rm --name web --net host -e NETWORK=local -e ROS_DOMAIN_ID=60 -e VPN=disable --mount type=bind,source=$HOME/umd2_ws/src/umd_utils/cfg/networks.yaml,target=/networks.yaml --workdir /umd2_ws/src/umd_web/vienna-app/server umdlife/umd-web:v1.3.6

Select an area and launch a mission.

Description of contribution in a few bullet points

  • Upgrade navigation2 to latest foxy commit d1ed5e4
  • Added nav2_controller package
  • Added controller dependencies nav_2d_utils nav_2d_msgs

Description of documentation updates required from your changes

  • BehaviorTree.CPP library no longer uses buildTreeFromText but instead uses createTreeFromText
  • This update still does not include lifecycle bonding due to incompatibilities in ros client library. create_callback_group() no longer exists after galactic as stated here. Therefore issues cannot be closed with this PR

Future work that may be required in bullet points

  • Modify nav2_controllers to support 3D controllers, especially for UAVs. (Custom)
  • Update ROS_DISTRO to Humble next LTS (May 2022)
  • Update nav2 when is supported. (Long term)

ryan-sandzimier and others added 30 commits November 4, 2020 15:25
* Fix memory leak (ros-navigation#1900)

* Fix memory leak in nav2_recoveries

* Fix recovery server memory leak (better interface)

* Fix costmap2d memory leak

* Fix nav2_navfn_planner memory leak

* Fix planner server and navfn planner memory leak

* Make all rclcpp::Node::SharedPtr argument passing const

* Fix controller server and DWB plugins memory leak

* Minor fixes

* Fix formatting errors

* Change all plugin interfaces to use weak_ptr intead of shared_ptr to parent rclcpp::Node

* Convert all SharedPtr to WeakPtr

* Check shared_ptr after lock and before dereferencing

* Smac/Hybrid-A* planner (ros-navigation#2021)

* adding smac_planner to navigation2 metapackage

* adding params to metapackage

* update config files

* adding navfn benchmark testing

* updates to costmap_2d for flexility

* update planner API for new changes

* adding ompl to underlay because ros2 master doesn't contain the rosdep key

* patching templated footprint collision checker

* fix typo

* updating readme config file

* Analytic expansion (ros-navigation#43)

* Use OMPL to generate heuristics

The calculation is run at every planning cycle. It does not seem to slow down
the planner - the calculation time seems to be quick enough that the
improvement in graph expansion accounts for it.

* Use OMPL to calculate analytic solution when near goal

* Make angles multiples of the bin size to stop looping behaviour

* Uncrustify

* Use faster std::sqrt function

* Fix analytic path so that the collision checker has coordinates to check!

* Pre-allocate variables in analytic path expansion

* Rename typedef to NodeGetter to more accurately describe function

* Use distance rather than heuristic to determine when to perform analytic expansion

Also force the analytic expansion to run on first iteration in case path is trivial.

* Move the check for motion model into the main A* loop

* Add copyright notices

* Remove comment about relaxing node match tolerances

The analytic expansion removes the need for this.

* Correctly reset node coordinates when aborting from analytic expansion

* Move analytic expansion logic to separate function

* Uncrustify

* Remove unneeded call to get goal coordinates

* Fix the calculation of intervals in the analytic path

Reserve the number of candidate nodes we are expecting.
Base calculations on intervals rather than points - makes distances between nodes work properly.

* Rescale heuristic so that analytic expansions are based on distance

* Repeatedly split analytic path in half when checking for collision

* Add parameter to control rate of analytic expansion attempts

* Uncrustify

* Fix incorrect type in templated function

* Cpplint

* Revert "Repeatedly split analytic path in half when checking for collision"

This reverts commit 94d9ee0.

There was a marginal speed gain (perhaps!) and the splitting approach made
the code harder to understand and maintain.

* Uncrustify

* Add doxygen comments

* Add parameter description for analytic expansion ratio

* Set lower limit of 2 on number of iterations between analytic expansions

* Reduce expected number of iterations because of analytic completion

* Refactor analytic expansion ratio calcs to make logic easier to understand

* add readme color

* fix linting

* ceil from floor (and speed up)

* a few updates

* fix smac tests

* fixing smoother test

* remove cost check - to be readded at another time

* working last test from debug issues

* Update README.md

* Update README.md

* adding getUseRadius API doxygen

Co-authored-by: James Ward <[email protected]>

* Adding additional SmacPlanner tests (ros-navigation#2036)

* adding some more tests to smac_planner

* addtl smac tests

* remove unused functions

* adding additional constants and smoothers tests (ros-navigation#2038)

* Revert "Fix memory leak (ros-navigation#1900)"

This reverts commit 681ccfa.

* Changed WeakPtr to SharedPtr for compatibility with Foxy

Co-authored-by: Sarthak Mittal <[email protected]>
Co-authored-by: Steve Macenski <[email protected]>
Co-authored-by: James Ward <[email protected]>
* initialize variables in inflation layer (ros-navigation#1970)

* Fix zero waypoints crash (ros-navigation#1978)

* return if the number of waypoints is zero.

* terminate the action.

* Succeed action instead of terminating.

* Add IsBatteryLow condition node (ros-navigation#1974)

* Add IsBatteryLow condition node

* Update default battery topic and switch to battery %

* Fix test

* Switch to sensor_msgs/BatteryState

* Add option to use voltage by default or switch to percentage

* Add sensor_msgs dependency in package.xml

* Make percentage default over voltage

* Update parameter list

* Initialize inflate_cone_ variable. (ros-navigation#1988)

* Initialize inflate_cone_ variable.

* initialize inflate_cone_ based on parameter.

* Increase the sleep time in the tests makes the costmap test always succeed on my machine.

* Add timeouts to all spin_until_future_complete calls (ros-navigation#1998)

* Add timeouts to all spin_until_future_complete calls

Signed-off-by: Sarthak Mittal <[email protected]>

* Update default timeout value

Signed-off-by: Sarthak Mittal <[email protected]>

* Controllers should not be influenced by time jumps or slew (ros-navigation#2012)

* Controllers should not be influenced by time jumps

Therefore use rclcpp::GenericRate<std::chrono::steady_clock> instead of
rclcpp::Rate

Signed-off-by: Martijn Buijs <[email protected]>

* Change to using `rclcpp::WallRate` for better readability

Signed-off-by: Martijn Buijs <[email protected]>

* Fix max path cycles for case where map has larger Y dimension than X dimension (ros-navigation#2017)

* Fix max path cycles for case where map has larger Y dimension than X dimension

* Improve readability

* fix ament_cpplint and ament_uncrustify issues

* fix minor cherry pick conflict mistake

* bump version to 0.4.4

Co-authored-by: Michael Ferguson <[email protected]>
Co-authored-by: Wilco Bonestroo <[email protected]>
Co-authored-by: Sarthak Mittal <[email protected]>
Co-authored-by: Martijn Buijs <[email protected]>
Co-authored-by: justinIRBT <[email protected]>
Use rclcpp::FutureReturnCode::SUCCESS replace rclcpp::executor::FutureReturnCode::SUCCESS
* Fix recovery action collision check.

* Fix linting issue.
* Added transient local subscription qos profile parameter to map saver (ros-navigation#1871)

* Added transient local subscription qos profile parameter to map saver

* Made transient local default true

* Fixed linter problem

* switched back house world to waffle model

* Make transient map subscribe backwards compatible for foxy

Co-authored-by: Michael Equi <[email protected]>
* merge conflict

* Add groot monitoring behavior tree visualization (ros-navigation#1958)

* include ZMQ publisher for Groot

very plain integration, should be made optionally through a launch parameter

* fix Groot crashing finding custom nodes in monitor mode

straight forward working fix. The manifest was missing, so Groot searched custom node IDs that it did not have. This is implemented correctly directly in BT.CPP V3 and should be used instead of an implementation in nav2_bt_engine

* refactor buildTreeFromText to createTreeFromText as in BT.CPP v3

* forward XML to createTreeFromText from BT.CPP v3 factory function

* Add createTreeFromFile forware to BT-factory function

* fix createTreeFromFile args..

* add personal copyright

I think this is okay for finding a nasty bug.. :)

* move creating ZMQ Publisher from run to dedicated function

this way the ZMQ Publisher ca be added to individual trees within the same factory. Should be important for switching trees (XML files)

* Add parameter for Groot Monitoring - default true. Also cleanup ZMQ

* Move haltAllActions() Implementation from .hpp to .cpp

* update Copyright in hpp of BT-engine

* make linters happy.. :)

* Update Groot parameter naming and chg default=0

* rename resetZMQGrootMonitor -> resetGrootMonitor

* add parameter to nav2_params.yaml - default = false

* add ZMQ params and logic for server/pub ports

* Fix RewrittenYaml ignoring Integers

Integers where converted as floats before which crashes get_parameter.. fun thing....

* add launch based tests for params and ZMQ

* Activate Dijkstra and A* switching tests, thanks to RewrittenYaml

* add pyzmq==19.0.2 via pip3 to CI test_workspace

* make flake8 linter happy

* make cpp linters happy

* add personal copyright

* add GoalUpdated BT node description in order to view the full default BT

only affects editor mode of Groot and not live monitoring

* make linter happy (unused import)

* remove unused groot-port replacement functions in test_system_launch.py

* add groot parameters to params.md

* get reloading BTs to work nicely with Groot

* pretty space for smac :)

* switch from unsinged to uint16_t

* fix converting string into float or int

* Revert "add pyzmq==19.0.2 via pip3 to CI test_workspace"

This reverts commit 7bca081.

* Switch to 4 spaces indent and other linter stuff for RewrittenYaml

* removed prints in test_system_launch.py

* linter stuff

* add python-zmq as test_depend in package.xml (instead of .CI_conf)

* enable groot monitoring by default

* remove ZMQ from naming (function / variable)

* remove variable zmq ports from testing scripts

* remove default ports in BT_engine, as they are set through (def-)params

* Remove complete test for "dynamic" ZMQ ports testing

* fix python-zmq depend location

* fix style

* swap missing Groot to default True

* fix rosdep zmq + flake8 fixes in system_tests

* remove debug logs + c_str()

* remove final debug_log

* return failure on plugin failure (ros-navigation#2119)

* Move voxel publisher activation into conditional that its on

* fix boundary point exclusion in convexFillCells (ros-navigation#2161)

* Regulated pure pursuit controller (ros-navigation#2152)

* regulated pure pursuit migration commit

* adding speed limit API

* adding review comments + adding rotate to goal heading

* adding test dir

* add some initial tests

* more tests

* remove old comment

* improve readme

* fix CI

* first attempt at changing algos in tests

* allowing full path parameter substitutions

* adding integration tests

* enable SMAC testing too with new changes

* swap algos

* revert

* Update angular velocity after constraining linear velocity (ros-navigation#2165)

This ensures the robot moves towards the lookahead point more closely.
If the angular velocity is not updated, then the robot tries to take cuts while turning,
which could lead to collisions when near obstacles

Signed-off-by: Shrijit Singh <[email protected]>

* Update cost scaling heuristic to vary speed linearly with distance (ros-navigation#2164)

* Update cost scaling to vary linearly with distance instead of relying on costmap cost

Signed-off-by: Shrijit Singh <[email protected]>

* Resolve suggested changes

Signed-off-by: Shrijit Singh <[email protected]>

* Add documentation for cost scaling parameters

Signed-off-by: Shrijit Singh <[email protected]>

* Improve parameter descriptions

Signed-off-by: Shrijit Singh <[email protected]>

* Comment cost scaling tests since layered costmap is not initialized

A valid layered costmap reference is needed to get the inscribed radius

Signed-off-by: Shrijit Singh <[email protected]>

Co-authored-by: Shrijit Singh <[email protected]>

* Updating example yaml to include extra params (ros-navigation#2183)

* Fixing control_frequency to controller_frequency typo (ros-navigation#2182)

* Write doxygen for navfn (ros-navigation#2184)

* Write doxygen for navfn

* Remove forward slashes

* expose dwb's shorten_transformed_plan param

* Adding RPP to metapackage.xml

* [NavFn] Make the 3 parameters changeable at runtime (ros-navigation#2181)

* make the 3 params changeable at runtime

* use parameter events callbacks

* doxygen

* lint

* Install test_updown to lib/ (ros-navigation#2208)

* Remove optimization check on carrot, incorrect optimization (ros-navigation#2209)

* [RPP] Remove dependency on collision checking to carrot location (ros-navigation#2211)

* Remove dependency on collision checking to carrot location

* Fix i removal

* changing API to be consistent with collision updates

* fix typo in regulated pure pursuit readme (ros-navigation#2228)

* Rviz state machine waypoint follower updates (ros-navigation#2227)

* working on canceling state machine for waypoint mode

* fixing cancelation logic

* fix linting isue

* adding cherry pick fixes

Co-authored-by: Sarthak Mittal <[email protected]>
Co-authored-by: Florian Gramß <[email protected]>
Co-authored-by: ChristofDubs <[email protected]>
Co-authored-by: Shrijit Singh <[email protected]>
Co-authored-by: Phone Thiha Kyaw <[email protected]>
Co-authored-by: simutisernestas <[email protected]>
Co-authored-by: G.Doisy <[email protected]>
Co-authored-by: Uladzslau <[email protected]>
Co-authored-by: Erwin Lejeune <[email protected]>
Changed to the latest tire mesh file names for waffle as per the latest `turtlebot3_gazebo` package.

This results in faster loading and resolves the errors that come in `gazebo --verbose`
* Update list of nodes with nodes compiled in the branch and excluding unexistant to prevent runtime exceptions.

* Updated documentation

Co-authored-by: Pau Carre <[email protected]>
* fix basename not defined issue

* macos fixes

* removed observationbuffer change

* Update regulated_pure_pursuit_controller.cpp

Fixes error: moving a temporary object prevents copy elision
…a bug here (ros-navigation#2413)

* Explicit assignment operators for Observation

Also move constructor. Default copy assignment is not just a shortcut to copy constructor, sadly

* uncrustified and removed not bug-related stuff

* style fix
…ame (ros-navigation#2497)

* Fix ros-navigation#2493 by removing the unused joint to camera_rgb_frame. It looks like camera_rgb_link link is now camera_link e3ee2da

* Remove unwanted line
* Fix nav2_util

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

* Address feedback

* Fix linter
Co-authored-by: Matthijs den Toom <[email protected]>
@sergigraum sergigraum changed the title Feat/upgrade nav2 Upgrade nav2 to latest foxy version and add nav2_controllers Feb 28, 2022
@sergigraum sergigraum changed the title Upgrade nav2 to latest foxy version and add nav2_controllers UP-350 Upgrade nav2 to latest foxy version and add nav2_controllers Mar 1, 2022
Copy link

@vicmassy vicmassy left a comment

Choose a reason for hiding this comment

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

Looks good to me! I had to use a different version of umd-web, due to the one you pointed out crashed when uploading a vienna mission. I used umdlife/umd-web:vTelefonicaOut-JoyWebRTC-stacked. We will need to test this with real hardware and then we can move on to merging

@vicmassy vicmassy self-requested a review May 18, 2022 13:41
Copy link

@vicmassy vicmassy left a comment

Choose a reason for hiding this comment

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

RTBM! 👾 🚀

@sergigraum sergigraum merged commit 16e42ed into master_umd May 18, 2022
@sergigraum sergigraum deleted the feat/upgrade_nav2 branch May 18, 2022 14:17
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.