├── README.md ├── maps ├── warehouse.pgm └── warehouse.yaml ├── .github ├── CODEOWNERS ├── ISSUE_TEMPLATE │ ├── feature.md │ └── bug.md └── workflows │ └── ci.yml ├── CMakeLists.txt ├── package.xml ├── config ├── a200 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── a300 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── dd100 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── dd150 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── do100 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── do150 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── j100 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── r100 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml └── w200 │ ├── localization.yaml │ ├── slam.yaml │ └── nav2.yaml ├── LICENSE ├── CHANGELOG.rst └── launch ├── nav2.launch.py ├── localization.launch.py └── slam.launch.py /README.md: -------------------------------------------------------------------------------- 1 | # clearpath_nav2_demos 2 | Nav2 and slam_toolbox demos for clearpath platforms 3 | -------------------------------------------------------------------------------- /maps/warehouse.pgm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clearpathrobotics/clearpath_nav2_demos/HEAD/maps/warehouse.pgm -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Default all changes will request review from: 2 | * @clearpathrobotics/clearpath-platform-team 3 | -------------------------------------------------------------------------------- /maps/warehouse.yaml: -------------------------------------------------------------------------------- 1 | image: warehouse.pgm 2 | mode: trinary 3 | resolution: 0.03 4 | origin: [-15.1, -25, 0] 5 | negate: 0 6 | occupied_thresh: 0.65 7 | free_thresh: 0.1 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Provide context for the feature you are requesting 4 | title: '' 5 | labels: enhancement 6 | assignees: clearpathrobotics/clearpath-platform-team 7 | 8 | --- 9 | 10 | **Describe the the feature you would like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Other notes** 14 | Add anything else you think is important. 15 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Provide a report for that the issue is 4 | title: '' 5 | labels: bug 6 | assignees: clearpathrobotics/clearpath-platform-team 7 | 8 | --- 9 | 10 | **Please provide the following information:** 11 | - OS: (e.g. Ubuntu 22.04) 12 | - ROS 2 Distro: (e.g. Humble) 13 | - Built from source or installed: 14 | - Package version: (if from repository, give version from `sudo dpkg -s ros-$ROS_DISTRO-clearpath-nav2-demos`, if from source, give commit hash) 15 | - Real hardware or simulation: 16 | 17 | **Expected behaviour** 18 | A clear and concise description of what you expected to happen. 19 | 20 | **Actual behaviour** 21 | A clear and concise description of what you encountered. 22 | 23 | **To Reproduce** 24 | Provide the steps to reproduce: 25 | 1. run something 26 | 2. launch something else 27 | 3. see the error 28 | 29 | 30 | **Other notes** 31 | Add anything else you think is important. 32 | -------------------------------------------------------------------------------- /CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 3.8) 2 | project(clearpath_nav2_demos) 3 | 4 | if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") 5 | add_compile_options(-Wall -Wextra -Wpedantic) 6 | endif() 7 | 8 | # find dependencies 9 | find_package(ament_cmake REQUIRED) 10 | 11 | install(DIRECTORY config launch maps 12 | DESTINATION share/${PROJECT_NAME} 13 | ) 14 | 15 | if(BUILD_TESTING) 16 | find_package(ament_lint_auto REQUIRED) 17 | # the following line skips the linter which checks for copyrights 18 | # comment the line when a copyright and license is added to all source files 19 | set(ament_cmake_copyright_FOUND TRUE) 20 | # the following line skips cpplint (only works in a git repo) 21 | # comment the line when this package is in a git repo and when 22 | # a copyright and license is added to all source files 23 | set(ament_cmake_cpplint_FOUND TRUE) 24 | ament_lint_auto_find_test_dependencies() 25 | endif() 26 | 27 | ament_package() 28 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: clearpath_common_ci 2 | 3 | on: 4 | push: 5 | pull_request: 6 | schedule: 7 | - cron: "0 0 * * *" # every day at midnight 8 | 9 | jobs: 10 | build_and_test: 11 | name: jazzy 12 | strategy: 13 | matrix: 14 | env: 15 | - {ROS_DISTRO: jazzy, ROS_REPO: testing} 16 | - {ROS_DISTRO: jazzy, ROS_REPO: main} 17 | fail-fast: false 18 | runs-on: ubuntu-24.04 19 | steps: 20 | - uses: actions/checkout@v3 21 | - uses: 'ros-industrial/industrial_ci@master' 22 | env: ${{matrix.env}} 23 | 24 | clearpath_nav2_demos_src_ci: 25 | name: Jazzy Clearpath Source 26 | runs-on: ubuntu-24.04 27 | steps: 28 | - uses: actions/checkout@v3 29 | - uses: ros-tooling/setup-ros@v0.7 30 | with: 31 | required-ros-distributions: jazzy 32 | - uses: ros-tooling/action-ros-ci@v0.3 33 | id: action_ros_ci_step 34 | with: 35 | target-ros2-distro: jazzy 36 | package-name: | 37 | clearpath_nav2_demos -------------------------------------------------------------------------------- /package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | clearpath_nav2_demos 5 | 2.8.0 6 | Nav2 demos for Clearpath robots 7 | Luis Camero 8 | Roni Kreinin 9 | Tony Baltovski 10 | 11 | BSD 12 | 13 | Roni Kreinin 14 | 15 | ament_cmake 16 | 17 | clearpath_config 18 | nav2_bringup 19 | slam_toolbox 20 | 21 | ament_lint_auto 22 | ament_lint_common 23 | 24 | 25 | ament_cmake 26 | 27 | 28 | -------------------------------------------------------------------------------- /config/a200/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/a300/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/dd100/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/dd150/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/do100/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/do150/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/j100/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/r100/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /config/w200/localization.yaml: -------------------------------------------------------------------------------- 1 | amcl: 2 | ros__parameters: 3 | alpha1: 0.2 4 | alpha2: 0.2 5 | alpha3: 0.2 6 | alpha4: 0.2 7 | alpha5: 0.2 8 | base_frame_id: "base_link" 9 | beam_skip_distance: 0.5 10 | beam_skip_error_threshold: 0.9 11 | beam_skip_threshold: 0.3 12 | do_beamskip: false 13 | global_frame_id: "map" 14 | lambda_short: 0.1 15 | laser_likelihood_max_dist: 2.0 16 | laser_max_range: 100.0 17 | laser_min_range: -1.0 18 | laser_model_type: "likelihood_field" 19 | max_beams: 60 20 | max_particles: 2000 21 | min_particles: 500 22 | odom_frame_id: "odom" 23 | pf_err: 0.05 24 | pf_z: 0.99 25 | recovery_alpha_fast: 0.0 26 | recovery_alpha_slow: 0.0 27 | resample_interval: 1 28 | robot_model_type: "nav2_amcl::DifferentialMotionModel" 29 | save_pose_rate: 0.5 30 | sigma_hit: 0.2 31 | tf_broadcast: true 32 | transform_tolerance: 1.0 33 | update_min_a: 0.2 34 | update_min_d: 0.25 35 | z_hit: 0.5 36 | z_max: 0.05 37 | z_rand: 0.5 38 | z_short: 0.05 39 | scan_topic: sensors/lidar2d_0/scan 40 | 41 | map_saver: 42 | ros__parameters: 43 | save_map_timeout: 5.0 44 | free_thresh_default: 0.25 45 | occupied_thresh_default: 0.65 46 | map_subscribe_transient_local: True 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2023, clearpathrobotics 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | 8 | 1. Redistributions of source code must retain the above copyright notice, this 9 | list of conditions and the following disclaimer. 10 | 11 | 2. Redistributions in binary form must reproduce the above copyright notice, 12 | this list of conditions and the following disclaimer in the documentation 13 | and/or other materials provided with the distribution. 14 | 15 | 3. Neither the name of the copyright holder nor the names of its 16 | contributors may be used to endorse or promote products derived from 17 | this software without specific prior written permission. 18 | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 23 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 24 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 25 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 26 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 27 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /config/a200/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/a300/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/dd100/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/dd150/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/do100/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/do150/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/j100/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/r100/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /config/w200/slam.yaml: -------------------------------------------------------------------------------- 1 | slam_toolbox: 2 | ros__parameters: 3 | 4 | # Plugin params 5 | solver_plugin: solver_plugins::CeresSolver 6 | ceres_linear_solver: SPARSE_NORMAL_CHOLESKY 7 | ceres_preconditioner: SCHUR_JACOBI 8 | ceres_trust_strategy: LEVENBERG_MARQUARDT 9 | ceres_dogleg_type: TRADITIONAL_DOGLEG 10 | ceres_loss_function: None 11 | 12 | # ROS Parameters 13 | # These are modified by slam.launch.py 14 | # Do mot modify the map_name or scan_topic here 15 | odom_frame: odom 16 | map_frame: map 17 | map_name: /map 18 | base_frame: base_link 19 | scan_topic: /scan 20 | mode: mapping 21 | 22 | debug_logging: false 23 | throttle_scans: 1 24 | transform_publish_period: 0.02 #if 0 never publishes odometry 25 | map_update_interval: 0.5 26 | resolution: 0.05 27 | max_laser_range: 20.0 #for rastering images 28 | minimum_time_interval: 0.5 29 | transform_timeout: 0.5 30 | tf_buffer_duration: 30. 31 | stack_size_to_use: 40000000 #// program needs a larger stack size to serialize large maps 32 | enable_interactive_mode: true 33 | 34 | # General Parameters 35 | use_scan_matching: true 36 | use_scan_barycenter: true 37 | minimum_travel_distance: 0.0 38 | minimum_travel_heading: 0.0 39 | scan_buffer_size: 10 40 | scan_buffer_maximum_scan_distance: 10.0 41 | link_match_minimum_response_fine: 0.1 42 | link_scan_maximum_distance: 1.5 43 | loop_search_maximum_distance: 3.0 44 | do_loop_closing: true 45 | loop_match_minimum_chain_size: 10 46 | loop_match_maximum_variance_coarse: 3.0 47 | loop_match_minimum_response_coarse: 0.35 48 | loop_match_minimum_response_fine: 0.45 49 | 50 | # Correlation Parameters - Correlation Parameters 51 | correlation_search_space_dimension: 0.5 52 | correlation_search_space_resolution: 0.01 53 | correlation_search_space_smear_deviation: 0.1 54 | 55 | # Correlation Parameters - Loop Closure Parameters 56 | loop_search_space_dimension: 8.0 57 | loop_search_space_resolution: 0.05 58 | loop_search_space_smear_deviation: 0.03 59 | 60 | # Scan Matcher Parameters 61 | distance_variance_penalty: 0.5 62 | angle_variance_penalty: 1.0 63 | 64 | fine_search_angle_offset: 0.00349 65 | coarse_search_angle_offset: 0.349 66 | coarse_angle_resolution: 0.0349 67 | minimum_angle_penalty: 0.9 68 | minimum_distance_penalty: 0.5 69 | use_response_expansion: true 70 | -------------------------------------------------------------------------------- /CHANGELOG.rst: -------------------------------------------------------------------------------- 1 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 2 | Changelog for package clearpath_nav2_demos 3 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 4 | 5 | 2.8.0 (2025-12-12) 6 | ------------------ 7 | * Add `scan_topic` launch argument (`#32 `_) 8 | * Contributors: Chris Iverach-Brereton 9 | 10 | 2.7.1 (2025-09-10) 11 | ------------------ 12 | * Fix SLAM parameter rewrites for Jazzy (`#31 `_) 13 | * Set the scan_topic parameter to the fully qualified topic, set the map_name parameter 14 | * Add a note about the scan_topic and map_name parameters getting rewritten by the launch file 15 | * Contributors: Chris Iverach-Brereton 16 | 17 | 2.7.0 (2025-08-25) 18 | ------------------ 19 | * Accept setup path with or without a trailing slash (`#30 `_) 20 | * Contributors: Hilary Luo 21 | 22 | 2.5.0 (2025-05-30) 23 | ------------------ 24 | * Fix typos in issue templates (`#27 `_) 25 | * Add parameter files for Dingo (all variants), Ridgeback (`#25 `_) 26 | * Add parameter files for Dingo (all variants), Ridgeback 27 | * Add trailing newlines to config files, add missing remap to launch file 28 | * Fix the slam launch file to use the new lifecycle node (`#24 `_) 29 | * Contributors: Chris Iverach-Brereton, Hilary Luo 30 | 31 | 2.4.0 (2025-04-30) 32 | ------------------ 33 | * Update nav2 configuration files for Jazzy (`#21 `_) 34 | * use_sim_time should not be in the yaml in Jazzy (`#19 `_) 35 | * Contributors: Chris Iverach-Brereton, Hilary Luo 36 | 37 | 2.0.0 (2025-01-31) 38 | ------------------ 39 | * Enable stamped cmd_vel messages for Nav2 40 | * Add Nav2 config files for A300. Not yet tested on the physical robot (`#18 `_) 41 | * Remove repos file from CI; it doesn't exist in this repo 42 | * Add source CI 43 | * Update CI for Jazzy 44 | * Fix import ordering, allow shadowing of builtin 45 | * Contributors: Chris Iverach-Brereton 46 | 47 | 0.2.0 (2024-01-22) 48 | ------------------ 49 | * Increased inflation radius 50 | * Added W200 configs 51 | * Contributors: Roni Kreinin 52 | 53 | 0.1.0 (2023-09-15) 54 | ------------------ 55 | * Updated get model function and remapped scan topics 56 | * Update get model function to match clearpath config 57 | * Remap to correct namespacing on scan topics 58 | * Contributors: Hilary Luo 59 | 60 | 0.0.2 (2023-07-27) 61 | ------------------ 62 | * Updated sensor namespace 63 | * Linter fix 64 | * Contributors: Roni Kreinin 65 | 66 | 0.0.1 (2023-07-17) 67 | ------------------ 68 | * Added space to package.xml. 69 | * Updated package.xml order. 70 | * Added test dependencies. 71 | * Added Github actions. 72 | * Config updates 73 | * Namespacing fixes 74 | * Updated odom topics 75 | * Fixed footprint and adjusted velocity/accel limits on J100 76 | * Use config to set namespace and platform model 77 | * Current best parameters for Husky 78 | * Cleanup 79 | * Jackal params 80 | * Initial commit 81 | * Initial commit 82 | * Contributors: Hilary Luo, Roni Kreinin, Tony Baltovski 83 | -------------------------------------------------------------------------------- /launch/nav2.launch.py: -------------------------------------------------------------------------------- 1 | # Software License Agreement (BSD) 2 | # 3 | # @author Roni Kreinin 4 | # @copyright (c) 2023, Clearpath Robotics, Inc., All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # * Redistributions of source code must retain the above copyright notice, 9 | # this list of conditions and the following disclaimer. 10 | # * Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions and the following disclaimer in the documentation 12 | # and/or other materials provided with the distribution. 13 | # * Neither the name of Clearpath Robotics nor the names of its contributors 14 | # may be used to endorse or promote products derived from this software 15 | # without specific prior written permission. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | import os 29 | 30 | from ament_index_python.packages import get_package_share_directory 31 | 32 | from clearpath_config.clearpath_config import ClearpathConfig 33 | from clearpath_config.common.utils.yaml import read_yaml 34 | 35 | from launch import LaunchDescription 36 | from launch.actions import ( 37 | DeclareLaunchArgument, 38 | GroupAction, 39 | IncludeLaunchDescription, 40 | OpaqueFunction 41 | ) 42 | from launch.launch_description_sources import PythonLaunchDescriptionSource 43 | 44 | from launch.substitutions import ( 45 | LaunchConfiguration, 46 | PathJoinSubstitution 47 | ) 48 | 49 | from launch_ros.actions import PushRosNamespace, SetRemap 50 | 51 | from nav2_common.launch import RewrittenYaml 52 | 53 | 54 | ARGUMENTS = [ 55 | DeclareLaunchArgument('use_sim_time', default_value='false', 56 | choices=['true', 'false'], 57 | description='Use sim time'), 58 | DeclareLaunchArgument('setup_path', 59 | default_value='/etc/clearpath/', 60 | description='Clearpath setup path'), 61 | DeclareLaunchArgument('scan_topic', 62 | default_value='', 63 | description='Override the default 2D laserscan topic') 64 | ] 65 | 66 | 67 | def launch_setup(context, *args, **kwargs): 68 | # Packages 69 | pkg_clearpath_nav2_demos = get_package_share_directory('clearpath_nav2_demos') 70 | pkg_nav2_bringup = get_package_share_directory('nav2_bringup') 71 | 72 | # Launch Configurations 73 | use_sim_time = LaunchConfiguration('use_sim_time') 74 | setup_path = LaunchConfiguration('setup_path') 75 | scan_topic = LaunchConfiguration('scan_topic') 76 | 77 | # Read robot YAML 78 | config = read_yaml(os.path.join(setup_path.perform(context), 'robot.yaml')) 79 | # Parse robot YAML into config 80 | clearpath_config = ClearpathConfig(config) 81 | 82 | namespace = clearpath_config.system.namespace 83 | platform_model = clearpath_config.platform.get_platform_model() 84 | 85 | # see if we've overridden the scan_topic 86 | eval_scan_topic = scan_topic.perform(context) 87 | if len(eval_scan_topic) == 0: 88 | eval_scan_topic = f'/{namespace}/sensors/lidar2d_0/scan' 89 | 90 | file_parameters = PathJoinSubstitution([ 91 | pkg_clearpath_nav2_demos, 92 | 'config', 93 | platform_model, 94 | 'nav2.yaml']) 95 | 96 | rewritten_parameters = RewrittenYaml( 97 | source_file=file_parameters, 98 | param_rewrites={ 99 | # the only *.topic parameters are scan.topic, so rewrite all of them to point to 100 | # our desired scan_topic 101 | 'topic': eval_scan_topic, 102 | }, 103 | convert_types=True 104 | ) 105 | 106 | launch_nav2 = PathJoinSubstitution( 107 | [pkg_nav2_bringup, 'launch', 'navigation_launch.py']) 108 | 109 | nav2 = GroupAction([ 110 | PushRosNamespace(namespace), 111 | SetRemap('/' + namespace + '/odom', 112 | '/' + namespace + '/platform/odom'), 113 | 114 | IncludeLaunchDescription( 115 | PythonLaunchDescriptionSource(launch_nav2), 116 | launch_arguments=[ 117 | ('use_sim_time', use_sim_time), 118 | ('params_file', rewritten_parameters), 119 | ('use_composition', 'False'), 120 | ('namespace', namespace) 121 | ] 122 | ), 123 | ]) 124 | 125 | return [nav2] 126 | 127 | 128 | def generate_launch_description(): 129 | ld = LaunchDescription(ARGUMENTS) 130 | ld.add_action(OpaqueFunction(function=launch_setup)) 131 | return ld 132 | -------------------------------------------------------------------------------- /launch/localization.launch.py: -------------------------------------------------------------------------------- 1 | # Software License Agreement (BSD) 2 | # 3 | # @author Roni Kreinin 4 | # @copyright (c) 2023, Clearpath Robotics, Inc., All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # * Redistributions of source code must retain the above copyright notice, 9 | # this list of conditions and the following disclaimer. 10 | # * Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions and the following disclaimer in the documentation 12 | # and/or other materials provided with the distribution. 13 | # * Neither the name of Clearpath Robotics nor the names of its contributors 14 | # may be used to endorse or promote products derived from this software 15 | # without specific prior written permission. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | import os 29 | 30 | from ament_index_python.packages import get_package_share_directory 31 | 32 | from clearpath_config.clearpath_config import ClearpathConfig 33 | from clearpath_config.common.utils.yaml import read_yaml 34 | 35 | from launch import LaunchDescription 36 | from launch.actions import ( 37 | DeclareLaunchArgument, 38 | GroupAction, 39 | IncludeLaunchDescription, 40 | OpaqueFunction 41 | ) 42 | from launch.launch_description_sources import PythonLaunchDescriptionSource 43 | 44 | from launch.substitutions import ( 45 | LaunchConfiguration, 46 | PathJoinSubstitution 47 | ) 48 | 49 | from launch_ros.actions import PushRosNamespace 50 | 51 | from nav2_common.launch import RewrittenYaml 52 | 53 | 54 | ARGUMENTS = [ 55 | DeclareLaunchArgument('use_sim_time', default_value='false', 56 | choices=['true', 'false'], 57 | description='Use sim time'), 58 | DeclareLaunchArgument('setup_path', 59 | default_value='/etc/clearpath/', 60 | description='Clearpath setup path'), 61 | DeclareLaunchArgument('scan_topic', 62 | default_value='', 63 | description='Override the default 2D laserscan topic') 64 | ] 65 | 66 | 67 | def launch_setup(context, *args, **kwargs): 68 | # Packages 69 | pkg_clearpath_nav2_demos = get_package_share_directory('clearpath_nav2_demos') 70 | pkg_nav2_bringup = get_package_share_directory('nav2_bringup') 71 | 72 | # Launch Configurations 73 | use_sim_time = LaunchConfiguration('use_sim_time') 74 | setup_path = LaunchConfiguration('setup_path') 75 | map = LaunchConfiguration('map') # noqa:A001 76 | scan_topic = LaunchConfiguration('scan_topic') 77 | 78 | # Read robot YAML 79 | config = read_yaml(os.path.join(setup_path.perform(context), 'robot.yaml')) 80 | # Parse robot YAML into config 81 | clearpath_config = ClearpathConfig(config) 82 | 83 | namespace = clearpath_config.system.namespace 84 | platform_model = clearpath_config.platform.get_platform_model() 85 | 86 | eval_scan_topic = scan_topic.perform(context) 87 | if len(eval_scan_topic) == 0: 88 | eval_scan_topic = f'/{namespace}/sensors/lidar2d_0/scan' 89 | 90 | file_parameters = PathJoinSubstitution([ 91 | pkg_clearpath_nav2_demos, 92 | 'config', 93 | platform_model, 94 | 'localization.yaml']) 95 | 96 | rewritten_parameters = RewrittenYaml( 97 | source_file=file_parameters, 98 | param_rewrites={ 99 | 'scan_topic': eval_scan_topic, 100 | }, 101 | convert_types=True 102 | ) 103 | 104 | launch_localization = PathJoinSubstitution( 105 | [pkg_nav2_bringup, 'launch', 'localization_launch.py']) 106 | 107 | localization = GroupAction([ 108 | PushRosNamespace(namespace), 109 | 110 | IncludeLaunchDescription( 111 | PythonLaunchDescriptionSource(launch_localization), 112 | launch_arguments=[ 113 | ('namespace', namespace), 114 | ('map', map), 115 | ('use_sim_time', use_sim_time), 116 | ('params_file', rewritten_parameters) 117 | ] 118 | ), 119 | ]) 120 | 121 | return [localization] 122 | 123 | 124 | def generate_launch_description(): 125 | pkg_clearpath_nav2_demos = get_package_share_directory('clearpath_nav2_demos') 126 | 127 | map_arg = DeclareLaunchArgument( 128 | 'map', 129 | default_value=PathJoinSubstitution([pkg_clearpath_nav2_demos, 'maps', 'warehouse.yaml']), 130 | description='Full path to map yaml file to load') 131 | 132 | ld = LaunchDescription(ARGUMENTS) 133 | ld.add_action(map_arg) 134 | ld.add_action(OpaqueFunction(function=launch_setup)) 135 | return ld 136 | -------------------------------------------------------------------------------- /launch/slam.launch.py: -------------------------------------------------------------------------------- 1 | # Software License Agreement (BSD) 2 | # 3 | # @author Roni Kreinin 4 | # @copyright (c) 2023, Clearpath Robotics, Inc., All rights reserved. 5 | # 6 | # Redistribution and use in source and binary forms, with or without 7 | # modification, are permitted provided that the following conditions are met: 8 | # * Redistributions of source code must retain the above copyright notice, 9 | # this list of conditions and the following disclaimer. 10 | # * Redistributions in binary form must reproduce the above copyright notice, 11 | # this list of conditions and the following disclaimer in the documentation 12 | # and/or other materials provided with the distribution. 13 | # * Neither the name of Clearpath Robotics nor the names of its contributors 14 | # may be used to endorse or promote products derived from this software 15 | # without specific prior written permission. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 21 | # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | # POSSIBILITY OF SUCH DAMAGE. 28 | import os 29 | 30 | from ament_index_python.packages import get_package_share_directory 31 | 32 | from clearpath_config.clearpath_config import ClearpathConfig 33 | from clearpath_config.common.utils.yaml import read_yaml 34 | 35 | from launch import LaunchDescription 36 | from launch.actions import ( 37 | DeclareLaunchArgument, 38 | GroupAction, 39 | IncludeLaunchDescription, 40 | OpaqueFunction, 41 | ) 42 | from launch.conditions import IfCondition, UnlessCondition 43 | from launch.launch_description_sources import PythonLaunchDescriptionSource 44 | from launch.substitutions import ( 45 | LaunchConfiguration, 46 | PathJoinSubstitution, 47 | ) 48 | 49 | from launch_ros.actions import PushRosNamespace, SetRemap 50 | 51 | from nav2_common.launch import RewrittenYaml 52 | 53 | 54 | ARGUMENTS = [ 55 | DeclareLaunchArgument('use_sim_time', default_value='false', 56 | choices=['true', 'false'], 57 | description='Use sim time'), 58 | DeclareLaunchArgument('setup_path', 59 | default_value='/etc/clearpath/', 60 | description='Clearpath setup path'), 61 | DeclareLaunchArgument('autostart', default_value='true', 62 | choices=['true', 'false'], 63 | description='Automatically startup the slamtoolbox. Ignored when use_lifecycle_manager is true.'), # noqa: E501 64 | DeclareLaunchArgument('use_lifecycle_manager', default_value='false', 65 | choices=['true', 'false'], 66 | description='Enable bond connection during node activation'), 67 | DeclareLaunchArgument('sync', default_value='true', 68 | choices=['true', 'false'], 69 | description='Use synchronous SLAM'), 70 | DeclareLaunchArgument('scan_topic', 71 | default_value='', 72 | description='Override the default 2D laserscan topic') 73 | ] 74 | 75 | 76 | def launch_setup(context, *args, **kwargs): 77 | # Packages 78 | pkg_clearpath_nav2_demos = get_package_share_directory('clearpath_nav2_demos') 79 | pkg_slam_toolbox = get_package_share_directory('slam_toolbox') 80 | 81 | # Launch Configurations 82 | use_sim_time = LaunchConfiguration('use_sim_time') 83 | setup_path = LaunchConfiguration('setup_path') 84 | autostart = LaunchConfiguration('autostart') 85 | use_lifecycle_manager = LaunchConfiguration('use_lifecycle_manager') 86 | sync = LaunchConfiguration('sync') 87 | scan_topic = LaunchConfiguration('scan_topic') 88 | 89 | # Read robot YAML 90 | config = read_yaml(os.path.join(setup_path.perform(context), 'robot.yaml')) 91 | # Parse robot YAML into config 92 | clearpath_config = ClearpathConfig(config) 93 | 94 | namespace = clearpath_config.system.namespace 95 | platform_model = clearpath_config.platform.get_platform_model() 96 | eval_scan_topic = scan_topic.perform(context) 97 | 98 | if len(eval_scan_topic) == 0: 99 | eval_scan_topic = f'/{namespace}/sensors/lidar2d_0/scan' 100 | 101 | file_parameters = PathJoinSubstitution([ 102 | pkg_clearpath_nav2_demos, 103 | 'config', 104 | platform_model, 105 | 'slam.yaml']) 106 | 107 | rewritten_parameters = RewrittenYaml( 108 | source_file=file_parameters, 109 | root_key=namespace, 110 | param_rewrites={ 111 | 'map_name': '/' + namespace + '/map', 112 | 'scan_topic': eval_scan_topic, 113 | }, 114 | convert_types=True 115 | ) 116 | 117 | launch_slam_sync = PathJoinSubstitution( 118 | [pkg_slam_toolbox, 'launch', 'online_sync_launch.py']) 119 | 120 | launch_slam_async = PathJoinSubstitution( 121 | [pkg_slam_toolbox, 'launch', 'online_async_launch.py']) 122 | 123 | slam = GroupAction([ 124 | PushRosNamespace(namespace), 125 | 126 | SetRemap('/tf', '/' + namespace + '/tf'), 127 | SetRemap('/tf_static', '/' + namespace + '/tf_static'), 128 | 129 | IncludeLaunchDescription( 130 | PythonLaunchDescriptionSource(launch_slam_sync), 131 | launch_arguments=[ 132 | ('use_sim_time', use_sim_time), 133 | ('autostart', autostart), 134 | ('use_lifecycle_manager', use_lifecycle_manager), 135 | ('slam_params_file', rewritten_parameters) 136 | ], 137 | condition=IfCondition(sync) 138 | ), 139 | 140 | IncludeLaunchDescription( 141 | PythonLaunchDescriptionSource(launch_slam_async), 142 | launch_arguments=[ 143 | ('use_sim_time', use_sim_time), 144 | ('autostart', autostart), 145 | ('use_lifecycle_manager', use_lifecycle_manager), 146 | ('slam_params_file', rewritten_parameters) 147 | ], 148 | condition=UnlessCondition(sync) 149 | ) 150 | ]) 151 | 152 | return [slam] 153 | 154 | 155 | def generate_launch_description(): 156 | ld = LaunchDescription(ARGUMENTS) 157 | ld.add_action(OpaqueFunction(function=launch_setup)) 158 | return ld 159 | -------------------------------------------------------------------------------- /config/w200/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.76, 0.69], [0.76, -0.69], [-0.76, -0.69], [-0.76, 0.69] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 1.0 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.76, 0.69], [0.76, -0.69], [-0.76, -0.69], [-0.76, 0.69] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 1.0 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [5.0, 0.0, 4.0] 273 | min_velocity: [-5.0, 0.0, -4.0] 274 | max_accel: [5.0, 0.0, 40.0] 275 | max_decel: [-5.0, 0.0, -40.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/a200/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.55, 0.45], [0.55, -0.45], [-0.55, -0.45], [-0.55, 0.45] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.55, 0.45], [0.55, -0.45], [-0.55, -0.45], [-0.55, 0.45] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | 255 | waypoint_follower: 256 | ros__parameters: 257 | enable_stamped_cmd_vel: true 258 | loop_rate: 20 259 | stop_on_failure: false 260 | action_server_result_timeout: 900.0 261 | waypoint_task_executor_plugin: "wait_at_waypoint" 262 | wait_at_waypoint: 263 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 264 | enabled: true 265 | waypoint_pause_duration: 200 266 | 267 | velocity_smoother: 268 | ros__parameters: 269 | enable_stamped_cmd_vel: true 270 | smoothing_frequency: 20.0 271 | scale_velocities: False 272 | feedback: "OPEN_LOOP" 273 | max_velocity: [1.0, 0.0, 1.0] 274 | min_velocity: [-1.0, 0.0, -1.0] 275 | max_accel: [1.0, 0.0, 1.0] 276 | max_decel: [-1.0, 0.0, -1.0] 277 | odom_topic: "platform/odom/filtered" 278 | odom_duration: 0.1 279 | deadband_velocity: [0.0, 0.0, 0.0] 280 | velocity_timeout: 1.0 281 | 282 | collision_monitor: 283 | ros__parameters: 284 | enable_stamped_cmd_vel: true 285 | base_frame_id: "base_link" 286 | odom_frame_id: "odom" 287 | cmd_vel_in_topic: "cmd_vel_smoothed" 288 | cmd_vel_out_topic: "cmd_vel" 289 | state_topic: "collision_monitor_state" 290 | transform_tolerance: 0.2 291 | source_timeout: 1.0 292 | base_shift_correction: True 293 | stop_pub_timeout: 2.0 294 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 295 | # and robot footprint for "approach" action type. 296 | polygons: ["FootprintApproach"] 297 | FootprintApproach: 298 | type: "polygon" 299 | action_type: "approach" 300 | footprint_topic: "local_costmap/published_footprint" 301 | time_before_collision: 1.2 302 | simulation_time_step: 0.1 303 | min_points: 6 304 | visualize: False 305 | enabled: True 306 | observation_sources: ["scan"] 307 | scan: 308 | type: "scan" 309 | topic: "sensors/lidar2d_0/scan" 310 | min_height: 0.15 311 | max_height: 2.0 312 | enabled: True 313 | 314 | docking_server: 315 | ros__parameters: 316 | enable_stamped_cmd_vel: true 317 | controller_frequency: 50.0 318 | initial_perception_timeout: 5.0 319 | wait_charge_timeout: 5.0 320 | dock_approach_timeout: 30.0 321 | undock_linear_tolerance: 0.05 322 | undock_angular_tolerance: 0.1 323 | max_retries: 3 324 | base_frame: "base_link" 325 | fixed_frame: "odom" 326 | dock_backwards: false 327 | dock_prestaging_tolerance: 0.5 328 | 329 | # Types of docks 330 | dock_plugins: ['simple_charging_dock'] 331 | simple_charging_dock: 332 | plugin: 'opennav_docking::SimpleChargingDock' 333 | docking_threshold: 0.05 334 | staging_x_offset: -0.7 335 | use_external_detection_pose: true 336 | use_battery_status: false # true 337 | use_stall_detection: false # true 338 | 339 | external_detection_timeout: 1.0 340 | external_detection_translation_x: -0.18 341 | external_detection_translation_y: 0.0 342 | external_detection_rotation_roll: -1.57 343 | external_detection_rotation_pitch: -1.57 344 | external_detection_rotation_yaw: 0.0 345 | filter_coef: 0.1 346 | 347 | # Dock instances 348 | # The following example illustrates configuring dock instances. 349 | # docks: ['home_dock'] # Input your docks here 350 | # home_dock: 351 | # type: 'simple_charging_dock' 352 | # frame: map 353 | # pose: [0.0, 0.0, 0.0] 354 | 355 | controller: 356 | k_phi: 3.0 357 | k_delta: 2.0 358 | v_linear_min: 0.15 359 | v_linear_max: 0.15 360 | -------------------------------------------------------------------------------- /config/a300/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.495, 0.349], [0.495, -0.349], [-0.495, -0.349], [-0.495, 0.349] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.495, 0.349], [0.495, -0.349], [-0.495, -0.349], [-0.495, 0.349] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [2.0, 0.0, 2.0] 273 | min_velocity: [-2.0, 0.0, -2.0] 274 | max_accel: [4.0, 0.0, 4.0] 275 | max_decel: [-4.0, 0.0, -4.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/do100/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.343, 0.2585], [0.343, -0.2585], [-0.343, -0.2585], [-0.343, 0.2585] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.343, 0.2585], [0.343, -0.2585], [-0.343, -0.2585], [-0.343, 0.2585] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [1.3, 1.3, 4.0] 273 | min_velocity: [-1.3,-1.3, -4.0] 274 | max_accel: [1.0, 1.0, 2.0] 275 | max_decel: [-1.0, -1.0, -2.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/do150/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.343, 0.2585], [0.343, -0.2585], [-0.343, -0.2585], [-0.343, 0.2585] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.343, 0.2585], [0.343, -0.2585], [-0.343, -0.2585], [-0.343, 0.2585] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [1.3, 1.3, 4.0] 273 | min_velocity: [-1.3,-1.3, -4.0] 274 | max_accel: [1.0, 1.0, 2.0] 275 | max_decel: [-1.0, -1.0, -2.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/r100/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.480, 0.3965], [0.480, -0.3965], [-0.480, -0.3965], [-0.480, 0.3965] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.480, 0.3965], [0.480, -0.3965], [-0.480, -0.3965], [-0.480, 0.3965] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [1.3, 1.3, 4.0] 273 | min_velocity: [-1.3,-1.3, -4.0] 274 | max_accel: [1.0, 1.0, 2.0] 275 | max_decel: [-1.0, -1.0, -2.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/j100/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.254, 0.2159], [0.254, -0.2159], [-0.254, -0.2159], [-0.254, 0.2159] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.254, 0.2159], [0.254, -0.2159], [-0.254, -0.2159], [-0.254, 0.2159] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [2.0, 0.0, 4.0] 273 | min_velocity: [-2.0, 0.0, -4.0] 274 | max_accel: [20.0, 0.0, 25.0] 275 | max_decel: [-20.0, 0.0, -25.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/dd100/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.2755, 0.2585], [0.2755, -0.2585], [-0.2755, -0.2585], [-0.2755, 0.2585] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.2755, 0.2585], [0.2755, -0.2585], [-0.2755, -0.2585], [-0.2755, 0.2585] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [1.3, 0.0, 4.0] 273 | min_velocity: [-1.3, 0.0, -4.0] 274 | max_accel: [1.0, 0.0, 2.0] 275 | max_decel: [-1.0, 0.0, -2.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | -------------------------------------------------------------------------------- /config/dd150/nav2.yaml: -------------------------------------------------------------------------------- 1 | bt_navigator: 2 | ros__parameters: 3 | enable_stamped_cmd_vel: true 4 | global_frame: map 5 | robot_base_frame: base_link 6 | odom_topic: platform/odom/filtered 7 | bt_loop_duration: 10 8 | default_server_timeout: 20 9 | wait_for_service_timeout: 1000 10 | action_server_result_timeout: 900.0 11 | navigators: ["navigate_to_pose", "navigate_through_poses"] 12 | navigate_to_pose: 13 | plugin: "nav2_bt_navigator::NavigateToPoseNavigator" 14 | navigate_through_poses: 15 | plugin: "nav2_bt_navigator::NavigateThroughPosesNavigator" 16 | error_code_names: 17 | - compute_path_error_code 18 | - follow_path_error_code 19 | 20 | controller_server: 21 | ros__parameters: 22 | enable_stamped_cmd_vel: true 23 | controller_frequency: 20.0 24 | min_x_velocity_threshold: 0.001 25 | min_y_velocity_threshold: 0.5 26 | min_theta_velocity_threshold: 0.001 27 | failure_tolerance: 0.3 28 | progress_checker_plugins: ["progress_checker"] 29 | goal_checker_plugins: ["general_goal_checker"] 30 | controller_plugins: ["FollowPath"] 31 | use_realtime_priority: false 32 | progress_checker: 33 | plugin: "nav2_controller::SimpleProgressChecker" 34 | required_movement_radius: 0.5 35 | movement_time_allowance: 10.0 36 | general_goal_checker: 37 | stateful: true 38 | plugin: "nav2_controller::SimpleGoalChecker" 39 | xy_goal_tolerance: 0.25 40 | yaw_goal_tolerance: 0.25 41 | FollowPath: 42 | plugin: "nav2_mppi_controller::MPPIController" 43 | time_steps: 56 44 | model_dt: 0.05 45 | batch_size: 2000 46 | ax_max: 3.0 47 | ax_min: -3.0 48 | ay_max: 3.0 49 | az_max: 3.5 50 | vx_std: 0.2 51 | vy_std: 0.2 52 | wz_std: 0.4 53 | vx_max: 0.5 54 | vx_min: -0.35 55 | vy_max: 0.5 56 | wz_max: 1.9 57 | iteration_count: 1 58 | prune_distance: 1.7 59 | transform_tolerance: 0.1 60 | temperature: 0.3 61 | gamma: 0.015 62 | motion_model: "DiffDrive" 63 | visualize: true 64 | regenerate_noises: true 65 | TrajectoryVisualizer: 66 | trajectory_step: 5 67 | time_step: 3 68 | AckermannConstraints: 69 | min_turning_r: 0.2 70 | critics: [ 71 | "ConstraintCritic", "CostCritic", "GoalCritic", 72 | "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", 73 | "PathAngleCritic", "PreferForwardCritic"] 74 | ConstraintCritic: 75 | enabled: true 76 | cost_power: 1 77 | cost_weight: 4.0 78 | GoalCritic: 79 | enabled: true 80 | cost_power: 1 81 | cost_weight: 5.0 82 | threshold_to_consider: 1.4 83 | GoalAngleCritic: 84 | enabled: true 85 | cost_power: 1 86 | cost_weight: 3.0 87 | threshold_to_consider: 0.5 88 | PreferForwardCritic: 89 | enabled: true 90 | cost_power: 1 91 | cost_weight: 5.0 92 | threshold_to_consider: 0.5 93 | CostCritic: 94 | enabled: true 95 | cost_power: 1 96 | cost_weight: 3.81 97 | critical_cost: 300.0 98 | consider_footprint: true 99 | collision_cost: 1000000.0 100 | near_goal_distance: 1.0 101 | trajectory_point_step: 2 102 | PathAlignCritic: 103 | enabled: true 104 | cost_power: 1 105 | cost_weight: 14.0 106 | max_path_occupancy_ratio: 0.05 107 | trajectory_point_step: 4 108 | threshold_to_consider: 0.5 109 | offset_from_furthest: 20 110 | use_path_orientations: false 111 | PathFollowCritic: 112 | enabled: true 113 | cost_power: 1 114 | cost_weight: 5.0 115 | offset_from_furthest: 5 116 | threshold_to_consider: 1.4 117 | PathAngleCritic: 118 | enabled: true 119 | cost_power: 1 120 | cost_weight: 2.0 121 | offset_from_furthest: 4 122 | threshold_to_consider: 0.5 123 | max_angle_to_furthest: 1.0 124 | mode: 0 125 | 126 | local_costmap: 127 | local_costmap: 128 | ros__parameters: 129 | enable_stamped_cmd_vel: true 130 | update_frequency: 5.0 131 | publish_frequency: 2.0 132 | global_frame: odom 133 | robot_base_frame: base_link 134 | rolling_window: true 135 | width: 5 136 | height: 5 137 | resolution: 0.06 138 | footprint: "[ [0.2755, 0.2585], [0.2755, -0.2585], [-0.2755, -0.2585], [-0.2755, 0.2585] ]" 139 | always_send_full_costmap: true 140 | plugins: ["static_layer", "voxel_layer", "inflation_layer"] 141 | inflation_layer: 142 | plugin: "nav2_costmap_2d::InflationLayer" 143 | cost_scaling_factor: 4.0 144 | inflation_radius: 0.8 145 | voxel_layer: 146 | plugin: "nav2_costmap_2d::VoxelLayer" 147 | enabled: true 148 | publish_voxel_map: true 149 | origin_z: 0.0 150 | z_resolution: 0.05 151 | z_voxels: 16 152 | max_obstacle_height: 2.0 153 | mark_threshold: 0 154 | observation_sources: scan 155 | scan: 156 | topic: sensors/lidar2d_0/scan 157 | max_obstacle_height: 2.0 158 | clearing: true 159 | marking: true 160 | data_type: "LaserScan" 161 | raytrace_max_range: 3.0 162 | raytrace_min_range: 0.0 163 | obstacle_max_range: 2.5 164 | obstacle_min_range: 0.0 165 | static_layer: 166 | plugin: "nav2_costmap_2d::StaticLayer" 167 | map_subscribe_transient_local: true 168 | 169 | global_costmap: 170 | global_costmap: 171 | ros__parameters: 172 | enable_stamped_cmd_vel: true 173 | update_frequency: 1.0 174 | publish_frequency: 1.0 175 | global_frame: map 176 | robot_base_frame: base_link 177 | footprint: "[ [0.2755, 0.2585], [0.2755, -0.2585], [-0.2755, -0.2585], [-0.2755, 0.2585] ]" 178 | resolution: 0.06 179 | track_unknown_space: true 180 | always_send_full_costmap: true 181 | plugins: ["static_layer", "obstacle_layer", "inflation_layer"] 182 | obstacle_layer: 183 | plugin: "nav2_costmap_2d::ObstacleLayer" 184 | enabled: true 185 | observation_sources: scan 186 | scan: 187 | topic: sensors/lidar2d_0/scan 188 | max_obstacle_height: 2.0 189 | clearing: true 190 | marking: true 191 | data_type: "LaserScan" 192 | raytrace_max_range: 3.0 193 | raytrace_min_range: 0.0 194 | obstacle_max_range: 2.5 195 | obstacle_min_range: 0.0 196 | static_layer: 197 | plugin: "nav2_costmap_2d::StaticLayer" 198 | map_subscribe_transient_local: true 199 | inflation_layer: 200 | plugin: "nav2_costmap_2d::InflationLayer" 201 | cost_scaling_factor: 4.0 202 | inflation_radius: 0.8 203 | 204 | planner_server: 205 | ros__parameters: 206 | enable_stamped_cmd_vel: true 207 | # expected_planner_frequency: 20.0 208 | planner_plugins: ["GridBased"] 209 | GridBased: 210 | plugin: "nav2_navfn_planner::NavfnPlanner" 211 | tolerance: 0.5 212 | use_astar: false 213 | allow_unknown: true 214 | 215 | smoother_server: 216 | ros__parameters: 217 | enable_stamped_cmd_vel: true 218 | smoother_plugins: ["simple_smoother"] 219 | simple_smoother: 220 | plugin: "nav2_smoother::SimpleSmoother" 221 | tolerance: 1.0e-10 222 | max_its: 1000 223 | do_refinement: true 224 | 225 | behavior_server: 226 | ros__parameters: 227 | enable_stamped_cmd_vel: true 228 | local_costmap_topic: local_costmap/costmap_raw 229 | global_costmap_topic: global_costmap/costmap_raw 230 | local_footprint_topic: local_costmap/published_footprint 231 | global_footprint_topic: global_costmap/published_footprint 232 | cycle_frequency: 10.0 233 | behavior_plugins: ["spin", "backup", "drive_on_heading", "assisted_teleop", "wait"] 234 | spin: 235 | plugin: "nav2_behaviors::Spin" 236 | backup: 237 | plugin: "nav2_behaviors::BackUp" 238 | drive_on_heading: 239 | plugin: "nav2_behaviors::DriveOnHeading" 240 | wait: 241 | plugin: "nav2_behaviors::Wait" 242 | assisted_teleop: 243 | plugin: "nav2_behaviors::AssistedTeleop" 244 | global_frame: map 245 | local_frame: odom 246 | robot_base_frame: base_link 247 | transform_tolerance: 0.1 248 | enable_stamped_cmd_vel: true 249 | simulate_ahead_time: 2.0 250 | max_rotational_vel: 1.0 251 | min_rotational_vel: 0.2 252 | rotational_acc_lim: 0.5 253 | 254 | waypoint_follower: 255 | ros__parameters: 256 | enable_stamped_cmd_vel: true 257 | loop_rate: 20 258 | stop_on_failure: false 259 | action_server_result_timeout: 900.0 260 | waypoint_task_executor_plugin: "wait_at_waypoint" 261 | wait_at_waypoint: 262 | plugin: "nav2_waypoint_follower::WaitAtWaypoint" 263 | enabled: true 264 | waypoint_pause_duration: 200 265 | 266 | velocity_smoother: 267 | ros__parameters: 268 | enable_stamped_cmd_vel: true 269 | smoothing_frequency: 20.0 270 | scale_velocities: False 271 | feedback: "OPEN_LOOP" 272 | max_velocity: [1.3, 0.0, 4.0] 273 | min_velocity: [-1.3, 0.0, -4.0] 274 | max_accel: [1.0, 0.0, 2.0] 275 | max_decel: [-1.0, 0.0, -2.0] 276 | odom_topic: "platform/odom/filtered" 277 | odom_duration: 0.1 278 | deadband_velocity: [0.0, 0.0, 0.0] 279 | velocity_timeout: 1.0 280 | 281 | collision_monitor: 282 | ros__parameters: 283 | enable_stamped_cmd_vel: true 284 | base_frame_id: "base_link" 285 | odom_frame_id: "odom" 286 | cmd_vel_in_topic: "cmd_vel_smoothed" 287 | cmd_vel_out_topic: "cmd_vel" 288 | state_topic: "collision_monitor_state" 289 | transform_tolerance: 0.2 290 | source_timeout: 1.0 291 | base_shift_correction: True 292 | stop_pub_timeout: 2.0 293 | # Polygons represent zone around the robot for "stop", "slowdown" and "limit" action types, 294 | # and robot footprint for "approach" action type. 295 | polygons: ["FootprintApproach"] 296 | FootprintApproach: 297 | type: "polygon" 298 | action_type: "approach" 299 | footprint_topic: "local_costmap/published_footprint" 300 | time_before_collision: 1.2 301 | simulation_time_step: 0.1 302 | min_points: 6 303 | visualize: False 304 | enabled: True 305 | observation_sources: ["scan"] 306 | scan: 307 | type: "scan" 308 | topic: "sensors/lidar2d_0/scan" 309 | min_height: 0.15 310 | max_height: 2.0 311 | enabled: True 312 | 313 | docking_server: 314 | ros__parameters: 315 | enable_stamped_cmd_vel: true 316 | controller_frequency: 50.0 317 | initial_perception_timeout: 5.0 318 | wait_charge_timeout: 5.0 319 | dock_approach_timeout: 30.0 320 | undock_linear_tolerance: 0.05 321 | undock_angular_tolerance: 0.1 322 | max_retries: 3 323 | base_frame: "base_link" 324 | fixed_frame: "odom" 325 | dock_backwards: false 326 | dock_prestaging_tolerance: 0.5 327 | 328 | # Types of docks 329 | dock_plugins: ['simple_charging_dock'] 330 | simple_charging_dock: 331 | plugin: 'opennav_docking::SimpleChargingDock' 332 | docking_threshold: 0.05 333 | staging_x_offset: -0.7 334 | use_external_detection_pose: true 335 | use_battery_status: false # true 336 | use_stall_detection: false # true 337 | 338 | external_detection_timeout: 1.0 339 | external_detection_translation_x: -0.18 340 | external_detection_translation_y: 0.0 341 | external_detection_rotation_roll: -1.57 342 | external_detection_rotation_pitch: -1.57 343 | external_detection_rotation_yaw: 0.0 344 | filter_coef: 0.1 345 | 346 | # Dock instances 347 | # The following example illustrates configuring dock instances. 348 | # docks: ['home_dock'] # Input your docks here 349 | # home_dock: 350 | # type: 'simple_charging_dock' 351 | # frame: map 352 | # pose: [0.0, 0.0, 0.0] 353 | 354 | controller: 355 | k_phi: 3.0 356 | k_delta: 2.0 357 | v_linear_min: 0.15 358 | v_linear_max: 0.15 359 | --------------------------------------------------------------------------------