Skip to the content
PCBKitNew board
4 layersLogiBot PCB, the printed circuit board in 3D

Low-cost autonomous mobile robot (AMR) for warehouse material transport and automation.

Copper layers
4
Thickness
1.6 mm
Parts
114
Nets
76
Pads
285
Tracks, vias
9, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
4 Jul 2026
Updated
4 Aug 2026

Overview

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.

Main components

6

README

README.md

LogiBot — Warehouse Autonomous Mobile Robot

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.

Why this project matters

LogiBot demonstrates practical work across the boundary between software and physical systems:

  • Embedded systems: motor PWM, software quadrature encoders, odometry, IMU/ToF/ultrasonic sensing, and a binary UART protocol.
  • Safety-oriented design: latched E-stop, bumper, motor-fault, and communication-timeout states with a hardware safety output.
  • Backend and web engineering: MQTT ingestion, REST APIs, WebSocket updates, SQLite telemetry history, and a responsive React dashboard.
  • Robotics algorithms: occupancy-grid A* planning, waypoint following in simulation, and AprilTag-based pose-correction hooks.
  • Hardware development: STM32G474 + ESP32-S3 PCB design, mechanical CAD, and manufacturable STEP/STL exports.

System architecture

mermaid
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| Broker

Command and telemetry flow

mermaid
sequenceDiagram
    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 state

Safety model

mermaid
stateDiagram-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 recovery

All 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.

Key capabilities

AreaImplementation
Real-time motionDual-wheel PWM control, PID loops, encoder-based odometry, differential-drive configuration
Sensor fusionIMU gyro bias calibration and configurable IMU/odometry heading fusion
Obstacle safetyE-stop, bumper, motor fault, ultrasonic, and VL53L0X ToF support
Fleet operationsRobot reservation, operator ownership, rack dispatch, stop, and safety reset controls
Navigation0.5 m occupancy grid, obstacle margin, diagonal A* search, and simplified waypoints
Live observabilityMQTT telemetry storage, WebSocket broadcasting, historical telemetry and safety-event APIs
SimulationA configurable four-robot warehouse simulator with rack layout and AprilTag correction events
HardwareKiCad schematic/PCB, FreeCAD assembly, plus STEP and STL export assets

Technology stack

LayerTechnologies
Robot controlC, STM32 HAL, STM32G474RET6, STM32CubeMX / STM32CubeIDE
ConnectivityC++, PlatformIO, Arduino framework, ESP32-S3, Wi-Fi, MQTT, OTA updates
BackendPython 3.11+, FastAPI, SQLAlchemy, Paho MQTT, SQLite, Uvicorn
FrontendReact 18, Vite, Recharts, WebSocket
SimulatorPython, Paho MQTT, warehouse occupancy model
HardwareKiCad, FreeCAD, STEP, STL

Repository layout

text
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 structure

Quick start — run the digital twin

The 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.

Prerequisites

ToolRecommended versionPurpose
Python3.11+API and simulator
Node.js20+Dashboard development/build
MosquittoCurrent stable releaseLocal MQTT broker
GitCurrent stable releaseSource control

1. Start the MQTT broker

Install Mosquitto, then open a terminal from dashboard/backend:

bash
mosquitto -c mosquitto.conf

The included configuration is intentionally for trusted local development. It accepts anonymous connections on port 1883; do not deploy it unchanged to a production network.

2. Start the API

Open another terminal:

bash
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 8000

The API starts at http://localhost:8000, and interactive API documentation is available at http://localhost:8000/docs.

3. Start the fleet simulator

Open a third terminal:

bash
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 localhost

The simulator publishes telemetry for logibot-01 through logibot-04 and follows navigation waypoints sent by the backend.

4. Start the dashboard

Open a fourth terminal:

bash
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 dev

Open 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.

Build the dashboard for deployment

bash
cd dashboard/frontend
npm run build

The 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.

Hardware and firmware

STM32G474 real-time controller

The STM32 owns time-sensitive functions:

  • Left/right motor PWM and direction control
  • Software quadrature encoder decoding and odometry
  • I²C IMU and VL53L0X ToF integration
  • Ultrasonic sensing
  • E-stop, bumper, motor-fault, and communication-timeout safety logic
  • Framed UART communication with the ESP32
  • ESP32 reset and boot-mode supervision

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.

ESP32-S3 communications bridge

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_ID
  • WIFI_SSID and WIFI_PASSWORD
  • MQTT_BROKER_HOST
  • UART GPIO mapping for the installed ESP32-S3 module

They are located in dashboard/esp32/include/config.h. Build and upload with PlatformIO:

bash
cd dashboard/esp32
pio run -t upload
pio device monitor

For recovery-flashing details, see dashboard/docs/flashing.md.

MQTT contract

Topics are scoped by robot ID, allowing the backend and simulator to handle a fleet consistently.

DirectionTopicPurpose
Robot → platformlogibot/{robot_id}/telemetryPose, velocity, sensor state, battery, fault flags
Robot → platformlogibot/{robot_id}/safetyLatched safety events
Robot → platformlogibot/{robot_id}/statusOnline/offline presence using MQTT LWT
Robot → platformlogibot/{robot_id}/apriltagPose-correction event
Platform → robotlogibot/{robot_id}/cmd/velocityManual linear/angular velocity command
Platform → robotlogibot/{robot_id}/cmd/stopImmediate stop command
Platform → robotlogibot/{robot_id}/cmd/safety_resetRequest a safety reset
Platform → robot/simulatorlogibot/{robot_id}/nav/goalA* waypoint list and rack goal

API overview

FastAPI automatically exposes the complete OpenAPI specification at /docs. Core endpoints include:

MethodEndpointDescription
GET/api/healthAPI health check
GET/api/warehouse/layoutWarehouse bounds, racks, homes, and AprilTags
GET/api/robotsFleet registry and reservation state
POST/api/robots/{id}/reserveReserve a robot for one operator
POST/api/robots/{id}/releaseRelease a reservation
POST/api/robots/{id}/goto/{rack}Plan and publish a route to a rack
POST/api/robots/{id}/cmd/velocitySend manual velocity command
POST/api/robots/{id}/cmd/stopStop the selected robot
POST/api/robots/{id}/cmd/safety_resetRequest reset of an eligible safety latch
GET/api/robots/{id}/telemetry/historyRead stored telemetry history
WS/wsReceive 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.

Navigation and localization approach

mermaid
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 design assets

The 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.

Engineering limitations and next steps

This is a functional engineering prototype, not a certified commercial AMR. The most valuable next steps are:

  • Replace browser-stored operator identities with authenticated, role-based access control.
  • Require MQTT credentials and TLS; restrict CORS origins for deployment.
  • Add automated unit, integration, hardware-in-the-loop, and safety validation tests.
  • Add dynamic-obstacle perception and multi-robot conflict resolution beyond static-map planning.
  • Validate and tune odometry/PID values on the assembled robot.
  • Complete a manufacturing readiness review for mechanical exports and the PCB revision.
  • Perform a formal safety assessment before use around people, forklifts, or production operations.

License

No license has been assigned yet. Contact the project owner before reusing, distributing, or deploying this work.

Parts

114
QtyValueFootprintReferences
10330Resistor_SMD:R_0603_1608MetricR8, R13, R14, R15, R18, R19, R25, R26, R27, R28
7100nFCapacitor_SMD:C_0603_1608MetricC1, C2, C6, C10, C13, C14, C15
610KResistor_SMD:R_0603_1608MetricR1, R11, R20, R21, R22, R23
4100pFCapacitor_SMD:C_0603_1608MetricC3, C5, C11, C12
4MountingHoleMountingHole:MountingHole_3.2mm_M3H1, H2, H3, H4
2100nFCapacitor_SMD:C_0805_2012MetricC16, C18
210kResistor_SMD:R_0603_1608MetricR5, R29
210uFCapacitor_SMD:C_0805_2012MetricC4, C7
21uFCapacitor_SMD:C_0805_2012MetricC19, C20
222pFCapacitor_SMD:C_0603_1608MetricC21, C22
25.1KResistor_SMD:R_0603_1608MetricR2, R3
2TP_5VTestPoint:TestPoint_Pad_D1.5mmTP2, TP5
1100KResistor_SMD:R_0603_1608MetricR9
1100uFCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC9
110AFuse:Fuseholder_Blade_Mini_Keystone_3568F1
1120Resistor_SMD:R_0603_1608MetricR4
1220uFCapacitor_SMD:C_0805_2012MetricC8
14.7uFCapacitor_SMD:C_0805_2012MetricC17
18MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY2
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U6
1BUMPERTestPoint:TestPoint_Pad_D1.5mmTP16
1BUTTON_RSTButton_Switch_THT:SW_PUSH_6mmSW1
1Bumper SwitchConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ15
1Bumper SwitchTestPoint:TestPoint_Pad_D1.5mmSW3
1Bumper Switch ConnectorConnector_JST:JST_XH_B3B-XH-A_1x03_P2.50mm_VerticalJ6
1CANHTestPoint:TestPoint_Pad_D1.5mmTP25
1CANLTestPoint:TestPoint_Pad_D1.5mmTP26
1E-Stop SwitchTestPoint:TestPoint_Pad_D1.5mmSW2
1ENCODER_LEFTConnector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_VerticalJ10
1ENCODER_RIGHTConnector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_VerticalJ11
1ENC_L_ATestPoint:TestPoint_Pad_D1.5mmTP12
1ENC_L_BTestPoint:TestPoint_Pad_D1.5mmTP17
1ENC_R_ATestPoint:TestPoint_Pad_D1.5mmTP13
1ENC_R_BTestPoint:TestPoint_Pad_D1.5mmTP18
1Emergency Stop ConnectorConnector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ5
1FerriteBeadInductor_SMD:L_1206_3216MetricFB1
1IMU INTTestPoint:TestPoint_Pad_D1.5mmTP15
1J_IMUConnector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_VerticalJ12
1Jumper_2_OpenJumper:SolderJumper-2_P1.3mm_Bridged2Bar_Pad1.0x1.5mmJP2
1Konektor CANConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ4
1LED_BLUE_UARTLED_SMD:LED_0805_2012MetricD11
1LED_COMMLED_SMD:LED_0805_2012MetricD5
1LED_ERRORLED_SMD:LED_0805_2012MetricD4
1LED_GREEN_USBLED_SMD:LED_0805_2012MetricD7
1LED_POWERLED_SMD:LED_0805_2012MetricD2
1LED_RUNLED_SMD:LED_0805_2012MetricD3
1LED_STATUS LLED_SMD:LED_0805_2012MetricD10
1LED_STATUS RLED_SMD:LED_0805_2012MetricD9
1LED_YELLOW_CANLED_SMD:LED_0805_2012MetricD8
1LM2596S-5Package_TO_SOT_SMD:TO-263-5_TabPin3U1
1MotorDriver_LeftConnector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_VerticalJ8
1MotorDriver_RightConnector_JST:JST_XH_B8B-XH-A_1x08_P2.50mm_VerticalJ9
1Q_PMOS_GSDPackage_TO_SOT_SMD:SOT-23Q1
1SCLTestPoint:TestPoint_Pad_D1.5mmTP19
1SDATestPoint:TestPoint_Pad_D1.5mmTP14
1SMBJ33A-M3_52SMBJ33A-M3_52:DIOM5436X244ND1
1SS34Diode_SMD:D_SMAD6
1SWD DebugConnector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ2
1Safety HeaderConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ7
1Safety LEDLED_SMD:LED_0805_2012MetricD12
1TJA1051TPackage_SO:SOIC-8_3.9x4.9mm_P1.27mmU5
1TP8 VL53_INTTestPoint:TestPoint_Pad_D1.5mmTP20
1TP_3V3TestPoint:TestPoint_Pad_D1.5mmTP3
1TP_ENC_L_ATestPoint:TestPoint_Pad_D1.5mmTP8
1TP_ENC_L_BTestPoint:TestPoint_Pad_D1.5mmTP9
1TP_ENC_R_ATestPoint:TestPoint_Pad_D1.5mmTP10
1TP_ENC_R_BTestPoint:TestPoint_Pad_D1.5mmTP11
1TP_GNDTestPoint:TestPoint_Pad_D1.5mmTP4
1TP_PWM_LTestPoint:TestPoint_Pad_D1.5mmTP6
1TP_PWM_RTestPoint:TestPoint_Pad_D1.5mmTP7
1TP_VBATTestPoint:TestPoint_Pad_D1.5mmTP1
1UART STM32 ↔ ORANGE PIConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ16
1UART_RXTestPoint:TestPoint_Pad_D1.5mmTP24
1UART_TXTestPoint:TestPoint_Pad_D1.5mmTP23
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U4
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ3
1USB_DMTestPoint:TestPoint_Pad_D1.5mmTP22
1USB_DPTestPoint:TestPoint_Pad_D1.5mmTP21
1Ultrasonic HeaderConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalJ14
1VL53L0XConnector_JST:JST_XH_B6B-XH-A_1x06_P2.50mm_VerticalJ13

The 113 most common of 114 parts.

Questions

What parts does the LogiBot PCB use?

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.

Where can I download the LogiBot PCB KiCad files?

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.

Can I use the LogiBot PCB design in my own project?

Its repository states no licence, so its author keeps all rights: ask Lukikato101 before reusing the design.

Similar boards

  • 2 layers61.4 × 74.1 mmRobot Trash Collector V1.0, the printed circuit board in 3D

    Robot Trash Collector V1.0

    Lukikato101/AMR_Robot-Trash-Collector-Simple-PCB

    Autonomous trash collector robot simulation with AI object detection and monitoring dashboard.

    45 parts
  • 4 layers40 × 40 mmAuv sensor hub, the printed circuit board in 3D

    Auv sensor hub

    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.

    59 parts
  • 4 layers99 × 84 mmRobotic arm controller, the printed circuit board in 3D

    Robotic arm controller

    bejaouihamza/robotic_arm_controller

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

    140 parts
  • 2 layers102 × 66 mmFREE ENERGY ESP, the printed circuit board in 3D

    FREE ENERGY ESP

    Sureshbkmr/Energy-Harvesting-Based-on-Beaden-Research-Paper

    Based on Beaden Research Paper full custom PCB

    60 parts
  • 4 layers36 × 36 mmRl fc f405.routed, the printed circuit board in 3D

    Rl fc f405.routed

    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…

    65 parts2
  • 4 layers72 × 44 mmPicflash board, the printed circuit board in 3D

    Picflash board

    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)

    115 parts1MIT
  • 4 layers65 × 50 mmBrains, the printed circuit board in 3D

    Brains

    Agent-Bid/IgniteIndia-Payload-PCB-Files

    PCB Files for the Cubesat used for the Payload in the Ignite India 2025 Competition

    53 partsMIT
  • 4 layers128 × 84 mmDronemagnav2, the printed circuit board in 3D

    Dronemagnav2

    ajisrawi/DroneMagNav2.0

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

    222 parts