Skip to the content
4 layers130 × 100 mmAtlas carrier ctrl, the printed circuit board in 3D

Atlas carrier ctrl

md-sazzad-eee/ATLAS

Modular multi-robot system: a carrier robot that docks, transports, charges and redeploys two small agent robots. KiCad, FreeCAD, MATLAB/Simulink, COMSOL and ESP32 firmware.

Size
130 × 100 mm
Copper layers
4
Thickness
1.6 mm
Parts
157
Nets
96
Pads
586
Tracks, vias
1,913, 386
Pours
7
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
15 Oct 2026
Updated
15 Oct 2026

Overview

Atlas carrier ctrl is an open-source printed circuit board by md-sazzad-eee, from the md-sazzad-eee/ATLAS repository on GitHub. It is a 4-layer board of 130 × 100 mm with 157 parts on 96 nets, routed with 1,913 tracks and 386 vias.

It is built around the ESP32-S3-WROOM-1-N8, DRV8871DDA and 74LVC1G00, with the 74LVC1G11GW, AP2112K-3.3 and TPS3823-33DBV among its other parts. Its parts include 50 resistors, 40 capacitors, 19 connectors, 18 ICs and 7 diodes. It belongs with the robots and motor control boards and the ESP32 boards of this library.

Main components

11

README

README.md

ATLAS — Phase 1 foundation

Modular multi-robot research assistant: a carrier (ATLAS-M) that transports two agents (ATLAS-S1 Scout, ATLAS-S2 Research), deploys them, collects their results, re-plans when something fails, and tracks which conclusions depend on which evidence.

Phase 1 is the design and simulation stage. Nothing here is a measured hardware result. Every number comes from 00_requirements/atlas_params.yaml and is a proposed target.

One source of truth

text
00_requirements/atlas_params.yaml   <- edit this only
python3 00_requirements/sync_params.py   -> atlas_params.json (+ interface checks)

MATLAB, FreeCAD and the Python simulator all read atlas_params.json. sync_params.py refuses inconsistent interfaces, for example funnels that overlap, wheels that hit the bays, or a bay shorter than the agent.

What is here and how to run it

AreaToolEntry pointOutput
Drivetrain + energy sizingMATLAB05_simulation/matlab/atlas_sizing.mresults/sizing_report.txt, plots
Wheel-speed control loopSimulink05_simulation/matlab/build_speed_loop.matlas_wheel_speed_loop.slx, step/load plot
Docking state machineStateflowbuild_docking_fsm.m, then run_docking_tests.matlas_docking_fsm.slx, 8 scenario tests, traces
Dock contact heatingMATLAB PDE Toolbox05_simulation/matlab/contact_heating.mresults/contact_heating.*
Parametric CADFreeCAD01_mechanical/scripts/build_atlas_cad.py.FCStd, STEP, test-coupon STL, cad_check.json
Mission intelligence + fleet simPython05_simulation/python/run_experiments.pyresults/summary.md, plot
Testspytestcd 05_simulation/python && python3 -m pytest33 tests

To run FreeCAD, execute the script from FreeCAD's Python console: exec(open('<ATLAS>/01_mechanical/scripts/build_atlas_cad.py').read(), {'__file__': '<that path>'})

Python needs numpy scipy networkx pyyaml pydantic matplotlib pytest.

Phase 1 findings (what the models changed)

  1. Skid-steer turning sets the carrier motor size. An in-place turn needs about 3.7× the straight-line torque. Widening the track from 300 to 400 mm cut that requirement from 0.80 to 0.64 N·m per wheel. Spec per wheel: at least 0.64 N·m continuous and at least 95 rpm loaded.
  2. The dock ramp sets the agent motor size. Climbing the 12° ramp needs 3× the flat-floor torque. Spec per wheel: at least 0.10 N·m continuous and at least 73 rpm.
  3. The interface checks caught three geometry errors:
    • Carrier wheels intruded into the bays, so the wheels moved outboard.
    • The bay was shorter than the agent, so the guides were lengthened to 120 mm.
    • The side latch hit the chassis wall and the neighbouring bay, so it was redesigned as a front catch-tab latch. The new latch needed 9.5 mm of pin travel against 8 mm available, so the travel spec is now 10 mm.
  4. Contact heating: about 48 °C at 1 A with a healthy contact. A contaminated contact (200 mΩ) reaches about 177 °C at 2 A. Board C should therefore measure the voltage drop across the contacts and inhibit charging above about 100 mΩ. Print the contact block in PETG, ASA or nylon, not PLA.
  5. Evidence-aware re-planning (300 paired Monte-Carlo runs). In runs with sensor drift:
    • Wrong conclusions: 21% of runs with reassignment alone, 0% with evidence-aware re-planning.
    • Recovery cost: about half the re-measurements of a "redo everything" policy, and about 3 minutes shorter missions.
    • The carrier never moved with an unlatched agent and no battery-reserve violations occurred across all runs.
  6. The batteries are oversized for a 30-minute target: the agents have about 5 h of runtime and the carrier about 6 h. Either downsize (for example a 2S 1000 mAh agent pack) or raise the runtime target. Recharging both agents from the carrier uses 40% of the carrier's energy.

Verification done

  • The Stateflow chart passes 8 fault scenarios with 3 safety invariants checked on every sample.
  • The Python docking FSM reproduces the Stateflow traces sample-for-sample (parity test). A deliberate mutation of the Python FSM makes that test fail, so the test does detect differences.
  • The FreeCAD interference and clearance report is in 01_mechanical/docking_system/cad_check.json.
  • The blueprint §11 acceptance tests run as simulation tests in tests/test_blueprint_section11.py.

Subsystems

Dock contact heating (COMSOL)

  • 05_simulation/comsol/ContactHeating.java reproduces the MATLAB result (θ = 156 K/W, 47.8 °C at 1 A, 177 °C at 2 A / 200 mΩ).
  • A realistic model that includes the agent side gives 43.6 °C at the design point and 105.7 °C with a contaminated contact.
  • AddPlots.java adds the temperature and current-density plots to both saved models.

Camera

ESP32-S3 on every agent. The Scout adds a power-gated Raspberry Pi Zero 2 W + Camera Module 3 (07_documentation/camera_architecture.md). Scout runtime with the camera on is about 3.7 h (atlas_sizing.m, params v0.1.3).

Electronics (KiCad, 02_electronics/)

Every board is specified in Python; the schematic is generated from the spec and the exported netlist is checked against it pin-for-pin.

BoardFunctionLayersResult
B: agent controllerESP32-S3, motors, encoders, camera power2ERC 0/0, DRC 0 errors, 0 unconnected, fab outputs
C: dock / charge interfaceCC/CV charger per bay, 4-wire contact-resistance monitor2ERC 0/0, DRC 0 errors, 0 unconnected, fab outputs
A: carrier controllerESP32-S3, 4 wheel drivers, bay interlock in hardware4ERC 0 errors, DRC 0 errors, 0 unconnected, fab outputs

Board A puts the "never move with a seated, unlatched agent" rule into logic gates; Board C measures dock contact resistance by 4-wire sensing. Details and the PCB flow are in 02_electronics/README.md.

Firmware (03_firmware/)

Agent and carrier application cores in plain C, host-tested against plant models (6022 + 42 + 28 checks, 0 failures). ESP-IDF ports for Board B and Board A compile with 0 warnings; the Pi Zero vision service has 11 tests.

ROS 2

A six-package ROS 2 (Jazzy) workspace exists but is not included in this repository yet.

Further findings

  1. The agent's series diode limits a dock charge to about 86 % SOC. An ideal diode on Board B rev B would reach 98 %.
  2. Yaw from a single 50 mm AprilTag is unreliable beyond about 0.75 m. Dock alignment should steer on bearing when far out.
  3. A 2 s heartbeat timeout lets an agent travel about 0.4 m blind.

Next phase (bench work)

  • Order and assemble Boards A, B and C; flash the ESP32 firmware.
  • Motor identification (the agent and carrier PI gains use assumed motors).
  • INA226 / ADC calibration and camera calibration.
  • Print the clearance coupons; run 100 docking cycles.
  • Charge tests with real contacts.

Parts

157
QtyValueFootprintReferences
26100nFCapacitor_SMD:C_0603_1608MetricC2, C12, C14, C15, C16, C17, C18, C20, C21, C22, C23, C24, C30, C32, C33, C34 +10
1610kResistor_SMD:R_0603_1608MetricR9, R10, R11, R16, R17, R18, R19, R25, R43, R44, R53, R54, R63, R64, R73, R74
10100kResistor_SMD:R_0603_1608MetricR1, R3, R12, R13, R14, R22, R24, R29, R30, R31
61kResistor_SMD:R_0603_1608MetricR15, R28, R41, R51, R61, R71
420m 1%Resistor_SMD:R_1206_3216MetricR40, R50, R60, R70
422k (2.9A trip)Resistor_SMD:R_0603_1608MetricR42, R52, R62, R72
447uF 25VCapacitor_SMD:CP_Elec_6.3x7.7C31, C35, C39, C43
4DRV8871DDAPackage_SO:Texas_HTSOP-8-1EP_3.9x4.9mm_P1.27mm_EP2.95x4.9mm_Mask2.4x3.1mm_ThermalViasU15, U16, U17, U18
4INA180A1Package_TO_SOT_SMD:SOT-23-5U11, U12, U13, U14
4M3MountingHole:MountingHole_3.2mm_M3_Pad_ViaH1, H2, H3, H4
3AO3400APackage_TO_SOT_SMD:SOT-23Q4, Q5, Q6
2100Resistor_SMD:R_0603_1608MetricR21, R23
210uFCapacitor_SMD:C_0805_2012MetricC10, C11
210uF 25VCapacitor_SMD:C_1206_3216MetricC3, C4
21uFCapacitor_SMD:C_0603_1608MetricC9, C13
222uF 10VCapacitor_SMD:C_1206_3216MetricC7, C8
24.7kResistor_SMD:R_0603_1608MetricR26, R27
25.1kResistor_SMD:R_0603_1608MetricR7, R8
274LVC1G00Package_TO_SOT_SMD:SOT-23-5U6, U7
274LVC1G11Package_TO_SOT_SMD:SOT-23-6U8, U9
2SS14Diode_SMD:D_SMAD2, D3
2SS34 flybackDiode_SMD:D_SMAD5, D6
110k 1%Resistor_SMD:R_0603_1608MetricR6
110uH 4AInductor_SMD:L_Bourns_SRR1260L1
115A mini bladeFuse:Fuseholder_Blade_Mini_Keystone_3568F1
118kResistor_SMD:R_0603_1608MetricR2
120kResistor_SMD:R_0603_1608MetricR4
1220uF 25VCapacitor_SMD:CP_Elec_8x10C19
12N7002Package_TO_SOT_SMD:SOT-23Q2
1470uF 25VCapacitor_SMD:CP_Elec_10x10.5C1
15V magnetic buzzerBuzzer_Beeper:Buzzer_12x9.5RM7.6BZ1
175k 1%Resistor_SMD:R_0603_1608MetricR5
1AOD409 (motor rail)Package_TO_SOT_SMD:TO-252-2Q3
1AOD409 (rev-pol)Package_TO_SOT_SMD:TO-252-2Q1
1AP2112K-3.3Package_TO_SOT_SMD:SOT-23-5U2
1BATT 4S (+,-)Connector_AMASS:AMASS_XT60PW-M_1x02_P7.20mm_HorizontalJ1
1BAY 1 SENSORS (GND,SEATED,LATCHED_N)Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalJ6
1BAY 2 SENSORS (GND,SEATED,LATCHED_N)Connector_JST:JST_PH_B3B-PH-K_1x03_P2.00mm_VerticalJ7
1BOARD C POWER (VBAT,GND)Connector_AMASS:AMASS_XT30PW-M_1x02_P2.50mm_HorizontalJ3
1BOOTButton_Switch_SMD:SW_SPST_TL3342SW2
1E-STOP (NC)Connector_JST:JST_XH_B2B-XH-A_1x02_P2.50mm_VerticalJ5
1ENCODER LFConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ16
1ENCODER LRConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ17
1ENCODER RFConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ18
1ENCODER RRConnector_JST:JST_PH_B4B-PH-K_1x04_P2.00mm_VerticalJ19
1ESP32-S3-WROOM-1-N8RF_Module:ESP32-S3-WROOM-1U4
1ESTOP_OKTestPoint:TestPoint_Pad_D1.5mmTP7
1GNDTestPoint:TestPoint_Pad_D1.5mmTP8
1GREEN statusLED_SMD:LED_0603_1608MetricD7
1LATCH 1 SOLENOID (12V)Connector_JST:JST_VH_B2P-VH_1x02_P3.96mm_VerticalJ8
1LATCH 2 SOLENOID (12V)Connector_JST:JST_VH_B2P-VH_1x02_P3.96mm_VerticalJ9
1MOTOR LFConnector_JST:JST_VH_B2P-VH_1x02_P3.96mm_VerticalJ12
1MOTOR LRConnector_JST:JST_VH_B2P-VH_1x02_P3.96mm_VerticalJ13
1MOTOR RFConnector_JST:JST_VH_B2P-VH_1x02_P3.96mm_VerticalJ14
1MOTOR RRConnector_JST:JST_VH_B2P-VH_1x02_P3.96mm_VerticalJ15
1MOT_ENABLETestPoint:TestPoint_Pad_D1.5mmTP5
1QWIIC I2C (IMU)Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_HorizontalJ10
1RED motors armedLED_SMD:LED_0603_1608MetricD4
1RESETButton_Switch_SMD:SW_SPST_TL3342SW1
1SBC POWER OUT (VBAT,GND)Connector_AMASS:AMASS_XT30PW-M_1x02_P2.50mm_HorizontalJ2
1SMBJ16CADiode_SMD:D_SMBD1
1TCA9534PWRPackage_SO:TSSOP-16_4.4x5mm_P0.65mmU10
1TO BOARD CConnector_PinHeader_2.54mm:PinHeader_2x08_P2.54mm_VerticalJ11
1TPS3823-33DBVPackage_TO_SOT_SMD:SOT-23-5U5
1TPS54302Package_TO_SOT_SMD:SOT-23-6U1
1USB-C (ROS 2 link)Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_HorizontalJ4
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U3
1VBATTestPoint:TestPoint_Pad_D1.5mmTP1
1VCC_3V3TestPoint:TestPoint_Pad_D1.5mmTP3
1VCC_5VTestPoint:TestPoint_Pad_D1.5mmTP2
1VM_SWTestPoint:TestPoint_Pad_D1.5mmTP4
1WDT_OKTestPoint:TestPoint_Pad_D1.5mmTP6

More from md-sazzad-eee/ATLAS

2
  • 2 layers90 × 66 mmAtlas dock charger, the printed circuit board in 3D

    Atlas dock charger

    md-sazzad-eee/ATLAS

    Modular multi-robot system: a carrier robot that docks, transports, charges and redeploys two small agent robots. KiCad, FreeCAD, MATLAB/Simulink, COMSOL and ESP32 firmware.

    131 parts
  • 2 layers110 × 90 mmAtlas agent ctrl, the printed circuit board in 3D

    Atlas agent ctrl

    md-sazzad-eee/ATLAS

    Modular multi-robot system: a carrier robot that docks, transports, charges and redeploys two small agent robots. KiCad, FreeCAD, MATLAB/Simulink, COMSOL and ESP32 firmware.

    112 parts

Similar boards

  • 4 layers622.7 × 375.7 mmCft ctl, the printed circuit board in 3D

    Cft ctl

    alexiosc/cft

    The CFT homebrew minicomputer

    215 parts6GPL-3.0
  • 2 layers76 × 95.8 mmSupervisor, the printed circuit board in 3D

    Supervisor

    kaminaris/GigaESC

    97 parts47
  • 2 layers100 × 100 mmFertilizer Pump, the printed circuit board in 3D

    Fertilizer Pump

    Handkep/Fertilizer-Pump

    The fertilizer dispenser automatically doses fertilizer concentrates or stock solutions using one or more peristaltic pumps. The amount dispensed depends on the selected recipe and the intended irrigation water volume.

    102 parts
  • 2 layers46 × 46 mmMaiana Blue N2000 v8.2, the printed circuit board in 3D

    Maiana Blue N2000 v8.2

    Haimana/MAIANA_BLUE

    Firmware and hardware materials for the MAIANA-class AIS transponder ecosystem. The design builds on the open MAIANA project (GPL v3, Peter Antypas).

    54 parts3
  • 4 layers90.4 × 25 mmTransponder-12.0.1, the printed circuit board in 3D

    Transponder-12.0.1

    rolandvs/ais_transponder

    A real, functioning low-power AIS transponder (class B)

    115 parts1GPL-3.0
  • 6 layers178 × 118 mmMoriShield Carrier 6L, the printed circuit board in 3D

    MoriShield Carrier 6L

    aswinserigreen/morishield_hardware

    all components bom , pcb layouts and schematics of morishield is maintained here

    157 parts

Questions

How big is the Atlas carrier ctrl PCB?

It measures 130 × 100 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Atlas carrier ctrl use?

157 parts, built around the ESP32-S3-WROOM-1-N8, DRV8871DDA, 74LVC1G00 and 74LVC1G11GW. 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 Atlas carrier ctrl KiCad files?

From the md-sazzad-eee/ATLAS repository on GitHub, at the commit this page was made from: the board is 02_electronics/carrier_controller/atlas_carrier_ctrl.kicad_pcb and its schematic 02_electronics/agent_controller/atlas_agent_ctrl.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Atlas carrier ctrl design in my own project?

Its repository states no licence, so its author keeps all rights: ask md-sazzad-eee before reusing the design.