Skip to main content

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 →