
FlightController
12Robert20/STM32F7-Flight-Controller
A custom 4-layer high-performance flight controller for FPV drones. Built around the STM32F777, featuring DShot600, CRSF support, and advanced LC filtering.

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…
Rl fc f405.routed is an open-source printed circuit board by GabuGravin41, from the GabuGravin41/rlpcb repository on GitHub. It is a 4-layer board of 36 × 36 mm with 65 parts on 79 nets, routed with 466 tracks and 64 vias.
It is built around the STM32F405RGT6, BMP280 and W25Q128JVSIQ, with the AP2112K-3.3, ICM-20602 and TPS54302 among its other parts. Its parts include 26 capacitors, 12 resistors, 7 ICs, 6 connectors and 5 diodes. It belongs with the STM32 boards of this library.
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 the symbols for you, tells you exactly which pin connects to which pin, and then checks your wiring. It also helps with the board: stackup, net classes, placement, routing guidance, autorouting and DRC.
The division of labour is deliberate: language models are bad at drawing schematics (floating "ghost" wires, near-misses), so RL PCB never draws wires. You draw, and it does everything around the drawing: research, parts, numbers, placement, instructions, and verification.
you ──► "I need a 24 V PLC input card with 8 isolated inputs"
│
RL PCB ─►│ requirements → architecture → datasheet/app-note research → reference designs
│ → parts from YOUR libraries → calculated values → design plan (parts + nets)
│ → plan review (ERC before drawing) → symbols placed (no wires)
│ → "wire U3 pin 7 (OUT) to R12 pin 1 …" → you wire → verify: 87 % done,
│ R14.2 not connected, ghost wire at (120.6, 88.9) mm → fix → 100 %
│ → stackup + net classes → placement → routing guidance / autoroute → DRC → GerbersThe engineer sets the AI's autonomy for each part of the design:
For example, the power block can be in "do" while the routing is in "advise". Every result says what the checks
verified and what they could not, such as part data without a datasheet or EMC that was not simulated, so a weaker
model's mistakes are caught where checks exist and flagged where they do not. See docs/COPILOT.md.
| Copilot tool | What it does |
|---|---|
copilot_status, copilot_mode | Show or set the modes and scopes. |
proposals, proposal_show, proposal_accept, proposal_reject | Review changes prepared on a copy. The chat panel has a Proposals button. |
undo, design_journal | History of who changed what, in which mode; any change can be undone. |
assurance_report | What is verified and what is not, before you order boards. |
kickoff, kickoff_apply | From an idea to an architecture, questions, pitfalls and a project skeleton. |
explain_component, explain_net | What a part or net does in this circuit, and why it is there. |
review_layout, compare_layouts | Placement, routing, EMC and current-capacity review (IPC-2221 track widths against the plan's currents) with reasons; side-by-side layout studies. |
widen_power_tracks | Widens the tracks of current-carrying nets as far as KiCad's DRC allows. |
interface_changes | Notices between this board and the mechanical design (RL CAD). |
| Area | What it does |
|---|---|
| Connectivity engine | Computes nets from the drawing itself (pins, wires, junctions, labels, power symbols, hierarchical sheets, buses incl. bus aliases). Validated against KiCad's own netlister: identical nets on all 13 KiCad 7 demo projects, and on the KiCad 9/10 demos (Jetson Thor carrier, CM5, VME) it matches the boards' own netlists apart from stale/mechanical items. Reads KiCad 4/5 .sch too. |
| Ghost-wire detector | Dangling wire ends (with "near-miss: meant for U3 pin 7, 0.6 mm away"), floating wire groups, wire ends on the middle of another wire without a junction (KiCad treats these as not connected), labels touching nothing, off-grid pins, shorted power nets, misused no-connect flags. |
| Library index | SQLite/FTS search over every symbol and footprint in your KiCad libraries (stock + global + project tables, KiCad 7–10 incl. .kicad_symdir). Pins, footprint filters, pad counts, pitch. The AI never invents a part name. |
| Design plan | The agreed circuit (parts + nets + no-connects + requirements + decisions), stored in <project>/.rlpcb/plan.json. Pins can be named (U1.VIN, U2.GND → all GND pins, U1.GPIO20 finds IO20). |
| Plan review | ERC for intent before drawing: unconnected power pins, floating inputs, output conflicts, missing decoupling, symbol/footprint pin-count mismatches. |
| Symbol placement | Groups each IC with the passives that serve it and lays them out around the pins they connect to (decoupling next to VCC, pull-up next to the output…), packs the groups on the sheet, grid-aligned, value & footprint set — no wires. Clipboard mode (Ctrl+V into the open editor) or file mode (with backups). Hierarchical sheets per block (add_sheet). Optional net labels exactly on pin ends for wide buses. |
| Parts from anywhere | Stock/global/project libraries; LCSC/JLCPCB parts converted on the fly (import_lcsc_part C2040 → symbol + footprint + 3D, LCSC field set); symbols borrowed from open designs in the corpus; datasheets downloaded into the knowledge base (fetch_datasheet). |
| Manufacturing | Gerbers/drill/positions/STEP via kicad-cli; JLCPCB BOM + CPL (export_jlcpcb); plan fields (MPN, LCSC, voltage…) written back into drawn symbols (sync_fields_from_plan). |
| Circuit blocks | Pre-verified sub-circuits (buck, LDO, battery input, ADC divider, STM32F405 core, IMU, barometer, SPI flash, USB-C device, LED, connectors) with calculated values. MCUs connect by function (SPI1_SCK, USART1_TX, USB_DP) — the block knows the pins and refuses conflicts. The drone board rebuilt from 16 blocks verifies at 100 % with KiCad agreeing on every net. |
| Design checks | Engineering review beyond ERC: MCU pin functions, USB-C CC/data wiring, STM32 VCAP, TVS orientation, pin role vs net (swapped regulators), LED polarity, cap voltage ratings, inductor current, missing pull-ups, back-feed between supplies, nets that go nowhere, board fit; on the PCB: decoupling distance, crystal distance, track width vs current. |
| Guided flow | next_step reads the project and returns the single next action (with the exact tool call) plus a checklist — so smaller models (and beginners) don't get lost. |
| Multi-board systems | system.json with boards and harnesses: every cable pin pair checked (ground/power/voltage/TX↔RX/driver conflicts/open pins/pin count/per-pin current) plus the supply budget across boards. |
| Wiring guide | Per net: shortest wiring order (minimum spanning tree over the real pin coordinates), power symbols for rails, labels for far-apart pins, done/not-done per step. |
| Verification | Hand-drawn schematic vs plan: progress %, missing connections, shorts between planned nets, unplanned connections, wrong values/footprints, unplaced units, plus ghost wires. |
| See the drawing | Renders sheets to images and "pulls up" any section: zoomed crop around U3, R7 with red highlight boxes. |
| PCB tools | Board overview & routing progress, stackup advisor (layer count from BGA pitch/interfaces/rails), net classes from the plan written into .kicad_pro, custom DRC rules, placement suggestions with target coordinates for every small passive (decoupling one cap per supply pin, pull-ups/load caps at their pin, two-sided, collision-free), footprint moves and flips (live or file), DRC, fabrication outputs. |
| Routing | Guidance by net class; Freerouting autorouting round-trip (DSN → router → SES, with a pure-Python SES importer) into a copy of your board; live track/via creation through the KiCad API for agreed simple routes. |
| Live KiCad API | KiCad 9/10 IPC API (kicad-python): highlight parts, read the selection, move footprints in one undo step, add tracks/vias, refill zones. |
| Knowledge base | ~35 dense engineering guides (power, decoupling/PDN, buck/boost, LDOs, BMS/UPS, high current, PLC I/O, motor drives, analog, EMC, stackups, SI, USB/Ethernet/PCIe/DDR, BGA & GPU-class boards, MCU/FPGA, RF, aerospace/high-rel, printers, DFM, KiCad workflow), 10 industry reference architectures (PLC, elevator, conveyor, humanoid joint, UPS, load sharing, printer mainboard, GPU accelerator, avionics, IoT), review/bring-up/fab checklists — plus your own PDFs/books/datasheets (ingest_documents). |
| Reference corpus | Ingests open-source KiCad projects (KiCad demos, GitHub repos, your folders; KiCad 4–10) and learns how real designs wire each IC: "how do others wire the DRV8302?" returns every pin's net and neighbours in the VESC design, with a consensus across designs. Seed list: Jetson Orin/Nano & Kria carriers, VESC, LibreSolar BMS/MPPT, LumenPnP, HackRF, Cynthion… |
| Calculators | IPC-2221 trace width, trace/via resistance & current, microstrip/stripline/differential impedance + width solver, critical length, skew, IPC-2221 clearance, E-series, feedback dividers, LED, RC, crystal load caps, buck/boost power stage, LDO thermal, MOSFET loss, PDN target impedance, capacitor SRF, shunts, thermal vias, wavelength. Every result shows the formula and caveats. |
claude mcp add rlpcb -- <venv python> -m rlpcb.agent.mcp_server.Requirements: KiCad 8, 9 or 10 (9/10 recommended), Python 3.10+, Git (for the corpus), optionally Java 21 for autorouting.
cd path\to\rlpcb
powershell -ExecutionPolicy Bypass -File .\install_windows.ps1 # add -SeedCorpus to download reference designsIt creates .venv, installs mcp, kicad-python, pymupdf, indexes your libraries, installs the KiCad
plugins into Documents\KiCad\<version>\, registers with Claude Desktop, makes a desktop shortcut, then runs
python -m rlpcb doctor.
Then in KiCad 9/10: Preferences → Plugins → Enable KiCad API (for live highlighting and moves) and restart.
Linux/macOS: ./install.sh [--seed-corpus].
You: Open C:\Users\me\Documents\KiCad\plc_input and let's design an 8-channel 24 V digital input card
for a Raspberry Pi CM5, IEC 61131-2 type 1, galvanically isolated.
RL PCB: (asks about channel count, isolation voltage, connectors, power) … proposes architecture …
searches the knowledge base (industrial_plc_io) and reference designs … calculates the input
divider/current limiter … builds the plan … plan_review: 0 errors …
places 41 symbols (Ctrl+V) … "Block 'input_ch1': 1) Draw a wire from J1 pin 1 at (25.4, 40.6) to
R1 pin 1 at (38.1, 40.6) …"
You: done with channel 1
RL PCB: verify → 92 %: R3 pin 2 is not connected; the wire from U2 pin 3 ends 0.64 mm short of it
(dangling end at 120.65, 88.90). Everything else in channel 1 matches the plan.python -m rlpcb doctor # check everything
python -m rlpcb index [--force] # (re)index libraries
python -m rlpcb check path\to\project # ghost wires & drawing problems
python -m rlpcb verify path\to\project # schematic vs plan
python -m rlpcb nets path\to\project [regex]
python -m rlpcb ingest-docs D:\Books\Electronics
python -m rlpcb corpus seed | owner/repo | D:\OpenHardware
python -m rlpcb tool <tool_name> '{"json": "args"}'
python -m rlpcb serve --open # chat panel
python -m rlpcb mcp # MCP server (stdio)<project>\.rlpcb\backups\.<name>.routed.kicad_pcb, never your original.mech_export writes <board>.mech.json, which describes the board for the product around it: outline, holes, connectors with the edge they face, and part heights. mech_check checks the board against the enclosure.json that RL CAD writes. See ../rlcad/docs/INTEGRATION.md.finish_routing closes what the autorouter left (plane stitching, grid router, rip-up, negotiated congestion) and writes <name>.finished.kicad_pcb, checked with KiCad's own DRC after every step.allow_file_writes=false in
Settings makes RL PCB read-only.gpu_accelerator_board architecture file lays out a realistic learning path toward it.See docs/EVALUATION.md for how a small model performs with and without blocks, examples/drone_fc/ for a complete worked project (a drone flight controller, idea → routed board), docs/USER_GUIDE.md for the workflow in depth and docs/ARCHITECTURE.md for how it works.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 12 | 100n | Capacitor_SMD:C_0402_1005Metric | C8, C10, C11, C12, C13, C18, C21, C22, C23, C24, C26, C27 |
| 4 | MountingHole_3.2mm_M3 | MountingHole_3.2mm_M3 | H1, H2, H3, H4 |
| 3 | 10k | Resistor_SMD:R_0402_1005Metric | R3, R5, R10 |
| 3 | 1k | Resistor_SMD:R_0402_1005Metric | R4, R6, R7 |
| 3 | 2.2u | Capacitor_SMD:C_0402_1005Metric | C15, C16, C25 |
| 2 | 10u 50V | Capacitor_SMD:C_1206_3216Metric | C1, C2 |
| 2 | 18p | Capacitor_SMD:C_0402_1005Metric | C19, C20 |
| 2 | 1u | Capacitor_SMD:C_0402_1005Metric | C6, C17 |
| 2 | 22u 10V | Capacitor_SMD:C_0805_2012Metric | C4, C5 |
| 2 | 4.7k | Resistor_SMD:R_0402_1005Metric | R8, R9 |
| 2 | 4.7u | Capacitor_SMD:C_0603_1608Metric | C7, C14 |
| 2 | 5.1k | Resistor_SMD:R_0402_1005Metric | R11, R12 |
| 2 | 600R@100MHz | Inductor_SMD:L_0603_1608Metric | FB1, FB2 |
| 1 | 10n | Capacitor_SMD:C_0402_1005Metric | C3 |
| 1 | 15u | Inductor_SMD:L_Bourns_SRP7028A_7.3x6.6mm | L1 |
| 1 | 3.01k | Resistor_SMD:R_0402_1005Metric | R2 |
| 1 | 8MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | Y1 |
| 1 | 9.31k | Resistor_SMD:R_0402_1005Metric | R1 |
| 1 | AP2112K-3.3 | Package_TO_SOT_SMD:SOT-23-5 | U2 |
| 1 | B340A | Diode_SMD:D_SMA | D1 |
| 1 | BATT | Connector_Wire:SolderWire-1.5sqmm_1x02_P6mm_D1.7mm_OD3mm | J1 |
| 1 | BMP280 | Package_LGA:Bosch_LGA-8_2x2.5mm_P0.65mm_ClockwisePinNumbering | U5 |
| 1 | BOOT | Button_Switch_SMD:SW_SPST_TL3342 | SW1 |
| 1 | ESC | Connector_JST:JST_SH_SM08B-SRSS-TB_1x08-1MP_P1.00mm_Horizontal | J3 |
| 1 | ICM-20602 | Package_LGA:LGA-16_3x3mm_P0.5mm_LayoutBorder3x5y | U4 |
| 1 | RX | Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal | J4 |
| 1 | SMAJ28A | Diode_SMD:D_SMA | D2 |
| 1 | SS34 | Diode_SMD:D_SMA | D5 |
| 1 | STM32F405RGT6 | Package_QFP:LQFP-64_10x10mm_P0.5mm | U3 |
| 1 | SWD | Connector_PinHeader_1.27mm:PinHeader_1x04_P1.27mm_Vertical | J6 |
| 1 | TPS5430 | Package_SO:TI_SO-PowerPAD-8_ThermalVias | U1 |
| 1 | USB-C | Connector_USB:USB_C_Receptacle_GCT_USB4105-xx-A_16P_TopMnt_Horizontal | J2 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U7 |
| 1 | VTX | Connector_JST:JST_SH_SM04B-SRSS-TB_1x04-1MP_P1.00mm_Horizontal | J5 |
| 1 | W25Q128JV | Package_SO:SOIC-8_5.23x5.23mm_P1.27mm | U6 |
| 1 | blue | LED_SMD:LED_0603_1608Metric | D3 |
| 1 | green | LED_SMD:LED_0603_1608Metric | D4 |
It measures 36 × 36 mm and has 4 copper layers, 1.6 mm thick.
65 parts, built around the STM32F405RGT6, BMP280, W25Q128JVSIQ and AP2112K-3.3. 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 GabuGravin41/rlpcb repository on GitHub, at the commit this page was made from: the board is examples/drone_fc/output/rl_fc_f405/rl_fc_f405.routed.kicad_pcb and its schematic examples/drone_fc/output/rl_fc_f405/connectors.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 GabuGravin41 before reusing the design.

12Robert20/STM32F7-Flight-Controller
A custom 4-layer high-performance flight controller for FPV drones. Built around the STM32F777, featuring DShot600, CRSF support, and advanced LC filtering.

bapsenpai-blip/STM32F405-4-layer-flight-controller
My first PCB revision, not fabricated yet, looking for design review

fkontiebo/flight-controller
Contrôleur de vol 4 layers basé sur STM32F405RGT6, conçu comme plateforme de navigation autonome avec bus CAN.

desanv01/Flight-Controller-V2
STM32H743 controller: regulated power, signal-only ESC, neutral ArduPilot firmware, manufacturing data and engineering history.

ajisrawi/5g-3d-printed-drone
3D-printed quadcopter with a custom F405 flight controller, 4G/5G companion connectivity, and phone control

ShiroFPV/ShiroFPV_Flight_Controller_Collection
Official repository for public ShiroFPV flight controller designs, encompassing fully verified productions as well as ongoing, untested hardware revisions.

kaushalch1/air-monitor
this is a portable air quality monitoring device designed to measure particulate matter and environmental conditions in real time.
