====================================================
Expected Output
====================================================
.. |rarr| unicode:: U+2192
Nominal Run (Full Mission)
==========================
The following shows an example of the expected log output when the
full system is running correctly. The robot visits all four zones,
detects survivors in zones A and C, broadcasts TF frames, reports
findings, and completes the mission. Timestamps are abbreviated.
Exact numeric values will vary.
.. only:: html
.. admonition:: Walkthrough video: nominal run
:class: dropdown tip
The video below shows a complete mission end-to-end: Gazebo,
RViz, the launch terminal, and a filtered ``ros2 topic
echo /rosout`` (only ``search_and_rescue``-prefixed log
lines). Click the play button to start it -- the video does
not autoplay.
.. raw:: html
.. code-block:: text
[INFO] [detect_survivor_server]: DetectSurvivor service ready.
[INFO] [report_survivor_server]: ReportSurvivor service ready.
[INFO] [search_and_rescue]: Loaded 4 search zones from parameters.
[INFO] [search_and_rescue]: Base station at (0.00, 0.00, yaw=0.00).
[INFO] [basic_navigator]: Seeding AMCL with initial pose (0.00, 0.00, yaw=0.00)...
[INFO] [basic_navigator]: Waiting for Nav2 (AMCL + BT navigator) to become active...
[INFO] [basic_navigator]: Setting initial pose
[INFO] [basic_navigator]: Waiting for amcl_pose to be received
[INFO] [basic_navigator]: Nav2 is ready for use!
[INFO] [search_and_rescue]: Nav2 is active.
[INFO] [search_and_rescue]: --- Zone 1/4: zone_a (-3.00, 3.00) ---
[INFO] [search_and_rescue]: Navigating to zone_a...
[INFO] [search_and_rescue]: Reached zone_a.
[INFO] [search_and_rescue]: Calling detect_survivor for zone_a...
[INFO] [detect_survivor_server]: Detection request for zone_a: FOUND at (-2.50, 3.20)
[INFO] [search_and_rescue]: Survivor detected at zone_a!
[INFO] [search_and_rescue]: Broadcasting TF frame: survivor_1 at (-2.50, 3.20) in map frame.
[INFO] [search_and_rescue]: Reporting survivor_1 to base...
[INFO] [report_survivor_server]: Report received: survivor_1 at (-2.50, 3.20). Acknowledged.
[INFO] [search_and_rescue]: Base acknowledged survivor_1.
[INFO] [search_and_rescue]: --- Zone 2/4: zone_b (3.50, 3.00) ---
[INFO] [search_and_rescue]: Navigating to zone_b...
[INFO] [search_and_rescue]: Reached zone_b.
[INFO] [search_and_rescue]: Calling detect_survivor for zone_b...
[INFO] [detect_survivor_server]: Detection request for zone_b: NOT FOUND
[INFO] [search_and_rescue]: No survivor found at zone_b.
[INFO] [search_and_rescue]: --- Zone 3/4: zone_c (4.00, -3.00) ---
[INFO] [search_and_rescue]: Navigating to zone_c...
[INFO] [search_and_rescue]: Reached zone_c.
[INFO] [search_and_rescue]: Calling detect_survivor for zone_c...
[INFO] [detect_survivor_server]: Detection request for zone_c: FOUND at (4.10, -2.50)
[INFO] [search_and_rescue]: Survivor detected at zone_c!
[INFO] [search_and_rescue]: Broadcasting TF frame: survivor_2 at (4.10, -2.50) in map frame.
[INFO] [search_and_rescue]: Reporting survivor_2 to base...
[INFO] [report_survivor_server]: Report received: survivor_2 at (4.10, -2.50). Acknowledged.
[INFO] [search_and_rescue]: Base acknowledged survivor_2.
[INFO] [search_and_rescue]: --- Zone 4/4: zone_d (-3.50, -3.00) ---
[INFO] [search_and_rescue]: Navigating to zone_d...
[INFO] [search_and_rescue]: Reached zone_d.
[INFO] [search_and_rescue]: Calling detect_survivor for zone_d...
[INFO] [detect_survivor_server]: Detection request for zone_d: NOT FOUND
[INFO] [search_and_rescue]: No survivor found at zone_d.
[INFO] [search_and_rescue]: All zones visited. Returning to base.
[INFO] [search_and_rescue]: Navigating to base station...
[INFO] [search_and_rescue]: Reached base station.
[INFO] [search_and_rescue]: Mission complete.
Verification Commands
=====================
Use these commands to test individual components.
.. code-block:: console
# 1. Launch the Gazebo simulation (terminal 1)
ros2 launch rosbot_gazebo final_project_world.launch.py
# 2. Launch the mission (terminal 2). This single launch file
# brings up Nav2 (with your saved map under
# group_final/maps/final_project_map.yaml), the two service
# servers, and the BT node.
ros2 launch group_final search_and_rescue.launch.py
# 3. Check TF frames for discovered survivors
ros2 run tf2_ros tf2_echo map survivor_1
ros2 run tf2_ros tf2_echo map survivor_2
# 4. List all static transforms
ros2 topic echo /tf_static --once
# 5. List available services
ros2 service list | grep -E "detect|report"
# 6. Test detection service manually
ros2 service call /detect_survivor \
group_final_interfaces/srv/DetectSurvivor \
"{zone_id: 'zone_a'}"
# 7. Show launch arguments
ros2 launch group_final search_and_rescue.launch.py --show-args