EasyNavigation Logo
latest
  • Build & Install
    • Supported platforms
    • Installation methods
    • Prerequisites
    • Install from binaries (APT)
      • Jazzy
      • Kilted
      • Lyrical
      • Installing plugins (APT)
    • Install via Pixi
      • Rolling
      • Lyrical
      • Kilted
      • Jazzy
      • Installing plugins (Pixi)
    • Build from source
      • Workspace layout
      • Clone sources
        • Rolling
        • Lyrical
        • Kilted
        • Jazzy
      • Install dependencies
      • Configure and build
      • Source the overlay
      • Run tests (optional)
    • Troubleshooting
    • Uninstall / clean
    • Next steps
  • Getting Started
    • Overview
    • Workspace layout
      • Build and source the workspace
    • Repository overview
    • Simulation setup
    • Launching EasyNav
    • Visualizing in RViz2
    • Sending navigation goals
    • Visualizing internal process with the TUI
    • Troubleshooting
    • Next steps
  • EasyNav Plugins
    • Supported ROS 2 versions
    • Repository overview
    • 🧭 Planners
    • βš™οΈ Controllers
    • πŸ—ΊοΈ Maps Managers
    • πŸ“ Localizers
    • License
  • Simulations and Real Robots
  • HowTos and Practical Guides
    • πŸ“˜ Overview
    • Simple Stack
      • Mapping with SLAM Toolbox and EasyNav
        • Overview
        • Setup
        • Running SLAM Toolbox
        • Step-by-Step Instructions
        • Using EasyNav to Receive and Save the Map
        • Saving and Reusing the Map
        • Notes
      • Navigating with SimpleStack and EasyNav
        • Overview
        • Setup
        • Creating a Parameter File
        • Running the Simulation
        • Notes
    • Costmap Stack
      • Mapping with the Costmap Stack
        • Setup
        • Overview
        • Example parameters
        • Running and visualizing
        • Saving maps
      • Navigating with the Costmap Stack
        • Setup
        • Mapping and Preparation
        • Creating a Parameter File
        • Running the Simulation
        • Notes
      • Deploying EasyNav on a Real iCreate3 Robot
        • Setup
        • Hardware Setup
        • ROS 2 Setup on the Raspberry Pi
        • EasyNav Setup on the Raspberry Pi
        • Mapping
        • Navigation
        • Notes
      • Using the Routes Maps Manager with Costmaps
        • Setup
        • 1) Creating routes
        • 2) Using the routes for navigation
    • GridMap Stack
      • GridMap Mapping with LidarSLAM and EasyNav
        • Setup
        • Overview
        • 1. Start the Simulator
        • 2. Launch LidarSLAM
        • 3. Build the Map with Teleoperation
        • 4. Run the GridMap Builder (PointCloud β†’ GridMap)
        • 5. Run the Gridmap Maps Manager
        • 6. Save the GridMap to Disk
      • Outdoor Navigation with GridMaps (Summit)
        • Overview
        • Setup
        • 1. Launch the Simulator
        • 2. Launch EasyNav with GridMap and LidarSLAM
        • 3. Commanding Navigation Goals
        • Notes
    • Bonxai / NavMap Stack
      • Building Bonxai and NavMap Maps from a Recorded ROSBag
        • Setup
        • Overview
        • 1. Align the Frames (world β†’ map)
        • 2. Play the ROSBag
        • 3. Launch EasyNav with Bonxai and NavMap Maps Managers
        • 4. NavMap Build Parameters
        • 5. Visualize in RViz2
        • 6. Save the Maps
        • 7. Summary
    • Controllers
      • SeReST Controller Fine-Tuning
        • Overview
        • Quick-Start Defaults
        • Core Concepts
        • Parameter-by-Parameter Guidance
        • Troubleshooting by Symptom
        • Recommended Tuning Order
        • FAQ
    • Behaviors
      • Patrolling Behavior
        • Overview
        • Setup
        • Waypoint Configuration
        • Launching Navigation
        • Running the Patrolling Behavior
        • Code Explanation (C++ Version)
        • Code Explanation (Python Version)
        • Notes
    • General
      • Multi-Robot Navigation with EasyNav
        • Overview
        • Setup
        • 1. Topic Naming and TF Management (Plugin developers)
        • 2. Launching in Simulation
        • 3. Example Parameters
        • Tips & Gotchas
      • ros2 easynav β€” EasyNav CLI Extensions
        • NAME
        • SYNOPSIS
        • DESCRIPTION
        • COMMANDS
        • OPTIONS (Common)
        • EXIT STATUS
        • EXAMPLES
        • SEE ALSO
      • Docker Setup with Zenoh Bridge (Cross-Distro)
        • Overview
        • Step 1: Building the Docker Image (Rolling)
        • Step 2: Preparing the Robot (Host)
        • Step 3: Running the Container
        • Step 4: Visualization from a Remote PC
      • Writing a Custom Perception Plugin
        • When do you need a custom perception plugin?
        • Setup
        • The PerceptionHandler interface
        • Walking through AltIMUPerceptionHandler
        • Registering the plugin
        • Using the plugin
        • Writing a plugin for a genuinely new message type
        • Notes
  • Developers Guide
    • Core Design and Architecture
      • Coordinate Frames (TF)
      • NavState: The Shared Blackboard
      • Real-Time Execution Model
    • How to use the NavState BlackBoard
      • Overview
      • Basic API
      • Examples from Plugins
      • Advanced Features
      • Best Practices
      • Conclusion
    • Sensor Input and Perception Handling
      • Sensor Configuration
      • Grouping sensors: group: is optional and changes visibility
      • Processing Point Perceptions
      • Operation Summary
      • Lazy operations, frames and collapse
        • filter(min_bounds, max_bounds, lazy_post_fuse)
        • collapse(collapse_dims, lazy)
      • Example: Updating a Map
      • Fused Visualization
      • Other Perception Types
      • Extending to Other Modalities
    • Sending Navigation Commands to EasyNav
      • Primary Method: /easynav_control Topic
        • Protocol Description
        • Using GoalManagerClient
      • Secondary Method: /goal_pose Topic
      • Conclusion
    • Overview
    • Further Reading
  • About and Contact
    • About
    • Contact
EasyNavigation
Edit
  • HowTos and Practical Guides
  • Navigating with the Costmap Stack

Navigating with the Costmap Stack

This HowTo shows how to perform navigation with the Costmap Stack in EasyNavigation (EasyNav), using a map produced with SLAM Toolbox. It assumes that the environment has already been mapped (see Mapping with the Costmap Stack) and that you will now configure and run EasyNav to navigate using the generated map.

On this page

  • Setup

  • Mapping and Preparation

  • Creating a Parameter File

  • Running the Simulation

  • Notes

Setup

Before starting, complete the installation steps in Build & Install (any of APT, Pixi or source). This tutorial’s example configuration uses the SeReST Controller, Costmap Localizer, Costmap Maps Manager and Costmap Planner plugins, which the core easynav package does not include:

  • APT:

    sudo apt install \
      ros-<distro>-easynav-serest-controller \
      ros-<distro>-easynav-costmap-localizer \
      ros-<distro>-easynav-costmap-maps-manager \
      ros-<distro>-easynav-costmap-planner
    
  • Pixi:

    pixi add \
      ros-<distro>-easynav-serest-controller \
      ros-<distro>-easynav-costmap-localizer \
      ros-<distro>-easynav-costmap-maps-manager \
      ros-<distro>-easynav-costmap-planner
    
  • Source: already built if you cloned easynav_plugins as described in Build from source.

You will also need the demo/simulation repositories, which are only distributed as source β€” clone them into ~/easynav_ws/src regardless of install method:

cd ~/easynav_ws/src
git clone https://github.com/EasyNavigation/easynav_playground_kobuki.git
git clone https://github.com/EasyNavigation/easynav_indoor_testcase.git

Then build and source the workspace as described in Build and source the workspace.

β€”

Mapping and Preparation

If you have not yet created a map, follow the steps in Mapping with the Costmap Stack. Once the environment is mapped, save the resulting map files (YAML + image) in the directory of any package in your workspace β€” for example, inside easynav_indoor_testcase/maps.

You can later reference this map using the parameters package and map_path_file in your configuration file. (Alternatively, you may use an absolute path with map_path_file alone.)

β€”

Creating a Parameter File

In this example, we will use:

  • The SeReST controller for motion control.

  • The AMCL localizer for probabilistic localization, running over the Costmap.

  • The Costmap Maps Manager to load the graded map produced by SLAM Toolbox (YAML + image pair).

Below is a minimal configuration that allows a simulated robot to navigate in a mapped environment. This matches the shipped reference file easynav_indoor_testcase/robots_params/costmap.serest.params.yaml.

controller_node:
  ros__parameters:
    use_sim_time: true
    colision_checker:
      active: true
      debug_markers: true
      downsample_leaf_size: 0.05
      robot_radius: 0.30
      brake_acc: 1.0
      safety_margin: 0.05
    controller_types: [serest]
    serest:
      rt_freq: 30.0
      plugin: easynav_serest_controller/SerestController
      allow_reverse: true
      max_linear_speed: 0.8
      max_angular_speed: 1.2
      v_progress_min: 0.08
      k_s_share_max: 0.5
      k_theta: 2.5
      k_y: 1.5
      goal_pos_tol: 0.1
      goal_yaw_tol_deg: 6.0
      slow_radius: 0.60
      slow_min_speed: 0.03
      final_align_k: 2.0
      final_align_wmax: 0.6
      corner_guard_enable: true
      corner_gain_ey: 1.8
      corner_gain_eth: 0.7
      corner_gain_kappa: 0.4
      corner_min_alpha: 0.35
      corner_boost_omega: 1.0
      a_lat_soft: 0.9
      apex_ey_des: 0.05

localizer_node:
  ros__parameters:
    use_sim_time: true
    localizer_types: [costmap]
    costmap:
      rt_freq: 50.0
      freq: 5.0
      reseed_freq: 1.0
      plugin: easynav_costmap_localizer/AMCLLocalizer
      num_particles: 100
      noise_translation: 0.05
      noise_rotation: 0.1
      noise_translation_to_rotation: 0.1
      initial_pose:
        x: 0.0
        y: 0.1
        yaw: 0.0
        std_dev_xy: 0.1
        std_dev_yaw: 0.01

maps_manager_node:
  ros__parameters:
    use_sim_time: true
    map_types: [costmap]
    costmap:
      freq: 10.0
      plugin: easynav_costmap_maps_manager/CostmapMapsManager
      package: easynav_indoor_testcase
      map_path_file: maps/home2.yaml
      filters: [obstacles, inflation]
      obstacles:
        plugin: easynav_costmap_maps_manager/CostmapMapsManager/ObstaclesFilter
      inflation:
        plugin: easynav_costmap_maps_manager/CostmapMapsManager/InflationFilter
        inflation_radius: 1.3
        inscribed_radius: 0.25
        cost_scaling_factor: 3.0

planner_node:
  ros__parameters:
    use_sim_time: true
    planner_types: [simple]
    simple:
      freq: 0.5
      plugin: easynav_costmap_planner/CostmapPlanner
      cost_factor: 10.0
      continuous_replan: true

sensors_node:
  ros__parameters:
    use_sim_time: true
    forget_time: 0.5
    sensors: [laser1]
    laser1:
      topic: scan_raw
      type: sensor_msgs/msg/LaserScan

system_node:
  ros__parameters:
    use_sim_time: true
    use_real_time: true
    position_tolerance: 0.3
    angle_tolerance: 0.15

β€”

Running the Simulation

  1. Launch the simulator. You can disable the Gazebo GUI to save resources:

    ros2 launch easynav_playground_kobuki playground_kobuki.launch.py gui:=false
    
  2. Launch RViz2 in a new terminal:

    ros2 run rviz2 rviz2 --ros-args -p use_sim_time:=true
    
  3. Start EasyNav using your parameter file:

    ros2 run easynav_system system_main \
       --ros-args --params-file ~/easynav_ws/src/easynav_indoor_testcase/robots_params/costmap.serest.params.yaml
    

    (You can also create a dedicated launcher file for convenience.)

  4. In RViz2, use the β€œ2D Goal Pose” tool to send navigation goals. The robot should begin navigating autonomously along collision-free paths.

β€”

Notes

  • Ensure that the map_path_file path and package name correspond to your actual map (the YAML + image pair produced by SLAM Toolbox / map_saver, not the Simple Stack’s single-file .map format).

  • Tune inflation_radius and cost_scaling_factor under the inflation filter to control how far the robot stays from obstacles.

  • If navigation oscillates or stalls, verify that the controller gains (k_theta, k_y) and speed limits are consistent with your robot’s maximum velocities.


© Copyright 2026, Various.