Chapter 4: Navigation and SLAM

Nav2 provides autonomous navigation capabilities:

  • Path planning
  • Obstacle avoidance
  • Localization
  • Recovery behaviors

Installation

sudo apt install ros-humble-navigation2
sudo apt install ros-humble-nav2-bringup
sudo apt install ros-humble-slam-toolbox

SLAM (Simultaneous Localization and Mapping)

# Launch SLAM
ros2 launch slam_toolbox online_async_launch.py

# Save map
ros2 run nav2_map_server map_saver_cli -f my_map
from nav2_simple_commander.robot_navigator import BasicNavigator
from geometry_msgs.msg import PoseStamped

navigator = BasicNavigator()

# Set initial pose
initial_pose = PoseStamped()
initial_pose.header.frame_id = 'map'
initial_pose.pose.position.x = 0.0
initial_pose.pose.position.y = 0.0
navigator.setInitialPose(initial_pose)

# Navigate to goal
goal_pose = PoseStamped()
goal_pose.header.frame_id = 'map'
goal_pose.pose.position.x = 2.0
goal_pose.pose.position.y = 1.0
navigator.goToPose(goal_pose)

while not navigator.isTaskComplete():
    feedback = navigator.getFeedback()
    print(f'Distance remaining: {feedback.distance_remaining}')

Key Concepts

  • Costmaps: Represent obstacles
  • Path Planning: A* algorithm
  • Recovery Behaviors: Handle stuck situations
  • AMCL: Adaptive Monte Carlo Localization

Next: Chapter 5 - Computer Vision!