Path Planning for Bipedal Humanoids with Nav2
🗺️ Introduction to Nav2
Nav2 (Navigation2) is the ROS 2 navigation stack providing:
- Path planning
- Obstacle avoidance
- Recovery behaviors
- Waypoint following
🚀 Setting Up Nav2
# nav2_params.yaml
bt_navigator:
ros__parameters:
use_sim_time: True
global_frame: map
robot_base_frame: base_link
planner_server:
ros__parameters:
planner_plugins: ["GridBased"]
GridBased:
plugin: "nav2_navfn_planner/NavfnPlanner"
controller_server:
ros__parameters:
controller_plugins: ["FollowPath"]
FollowPath:
plugin: "dwb_core::DWBLocalPlanner"
🤖 Bipedal Navigation
import rclpy
from rclpy.node import Node
from nav2_simple_commander.robot_navigator import BasicNavigator
from geometry_msgs.msg import PoseStamped
class HumanoidNavigator(Node):
def __init__(self):
super().__init__('humanoid_navigator')
self.navigator = BasicNavigator()
def navigate_to_goal(self, x, y, theta):
goal_pose = PoseStamped()
goal_pose.header.frame_id = 'map'
goal_pose.header.stamp = self.get_clock().now().to_msg()
goal_pose.pose.position.x = x
goal_pose.pose.position.y = y
goal_pose.pose.orientation.z = theta
self.navigator.goToPose(goal_pose)
while not self.navigator.isTaskComplete():
feedback = self.navigator.getFeedback()
self.get_logger().info(f'Distance remaining: {feedback.distance_remaining}')
result = self.navigator.getResult()
if result == TaskResult.SUCCEEDED:
self.get_logger().info('Goal reached!')
🎯 Key Takeaways
- Nav2 provides complete navigation stack
- Supports custom planners for bipedal robots
- Handles dynamic obstacles
- Essential for autonomous humanoids
Next: Hands-On Lab →