Skip to the content
PCBKitNew board
4 layers115 × 175 mmPCBV2, the printed circuit board in 3D

Design and software for a four-wheeled (tracked) mobile robot. Real-time firmware running on STM32H755, high-level control via ROS 2 Humble on NVIDIA Jetson Nano, custom motherboard designed in KiCad, and mechanical…

Size
115 × 175 mm
Copper layers
4
Thickness
1.6 mm
Parts
66
Nets
166
Pads
414
Tracks, vias
674, 28
Pours
2
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
15 Sep 2026
Updated
30 Oct 2026

Overview

PCBV2 is an open-source printed circuit board by bejekk, from the bejekk/mobile-robot repository on GitHub. It is a 4-layer board of 115 × 175 mm with 66 parts on 166 nets, routed with 674 tracks and 28 vias.

It is built around the LTSR 6-NP. Its parts include 26 capacitors, 5 ICs, 4 resistors, 2 diodes and 2 fuses.

Main components

1

README

README.md

Mobile Robot — Engineering Thesis

Available languages: English | Polski

Design and software for a four-wheeled (tracked) mobile robot. Real-time firmware running on STM32H755, high-level control via ROS 2 Humble on NVIDIA Jetson Nano, custom motherboard designed in KiCad, and mechanical models for gearboxes and chassis.

Author: Błażej Kruszka, Nicolaus Copernicus University in Toruń, 2025–2026.

Architecture

text
gamepad  →  ROS 2 (Jetson)  →  UART 115200  →  STM32H755
                 │                                  │
                 └── /telemetry ← PI velocities ← DC encoders, PWM, A4988
  • STM32 (CM7) — encoders, PI controllers, H-bridges (4× DC), stepper motors (4× A4988), UART protocol.
  • ROS 2 — gamepad input handling, serial bridge, telemetry logger.
  • PCB — custom motherboard for Nucleo-H755, 8 actuator channels, and sensor interfaces.

Repository Structure

DirectoryContents
firmware/STM32CubeIDE project (dual-core STM32H755ZITX), clean without build artifacts
ros2_ws/robot_control package + Dockerfile
pcb/KiCad (schematic, PCB, Gerber)
mechanical/STL models and Fusion 360 archive
control/MATLAB script for PI controller identification
docs/Thesis, presentation, UART protocol specification

No working notes, CubeIDE dumps, KiCad backups, videos, or external works are stored here.

Firmware (STM32)

Open the firmware/ directory in STM32CubeIDE (the dual-core project is named jakie_wyjscia — as generated by CubeMX). Build the CM7 Debug configuration as well as CM4 if dual-core booting needs to be preserved.

User application files:

  • firmware/CM7/Core/Src/PI.c — encoder velocity measurement, filter, and PI controller with ramp and anti-windup
  • firmware/CM7/Core/Src/motor_control.c — PWM + H-bridge direction control, stepper sleep/dir handling
  • firmware/CM7/Core/Src/main.c — UART parser, 10 ms control loop, telemetry

After reset, the STM32 waits for the ready command (buzzer signal) before accepting velocity and stepper motor setpoints.

ROS 2

Requirements: ROS 2 Humble, python3-serial, inputs package.

bash
cd ros2_ws
source /opt/ros/humble/setup.bash
colcon build --symlink-install
source install/setup.bash
ros2 launch robot_control robot.launch.py

The UART port can be overridden using the stm_bridge node parameter:

bash
ros2 run robot_control stm_bridge --ros-args -p port:=/dev/ttyACM0 -p baudrate:=115200

Docker (Jetson)

bash
cd ros2_ws
sudo docker build -t robot_control:humble .
xhost +local:root
sudo docker run -it --rm --network host \
  --runtime nvidia \
  -e DISPLAY=$DISPLAY \
  -v /tmp/.X11-unix:/tmp/.X11-unix \
  --device /dev/input/js0 \
  --device /dev/ttyACM0 \
  robot_control:humble

Inside the container: source /home/ros_user/ws/install/setup.bash && ros2 launch robot_control robot.launch.py.

MATLAB

control/pi_identification.m sends a sequence of lspeed/rspeed step inputs and plots the setpoint vs. measured response for all four wheels. Configure portName to your serial port (COM18 on Windows, /dev/ttyACM0 on Linux).

PCB

KiCad 8 project: pcb/PCBV2.kicad_pro. Production Gerbers are located in pcb/gerber/. Schematic preview: pcb/PCBV2.pdf.

UART Protocol

See docs/uart.md.

Parts

66
QtyValueFootprintReferences
24100nFCapacitor_SMD:C_0805_2012MetricC1, C2, C10, C11, C12, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24 +8
8Conn_01x04_PinConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalLeftBack_enc1, LeftFront_enc1, RightBack_enc1, RightFront_enc1, StepMot_LB1, STEPMOT_LF1, StepMot_RB1, StepMot_RF1
8~Connector_PinSocket_2.54mm:PinSocket_1x02_P2.54mm_VerticalBackB_output1, bat_7V_ac1, bat_7V_dc1, bat_12V_back1, bat_12V_front1, BazkB_output1, FrontA_output1, FrontB_output1
43.2KResistor_SMD:R_0805_2012MetricR1, R2, R3, R4
4LTSR6-NPSensor_Current:LEM_LTSR-NPU2, U4, U5, U6
4Pololu_Breakout_A4988Module:Pololu_Breakout-16_15.2x20.3mmleftB1, leftF1, rightB1, rightF1
2100uFCapacitor_SMD:C_0805_2012MetricC5, C13
2D_FilledDiode_SMD:D_0805_2012MetricD1, D2
2FuseFuse:Fuseholder_Cylinder-5x20mm_Schurter_0031_8201_Horizontal_OpenF1, F2
2LM2940T-5.0_NOPBPackage_TO_SOT_THT:TO-220-3_Verticalsabilizator_adc1, sabiliztor_dc1
2TB6612FNGTB6612:SHIELD_POLOLU-713Back1, Front1
1UART1Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalUART1
1UART2Connector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalUART2
1zworaGNDResistor_SMD:R_0201_0603Metric_Pad0.64x0.40mm_HandSolderJ1
1~STM32_NUCLEO:STM32H755U1

Questions

How big is the PCBV2 PCB?

It measures 115 × 175 mm and has 4 copper layers, 1.6 mm thick.

What parts does the PCBV2 use?

66 parts, built around the LTSR 6-NP. 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 PCBV2 KiCad files?

From the bejekk/mobile-robot repository on GitHub, at the commit this page was made from: the board is pcb/PCBV2.kicad_pcb and its schematic pcb/PCBV2.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PCBV2 design in my own project?

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

Similar boards

  • 4 layers29 × 74 mmController, the printed circuit board in 3D

    Controller

    StuckAtPrototype/Racer

    These are structured into their own files. I could have used submodules, but decided against it.

    66 parts3.8kApache-2.0
  • 4 layers43 × 39.2 mmStepperMotorDriver, the printed circuit board in 3D

    StepperMotorDriver

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    66 parts915
  • 4 layers56.1 × 57.1 mmMCL86jr, the printed circuit board in 3D

    MCL86jr

    MicroCoreLabs/Projects

    Ted Fried's MicroCore Labs Projects - FPGA CPU cores and emulators for the 8088, 8086, 8051, 6502, 68000, Z80, Risc-V, and also Typewriter and EPROM Emulator projects.

    66 parts534
  • 4 layersMooltipass, the printed circuit board in 3D

    Mooltipass

    limpkin/mooltipass

    Github repository dedicated to the mooltipass project

    66 parts531
  • 4 layers80 × 32 mmBoard v0.1, the printed circuit board in 3D

    Board v0.1

    dennisss/dacha

    Monorepo for awesome tools/projects/libraries

    66 parts397Apache-2.0
  • 4 layers80.2 × 80.2 mm4G MODEM, the printed circuit board in 3D

    4G MODEM

    CRImier/MyKiCad

    My KiCad boards. Can't be bothered uploading individually anymore, so here you go.

    66 parts253GPL-3.0
  • 4 layers93.2 × 62.4 mmCompute module, the printed circuit board in 3D

    Compute module

    magkopian/raspberry-pi-compute-module-base-board

    Base board for the Raspberry Pi Compute Module

    66 parts214GPL-3.0
  • 4 layers312 × 111.2 mmPCIexpress x16 full, the printed circuit board in 3D

    PCIexpress x16 full

    lucanastasio/PCIexpress-KiCad

    PCI express libraries and templates for KiCad

    66 parts170