
Robot Trash Collector V1.0
Lukikato101/AMR_Robot-Trash-Collector-Simple-PCB
Autonomous trash collector robot simulation with AI object detection and monitoring dashboard.

Low-cost autonomous mobile robot (AMR) for warehouse material transport and automation.
LogiBot PCB is an open-source printed circuit board by Lukikato101, from the Lukikato101/LogiBot repository on GitHub. It is a 4-layer board with 114 parts on 76 nets, routed with 9 tracks and 0 vias.
It is built around the TJA1051T, LM2596S-5.0 and AP2112K-3.3, with the USBLC6-2SC6, SS34 and VL53L0X among its other parts. Its parts include 22 capacitors, 22 resistors, 15 connectors, 12 diodes and 4 ICs. It belongs with the robots and motor control boards and the STM32 boards of this library.
An end-to-end warehouse AMR prototype that combines embedded motion control, fail-safe safety logic, real-time fleet monitoring, path planning, simulation, and production-oriented hardware design assets.
LogiBot is a multidisciplinary robotics project for moving between warehouse rack locations under operator supervision. The repository brings the complete engineering stack together: STM32 firmware for deterministic robot control, an ESP32-S3 communications bridge, a FastAPI control plane, a React dashboard, a four-robot simulator, and KiCad/FreeCAD design files.
LogiBot demonstrates practical work across the boundary between software and physical systems:
flowchart TB
subgraph Robot[LogiBot AMR]
Sensors[Encoders • IMU • ToF • Ultrasonic • E-stop • Bumper]
STM32[STM32G474RET6\nReal-time controller]
Actuators[Motor drivers\nPWM + direction]
ESP32[ESP32-S3\nWi-Fi / MQTT bridge]
Sensors --> STM32
STM32 --> Actuators
STM32 <-->|Binary UART + heartbeat\n115200 baud| ESP32
end
Broker[(Mosquitto\nMQTT broker)]
API[FastAPI backend\nREST + WebSocket + SQLite]
UI[React / Vite\nFleet dashboard]
Sim[Python fleet simulator\nUp to 4 robots]
ESP32 <-->|Wi-Fi / MQTT| Broker
Broker <-->|Telemetry, safety, commands| API
API <-->|REST + WebSocket| UI
Sim <-->|MQTT| BrokersequenceDiagram
participant Operator
participant Dashboard as React Dashboard
participant API as FastAPI
participant MQTT as MQTT Broker
participant ESP32 as ESP32-S3
participant STM32 as STM32 Controller
Operator->>Dashboard: Reserve robot and choose rack
Dashboard->>API: POST /api/robots/{id}/goto/{rack}
API->>API: Plan collision-free route with A*
API->>MQTT: Publish navigation waypoints
MQTT->>ESP32: Deliver command
ESP32->>STM32: Relay framed UART command
STM32-->>ESP32: Telemetry and safety events
ESP32->>MQTT: Publish JSON telemetry
MQTT->>API: Deliver telemetry
API-->>Dashboard: Broadcast live update via WebSocket
Dashboard-->>Operator: Show position, battery, and safety statestateDiagram-v2
[*] --> Safe
Safe: Motion enabled
Safe --> EStopLatched: E-stop triggered
Safe --> BumperLatched: Bumper triggered
Safe --> CommTimeoutLatched: ESP32 heartbeat lost (> 1.5 s)
Safe --> FaultLatched: Motor-driver fault
EStopLatched --> Safe: Explicit reset + physical condition cleared
BumperLatched --> Safe: Explicit reset + physical condition cleared
CommTimeoutLatched --> Safe: Explicit reset after link recovery
FaultLatched --> Safe: Explicit reset after fault recoveryAll safety triggers are latched. Releasing an E-stop or bumper alone does not re-enable motion; an operator reset is required after the physical cause has cleared. SAFETY_OUT starts low and is intended to drive an external motor-power relay/contactor.
| Area | Implementation |
|---|---|
| Real-time motion | Dual-wheel PWM control, PID loops, encoder-based odometry, differential-drive configuration |
| Sensor fusion | IMU gyro bias calibration and configurable IMU/odometry heading fusion |
| Obstacle safety | E-stop, bumper, motor fault, ultrasonic, and VL53L0X ToF support |
| Fleet operations | Robot reservation, operator ownership, rack dispatch, stop, and safety reset controls |
| Navigation | 0.5 m occupancy grid, obstacle margin, diagonal A* search, and simplified waypoints |
| Live observability | MQTT telemetry storage, WebSocket broadcasting, historical telemetry and safety-event APIs |
| Simulation | A configurable four-robot warehouse simulator with rack layout and AprilTag correction events |
| Hardware | KiCad schematic/PCB, FreeCAD assembly, plus STEP and STL export assets |
| Layer | Technologies |
|---|---|
| Robot control | C, STM32 HAL, STM32G474RET6, STM32CubeMX / STM32CubeIDE |
| Connectivity | C++, PlatformIO, Arduino framework, ESP32-S3, Wi-Fi, MQTT, OTA updates |
| Backend | Python 3.11+, FastAPI, SQLAlchemy, Paho MQTT, SQLite, Uvicorn |
| Frontend | React 18, Vite, Recharts, WebSocket |
| Simulator | Python, Paho MQTT, warehouse occupancy model |
| Hardware | KiCad, FreeCAD, STEP, STL |
LogiBot-master/
├── dashboard/
│ ├── stm32/ # STM32 real-time control and safety firmware
│ ├── esp32/ # ESP32-S3 Wi-Fi/MQTT bridge firmware
│ ├── backend/ # FastAPI, MQTT client, SQLite, A* planner
│ ├── frontend/ # React/Vite fleet-management dashboard
│ ├── simulator/ # Multi-robot warehouse simulation
│ └── docs/ # ESP32 recovery/flashing notes
├── hardware/
│ ├── electronics/ # KiCad PCB project, PDF, and STEP assets
│ └── mechanical(demo)/ # FreeCAD assembly and exported STEP/STL files
├── firmware/ # Reserved firmware workspace structure
├── simulation/ # Reserved Gazebo/world workspace structure
├── Software/ # Reserved ROS 2/application workspace structure
└── docs/ # Reserved project documentation structureThe fastest way to explore the project is to run the MQTT broker, backend, simulator, and dashboard locally. The simulator represents four robots in a 20 m × 12 m warehouse with racks A–D.
| Tool | Recommended version | Purpose |
|---|---|---|
| Python | 3.11+ | API and simulator |
| Node.js | 20+ | Dashboard development/build |
| Mosquitto | Current stable release | Local MQTT broker |
| Git | Current stable release | Source control |
Install Mosquitto, then open a terminal from dashboard/backend:
mosquitto -c mosquitto.confThe included configuration is intentionally for trusted local development. It accepts anonymous connections on port 1883; do not deploy it unchanged to a production network.
Open another terminal:
cd dashboard/backend
python -m venv .venv
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# macOS/Linux
# source .venv/bin/activate
pip install -r requirements.txt
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000The API starts at http://localhost:8000, and interactive API documentation is available at http://localhost:8000/docs.
Open a third terminal:
cd dashboard/simulator
python -m venv .venv
# Windows PowerShell
.\.venv\Scripts\Activate.ps1
# macOS/Linux
# source .venv/bin/activate
pip install -r requirements.txt
python fleet_simulator.py --broker localhostThe simulator publishes telemetry for logibot-01 through logibot-04 and follows navigation waypoints sent by the backend.
Open a fourth terminal:
cd dashboard/frontend
copy .env.example .env # Windows Command Prompt
# Copy-Item .env.example .env # Windows PowerShell
# cp .env.example .env # macOS/Linux
npm install
npm run devOpen http://localhost:5173. Reserve a robot, select it, then send it to racks A–D. The dashboard shows the warehouse map, live telemetry, connection status, reservation state, and safety events.
cd dashboard/frontend
npm run buildThe frontend, backend, and simulator each include a Dockerfile. Their runtime configuration is deliberately kept explicit; a production deployment should supply a hardened MQTT configuration, persistent database storage, environment-specific origins, and an orchestration configuration.
The STM32 owns time-sensitive functions:
To prepare an STM32 project, create an STM32G474RET6 project in STM32CubeMX/CubeIDE, configure the peripherals and pins specified in dashboard/stm32/Core/Inc/pinout.h, then integrate the supplied Core/Inc and Core/Src sources. The system clock target is 170 MHz, and SWD is wired to PA13/PA14.
Before operating a physical robot, calibrate the wheel radius, wheel base, encoder ticks per revolution, and PID gains in dashboard/stm32/Core/Src/main.c. The current odometry values are documented as placeholders and must not be treated as final mechanical constants.
The ESP32 receives binary telemetry frames from the STM32, converts them to JSON, publishes to MQTT, relays dashboard commands back over UART, emits a heartbeat, and supports OTA updates through ArduinoOTA.
Configure the following values before flashing:
ROBOT_IDWIFI_SSID and WIFI_PASSWORDMQTT_BROKER_HOSTThey are located in dashboard/esp32/include/config.h. Build and upload with PlatformIO:
cd dashboard/esp32
pio run -t upload
pio device monitorFor recovery-flashing details, see dashboard/docs/flashing.md.
Topics are scoped by robot ID, allowing the backend and simulator to handle a fleet consistently.
| Direction | Topic | Purpose |
|---|---|---|
| Robot → platform | logibot/{robot_id}/telemetry | Pose, velocity, sensor state, battery, fault flags |
| Robot → platform | logibot/{robot_id}/safety | Latched safety events |
| Robot → platform | logibot/{robot_id}/status | Online/offline presence using MQTT LWT |
| Robot → platform | logibot/{robot_id}/apriltag | Pose-correction event |
| Platform → robot | logibot/{robot_id}/cmd/velocity | Manual linear/angular velocity command |
| Platform → robot | logibot/{robot_id}/cmd/stop | Immediate stop command |
| Platform → robot | logibot/{robot_id}/cmd/safety_reset | Request a safety reset |
| Platform → robot/simulator | logibot/{robot_id}/nav/goal | A* waypoint list and rack goal |
FastAPI automatically exposes the complete OpenAPI specification at /docs. Core endpoints include:
| Method | Endpoint | Description |
|---|---|---|
GET | /api/health | API health check |
GET | /api/warehouse/layout | Warehouse bounds, racks, homes, and AprilTags |
GET | /api/robots | Fleet registry and reservation state |
POST | /api/robots/{id}/reserve | Reserve a robot for one operator |
POST | /api/robots/{id}/release | Release a reservation |
POST | /api/robots/{id}/goto/{rack} | Plan and publish a route to a rack |
POST | /api/robots/{id}/cmd/velocity | Send manual velocity command |
POST | /api/robots/{id}/cmd/stop | Stop the selected robot |
POST | /api/robots/{id}/cmd/safety_reset | Request reset of an eligible safety latch |
GET | /api/robots/{id}/telemetry/history | Read stored telemetry history |
WS | /ws | Receive live telemetry, safety, and fleet events |
Command and reservation endpoints require X-Operator-Id and X-Operator-Name headers. In the current prototype, those identities are browser-generated operational identifiers, not production authentication.
flowchart LR
Start[Current robot pose] --> Grid[0.5 m occupancy grid]
Racks[Static rack bounds\n+with 0.35 m margin] --> Grid
Grid --> AStar[A* route search\n8-connected neighbors]
AStar --> Simplify[Remove collinear waypoints]
Simplify --> MQTT[Publish navigation goal]
MQTT --> Follow[Robot/simulator\nlocal waypoint follower]
Tags[AprilTags at aisles\nand rack approaches] --> Correct[Pose correction event]
Correct --> Live[Live dashboard update]The warehouse layout is defined once in dashboard/backend/app/warehouse.py and is shared by the API, planner, and simulator. This helps keep the dashboard view, planned route, and digital twin aligned.
hardware/electronics/LogiBot PCBLogiBot PCB.pdfhardware/mechanical(demo)/cadhardware/mechanical(demo)/cad/exportPROJECT_HANDOFF.mdThe handoff notes should be reviewed before manufacturing: the mechanical design is actively evolving and some exports are identified there as needing refresh after final geometry validation.
This is a functional engineering prototype, not a certified commercial AMR. The most valuable next steps are:
No license has been assigned yet. Contact the project owner before reusing, distributing, or deploying this work.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 10 | 330 | Resistor_SMD:R_0603_1608Metric | R8, R13, R14, R15, R18, R19, R25, R26, R27, R28 |
| 7 | 100nF | Capacitor_SMD:C_0603_1608Metric | C1, C2, C6, C10, C13, C14, C15 |
| 6 | 10K | Resistor_SMD:R_0603_1608Metric | R1, R11, R20, R21, R22, R23 |
| 4 | 100pF | Capacitor_SMD:C_0603_1608Metric | C3, C5, C11, C12 |
| 4 | MountingHole | MountingHole:MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 2 | 100nF | Capacitor_SMD:C_0805_2012Metric | C16, C18 |
| 2 | 10k | Resistor_SMD:R_0603_1608Metric | R5, R29 |
| 2 | 10uF | Capacitor_SMD:C_0805_2012Metric | C4, C7 |
| 2 | 1uF | Capacitor_SMD:C_0805_2012Metric | C19, C20 |
| 2 | 22pF | Capacitor_SMD:C_0603_1608Metric | C21, C22 |
| 2 | 5.1K | Resistor_SMD:R_0603_1608Metric | R2, R3 |
| 2 | TP_5V | TestPoint:TestPoint_Pad_D1.5mm | TP2, TP5 |
| 1 | 100K | Resistor_SMD:R_0603_1608Metric | R9 |
| 1 | 100uF | Capacitor_THT:CP_Radial_D10.0mm_P5.00mm | C9 |
| 1 | 10A | Fuse:Fuseholder_Blade_Mini_Keystone_3568 | F1 |
| 1 | 120 | Resistor_SMD:R_0603_1608Metric | R4 |
| 1 | 220uF | Capacitor_SMD:C_0805_2012Metric | C8 |
| 1 | 4.7uF | Capacitor_SMD:C_0805_2012Metric | C17 |
| 1 | 8MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y2 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U6 |
| 1 | BUMPER | TestPoint:TestPoint_Pad_D1.5mm | TP16 |
| 1 | BUTTON_RST | Button_Switch_THT:SW_PUSH_6mm | SW1 |
| 1 | Bumper Switch | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J15 |
| 1 | Bumper Switch | TestPoint:TestPoint_Pad_D1.5mm | SW3 |
| 1 | Bumper Switch Connector | Connector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_Vertical | J6 |
| 1 | CANH | TestPoint:TestPoint_Pad_D1.5mm | TP25 |
| 1 | CANL | TestPoint:TestPoint_Pad_D1.5mm | TP26 |
| 1 | E-Stop Switch | TestPoint:TestPoint_Pad_D1.5mm | SW2 |
| 1 | ENCODER_LEFT | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J10 |
| 1 | ENCODER_RIGHT | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J11 |
| 1 | ENC_L_A | TestPoint:TestPoint_Pad_D1.5mm | TP12 |
| 1 | ENC_L_B | TestPoint:TestPoint_Pad_D1.5mm | TP17 |
| 1 | ENC_R_A | TestPoint:TestPoint_Pad_D1.5mm | TP13 |
| 1 | ENC_R_B | TestPoint:TestPoint_Pad_D1.5mm | TP18 |
| 1 | Emergency Stop Connector | Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_Vertical | J5 |
| 1 | FerriteBead | Inductor_SMD:L_1206_3216Metric | FB1 |
| 1 | IMU INT | TestPoint:TestPoint_Pad_D1.5mm | TP15 |
| 1 | J_IMU | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J12 |
| 1 | Jumper_2_Open | Jumper:SolderJumper-2_P1.3mm_Bridged2Bar_Pad1.0x1.5mm | JP2 |
| 1 | Konektor CAN | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J4 |
| 1 | LED_BLUE_UART | LED_SMD:LED_0805_2012Metric | D11 |
| 1 | LED_COMM | LED_SMD:LED_0805_2012Metric | D5 |
| 1 | LED_ERROR | LED_SMD:LED_0805_2012Metric | D4 |
| 1 | LED_GREEN_USB | LED_SMD:LED_0805_2012Metric | D7 |
| 1 | LED_POWER | LED_SMD:LED_0805_2012Metric | D2 |
| 1 | LED_RUN | LED_SMD:LED_0805_2012Metric | D3 |
| 1 | LED_STATUS L | LED_SMD:LED_0805_2012Metric | D10 |
| 1 | LED_STATUS R | LED_SMD:LED_0805_2012Metric | D9 |
| 1 | LED_YELLOW_CAN | LED_SMD:LED_0805_2012Metric | D8 |
| 1 | LM2596S-5 | Package_TO_SOT_SMD:TO-263-5_TabPin3 | U1 |
| 1 | MotorDriver_Left | Connector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_Vertical | J8 |
| 1 | MotorDriver_Right | Connector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_Vertical | J9 |
| 1 | Q_PMOS_GSD | Package_TO_SOT_SMD:SOT-23 | Q1 |
| 1 | SCL | TestPoint:TestPoint_Pad_D1.5mm | TP19 |
| 1 | SDA | TestPoint:TestPoint_Pad_D1.5mm | TP14 |
| 1 | SMBJ33A-M3_52 | SMBJ33A-M3_52:DIOM5436X244N | D1 |
| 1 | SS34 | Diode_SMD:D_SMA | D6 |
| 1 | SWD Debug | Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical | J2 |
| 1 | Safety Header | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J7 |
| 1 | Safety LED | LED_SMD:LED_0805_2012Metric | D12 |
| 1 | TJA1051T | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U5 |
| 1 | TP8 VL53_INT | TestPoint:TestPoint_Pad_D1.5mm | TP20 |
| 1 | TP_3V3 | TestPoint:TestPoint_Pad_D1.5mm | TP3 |
| 1 | TP_ENC_L_A | TestPoint:TestPoint_Pad_D1.5mm | TP8 |
| 1 | TP_ENC_L_B | TestPoint:TestPoint_Pad_D1.5mm | TP9 |
| 1 | TP_ENC_R_A | TestPoint:TestPoint_Pad_D1.5mm | TP10 |
| 1 | TP_ENC_R_B | TestPoint:TestPoint_Pad_D1.5mm | TP11 |
| 1 | TP_GND | TestPoint:TestPoint_Pad_D1.5mm | TP4 |
| 1 | TP_PWM_L | TestPoint:TestPoint_Pad_D1.5mm | TP6 |
| 1 | TP_PWM_R | TestPoint:TestPoint_Pad_D1.5mm | TP7 |
| 1 | TP_VBAT | TestPoint:TestPoint_Pad_D1.5mm | TP1 |
| 1 | UART STM32 ↔ ORANGE PI | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J16 |
| 1 | UART_RX | TestPoint:TestPoint_Pad_D1.5mm | TP24 |
| 1 | UART_TX | TestPoint:TestPoint_Pad_D1.5mm | TP23 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U4 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J3 |
| 1 | USB_DM | TestPoint:TestPoint_Pad_D1.5mm | TP22 |
| 1 | USB_DP | TestPoint:TestPoint_Pad_D1.5mm | TP21 |
| 1 | Ultrasonic Header | Connector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_Vertical | J14 |
| 1 | VL53L0X | Connector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_Vertical | J13 |
The 113 most common of 114 parts.
114 parts, built around the TJA1051T, LM2596S-5.0, AP2112K-3.3 and USBLC6-2SC6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the Lukikato101/LogiBot repository on GitHub, at the commit this page was made from: the board is hardware/electronics/LogiBot PCB/_restore_backup_2026-07-21T17-04-07-694/LogiBot PCB.kicad_pcb and its schematic hardware/electronics/LogiBot PCB/LogiBot PCB.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Lukikato101 before reusing the design.

Lukikato101/AMR_Robot-Trash-Collector-Simple-PCB
Autonomous trash collector robot simulation with AI object detection and monitoring dashboard.

ginomcfino/auv-sensor-hub
STM32-based sensor hub for autonomous underwater vehicles, integrating CAN bus communication, inertial and pressure sensing, and multi-rail power regulation.

bejaouihamza/robotic_arm_controller
Traditional servo controllers simply send PWM signals. This board goes further:

Sureshbkmr/Energy-Harvesting-Based-on-Beaden-Research-Paper
Based on Beaden Research Paper full custom PCB

GabuGravin41/rlpcb
RL PCB sits beside KiCad and works like a senior hardware engineer looking over your shoulder. You describe what you want to build; it helps you choose real parts from your KiCad libraries, works out the values, places…

nthclrd/picflash
Programmeur PIC open source en Rust : remplace MPLAB IPE/XC8 pour les PIC16, pilote les PICkit 4/5/Basic ou une carte RP2040 maison (KiCad)

Agent-Bid/IgniteIndia-Payload-PCB-Files
PCB Files for the Cubesat used for the Payload in the Ignite India 2025 Competition

ajisrawi/DroneMagNav2.0
DroneMagNav 2.0 - survey-fluxgate magnetic-anomaly navigation board for drones (IGRF-14 + EMAG2v3 continued to flight altitude)