| Name | GitHub Handle | Role(s) |
|---|---|---|
| Bruno de Sousa | inuterall | Developer |
| Rodrigo Oliveira | Rodrigo-Ol | Developer |
| Catarina Ferreira | catarinaferrei | Developer |
| Guilherme Barros | guifreiremag | Developer |
We have chosen to do the SDV Lab Challenge.
Pothole Map Builder, detect sudden, negative, vertical variations (Potholes)
on the road.

- CARLA Simulator
- Provides vehicle pose, speed, and acceleration (used as IMU).
- Pose means the vehicles position and orientation in space at a given time
- CARLA Bridge
- On each CARLA tick, publishes:
vehicle/pose→{ ts, x, y, yaw, speed_mps }vehicle/imu/raw→{ ts, src:"carla", hz, acc:{ x, y, z } }
- On each CARLA tick, publishes:
Payload shape: { ts, x, y, yaw, speed_mps }
ts— Timestamp in seconds since Unix epoch (float). When this pose was producex— Position on the maps X axis (meters)y— Position on the maps Y axis (meters)yaw— Heading (radians) in the world/map frame.0faces right; increases counter-clockwise- Yaw is basically just how much the car is turned left or right,
0being right,3,14 (π)left,π/2up and3π/2down
- Yaw is basically just how much the car is turned left or right,
speed_mps— Vehicle speed (meters/second). Convert to km/h by* 3.6
Example
{ "ts": 1712345678.12,
"x": 123.45,
"y": 67.89,
"yaw": 1.57,
"speed_mps": 12.3 }Payload shape: { ts, src, hz, acc: { x, y, z } }
ts— Timestamp in seconds since Unix epoch (float). When this IMU sample was producedsrc— Producer ID string. Use"carla"when synthesized from CARLAhz— Sampling rate in Hertz (samples per second)acc— Linear acceleration (m/s²) in the vehicle/body frame:acc.x— Forward/backward acceleration (forward is +X)acc.y— Lateral acceleration left/right (left is +Y)acc.z— Vertical acceleration up/down (up is +Z)
Example
{
"ts": 1712345678.13,
"src": "carla",
"hz": 100,
"acc": { "x": 0.4, "y": -0.2, "z": 9.6 }
}- Zenoh is the data bus (low-latency pub/sub + simple queries)
- Producers put on keys; consumers subscribe
- Advanced Driver-Assistance Systems
- Detector Service
- Subscribes to
vehicle/poseandvehicle/imu/raw - High-pass filters vertical accel, maintains baseline noise, computes a score
- When thresholds are met, emits
detect/pothole/eventwith{ x, y, cell, severity, score } - Looks ~X m ahead; if a high-confidence cell is on path, publishes
hmi/alert
- Subscribes to
- Tile Store / Aggregator
- Subscribes to
detect/pothole/event - Upserts grid cells in a local SQLite DB (
potholes.db), updatinghits,confidence, and dominantseverity - Publishes compact deltas (small changes) on
map/pothole/tilesfor the HMI so if just a couple of grid cells changed, it publishes a tiny payload
- Subscribes to
- SQLite database (
potholes.db)- Durable store for the heatmap grid (and optional raw events)
- Supports decay/pruning so stale potholes fade over time
- Web/Cluster UI
- Subscribes to
map/pothole/tiles→ renders live heatmap - Subscribes to
hmi/alert→ shows toast (e.g., “Pothole 24 m — HIGH”) and plays a chime
- Subscribes to
- Ankaios
- Starts services in order (Bridge → Detector → Tile Store → HMI gateway)
- Restarts on crash; exposes simple health status
- CARLA sim hits a bump → Bridge publishes pose + IMU samples
- Detector filters & scores → raises pothole event
- Tile Store updates SQLite and publishes tile delta
- HMI receives tiles → heatmap updates; if approaching, also receives alert
vehicle/posevehicle/imu/rawdetect/pothole/eventmap/pothole/tileshmi/alert
- Early Brainstorm session
- Define Core Idea
- Ticket creation and refinement (using github issues)
- Feature branch creation
- Pull Request
- Code Review
Use github issues to create tickets, provide an estimated deadline and assign resources.
We will have a pipeline which will include code quality tools. If possible, we will also implement some automated tests for fixed inputs
We communicate openly, giving everyone the freedom to share their ideas and raise their points. We also occasionally use Slack to share resources and links.
We make decisions by voting. If a team member disagrees or votes against, we take time to listen to their perspective, understand their reasoning, and then consider as a team whether their point makes sense.
