Requirements
When you design, build, and realise for your Learning Group city (the scale-model City Sim), take the following requirements into account. They apply to the city as a whole and to every tile and challenge that connects into it.
General
- Every Embedded & Robotica Engineer student owns one tile in the city project. Full-stack Developer students can ask for a tile if they are interested.
- Each tile is based on one of the five LightBurn templates below.
- Each student selects one or more city challenge(s) and agrees this with the Learning Group. Multiple students do not work on the same challenge.
- The project includes design documentation for the protocols used to communicate between parts of the city (for example between hubs, tiles, and the full-stack services).
- Decision making is documented on the city’s MkDocs site.
- Documentation is written in Markdown, in English, and uses text, graphics, schematics, tables, and other clear visuals where needed.
- Every decision includes a reference to a resource (article, datasheet, standard, experiment, or similar).
- All city work stays available in the GitLab project you received from the studio, on the
mainbranch, for the full duration of the project. - The city and all tiles share the same branding and visual consistency, so the result looks and feels like one city.
- The city has one shared firmware for the embedded system, one shared back-end, and one shared front-end. Team members do not each build their own stack; you focus on integrating your challenge into these shared parts.
- Embedded and full-stack students integrate their work, but you do not wait on each other to make progress. Use simulation, stubs, recorded data, mocks, or other test setups so you can develop and demonstrate your part while a classmate’s hardware or services are not ready yet.
Tile templates (LightBurn)
Download a template, open it in LightBurn, and laser-cut your tile. Choose one template for your tile:
| Preview | Template | Download |
|---|---|---|
| Tile 1 — Vertical | tile-1-vertical.lbrn2 | |
| Tile 2 — T-junction | tile-2-t-junction.lbrn2 | |
| Tile 3 — Crossroads | tile-3-crossroads.lbrn2 | |
| Tile 4 — Infra crossing | tile-4-infra-crossing.lbrn2 | |
| Tile 5 — Bend | tile-5-bend.lbrn2 |
Embedded & Robotics Engineer
- You research, design, build, and implement a challenge for your city, and you document it so other students understand what you did and can apply the same approach on their own tile.
- Every city keeps a shared Bill of Materials (BOM) and a wiring diagram for the embedded hardware.
- Different challenges integrate into one city — tiles and hubs work together, not as isolated demos.
- You focus on making sensor data and controls available to full-stack developers (clear protocols, documented messages, and a way to read data and send commands).
- The city documents its own code conventions for the embedded application, and you follow them.
Full-stack Developer
The full-stack side is the brains and the face of the city: it collects data from hubs (sensors and actuators), stores it, exposes it through services, and shows it in a UI that the Learning Group can use.
- The full-stack services collect data from hubs that have sensors and actuators.
- You make sure the full-stack side can connect to the microcontrollers of the city (agreed protocol, network path, and documented how-to for the Learning Group).
- From the full-stack side it is possible to override decisions of individual hubs — for example turning all traffic lights on a specific road to red for an emergency vehicle.
- City data is stored so it can be used for later analysis. The data structure is normalised and saved with relevant metadata (date/time, device, IP, location, and similar).
- The back-end runs on a Raspberry Pi, one Pi per city, hosted in the server room of the HvA (6th floor WBH).
- All full-stack services run in Docker.
- The city includes a front-end (for example a dashboard or control view) that classmates can open and use to see or act on city data.
- The city documents its own code conventions for the full-stack application (back-end and front-end), and you follow them.