==================================================== Final Project: Search and Rescue ==================================================== Overview ======== .. list-table:: :widths: 30 70 :class: compact-table * - **Due Date** - May 9, 2026, 11:59 PM EST (preferred); May 12, 2026, 11:59 PM EST (hard deadline) * - **Total Points** - 100 points * - **Submission** - Canvas (zip the ``~/enpm605_ws/src/final_project/`` folder and submit as ``group_final_project.zip``) * - **Collaboration** - Groups of 2. * - **Late Policy** - 10% deduction per calendar day, up to 3 days. Zero after 3 days. * - **Peer Review** - Final grade: 60% assignment grade + 40% peer review score. .. dropdown:: Description :open: This is a **group project** (2 students per group). You will build a ROS 2 system that commands a ``rosbot`` to perform a **search and rescue mission** in a simulated disaster zone. The robot must: 1. Navigate to a series of predefined **search zones** using Nav2. 2. At each zone, call a **simulated detection service** (no vision -- a simple dictionary lookup) to check for survivors. 3. If a survivor is found, **broadcast a TF frame** marking their location and call a **notification service** to report the find. 4. After visiting every zone, **return to the base station**. The robot's decision-making is orchestrated by a **behavior tree** built with ``py_trees`` and ``py_trees_ros``. All mission parameters (search zones, base station pose, BT tick rate) are loaded from a **YAML parameter file** -- see the :ref:`final-project-parameter-file` section in :doc:`requirements` for the exact schema. .. dropdown:: Learning Objectives :open: .. grid:: 1 2 2 2 :gutter: 2 .. grid-item-card:: Behavior Trees :class-card: sd-border-info Design and implement a multi-level behavior tree with conditions, actions, and composites (Sequence and Selector). Understand ``memory=True`` vs ``memory=False`` for reactive and resuming behavior. .. grid-item-card:: Nav2 Integration :class-card: sd-border-info Use the ``NavigateToPose`` action to send the robot to goal poses on a known map. Handle navigation success and failure within the behavior tree. .. grid-item-card:: Custom Services :class-card: sd-border-info Define and implement custom ``.srv`` interfaces (``DetectSurvivor`` and ``ReportSurvivor``). Call them from behavior tree action nodes using synchronous service clients. .. grid-item-card:: TF2 Frames :class-card: sd-border-info Broadcast static TF frames for discovered survivors relative to the ``map`` frame. Use ``tf2_ros`` to publish and verify transforms. .. grid-item-card:: Parameter Configuration :class-card: sd-border-info Load mission parameters (search zones, base station pose, BT tick rate) from a YAML file. Expose at least one value as a launch argument for runtime override. .. grid-item-card:: Launch File Integration :class-card: sd-border-info Write a Python launch file that starts all required nodes, loads the parameter file, and exposes launch arguments. Integrate with the Nav2 stack and Gazebo simulation. .. |rarr| unicode:: U+2192 .. dropdown:: Suggested Timeline :open: You have **two weeks** (April 27 |rarr| May 9, preferred; May 12 hard deadline). The schedule below is a suggestion; adjust based on your group's pace. .. list-table:: :widths: 18 12 70 :header-rows: 1 :class: compact-table * - Period - Duration - Tasks * - **Days 1 to 3** - 3 days - Read the assignment carefully. Review Lectures 12 and 13 (behavior trees, Nav2). Launch the simulation, **build a map of the world with** ``slam_toolbox`` and save it under ``group_final/maps/`` (see :ref:`final-project-build-the-map`), then confirm Nav2 localizes against your saved map. Create the package skeletons. Define the service interfaces. Implement the ``ZoneManager`` class and the simulated service servers (``DetectSurvivor`` and ``ReportSurvivor``). * - **Days 4 to 7** - 4 days - Implement the behavior tree leaf nodes: ``NavigateToZone``, ``NavigateToBase``, ``DetectSurvivor``, ``BroadcastSurvivorTF``, ``NotifyBase``, ``AdvanceZone``, ``LogNoDetection``. Implement condition nodes: ``ZonesRemaining``, ``IsSurvivorDetected``. Test each node individually. * - **Days 8 to 11** - 4 days - Assemble the full behavior tree in the entry point script. Write the launch file. Integrate with Nav2. Test the full pipeline end to end: all zones visited, survivors detected and reported, TF frames broadcast, robot returns to base. * - **Days 12 to 14** - 3 days - Write ``README.md``. Code quality pass (docstrings, type hints, comments, Ruff). Test edge cases (no survivor at a zone, all four zones visited, return to base). Remove cache directories. Package and submit. ---- .. toctree:: :hidden: :maxdepth: 1 :titlesonly: infrastructure requirements implementation_guide outputs submission rubric code