EasyNavigation Logo
0.5.0
  • Build & Install
    • Install with APT (recommended)
    • Install from source
    • Other options
      • Install from Binaries
        • Release status
        • Install from binaries (APT, recommended)
        • Install via Pixi
        • Package availability
      • Real-time System Setup
      • Troubleshooting
        • Common problems
        • Uninstall / clean
        • Running the tests
  • Getting Started
    • Overview
    • Setting up
      • Sourcing the workspace
    • First run: the Simple stack
      • Launching the simulator
      • Launching EasyNav
      • Visualizing in RViz2
      • Sending navigation goals
    • Navigating with the Costmap stack
      • All in one launch file
    • Visualizing internal process with the TUI
    • Troubleshooting
    • Next steps
  • PlayGrounds
    • Installation
    • Real robots
      • Kobuki PlayGround
        • Launching EasyNav
        • Multirobot
        • Simulation only
        • Launch files
        • Package layout
      • Summit PlayGround
        • Launching EasyNav
        • Simulation only
        • Launch files
        • Building maps of a world
        • Package layout
      • TIAGo PlayGround
        • Launching EasyNav
        • Simulation only
        • Packages
      • Omni PlayGround
        • Launching EasyNav
        • Simulation only
        • Launch files
  • EasyNav Plugins
    • Supported ROS 2 versions
    • Repository overview
    • 🧭 Planners
    • βš™οΈ Controllers
    • πŸ—ΊοΈ Maps Managers
    • πŸ“ Localizers
    • πŸ›Ÿ Recoveries
    • Other plugins
    • License
  • HowTos and Practical Guides
    • πŸ“˜ Overview
    • Costmap Stack
      • Mapping with the Costmap Stack
        • Overview
        • Setup
        • Step-by-Step Instructions
        • Saving the map
      • Navigating with the Costmap Stack
        • Setup
        • Running it
        • The Parameter File
        • Adapting it to your robot
      • Global Localization and Kidnapping Recovery with MH-AMCL
        • How it works
        • Setup
        • Configuring the Localizer
        • Running the Simulation
        • Testing Global Localization and Kidnapping
        • Tuning
        • Notes
      • Using the Routes Maps Manager with Costmaps
        • 1) Creating routes
        • 2) Using the routes for navigation
      • 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
    • NavMap + Bonxai Stack
      • Navigating with the NavMap + Bonxai Stack
        • Setup
        • The two scenarios
        • The parameter file
        • Building the maps
      • 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
    • Simple Stack
      • Mapping with SLAM Toolbox and EasyNav
        • Overview
        • Setup
        • Step-by-Step Instructions
        • Saving and Reusing the Map
        • Notes
      • Navigating with SimpleStack and EasyNav
        • Overview
        • Setup
        • The Parameter File
        • Running the Simulation
        • Notes
    • 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
        • 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
    • Deprecated
      • 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
  • Developers Guide
    • Core Design and Architecture
      • Coordinate Frames (TF)
      • Robot Geometry
      • Velocity Output: Robot Limits, Mux and Smoother
      • Reconfiguring EasyNav at Runtime
      • NavState: The Shared Blackboard
      • Real-Time Execution Model
        • Frequencies: system cycles and components
    • 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
    • Recovery System
      • The Recovery Node
      • The Base Class: RecoveryManagerBase
      • Moving the Robot
      • System Actions
        • Controlled shutdown
        • Reconfiguration as a mitigation
      • Available Recovery Systems
        • DummyRecoveryManager
        • SimpleRecoveryManager
        • DiagnosticRecoveryManager
      • Writing a Recovery System
    • Safety
      • Summary
      • Overview
      • Stale and invalid commands
      • Configuration checks
      • Safety parameters and safety mode
      • Real-time cycle monitoring and heartbeat
      • Safety channel status
      • Data age
      • Memory locking
      • Configuration fingerprint
      • Fault injection
    • Overview
    • Further Reading
  • Migration Guide
    • What stays the same
    • Nav2 and EasyNav, piece by piece
    • Step 1: Install EasyNav
    • Step 2: Your map
    • Step 3: The parameter file
    • Step 4: Run it
    • Step 5: Send goals from your applications
      • Option A: the Nav2 bridge
      • Option B: GoalManagerClient
      • Option C: just a pose
    • Differences to keep in mind
    • Troubleshooting
    • Next steps
  • 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.

Warning

The Simple stack is a minimal example, with very basic algorithms, made to show how EasyNav works and how plugins are written. Do not expect good navigation from it. For real use, see Navigating with the Costmap Stack.

On this page

  • Overview

  • Setup

  • The Parameter File

  • Running the Simulation

  • Notes

Overview

This tutorial uses the Kobuki PlayGround, which ships a map of its world (maps/home.map). To navigate in your own map, create it first following Mapping with SLAM Toolbox and EasyNav.

Setup

Build EasyNav and the Kobuki PlayGround as described in Getting Started.

The Parameter File

In this example we will use:

  • The Simple Maps Manager to load the binary map.

  • The AMCL localizer of the Simple stack (easynav_simple_localizer).

  • The Simple Planner, an A* over the binary map.

  • The SeReST controller for path tracking (see SeReST Controller Fine-Tuning).

  • The Simple recovery system, which brakes before an obstacle ahead, rotates to relocalize and backs up when stuck (see Recovery System).

This is params/simple.serest.params.yaml of the Kobuki PlayGround:

controller_node:
  ros__parameters:
    use_sim_time: true
    robot_limits:
      max_linear_vel: 0.6
      min_linear_vel: -0.6
      max_angular_vel: 1.5
      max_linear_acc: 0.8
      max_linear_decel: 1.0
      max_angular_acc: 2.0
      max_angular_decel: 2.0
    controller_types: [serest]
    serest:
      rt_freq: 30.0
      plugin: easynav_serest_controller/SerestController
      allow_reverse: true
      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_playground_kobuki
      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

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

system_node:
  ros__parameters:
    use_sim_time: true
    robot_geometry:
      radius: 0.25
      height: 0.5
    position_tolerance: 0.3
    angle_tolerance: 0.15

recovery_node:
  ros__parameters:
    use_sim_time: true
    recovery_manager:
      plugin: easynav_simple_recovery/SimpleRecoveryManager
      stop_distance: 0.3
      sensors_timeout: 5.0
      max_position_variance: 1.0

To use your own map, change package and map_path_file (both are needed: the map is looked up in the share directory of package).

Running the Simulation

  1. Launch the simulator, EasyNav and RViz2:

    ros2 launch easynav_playground_kobuki easynav_simple_serest.launch.yaml
    

    You can disable the Gazebo GUI with gui:=false, and use your own parameter file with params_file:=/path/to/my.params.yaml.

  2. Send navigation goals: in RViz2, use the β€œ2D Goal Pose” tool. The robot will plan and navigate toward them.

Notes

  • The Simple Stack uses a binary map: cells are free or occupied (no graded cost), so paths are not kept away from obstacles. For cost-aware planning, use the Costmap Stack (Navigating with the Costmap Stack).

  • easynav_simple.launch.yaml runs the same stack with the Simple controller, the one of Getting Started.


© Copyright 2026, Various.

EasyNav v:
Versions