Bird
Raised Fist0
ROSframework~10 mins

Nav2 in ROS 2 overview - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Nav2 in ROS 2 overview
Start: Robot receives goal
↓
Planner computes path
↓
Controller sends commands
↓
Robot moves
↓
Feedback loop: Sensors update
↓
Check if goal reached
↓
Stop robot
This flow shows how Nav2 in ROS 2 processes a navigation goal: planning a path, controlling movement, updating with sensor feedback, and checking goal completion.
Execution Sample
ROS
goal = receive_goal()
path = planner.compute_path(goal)
while not goal_reached():
  cmd = controller.compute_command(path)
  robot.execute(cmd)
  update_sensors()
This code simulates Nav2's loop: get goal, plan path, control robot until goal is reached.
Execution Table
StepActionInputOutputState Change
1Receive goalUser goal positionGoal storedgoal set
2Compute pathgoalPath planpath set
3Check goal reachedCurrent position vs goalFalsecontinue loop
4Compute commandpath, current positionVelocity commandcmd set
5Execute commandcmdRobot movesrobot position updated
6Update sensorsRobot sensorsNew position datasensor data updated
7Check goal reachedUpdated position vs goalTrueexit loop
💡 Goal reached, navigation loop ends
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 5After Step 7
goalNoneSet to user goalSetSetSet
pathNoneNoneComputed pathComputed pathComputed path
cmdNoneNoneNoneVelocity commandVelocity command
robot positionStart posStart posStart posMoved posGoal pos
sensor dataNoneNoneNoneUpdated dataUpdated data
Key Moments - 3 Insights
Why does the controller keep sending commands even after the path is computed?
Because the robot needs continuous commands to move along the path while checking if the goal is reached, as shown in steps 3 to 6 in the execution_table.
What causes the navigation loop to stop?
The loop stops when the goal_reached check returns True, as seen in step 7 of the execution_table.
How does sensor data affect navigation?
Sensor updates provide the robot's current position, allowing the system to check progress and adjust commands, shown in step 6.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the output of step 2?
AGoal stored
BVelocity command
CPath plan
DRobot moves
💡 Hint
Check the 'Output' column for step 2 in the execution_table.
At which step does the robot position first update?
AStep 5
BStep 3
CStep 4
DStep 7
💡 Hint
Look at the 'State Change' column for robot position updates in the execution_table.
If the goal is never reached, which step causes the loop to repeat?
AStep 7
BStep 3
CStep 1
DStep 5
💡 Hint
Refer to the 'Action' and 'Output' columns for the goal reached check in the execution_table.
Concept Snapshot
Nav2 in ROS 2 guides a robot to a goal by:
1. Receiving a goal position
2. Planning a path
3. Sending movement commands
4. Updating position from sensors
5. Repeating until goal reached
It uses a loop of planning, controlling, and feedback.
Full Transcript
Nav2 in ROS 2 is a navigation system that helps a robot move to a target location. It starts by receiving a goal from the user. Then, it plans a path to that goal. The controller sends commands to the robot to follow the path. Sensors update the robot's position continuously. The system checks if the goal is reached after each move. If not, it repeats the control and update steps until the robot arrives. This loop ensures the robot navigates safely and accurately.

Practice

(1/5)
1. What is the primary purpose of Nav2 in ROS 2?
easy
A. To process sensor data for object recognition
B. To control robot arm movements
C. To manage robot battery levels
D. To help robots plan paths and navigate safely

Solution

  1. Step 1: Understand Nav2's role in ROS 2

    Nav2 is designed to help robots move safely by planning paths and avoiding obstacles.
  2. Step 2: Compare options with Nav2's function

    Only To help robots plan paths and navigate safely describes path planning and safe navigation, which matches Nav2's purpose.
  3. Final Answer:

    To help robots plan paths and navigate safely -> Option D
  4. Quick Check:

    Nav2 = path planning and navigation [OK]
Hint: Nav2 is about robot movement and path planning [OK]
Common Mistakes:
  • Confusing Nav2 with sensor processing
  • Thinking Nav2 controls robot arms
  • Assuming Nav2 manages hardware like batteries
2. Which of the following is the correct way to send a navigation goal to Nav2 in ROS 2?
easy
A. ros2 service call /start_navigation std_srvs/Empty '{}'
B. ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 1.0}}'
C. ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose '{pose: {position: {x: 1.0, y: 2.0}}}'
D. ros2 param set /nav2_controller speed 1.0

Solution

  1. Step 1: Identify the command to send a navigation goal

    The correct command uses ros2 action send_goal with the NavigateToPose action and a pose message.
  2. Step 2: Check other options for correctness

    ros2 topic pub /cmd_vel geometry_msgs/Twist '{linear: {x: 1.0}}' publishes velocity commands, not goals. ros2 service call /start_navigation std_srvs/Empty '{}' calls a service unrelated to sending goals. ros2 param set /nav2_controller speed 1.0 sets parameters, not goals.
  3. Final Answer:

    ros2 action send_goal /navigate_to_pose nav2_msgs/action/NavigateToPose '{pose: {position: {x: 1.0, y: 2.0}}}' -> Option C
  4. Quick Check:

    Send goal = ros2 action send_goal [OK]
Hint: Use ros2 action send_goal for Nav2 goals [OK]
Common Mistakes:
  • Using topic publish instead of action send_goal
  • Calling unrelated services
  • Setting parameters instead of sending goals
3. Given the following Nav2 action client code snippet in ROS 2, what will be the output if the robot successfully reaches the goal?
client.send_goal(goal_msg)
result = client.get_result()
print(result.status)
medium
A. An integer status code indicating success
B. A string message describing the error
C. A boolean True if goal reached, False otherwise
D. No output, the code will raise an exception

Solution

  1. Step 1: Understand Nav2 action client result

    The get_result() method returns a result object with a status code as an integer.
  2. Step 2: Interpret the printed status

    Printing result.status outputs an integer code representing success or failure, not a string or boolean.
  3. Final Answer:

    An integer status code indicating success -> Option A
  4. Quick Check:

    result.status = integer code [OK]
Hint: Nav2 action results use integer status codes [OK]
Common Mistakes:
  • Expecting a string message instead of code
  • Thinking result.status is boolean
  • Assuming code raises exception on success
4. You wrote a Nav2 client node but it never moves the robot after sending a goal. Which of the following is the most likely cause?
medium
A. The robot's wheels are physically blocked
B. The Nav2 stack is not running or not properly launched
C. The robot's battery is low
D. The goal message has an incorrect frame_id

Solution

  1. Step 1: Check common Nav2 goal issues

    If the Nav2 stack is not running or not properly launched, the robot will not move because the navigation system is inactive.
  2. Step 2: Evaluate other options

    While an incorrect frame_id can cause issues, the most common cause when the robot never moves after sending a goal is that the Nav2 stack is not running. Hardware issues like blocked wheels or low battery are less likely in software debugging context.
  3. Final Answer:

    The Nav2 stack is not running or not properly launched -> Option B
  4. Quick Check:

    Nav2 stack running = robot moves [OK]
Hint: Ensure Nav2 stack is running if robot doesn't move [OK]
Common Mistakes:
  • Assuming Nav2 stack is always running
  • Ignoring coordinate frame mismatches
  • Blaming hardware before software checks
5. You want your robot to navigate through a dynamic environment using Nav2 in ROS 2. Which combination of Nav2 components should you configure to ensure the robot replans paths when obstacles move?
hard
A. Use the planner_server with a global planner and enable the controller_server with obstacle avoidance
B. Use only the behavior_tree without planners or controllers
C. Disable the controller_server and rely on manual velocity commands
D. Use the map_server alone to update the robot's position

Solution

  1. Step 1: Identify components for path planning and obstacle avoidance

    The planner_server creates global paths, and the controller_server handles local obstacle avoidance and path following.
  2. Step 2: Understand dynamic replanning needs

    Enabling both planner and controller servers allows Nav2 to replan paths when obstacles move, ensuring safe navigation.
  3. Final Answer:

    Use the planner_server with a global planner and enable the controller_server with obstacle avoidance -> Option A
  4. Quick Check:

    Planner + Controller = dynamic replanning [OK]
Hint: Planner and controller servers enable dynamic path replanning [OK]
Common Mistakes:
  • Ignoring controller_server role in obstacle avoidance
  • Thinking behavior_tree alone handles planning
  • Relying only on map_server for navigation
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard