Bird
Raised Fist0
ROSframework~5 mins

Preempting actions in ROS - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does it mean to preempt an action in ROS?
Preempting an action means stopping the current goal before it finishes, so a new goal can start. It helps the robot change tasks quickly.
Click to reveal answer
beginner
Which ROS component handles preemption of goals?
The action server handles preemption. It listens for new goals and can cancel or replace the current goal when needed.
Click to reveal answer
intermediate
How does a client request preemption of a running goal?
The client sends a new goal or explicitly cancels the current goal to request preemption.
Click to reveal answer
intermediate
What is the role of the is_preempt_requested() method in an action server?
It checks if the client has requested to stop the current goal, so the server can safely stop and clean up.
Click to reveal answer
beginner
Why is preempting actions important in robotics?
It allows robots to be flexible and responsive, stopping one task to start a more urgent one without waiting.
Click to reveal answer
What happens when an action server receives a new goal while processing another?
AIt crashes due to conflict.
BIt ignores the new goal until the current finishes.
CIt queues the new goal to run later.
DIt preempts the current goal and starts the new one.
Which method should an action server use to check if preemption was requested?
Ais_preempt_requested()
Bcancel_goal()
Csend_goal()
Dstart_action()
How does an action client request to stop a running goal?
ABy sending a cancel request or a new goal.
BBy restarting the action server.
CBy shutting down ROS.
DBy ignoring the current goal.
Why should an action server check for preemption regularly during execution?
ATo ignore client requests.
BTo speed up the current goal.
CTo stop work quickly if requested by the client.
DTo restart the robot.
What is a real-life example of preempting an action?
AFinishing cooking before answering the phone.
BStopping cooking to answer the phone.
CIgnoring the phone while cooking.
DCooking and answering the phone at the same time.
Explain how preempting actions work in ROS and why they are useful.
Think about how a robot changes what it is doing when a new command comes.
You got /4 concepts.
    Describe the steps an action server takes when it receives a preemption request.
    Focus on how the server handles stopping and switching goals.
    You got /4 concepts.

      Practice

      (1/5)
      1.

      What does cancel_goal() do in ROS action clients?

      easy
      A. It requests to stop the currently running action goal.
      B. It starts a new action goal immediately.
      C. It pauses the action without stopping it.
      D. It resets the action server to its initial state.

      Solution

      1. Step 1: Understand the purpose of cancel_goal()

        This function is used to request the cancellation of the current goal being processed by the action server.
      2. Step 2: Differentiate from other actions

        Starting a new goal or pausing are different operations; cancel_goal() specifically requests stopping the current goal.
      3. Final Answer:

        It requests to stop the currently running action goal. -> Option A
      4. Quick Check:

        cancel_goal() stops current goal [OK]
      Hint: Remember: cancel_goal() means stop current action [OK]
      Common Mistakes:
      • Confusing cancel_goal() with starting a new goal
      • Thinking cancel_goal() pauses instead of cancels
      • Assuming cancel_goal() resets the server
      2.

      Which of the following is the correct sequence to preempt an action in ROS?

      1. cancel_goal()
      2. send_goal(new_goal)
      easy
      A. Call cancel_goal() first, then send_goal(new_goal).
      B. Call send_goal(new_goal) first, then cancel_goal().
      C. Call cancel_goal() twice, then send_goal(new_goal).
      D. Only call send_goal(new_goal) without canceling.

      Solution

      1. Step 1: Understand preempting order

        You must first cancel the current goal to stop it before sending a new goal to replace it.
      2. Step 2: Confirm correct method calls

        Calling cancel_goal() first ensures the old task stops, then send_goal(new_goal) starts the new task.
      3. Final Answer:

        Call cancel_goal() first, then send_goal(new_goal). -> Option A
      4. Quick Check:

        Cancel before sending new goal [OK]
      Hint: Cancel first, then send new goal to preempt [OK]
      Common Mistakes:
      • Sending new goal before canceling old one
      • Calling cancel_goal() multiple times unnecessarily
      • Skipping cancel_goal() and sending new goal directly
      3.

      Given this ROS action client code snippet, what will be the output behavior?

      client.send_goal(goal1)
      client.cancel_goal()
      client.send_goal(goal2)

      What happens to goal1 and goal2?

      medium
      A. Neither goal runs because cancel_goal() stops all actions.
      B. goal1 runs fully; goal2 is ignored.
      C. Both goal1 and goal2 run simultaneously.
      D. goal1 is canceled; goal2 starts running.

      Solution

      1. Step 1: Analyze the cancel_goal() effect

        After sending goal1, cancel_goal() requests to stop it immediately.
      2. Step 2: Understand sending goal2

        Sending goal2 after canceling goal1 starts the new action goal.
      3. Final Answer:

        goal1 is canceled; goal2 starts running. -> Option D
      4. Quick Check:

        Cancel old goal, start new goal [OK]
      Hint: Cancel stops old goal; new send_goal starts new task [OK]
      Common Mistakes:
      • Assuming goal1 runs fully despite cancel
      • Thinking both goals run at once
      • Believing cancel_goal() stops all future goals
      4.

      Identify the error in this ROS action client code snippet:

      client.send_goal(goal1)
      client.send_goal(goal2)
      client.cancel_goal()

      What is wrong with this sequence?

      medium
      A. The code should call cancel_goal() twice to cancel both goals.
      B. You cannot send two goals without canceling the first one first.
      C. Calling cancel_goal() after sending two goals does not preempt correctly.
      D. There is no error; this sequence is correct.

      Solution

      1. Step 1: Understand goal handling

        Sending two goals in a row without canceling means the second goal overrides the first immediately.
      2. Step 2: Analyze cancel_goal() timing

        Calling cancel_goal() after both sends only cancels the currently active goal, not preempting properly between goals.
      3. Final Answer:

        Calling cancel_goal() after sending two goals does not preempt correctly. -> Option C
      4. Quick Check:

        Cancel before sending new goal to preempt [OK]
      Hint: Cancel before sending next goal, not after [OK]
      Common Mistakes:
      • Sending multiple goals without canceling first
      • Assuming cancel_goal() cancels all previous goals
      • Calling cancel_goal() too late to preempt
      5.

      You want to preempt a running action only if it has been active for more than 5 seconds. Which approach correctly implements this logic?

      if client.get_state() == ACTIVE and client.get_time_active() > 5:
          client.cancel_goal()
          client.send_goal(new_goal)
      hard
      A. You must call cancel_goal() before checking the state.
      B. This approach correctly preempts only after 5 seconds of activity.
      C. You should send the new goal first, then cancel the old one.
      D. ROS actions do not support checking active time for preemption.

      Solution

      1. Step 1: Check action state and duration

        The code checks if the action is active and has been running longer than 5 seconds.
      2. Step 2: Cancel and send new goal conditionally

        Only if both conditions are true, it cancels the current goal and sends a new one, correctly preempting.
      3. Final Answer:

        This approach correctly preempts only after 5 seconds of activity. -> Option B
      4. Quick Check:

        Check state and time before canceling [OK]
      Hint: Check active state and time before canceling [OK]
      Common Mistakes:
      • Canceling without checking active time
      • Sending new goal before canceling old one
      • Assuming ROS lacks timing info for actions
      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