Skip to the content
2 layers171 × 83.9 mmPilot6Axis v2, the printed circuit board in 3D

DIY Remote Controler Build

Size
171 × 83.9 mm
Copper layers
2
Thickness
1.6 mm
Parts
126
Nets
167
Pads
539
Tracks, vias
846, 804
Pours
16
Routed
Yes
KiCad
KiCad 9.0 (file 20241229)
Created
31 Oct 2022
Updated
22 Feb 2026

Overview

Pilot6Axis v2 is an open-source printed circuit board by X-Lemon-X, from the X-Lemon-X/Pilot_6_axis repository on GitHub, published under the MIT licence. It is a 2-layer board of 171 × 83.9 mm with 126 parts on 167 nets, routed with 846 tracks and 804 vias.

It is built around the ESP32-WROOM-32U, AMS1117-3.3 and BQ25792RQMR, with the CAT24C512WI-GT3, SN74LVC1G74RSE2 and TPS25751SRSMR among its other parts. Its parts include 47 capacitors, 32 resistors, 23 ICs, 8 diodes and 7 connectors. It belongs with the ESP32 boards of this library.

Main components

10

README

README.md

6 axis remote Controller

  • ROS 2 integration.
  • Wi‑Fi connectivity
  • Saves up to 6 networks (prioritized 1–6)
  • Full configuration via web UI
  • Adjustable joystick inertia and signal scaling
  • Refresh rates up to 200 Hz
  • Auto-zero to prevent unintended motion
  • USB‑C charging
  • Two 3‑DOF joysticks + 10 buttons (2 on sticks)
  • Integrated LCD for status and setup
  • Persistent settings across sessions

Image{width=50%}

ROS 2 Packages

remote_6d (Recommended)

C++ implementation for reliable remote control integration. Receives UDP packets over Wi-Fi, parses 6-axis joystick and 10-button data, applies deadband filtering, and publishes to the /joy ROS 2 topic. Handles graceful disconnects by sending a zero frame when the pilot loses connection.

pilot_6axis (Deprecated)

Python-based UDP receiver that converts remote control packets into ROS 2 sensor_msgs::msg::Joy messages for joystick control. No longer maintained; use remote_6d instead.

The repo supports demo pc keyboard version of the RC

Pc keyboard version for RC without the need for the hardware if you want to test it or forgot to bring the RC with you :).

  1. Full version
bash
 python3 -m venv .venv
 python3 -m pip -r requirements.txt
 source .venv/bin/activate
 python3 keyboard_rc.py -i IP_ADDRESS -p PORT -f FREQUENCY -v JOYSTICK_VALUE
  1. Quick version (because you are most likely testing on localhost)
bash
  python3 keyboard_rc.py -i 127.0.0.1
  1. For help about arguments, and buttons mapping run:
bash
  python3 keyboard_rc.py

How to use

Setup of the Rc

  1. Enable setup mode by pressing and holding the most centeral button 4 or 5 when turning the Rc On (doesn't matter which one).

  2. Connect to the Rc Wi-Fi network that is displayed on the LCD.

  3. Open web browser and go to url displayed on the LCD.

  4. Set up the settings of the Rc and press save buttons on the bottom of the page. This will redirect you to the page where you will see if settings were saved. If you made some error it will be shown here. Image{width=40%}

  5. To leave setup mode shut down the Rc and turn it on again.

  6. Now the Rc will connect to the network with the highest priority that is available. If it can't connect to any of the saved networks it will keep trying to connect to them. If the Rc is connected to the network it will display the IP address on the LCD and show Connected status.

  7. Now setup is done and you can use the Rc.

Build ROS packages

  • Standard way of building ROS 2 packages.
bash
  colcon build --symlink-install

Run ROS packages

  • Run the remote_6d package
bash
  ros2 run remote_6d remote_6d_node
  • If the Rc is connected to the same network as the computer and the port isn't blocked by firewall the package should start receiving data from the Rc and publishing it to the /joy topic.

Settings list:

General Settings
  • Joystick left MMin -> minimum value of the left joystick x, y, z axis on the min of the range
  • Joystick left MMax -> maximum value of the left joystick x, y, z axis on the max of the range
  • Joystick left filer -> inertia of the left joystick (0-1), the higher inertia the response of the joystick value will be faster.
  • Joystick right MMin -> minimum value of the right joystick x, y, z axis on the min of the range
  • Joystick right MMax -> maximum value of the right joystick x, y, z axis on the max of the range
  • Joystick right filer -> inertia of the right joystick (0-1)
  • WIFI SSID => SSID of the wifi network created by the RC in setup mode.
  • WIFI PASSWORD => password of the wifi network made by the RC in setup mode
  • Update frequency => frequency of sending data frame
  • Target IP => IP address to which the RC will send data frame
  • Host Port => port to which the RC will send data frame
WIFI target networks
  • Wifi [number 1-6] : Seed => SSID of the wifi network (where number means priority from 1 to 6)
  • Wifi [number 1-6] : Password => Password of the wifi network

Required component list

Component Images

ComponentPhotoComponentPhoto
PCB (order from JLCPCB)PCBJoystick 4-axis JH-D400B-M4Joystick
Toggle switch 6mm MTS-103Toggle switchMonostable switches 12mm PBS-33BMonostable switches
Li-ion battery 3.7V 4000mAhLi-ion batteryLCD 1.3" 128x64 OLED SSD1306LCD
Antena 2.4GHz 3dBi WiFi RP-SMAAntennaM3 6mm hex socket flat countersunkM3 screws
M3 heated insert M3xL3xOD4.2M3 heated insertM3 5mm hex socket cylindricalM3 screws cylindrical

Component list

Component NameParts CountDescription
Joystick 4-axis JH-D400B-M423-DOF joysticks for axis control
Toggle switch 6mm MTS-1031Main toggle switch for power or mode selection
Monostable switches 12mm PBS-33B8Momentary push buttons for user input
Li-ion battery 606090 3.7V 4000mAh1Rechargeable battery for power supply
LCD 1.3" 128x64 OLED SSD13061Display for status and configuration
Antena 2.4GHz 3dB WiFi 2.4GHz RP-SMA1External Wi-Fi antenna for wireless communication
M3 6mm hex socket flat countersunk screws14Screws for assembling the enclosure
M3 heated insert M3xL3xOD4.219Threaded inserts for secure screw mounting
M3 5mm hex socket cylindrical screws4Additional screws for assembly
PCB (order from JLCPCB)1Main circuit board for the controller
BOM Components (see BOM file)-All other electronic components (resistors, ICs, etc.)
  • BOM file "Electric schematic/Pilot6Axis/jlcpcb/production_files/BOM-Pilot6Axis.csv"
  • JLCB gerber files "Electric schematic/Pilot6Axis/jlcpcb/production_files/GERBER-Pilot6Axis.zip"

How to assembly

You figure it out.

Parts

126
QtyValueFootprintReferences
1410uFPCM_JLCPCB:C_0603C2, C15, C20, C21, C29, C30, C31, C32, C33, C37, C38, C40, C41, C42
11~ts-1212f:ts-1212fU5, U6, U7, U8, U9, U10, U11, U12, U13, U15, U16
8100nFPCM_JLCPCB:C_0603C17, C18, C19, C22, C25, C26, C34, C43
71kΩPCM_JLCPCB:R_0603R13, R14, R25, R28, R30, R31, R32
7RedPCM_JLCPCB:D_0603D2, D3, D4, D5, D6, D7, D8
513.3kResistor_SMD:R_0603_1608MetricR3, R11, R12, R15, R16
51nFCapacitor_SMD:C_0603_1608MetricC5, C6, C13, C14, C47
3100nResistor_SMD:R_0603_1608MetricC10, C11, C45
3100nFCapacitor_SMD:C_0603_1608MetricC3, C7, C46
3220pFCapacitor_SMD:C_0603_1608MetricC4, C23, C24
3Conn_01x06Connector_JST:JST_PH_B6B-PH-K_1x06_P2.00mm_VerticalJ4, J9, J10
2100kΩPCM_JLCPCB:R_0603R1, R24
21nFPCM_JLCPCB:C_0603C35, C36
222RResistor_SMD:R_0603_1608MetricR6, R7
24.7kΩPCM_JLCPCB:R_0603R19, R20
24.7uResistor_SMD:R_0603_1608MetricC9, C44
24.7uFPCM_JLCPCB:C_0603C16, C39
247nFPCM_JLCPCB:C_0603C27, C28
24k7Resistor_SMD:R_0402_1005MetricR17, R18
2AO3400APCM_JLCPCB:Q_SOT-23Q3, Q4
2S9014PCM_JLCPCB:Q_SOT-23Q1, Q2
1100ΩPCM_JLCPCB:R_0603R26
110kConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalTH1
110nFResistor_SMD:R_0603_1608MetricC8
110uResistor_SMD:R_0603_1608MetricC12
110uHInductor_SMD:L_Cenker_CKCS4018L1
1127kResistor_SMD:R_0603_1608MetricR23
11kResistor_SMD:R_0603_1608MetricR10
11uInductor_SMD:L_APV_APH0420L2
122kResistor_SMD:R_0402_1005MetricR8
122ΩPCM_JLCPCB:R_0603R29
130kΩPCM_JLCPCB:R_0603R22
1330ΩPCM_JLCPCB:R_0603R4
133kResistor_SMD:R_0603_1608MetricR5
13kΩPCM_JLCPCB:R_0603R27
14.7uFCapacitor_SMD:C_0603_1608MetricC1
140.5kResistor_SMD:R_0603_1608MetricR2
143kResistor_SMD:R_0402_1005MetricR9
15.1kΩPCM_JLCPCB:R_0402R21
1AMS1117-3.3Package_TO_SOT_SMD:SOT-223-3_TabPin2U1
1BQ25792RQMRparts:BQ25792RQMRIC3
1Battery inputConnector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_VerticalJ1
1CAT24C512WI-GT3Package_SO:SOIC-8_3.9x4.9mm_P1.27mmU17
1CP2102N-Axx-xQFN28Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mmU3
1Conn_01x12Connector_JST:JST_PH_B12B-PH-K_1x12_P2.00mm_VerticalJ8
1ESP32-WROOM-32URF_Module:ESP32-WROOM-32UU4
1G***kibuzzard-6828A41Akibuzzard-6828A41A
1LM27313XMFX_NOPBPackage_TO_SOT_SMD:SOT-23-5IC1
1MBR0520Diode_SMD:D_0603_1608MetricD1
1MCP23017_MLPackage_DFN_QFN:QFN-28-1EP_6x6mm_P0.65mm_EP4.25x4.25mmU14
1OledConnector_PinSocket_2.54mm:PinSocket_2x02_P2.54mm_VerticalJ6
1Power switchts-1212f:ts-1212fU18
1SN74LVC1G74RSE2parts:SN74LVC1G74RSE2IC5
1SolderJumper_2_BridgedJumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mmJP1
1TPS25751SRSMRparts:QFN40P400X400X100-33N-DIC2
1TPS3422EGDRYRparts:DRY_R-PUSON-N6_IC4
1USBLC6-2SC6Package_TO_SOT_SMD:SOT-23-6U2
1USB_C_Receptacle_USB2.0_16PConnector_USB:USB_C_Receptacle_HCTL_HC-TYPE-C-16P-01AJ3

More from X-Lemon-X/Pilot_6_axis

1
  • 2 layers74 × 54 mmPilot6Axis, the printed circuit board in 3D

    Pilot6Axis

    X-Lemon-X/Pilot_6_axis

    DIY Remote Controler Build

    107 parts2MIT

Similar boards

  • 4 layers35 × 35 mmPd charger, the printed circuit board in 3D

    Pd charger

    tangles-0/cyberdeck-scout

    // #ifndef PINPA0 // #define PINPA0 11 // #endif // #ifndef PINPA1 // #define PINPA1 8 // #endif // #ifndef PINPA2 // #define PINPA2 9 // #endif // #ifndef PINPA3 // #define PINPA3 10 // #endif // #ifndef PINPA4 //…

    88 parts6
  • 4 layers81.6 × 102.5 mmLoRa Phone, the printed circuit board in 3D

    LoRa Phone

    maelastiques/PTCR-V5-P4

    204 parts
  • 4 layers79.5 × 64.5 mmRP2350 Duel, the printed circuit board in 3D

    RP2350 Duel

    OpenStickCommunity/Hardware

    A collection of hardware designs by members of the OpenStickCommunity

    45 parts338
  • 2 layers90 × 60 mmMixers, the printed circuit board in 3D

    Mixers

    k1zmt/SSB85MultiPCB

    WIP! Don't try repeating!

    133 parts1
  • 2 layers266.7 × 99.6 mmOrtho66 Optical, the printed circuit board in 3D

    Ortho66 Optical

    MasterSpoon/Ortho66_Optical

    Ortho 66 Optical PCB using KeyChron low profile optical switches

    385 parts7
  • 2 layers99.5 × 90.5 mmMRR ESPA, the printed circuit board in 3D

    MRR ESPA

    maplerainresearch/MRR_ESPA

    A basic 3D printer control board based on ESP32

    130 parts59
  • 2 layers102 × 102 mmMRR ESPE, the printed circuit board in 3D

    MRR ESPE

    maplerainresearch/MRR_ESPE

    MRR ESPE 3D printer control board

    168 parts39
  • 6 layers63 × 73.2 mmChris, the printed circuit board in 3D

    Chris

    dashonigkuchen/embedded-projects

    A collection of embedded development projects, experiments, and hardware/software prototypes.

    89 partsMIT

Questions

How big is the Pilot6Axis v2 PCB?

It measures 171 × 83.9 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Pilot6Axis v2 use?

126 parts, built around the ESP32-WROOM-32U, AMS1117-3.3, BQ25792RQMR and CAT24C512WI-GT3. 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 Pilot6Axis v2 KiCad files?

From the X-Lemon-X/Pilot_6_axis repository on GitHub, at the commit this page was made from: the board is Electric schematic/Pilot6Axis_v2/Pilot6Axis_v2.kicad_pcb and its schematic Electric schematic/Pilot6Axis/BMS.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Pilot6Axis v2 design in my own project?

Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).