EasyNavigation Logo
latest
  • Getting Started
  • Core Design and Architecture
    • NavState: The Shared Blackboard
    • Real-Time Execution Model
    • Plugin Configuration
  • EasyNav Software
    • C++ API
      • Sending Navigation Commands to EasyNav
        • Primary Method: /easynav_control Topic
        • Secondary Method: /goal_pose Topic
        • Conclusion
      • How to use the NavState BlackBoard
        • Overview
        • Basic API
        • Examples from Plugins
        • Advanced Features
        • Best Practices
        • Conclusion
      • Sensor Input and Perception Handling
        • Sensor Configuration
        • Processing Point Perceptions
        • Operation Summary
        • Example: Updating a Map
        • Fused Visualization
        • Extending to Other Modalities
    • Repositories
      • Core
      • Plugins
      • Stacks
      • Test Cases
      • Playgrounds
  • EasyNav Stack Tutorials
    • EasyNav Plugins Tutorials
      • SeReST Controller Fine-Tuning
        • Quick-Start Defaults
        • Core Concepts
        • Parameter-by-Parameter Guidance
        • Troubleshooting by Symptom
        • Tuning Order of Operations
        • FAQ
    • EasyNav Simple Stack Tutorials
      • The SimpleMap Representation
      • HowTo
        • Mapping with SLAM Toolbox and EasyNav
        • Navigating with SimpleStack and EasyNav
      • Stack Reference
        • easynav_simple_maps_manager
        • easynav_simple_localizer
        • easynav_simple_planner
        • easynav_simple_controller
        • Example Configuration
    • EasyNav Costmap Stack Tutorials
      • The SimpleMap Representation
      • HowTo
        • Mapping with the Costmap Stack
        • Mapping with SLAM Toolbox and EasyNav
        • Deploying EasyNav on a Real iCreate3 Robot
      • Stack Reference
        • easynav_costmap_maps_manager
        • easynav_costmap_localizer
        • easynav_costmap_planner
        • Example Configuration
    • EasyNav Gridmap Stack Tutorials
      • The GridMap Representation
      • HowTo
        • Gridmap Mapping with LidarSLAM and EasyNav
        • Navigating with SimpleStack and EasyNav
      • Stack Reference
        • easynav_gridmap_maps_manager
        • easynav_gridmap_astar_planner
        • Localization (LidarSLAM for EasyNav)
        • Example Configuration
        • YAML Map Schema (GridMap)
    • Multi-robot with EasyNav
      • Launching in Simulation
      • Example Parameters
      • Tips & Gotchas
  • About and Contact
    • About
    • Contact
EasyNavigation
Edit
  • EasyNav Stack Tutorials
  • EasyNav Gridmap Stack Tutorials
  • Navigating with SimpleStack and EasyNav

Navigating with SimpleStack and EasyNav

Once the environment has been mapped, save the .map file in the directory of any package in your workspace. This will be required because we will later reference it using the package name and relative path. (Optionally, you can provide the absolute path through the parameter map_path_file).

Next, create a parameter file for navigation. In this example we will use the SeReST controller, AMCL for robot localization, and specify that the maps_manager is an instance of easynav_simple_maps_manager/SimpleMapsManager. In the corresponding section we define where the map is located and configure the laser as the sensor to be used:

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]
    perception_default_frame: odom
    laser1:
      topic: scan_raw
      type: sensor_msgs/msg/LaserScan
      group: points

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

In one terminal, launch the simulator. You can disable the GUI to save resources if needed:

ros2 launch easynav_playground_kobuki playground_kobuki.launch.py gui:=false

In a second terminal, launch rviz:

rviz2

Finally, in a third terminal, start EasyNav and specify the parameter file. (Optionally, you can also create a launcher for convenience):

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

At this point, you can use the “2D Goal Pose” button in rviz to send target positions for the robot to navigate to.


© Copyright 2025, Various.