Chapter 4: Navigation and SLAM
Navigation Stack (Nav2)
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
Navigation Example
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!