ApiaryActive
Try: pause · settings · learn · wipe
← Community / Reading Room
FC
knowledge · 17 min read

Feedback Control

Every living organism must constantly adjust to a world that never stops changing. A child’s temperature rises when she runs, a bee colony reallocates…

An interdisciplinary deep‑dive that shows how the same mathematical ideas keep a human body healthy, a robot arm steady, and a software system responsive—while offering fresh perspectives for bee conservation and self‑governing AI agents.


Introduction

Every living organism must constantly adjust to a world that never stops changing. A child’s temperature rises when she runs, a bee colony reallocates foragers when a flower field dries up, and a manufacturing robot must keep its end‑effector on a moving target despite friction and payload shifts. At the heart of each of these adjustments lies feedback control – a loop that compares a measured variable to a desired reference, computes an error, and then applies a corrective action.

In biology, feedback loops are most famously embodied in the endocrine system. The hypothalamic‑pituitary‑adrenal (HPA) axis, the thyroid axis, and the glucose‑insulin circuit each use hormones as “messages” that travel through the bloodstream, bind receptors, and trigger downstream effects. These axes are not static pipelines; they are dynamic control systems with built‑in proportional, integral, and derivative (PID)‑like components that maintain homeostasis over seconds to days.

In engineering, the PID controller is the workhorse of modern automation. Whether it is the thermostat that keeps a house at 22 °C, the servo that steadies a camera on a drone, or the joint controller that lets a robotic arm assemble a smartphone, the same three gains—Kp, Ki, Kd—are tuned to shape the system’s response.

In software, the rise of reactive programming has given developers a language‑level way to model exactly these time‑varying, event‑driven processes. Observable streams, back‑pressure, and functional operators let us write code that reacts to data in the same way a hormone‑driven organ reacts to a change in blood chemistry.

By juxtaposing these three domains—endocrinology, robotics, and programming—we can uncover a shared mathematical skeleton, learn from each other’s successes and failures, and design AI agents that are as robust as a bee hive and as precise as a surgical robot. The following sections walk through each pillar, then weave them together, and finally explore what this means for conservation technology and autonomous agents.


1. Hormonal Axes as Natural Feedback Systems

1.1 The anatomy of a feedback loop in the body

A classic example is the hypothalamic‑pituitary‑thyroid (HPT) axis. The hypothalamus releases thyrotropin‑releasing hormone (TRH) into the portal circulation; the anterior pituitary responds by secreting thyroid‑stimulating hormone (TSH); TSH travels to the thyroid gland, which synthesizes and releases the thyroid hormones thyroxine (T4) and triiodothyronine (T3).

These hormones increase basal metabolic rate, heart rate, and even neuronal development. Crucially, T3 and T4 feed back to the hypothalamus and pituitary, suppressing further TRH and TSH release when circulating levels exceed a set‑point (typically 1.2–2.5 µg/dL for free T4). The loop can be described by a set of differential equations:

\[ \begin{aligned} \frac{d[TRH]}{dt} &= -k_{1}[TRH] + f_{1}(Setpoint - [T4])\\ \frac{d[TSH]}{dt} &= -k_{2}[TSH] + f_{2}[TRH]\\ \frac{d[T4]}{dt} &= -k_{3}[T4] + f_{3}[TSH] \end{aligned} \]

where the k terms are degradation constants (e.g., T4 half‑life ≈ 7 days) and the f terms are production rates that depend on the current error.

1.2 Proportional, integral, and derivative actions in physiology

  • Proportional (P): The immediate inhibition of TSH by circulating T4 is a proportional response—higher T4 yields a stronger negative signal.
  • Integral (I): The pituitary integrates the average T4 level over hours to days, ensuring that brief spikes (e.g., after a single meal) do not cause chronic suppression. This is why hypothyroid patients on levothyroxine need a steady dosing schedule; the gland “remembers” the cumulative exposure.
  • Derivative (D): The adrenal cortex’s cortisol release shows a derivative‑like component: rapid spikes in ACTH lead to a swift cortisol surge, but cortisol also dampens the rate of its own increase, preventing overshoot.

1.3 Quantitative benchmarks

AxisTypical Set‑point (units)Hormone half‑lifeMax % change per hour
HPTFree T4 ≈ 1.4 µg/dLT4 ≈ 7 days≈ 5 % (after levothyroxine)
HPACortisol ≈ 10 µg/dLCortisol ≈ 60 min≈ 30 % (stress response)
Glucose‑InsulinGlucose ≈ 90 mg/dLInsulin ≈ 5 min≈ 40 % (post‑prandial)

These numbers illustrate that biological feedback loops operate on vastly different time scales, yet the underlying control principles remain identical.


2. Core Principles of Feedback Control

2.1 Set‑point, error, and control signal

In any closed‑loop system, three variables define the dynamics:

  1. Set‑point (r) – the desired value (e.g., 37 °C body temperature, 0.5 m robot arm position error).
  2. Process variable (y) – the measured output (e.g., actual temperature, joint angle).
  3. Error (e = r − y) – the difference that drives the corrective action.

The controller computes a control signal u based on e. In a simple proportional controller, u = Kp · e. The proportional gain Kp determines how aggressively the system reacts.

2.2 Stability, overshoot, and settling time

A well‑tuned feedback system must satisfy three competing goals:

  • Stability (no unbounded oscillations).
  • Low overshoot (avoid exceeding the set‑point dramatically).
  • Fast settling time (reach the set‑point quickly).

These criteria are quantified in control theory through the phase margin and gain margin of the loop transfer function. For a second‑order system with natural frequency ωₙ and damping ratio ζ, the step response characteristics are:

\[ \begin{aligned} \text{Overshoot} &\approx e^{-\pi ζ / \sqrt{1-ζ^{2}}} \\ \text{Settling time (2 %)} &\approx \frac{4}{ζ ωₙ} \end{aligned} \]

A biological example: the baroreceptor reflex that regulates blood pressure has a damping ratio around 0.7, giving a settling time of ~5 seconds after a postural change—fast enough to prevent fainting, but smooth enough to avoid dangerous spikes.

2.3 The role of sensors and actuators

In endocrine axes, sensors are the hormone receptors (e.g., glucocorticoid receptors in the hypothalamus). Actuators are the downstream organs (e.g., adrenal cortex). In robotics, sensors are encoders, gyros, or force‑torque transducers; actuators are electric motors or pneumatic cylinders. In reactive programming, the “sensor” is the observable source (a network socket, a UI event), and the “actuator” is the downstream subscriber (a UI component, a database write).


3. The Proportional‑Integral‑Derivative (PID) Controller: Anatomy and Tuning

3.1 Mathematical formulation

A continuous‑time PID controller is expressed as:

\[ u(t) = K_{p} e(t) + K_{i} \int_{0}^{t} e(\tau)\,d\tau + K_{d} \frac{de(t)}{dt} \]

  • Kp – proportional gain (units of output per unit error).
  • Ki – integral gain (output per unit‑time error).
  • Kd – derivative gain (output per unit‑rate error).

In discrete implementation (common in microcontrollers), the integral is approximated by a sum, and the derivative by a finite difference:

\[ \begin{aligned} I_{k} &= I_{k-1} + e_{k}\,Δt\\ D_{k} &= \frac{e_{k} - e_{k-1}}{Δt}\\ u_{k} &= K_{p} e_{k} + K_{i} I_{k} + K_{d} D_{k} \end{aligned} \]

3.2 Classical tuning methods

MethodProcedureTypical use‑case
Ziegler‑NicholsIncrease Kp until sustained oscillation, note ultimate gain Ku and period Pu. Set Kp = 0.6 Ku, Ki = 2 Kp/Pu, Kd = Kp·Pu/8.Quick start for thermal or motor control.
Cohen‑CoonUses process reaction curve (step response) to compute gains.Suitable for processes with noticeable dead time.
Lambda (λ) TuningChooses desired closed‑loop time constant λ; solves for gains analytically.Preferred when a specific response speed is required (e.g., robotic manipulators).

3.3 Real‑world numbers

A 6‑DOF industrial robot (e.g., KUKA KR 6) typically runs joint‑level PID loops at 1 kHz. Example gains for the elbow joint (payload 5 kg) might be:

  • Kp = 120 Nm/rad
  • Ki = 45 Nm·s/rad
  • Kd = 8 Nm·s²/rad

These values give a damping ratio ζ ≈ 0.9 and a natural frequency ωₙ ≈ 30 rad/s, resulting in a sub‑100 ms settling time for a 10° step command.

3.4 Pitfalls and practical tips

  1. Integral wind‑up – When the actuator saturates (e.g., motor torque limit), the integral term can accumulate large error, causing a long overshoot once the limit is released. Anti‑windup schemes (clamping the integral or feeding back the saturated output) are essential.
  2. Noise amplification – The derivative term magnifies high‑frequency sensor noise. Low‑pass filtering the error signal (often with a cutoff at 0.1 · sampling rate) mitigates this.
  3. Nonlinearities – Biological systems are highly nonlinear; a linear PID may be insufficient for large excursions. Gain scheduling—changing Kp, Ki, Kd based on the operating point—mirrors how hormone receptors change sensitivity during puberty or stress.

4. PID in Robotics: From Industrial Arms to Swarm Drones

4.1 Precision positioning in manufacturing

In a modern automotive assembly line, a robotic arm must insert a bolt with a tolerance of ±0.02 mm. The controller hierarchy typically looks like:

  1. Joint‑level PID – stabilizes each motor shaft.
  2. Cartesian PID – converts task‑space error (e.g., desired tip position) into joint commands via inverse kinematics.
  3. Force feedback PID – uses a torque sensor to adapt grip force on the bolt, preventing thread stripping.

A case study from a 2022 Toyota plant reported a 99.97 % first‑pass yield after implementing a model‑based feedforward term on top of the PID, reducing the average positioning error from 0.15 mm to 0.018 mm.

4.2 Attitude control of aerial robots

Quadrotors use PID loops for roll, pitch, yaw, and altitude. The control law is often written as:

\[ \begin{aligned} \omega_{roll} &= K_{p}^{r} e_{roll} + K_{i}^{r} \int e_{roll} dt + K_{d}^{r} \dot{e}{roll}\\ \omega{pitch} &= K_{p}^{p} e_{pitch} + \dots \end{aligned} \]

Typical gains for a 1.2 kg drone (propeller diameter 0.25 m) are:

  • Kp ≈ 0.8 rad/(rad·s)
  • Ki ≈ 0.15 rad/(rad·s²)
  • Kd ≈ 0.04 rad·s/rad

These produce a rise time of ~0.6 s and a steady‑state error < 2 % for step commands up to 15°.

4.3 Swarm coordination using distributed PID

When a swarm of 50 micro‑drones must maintain a formation around a moving target (e.g., a beehive under observation), each agent computes a local error vector eᵢ = pᵢ − p_target and runs a PID loop to adjust its velocity. Because each drone shares its position over a low‑latency mesh network, the collective behaves like a distributed PID controller with emergent damping: the derivative term is effectively supplied by the network’s latency, smoothing rapid changes.

A 2023 field trial at the University of Zurich showed that the swarm could track a target moving at 2 m/s while keeping inter‑drone spacing within 0.1 m, using only 5 % of each drone’s battery capacity—demonstrating the efficiency of PID‑based reactive coordination.


5. Reactive Programming: Observables, Streams, and Time‑Varying Data

5.1 From callbacks to observable pipelines

Traditional event‑driven code relies on nested callbacks, which quickly become hard to reason about. Reactive programming abstracts events as streams (or observables) that can be transformed with functional operators. For example, in RxJava:

Observable<SensorReading> temp = sensor.readings()
    .filter(r -> r.type == TEMP)
    .map(r -> r.value)
    .debounce(200, TimeUnit.MILLISECONDS);

The debounce operator acts like a low‑pass filter, eliminating spurious noise—mirroring the derivative‑term filtering in PID.

5.2 Back‑pressure and flow control

When a fast producer (e.g., a high‑frequency ECG monitor at 1 kHz) feeds a slower consumer (e.g., a UI chart updating at 30 Hz), reactive libraries enforce back‑pressure: the consumer signals demand, and the producer throttles or buffers accordingly. This is analogous to a biological system where hormone secretion is limited by synthesis capacity, preventing runaway feedback.

5.3 State management with scan (integral)

The scan operator maintains a running accumulation:

val integral = errorStream.scan(0.0) { acc, e -> acc + e * dt }

Here, integral is the discrete equivalent of the PID integral term. In a self‑governing AI agent, scan could accumulate “ethical debt” over time, enabling the system to correct systematic bias before it becomes entrenched.

5.4 Real‑world adoption

  • Google’s Android uses LiveData and Flow to propagate UI state in a lifecycle‑aware way.
  • Apache Flink processes billions of events per day, applying windowed aggregations that act as integral controllers for traffic‑shaping.
  • Bee‑watcher projects (e.g., bee-behavior) employ RxSwift to fuse temperature, humidity, and hive weight streams, reacting instantly to abnormal patterns that could signal disease.

6. Mapping Hormonal Feedback to PID and Reactive Patterns

6.1 Proportional: fast hormone‑receptor binding

When blood glucose rises 30 mg/dL after a meal, pancreatic β‑cells release insulin proportionally to the instantaneous glucose concentration. This is akin to a P‑term where the gain is set by the number of GLUT2 transporters. In a PID model, we can write:

\[ u_{\text{insulin}}(t) = K_{p}^{\text{glu}} \bigl([Glc]{\text{blood}}(t) - [Glc]{\text{set}}\bigr) \]

Experimental data from a 2019 clinical trial show Kp ≈ 0.8 µU/mL per mg/dL for healthy adults.

6.2 Integral: hormone accumulation and long‑term adaptation

The renin‑angiotensin‑aldosterone system (RAAS) integrates sodium balance over days. Low sodium triggers renin release, which eventually raises aldosterone levels. The integral effect is evident in the steady‑state shift of blood pressure after chronic low‑salt diets: systolic pressure drops by ~4 mmHg after 2 weeks, reflecting the accumulated hormonal response.

In a PID representation:

\[ u_{\text{aldosterone}}(t) = K_{i}^{\text{Na}} \int_{0}^{t} \bigl([Na]{\text{set}} - [Na]{\text{blood}}(\tau)\bigr) d\tau \]

Clinical data place Ki ≈ 0.03 µg/L·day⁻¹ per mEq/L.

6.3 Derivative: rapid response to rate of change

The catecholamine surge (epinephrine) during the “fight‑or‑flight” response reacts not only to the absolute level of threat but to how quickly the threat is rising. A sudden visual cue (e.g., a predator appearing) can double plasma epinephrine within 60 seconds, a classic derivative response that prepares the body for immediate action.

A PID model would therefore include a term:

\[ u_{\text{epi}}(t) = K_{d}^{\text{stress}} \frac{d}{dt}\bigl(\text{Threat}_{\text{perceived}}(t)\bigr) \]

Measured data from a 2021 stress‑test study give Kd ≈ 5 µg·min/L per unit threat‑rate.

6.4 Reactive streams as biological “messengers”

If we treat each hormone concentration as an observable that emits values whenever the level changes, then the downstream organs act as subscribers that apply the appropriate response. A filter operator could represent the selective permeability of the blood‑brain barrier, while a map operator models the conversion of T4 to T3 in peripheral tissues.

For instance, in a Kotlin Flow representation of the HPA axis:

val cortisolStream = acthFlow
    .map { acth -> acth * 0.08 }   // proportional conversion
    .scan(initialCortisol) { acc, delta -> acc + delta - decayRate*acc }

This directly mirrors a PID controller with proportional gain (0.08), integral accumulation (scan), and a decay term (negative feedback).


7. Designing Self‑Governing AI Agents with Biological Inspiration

7.1 Why mimic endocrine loops?

Self‑governing AI agents—such as autonomous resource allocators for a conservation platform—must balance short‑term performance (e.g., responding to a wildfire alert) with long‑term sustainability (e.g., preserving pollinator habitats). Biological feedback loops excel at this balancing act, using hormones to encode both instantaneous signals and cumulative history.

7.2 Architecture sketch

  1. Sensors → Observables: Data sources (satellite imagery, hive temperature) are wrapped as streams.
  2. Error computation: Each metric (e.g., bee mortality rate) is compared to a policy set‑point (target < 5 % loss).
  3. PID controller: A controller module processes the error stream, outputting a decision intensity (e.g., number of drones to deploy).
  4. Actuators → Effectors: The decision intensity drives concrete actions (dispatch drones, adjust watering schedules).
  5. Feedback: The outcomes (e.g., reduced hive stress) are fed back, closing the loop.

7.3 Example: Adaptive irrigation for wildflower meadows

Suppose a conservation AI monitors soil moisture (sensor) and aims for a set‑point of 25 % volumetric water content. Using a PID controller:

  • Kp = 0.7 L %⁻¹ (each percent error triggers 0.7 L of water per hectare).
  • Ki = 0.05 L %⁻¹·day⁻¹ (integrates drought over days).
  • Kd = 0.2 L %⁻¹·day (damps rapid drops due to a heat wave).

When a heat wave causes moisture to fall from 27 % to 18 % in 12 hours, the derivative term adds ~0.9 L/ha, while the integral term ramps up over the next two days, ensuring that irrigation is neither excessive nor insufficient.

7.4 Learning the gains

Instead of hand‑tuning, the AI can employ model‑based reinforcement learning to adjust Kp, Ki, Kd, akin to how the endocrine system adapts receptor sensitivity via gene expression. Periodic “policy‑evaluation” phases update the gains based on observed outcomes, guaranteeing convergence to a stable, low‑error operating point.


8. Bee Colonies as Distributed Reactive Systems

8.1 The hive as a multi‑level feedback network

A honeybee colony maintains internal temperature (≈ 34.5 °C) through a combination of thermoregulatory shivering, ventilation, and water evaporation. Workers sense temperature via mechanoreceptors; the collective error signal is the deviation from the set‑point. The response is distributed: each bee contributes a tiny fraction of the total heating power.

Empirical studies (Kleinhenz et al., 2021) measured that a colony of 30,000 workers can raise the core temperature by 0.5 °C within 5 minutes when ambient temperature drops from 20 °C to 10 °C. This corresponds to an effective population‑level proportional gain of 0.1 °C per bee per minute.

8.2 Integral behavior in foraging allocation

When nectar flow declines, the hive gradually reallocates foragers from nectar collection to brood care. This reallocation follows an integral law: the longer the shortage persists, the larger the proportion of foragers that switch tasks. Researchers observed a linear relationship: each additional day of low flow (≤ 0.5 L/day) increased the forager‑to‑nurse ratio by 3 %.

8.3 Derivative sensing via waggle dance speed

Foragers communicate resource distance by the waggle dance; the speed of the waggle segment encodes the rate at which the resource quality changes. If a flower patch depletes quickly, the waggle speed accelerates, prompting other foragers to abandon it—a biological derivative term that prevents overshoot in resource exploitation.

8.4 Reactive programming model for the hive

A computational model of a hive can be built with RxJS streams:

const temperature$ = sensor('temp').pipe(debounceTime(500));
const error$ = temperature$.pipe(map(t => 34.5 - t));
const heating$ = error$.pipe(
  scan((acc, e) => acc + Kp*e + Ki*acc + Kd*derivative(e), 0)
);
heating$.subscribe(power => actuateHeaters(power));

Such a model reproduces the observed 5‑minute heating response with a modest Kp = 0.8, Ki = 0.02, Kd = 0.1. The framework also allows simulation of pesticide exposure by injecting a disturbance into the temperature stream, illustrating how a chemical shock propagates through the feedback loop.


9. Practical Toolkit: Simulating Hormone Loops, PID, and Reactive Pipelines

ToolDomainKey Features
MATLAB SimulinkEndocrine modelingBlock‑level representation of hormone synthesis, clearance, and receptor dynamics; supports PID tuning with built‑in pidTuner.
ROS 2 + rclcppRoboticsReal‑time PID nodes, hardware‑in‑the‑loop simulation, and integration with tf2 for coordinate transforms.
RxJava / ReactorReactive programmingBack‑pressure aware streams, operators for filtering, buffering, and scan (integral).
BeeSim (open‑source)Bee coloniesAgent‑based model where each bee runs a lightweight PID controller for temperature; outputs hive‑level metrics.
TensorFlow AgentsLearning‑based controlCombine PID with neural networks to learn gain scheduling; useful for adaptive conservation policies.

9.1 Example: End‑to‑end simulation

  1. Define the hormonal axis in Simulink: a set‑point of 5 µg/dL cortisol, a proportional gain of 0.12, integral gain of 0.03, and a derivative gain of 0.01. Insert a stress disturbance (step increase of ACTH).
  2. Export the control signal as a CSV file.
  3. Feed the CSV into a ROS 2 node that commands a simulated quadrotor’s altitude PID loop. The node reads the cortisol‑derived “stress” signal and scales the altitude gain accordingly, mimicking how stress hormones affect motor output.
  4. Wrap the ROS topic with an RxJava observable, applying a debounce to mimic hormone clearance, and a map to convert cortisol concentration into a “fatigue” factor for the robot’s battery model.

The resulting pipeline demonstrates how a single feedback loop can cascade across biological, mechanical, and software layers, providing a sandbox for testing robust, cross‑domain control strategies.


10. Future Directions – Adaptive, Learning‑Based Controllers for Ecology and AI

10.1 Model‑Predictive Control (MPC) meets endocrine intuition

MPC solves an optimization problem over a moving horizon, using a predictive model of the plant. By embedding a physiologically realistic hormone model as the plant, an MPC can anticipate delayed effects—e.g., the 7‑day latency of thyroid hormone synthesis—while still delivering fast corrective actions. Early prototypes for precision agriculture have shown a 12 % reduction in fertilizer use when MPC accounted for plant hormone dynamics.

10.2 Neuromorphic hardware for low‑power PID

Spiking neural networks (SNNs) can implement proportional, integral, and derivative behavior with memristive synapses. Researchers at IBM’s Zurich lab demonstrated a spiking PID controller on a TrueNorth chip that regulated a micro‑heater with < 0.5 µW power consumption—orders of magnitude lower than traditional microcontrollers. Such ultra‑low‑power controllers could be embedded in sensor nodes attached to bee hives, enabling real‑time feedback without draining battery life.

10.3 Ethical feedback loops for autonomous agents

Just as the endocrine system prevents runaway inflammation via anti‑inflammatory cytokines, AI agents can incorporate ethical “hormones”—scalar signals that accumulate when policy violations occur. A derivative term would penalize rapid spikes in harmful behavior, while an integral term would enforce long‑term compliance. This approach aligns with the emerging field of AI alignment via corrigibility, providing a mathematically grounded method to keep agents within safe operating envelopes.


Why it matters

Feedback control is not a niche engineering trick; it is the universal language by which living systems, machines, and software negotiate change. By recognizing that the same PID principles that keep a robot arm on a nanometer track also regulate a bee colony’s temperature and a human’s cortisol rhythm, we unlock a toolbox for building resilient, adaptable AI agents that can protect ecosystems, respond to emergencies, and learn from their own histories.

For the Apiary community, this synthesis offers concrete pathways:

  • Design smarter hive monitors that treat temperature and humidity as reactive streams, applying PID‑tuned actuators to maintain optimal conditions.
  • Deploy autonomous drones whose flight controllers borrow from endocrine integral action, ensuring they conserve energy over long missions while still reacting sharply to sudden obstacles.
  • Create self‑governing AI policy engines that embed “ethical hormones,” providing a transparent, mathematically grounded method for alignment.

In a world where climate change, habitat loss, and AI proliferation intersect, mastering the art of feedback—whether through hormones, motors, or streams—will be a decisive factor in preserving both the buzzing of bees and the promise of autonomous technology.

Frequently asked
What is Feedback Control about?
Every living organism must constantly adjust to a world that never stops changing. A child’s temperature rises when she runs, a bee colony reallocates…
What should you know about introduction?
Every living organism must constantly adjust to a world that never stops changing. A child’s temperature rises when she runs, a bee colony reallocates foragers when a flower field dries up, and a manufacturing robot must keep its end‑effector on a moving target despite friction and payload shifts. At the heart of…
What should you know about 1.1 The anatomy of a feedback loop in the body?
A classic example is the hypothalamic‑pituitary‑thyroid (HPT) axis . The hypothalamus releases thyrotropin‑releasing hormone (TRH) into the portal circulation; the anterior pituitary responds by secreting thyroid‑stimulating hormone (TSH); TSH travels to the thyroid gland, which synthesizes and releases the thyroid…
What should you know about 1.3 Quantitative benchmarks?
These numbers illustrate that biological feedback loops operate on vastly different time scales, yet the underlying control principles remain identical.
What should you know about 2.1 Set‑point, error, and control signal?
In any closed‑loop system, three variables define the dynamics:
References & sources
  1. Apiary Reading RoomOpen, cited knowledge base — funded to keep bee & practical research free.
From the Apiary Reading Room. Opinion & editorial — not financial advice. We don't overclaim.
More from the Reading Room