hero-image
HOME
hero-image
project-highlight-image

F.L.A.R.E (Firefighting using Localisation and Advanced Real-time Environment Mapping)

hero-image
sachin

Project Timeline

Feb 2025 - Current

OVERVIEW

My Robotics Studio 1 group and I are proud to share our incredibly robust and scalable robotics concept F.L.A.R.E (Firefighting using Localisation and Advanced Real-time Environment Mapping)! The core objective of our project was to demonstrate a highly polished and technically challenging robotics concept to enhance safety and operational efficiencies for agencies including the Rural Fire Service and NSW National Parks and Wildlife Service. Our demonstration comprises of both a UAV for autonomous aerial fire scanning and sweeping using RGB and IR camera inputs, and a UGV that autonomously navigates to fires and extinguishes them relying on a LiDAR based SLAM and Nav2. This is all brought together via our GUI. The simulation was created using Gazebo Ignition, and all developed in ROS 2. Our primary focus was on a polished and intuitive user interface with seamless operation on a Steam Deck. This focus on human-centric design provides the operator with critical situational awareness in a mobile package. The GUI provides: - Human-centred controls to easily start/stop autonomous routines. - Immediate feedback on the current status of fires positions and size, battery percentages and current mission statistics. - Live data streams, including thermal imaging feeds, ariel view mapping and real-time RGB camera streaming over ROS2. - Precise positional tracking of the UAV and UGV. - Reliable manual teleoperation override capability, to ensure the user remains in control. This dual robot system is designed to be scalable and modular, with appropriate configurations to allow for multiple UGV's and UAV's that can independently navigate to and extinguish separate fires. This experience has solidified my skills in SLAM implementation, multi-robot communication, teleoperation and human centered designs. The implementation of the SteamDeck proved to be a challenging but an impressive real world use case for ROS2. You can review the full project architecture, code, and simulation scenarios on GitHub. https://lnkd.in/gpGhYm8Q

HighlightS


SKILLS

LinuxROS2RVIZSLAMAutomated navigation

SUPPORTING MATERIALS

Additional Details

Problem Statement

The conventional manufacturing processes using assembly fixtures  lack the precision required for manufacturing miniaturized ultrasound devices at high-volume production. This is required to fit inside a small catheter. Achieving the necessary +/- 15 micron accuracy for critical assembly steps, including UV adhesive dispensing, part alignment, and clamping, often relies on manual or semi-automated methods. These methods are prone to human error, time-consuming, and inconsistent, leading to increased scrap rates, higher production costs, and limitations in scaling manufacturing output. Therefore, there is a critical need for an automated solution that can consistently deliver ultra-high precision across multiple assembly stages to enable reliable and efficient manufacturing of these advanced miniaturized components.

Bill of Materials (BOM)

The following table lists the components used in the prototype, including part numbers, quantities, materials, estimated costs, and potential suppliers.

Item

Component

Part Number

Qty

Material

Cost ($)

Supplier

Notes

1

Heat Sink

637-20ABPE

1

Aluminum

25.00

McMaster-Carr

100x100x50 mm, extruded aluminum

2

Cooling Fan (12V, 40 mm)

AFB0412SHB

1

Plastic/Metal

10.00

DigiKey

Low-noise, 35 dB max, 12V DC

3

Device Housing

Custom (3D-printed)

1

PLA

15.00

University 3D Print Lab

FDM-printed, 200x150x100 mm

4

Thermal Insulation Foam

851-074

0.5 m²

Polyurethane Foam

8.00

Amazon

Cut to fit optics compartment

5

Temperature Sensor

DS18B20

1

N/A

12.00

Adafruit

±0.5°C accuracy, digital output

6

Arduino Uno

A000066

1

N/A

25.00

Arduino Store

Runs Python PID via serial interface

7

Fan Muffler

Custom (3D-printed)

1

PLA

5.00

University 3D Print Lab

Reduces fan noise

8

Fasteners (Screws, M3)

91292A112

10

Stainless Steel

3.00

McMaster-Carr

M3x10 mm, for securing components

9

Thermal Paste

AS5-3.5G

1

Silicone-based

5.00

Amazon

Improves heat transfer to sink

Motor Review

Basic PID Controller Script

PYTHON
import time class PIDController: """A PID controller for precise control in robotic systems. Attributes: kp (float): Proportional gain. ki (float): Integral gain. kd (float): Derivative gain. setpoint (float): Desired target value. prev_error (float): Previous error for derivative calculation. integral (float): Accumulated integral term. dt (float): Time step in seconds. """ def __init__(self, kp: float, ki: float, kd: float, setpoint: float = 0.0): """Initialize PID controller with gains and setpoint. Args: kp: Proportional gain for error response. ki: Integral gain for accumulated error. kd: Derivative gain for error rate of change. setpoint: Desired target value (default: 0.0). """ self.kp = kp self.ki = ki self.kd = kd self.setpoint = setpoint self.prev_error = 0.0 self.integral = 0.0 self.dt = 0.01 def compute(self, current_value: float) -> float: """Compute PID output based on current system value. Args: current_value: Current measured value of the system. Returns: float: Control signal to adjust the system. """ # Calculate error error = self.setpoint - current_value # Proportional term p_term = self.kp * error # Integral term self.integral += error * self.dt i_term = self.ki * self.integral # Derivative term derivative = (error - self.prev_error) / self.dt d_term = self.kd * derivative # Calculate total output output = p_term + i_term + d_term # Update previous error self.prev_error = error return output if __name__ == "__main__": # Initialize PID controller pid = PIDController(kp=1.0, ki=0.1, kd=0.05, setpoint=10.0) # Simulate mode (e.g., motor position) current_value = 0.0 for _ in range(100): control_signal = pid.compute(current_value) # Simulate system response: position updates based on control signal current_value += control_signal * 0.1 print(f"Current Value: {current_value:.2f}, " f"Control Signal: {control_signal:.2f}") time.sleep(pid.dt)


lowinertia
Portfolio Builder for Engineers
Created by Aram Lee
© 2025 Low Inertia. All rights reserved.