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 SimpleStack and EasyNav

Navigating with SimpleStack and EasyNav๏ƒ

This HowTo explains how to perform navigation using the Simple Stack in EasyNavigation (EasyNav). The Simple Stack operates on a binary occupancy map, ideal for lightweight simulations or quick prototyping.

On this page

  • Overview

  • Setup

  • Creating a Parameter File

  • Running the Simulation

  • Notes

Overview๏ƒ

This tutorial assumes you already have a map created with SLAM Toolbox or another mapping method. If you have not yet generated a map, follow Mapping with SLAM Toolbox and EasyNav first.

Setup๏ƒ

Complete the installation steps in Build & Install first (any of APT, Pixi or source). This tutorialโ€™s example configuration uses the SeReST Controller, Simple Localizer, Simple Maps Manager and Simple Planner plugins, which the core easynav package does not include:

  • APT:

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

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

You will also need the simulator and example config, 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

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

Once you have your map, save the resulting .map file (the Simple Maps Managerโ€™s own text format, produced by its savemap service) in any package within your workspace, such as easynav_indoor_testcase/maps. You will later reference it using the parameters package and map_path_file. (Alternatively, you can use an absolute path with map_path_file alone.)

โ€”

Creating a Parameter File๏ƒ

In this example we will use:

  • The SeReST controller for trajectory tracking.

  • The AMCL localizer for probabilistic localization.

  • The Simple Maps Manager to load the occupancy map.

Below is a minimal working configuration for navigation with the Simple Stack.

controller_node:
  ros__parameters:
    use_sim_time: true
    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.80
      slow_min_speed: 0.02
      final_align_k: 2.5
      final_align_wmax: 0.8
      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: [simple]
    simple:
      rt_freq: 50.0
      freq: 5.0
      reseed_freq: 1.0
      plugin: easynav_simple_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.0
        yaw: 0.0
        std_dev_xy: 0.1
        std_dev_yaw: 0.01

maps_manager_node:
  ros__parameters:
    use_sim_time: true
    map_types: [simple]
    simple:
      freq: 10.0
      plugin: easynav_simple_maps_manager/SimpleMapsManager
      package: easynav_indoor_testcase
      map_path_file: maps/home.map

planner_node:
  ros__parameters:
    use_sim_time: true
    planner_types: [simple]
    simple:
      freq: 0.5
      plugin: easynav_simple_planner/SimplePlanner
      robot_radius: 0.25

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
    position_tolerance: 0.3
    angle_tolerance: 0.15

โ€”

Running the Simulation๏ƒ

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

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

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

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

    (You can also create a launcher for convenience.)

  4. Send navigation goals In RViz2, use the โ€œ2D Goal Poseโ€ tool to send target positions. The robot will autonomously plan and navigate toward them.

โ€”

Notes๏ƒ

  • The Simple Stack uses a binary map: cells are free or occupied (no graded cost).

  • For smoother paths or cost-aware planning, use the Costmap Stack (Mapping with the Costmap Stack).

  • Verify that map_path_file and package point to the correct files.

  • You can tune controller parameters (k_theta, k_y, etc.) and speed limits for better performance.


© Copyright 2026, Various.