

Pilot6Axis v2
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
10ESP32-WROOM-32U
SMD,19.2x18mm-40℃~+85℃ -97dBm 2.4GHz 20.5dBm 3V~3.6V Bluetooth4.2 ESP32-DOWD UART、SDIO、SPI、I2C、GPIO、PWM、ADC、DAC、CAN SMD,19.2x18mm WiFi Modules ROHSEspressif SystemsWiFi ModulesAMS1117-3.3
SOT-223-40℃~+125℃ 0.003%Vout 1 1.1V@(800mA) 15V 1A 3.3V 5mA 72dB@(120Hz) Fixed Over Current Protection、Short Circuit Protection、Thermal shutdown Positive SOT-223 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSAdvanced Monolithic SystemsVoltage Regulators - Linear, Low Drop Out (LDO) RegulatorsBQ25792RQMR
QFN-29(4x4)-40℃~+85℃ 16.8V 1~4 21uA 3.6V~24V 5A Charging IC I2C Lithium Battery Support QFN-29(4x4) Battery Management ROHSTexas InstrumentsBattery ManagementCAT24C512WI-GT3
SOIC-8-40℃~+85℃ 1,000,000 cycles 1.8V~5.5V 100 Years 1MHz 512Kbit 5ms I2C SOIC-8 EEPROM ROHSonsemiEEPROMSN74LVC1G74RSE2
UQFN-8(1.5x1.5)-40℃~+85℃ 1 1 1.3ns 1.65V~5.5V 10uA 200MHz 32mA 32mA 4.4ns@5V,50pF 500ps 5pF 74LVC Series Asynchronous Complementary type D-Type Rising Edge Set and Reset UQFN-8(1.5x1.5) Flip Flops ROHSTexas InstrumentsFlip FlopsTPS25751SRSMR
VQFN-32-EP(4x4)VQFN-32-EP(4x4) Power Management - Specialized ROHSTexas InstrumentsPower Management - SpecializedUSBLC6-2SC6
SOT-23-60.35pF、0.8pF 100nA 150W@8/20us 15V 2 5V 6A@8/20us 6V ESD SOT-23-6 ESD and Surge Protection (TVS/ESD) ROHSUMWESD And Surge Protection (TVS/ESD)AO3400A
SOT-23-55℃~+150℃ 1 N-channel 1.45V 1.4W 30V 48mΩ@2.5V 5.7A 50pF 630pF 75pF 7nC@10V N-Channel SOT-23 MOSFETs ROHSAlpha & Omega SemiconductorMOSFETsS9014
SOT-23-55℃~+150℃ 1 NPN 100mA 100nA 150MHz 200 200mW 300mV 45V 5V NPN SOT-23 Bipolar (BJT) ROHShongjiachengBipolar (BJT)MBR0520
SOD-123-55℃~+150℃ 20V 450mV@500mA 5.5A 500mA Independent SOD-123 Schottky Diodes ROHSJiangsu Changjing Electronics Technology (CJ)Schottky Diodes
README
README.md6 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
{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 :).
- Full version
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- Quick version (because you are most likely testing on localhost)
python3 keyboard_rc.py -i 127.0.0.1- For help about arguments, and buttons mapping run:
python3 keyboard_rc.pyHow to use
Setup of the Rc
-
Enable setup mode by pressing and holding the most centeral button 4 or 5 when turning the Rc On (doesn't matter which one).
-
Connect to the Rc Wi-Fi network that is displayed on the LCD.
-
Open web browser and go to url displayed on the LCD.
-
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.
{width=40%} -
To leave setup mode shut down the Rc and turn it on again.
-
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.
-
Now setup is done and you can use the Rc.
Build ROS packages
- Standard way of building ROS 2 packages.
colcon build --symlink-installRun ROS packages
- Run the remote_6d package
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
/joytopic.
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
| Component | Photo | Component | Photo |
|---|---|---|---|
| PCB (order from JLCPCB) | ![]() | Joystick 4-axis JH-D400B-M4 | ![]() |
| Toggle switch 6mm MTS-103 | ![]() | Monostable switches 12mm PBS-33B | ![]() |
| Li-ion battery 3.7V 4000mAh | ![]() | LCD 1.3" 128x64 OLED SSD1306 | ![]() |
| Antena 2.4GHz 3dBi WiFi RP-SMA | ![]() | M3 6mm hex socket flat countersunk | ![]() |
| M3 heated insert M3xL3xOD4.2 | ![]() | M3 5mm hex socket cylindrical | ![]() |
Component list
| Component Name | Parts Count | Description |
|---|---|---|
| Joystick 4-axis JH-D400B-M4 | 2 | 3-DOF joysticks for axis control |
| Toggle switch 6mm MTS-103 | 1 | Main toggle switch for power or mode selection |
| Monostable switches 12mm PBS-33B | 8 | Momentary push buttons for user input |
| Li-ion battery 606090 3.7V 4000mAh | 1 | Rechargeable battery for power supply |
| LCD 1.3" 128x64 OLED SSD1306 | 1 | Display for status and configuration |
| Antena 2.4GHz 3dB WiFi 2.4GHz RP-SMA | 1 | External Wi-Fi antenna for wireless communication |
| M3 6mm hex socket flat countersunk screws | 14 | Screws for assembling the enclosure |
| M3 heated insert M3xL3xOD4.2 | 19 | Threaded inserts for secure screw mounting |
| M3 5mm hex socket cylindrical screws | 4 | Additional screws for assembly |
| PCB (order from JLCPCB) | 1 | Main 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| Qty | Value | Footprint | References |
|---|---|---|---|
| 14 | 10uF | PCM_JLCPCB:C_0603 | C2, C15, C20, C21, C29, C30, C31, C32, C33, C37, C38, C40, C41, C42 |
| 11 | ~ | ts-1212f:ts-1212f | U5, U6, U7, U8, U9, U10, U11, U12, U13, U15, U16 |
| 8 | 100nF | PCM_JLCPCB:C_0603 | C17, C18, C19, C22, C25, C26, C34, C43 |
| 7 | 1kΩ | PCM_JLCPCB:R_0603 | R13, R14, R25, R28, R30, R31, R32 |
| 7 | Red | PCM_JLCPCB:D_0603 | D2, D3, D4, D5, D6, D7, D8 |
| 5 | 13.3k | Resistor_SMD:R_0603_1608Metric | R3, R11, R12, R15, R16 |
| 5 | 1nF | Capacitor_SMD:C_0603_1608Metric | C5, C6, C13, C14, C47 |
| 3 | 100n | Resistor_SMD:R_0603_1608Metric | C10, C11, C45 |
| 3 | 100nF | Capacitor_SMD:C_0603_1608Metric | C3, C7, C46 |
| 3 | 220pF | Capacitor_SMD:C_0603_1608Metric | C4, C23, C24 |
| 3 | Conn_01x06 | Connector_JST:JST_PH_B6B-PH-K_1x06_P2.00mm_Vertical | J4, J9, J10 |
| 2 | 100kΩ | PCM_JLCPCB:R_0603 | R1, R24 |
| 2 | 1nF | PCM_JLCPCB:C_0603 | C35, C36 |
| 2 | 22R | Resistor_SMD:R_0603_1608Metric | R6, R7 |
| 2 | 4.7kΩ | PCM_JLCPCB:R_0603 | R19, R20 |
| 2 | 4.7u | Resistor_SMD:R_0603_1608Metric | C9, C44 |
| 2 | 4.7uF | PCM_JLCPCB:C_0603 | C16, C39 |
| 2 | 47nF | PCM_JLCPCB:C_0603 | C27, C28 |
| 2 | 4k7 | Resistor_SMD:R_0402_1005Metric | R17, R18 |
| 2 | AO3400A | PCM_JLCPCB:Q_SOT-23 | Q3, Q4 |
| 2 | S9014 | PCM_JLCPCB:Q_SOT-23 | Q1, Q2 |
| 1 | 100Ω | PCM_JLCPCB:R_0603 | R26 |
| 1 | 10k | Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical | TH1 |
| 1 | 10nF | Resistor_SMD:R_0603_1608Metric | C8 |
| 1 | 10u | Resistor_SMD:R_0603_1608Metric | C12 |
| 1 | 10uH | Inductor_SMD:L_Cenker_CKCS4018 | L1 |
| 1 | 127k | Resistor_SMD:R_0603_1608Metric | R23 |
| 1 | 1k | Resistor_SMD:R_0603_1608Metric | R10 |
| 1 | 1u | Inductor_SMD:L_APV_APH0420 | L2 |
| 1 | 22k | Resistor_SMD:R_0402_1005Metric | R8 |
| 1 | 22Ω | PCM_JLCPCB:R_0603 | R29 |
| 1 | 30kΩ | PCM_JLCPCB:R_0603 | R22 |
| 1 | 330Ω | PCM_JLCPCB:R_0603 | R4 |
| 1 | 33k | Resistor_SMD:R_0603_1608Metric | R5 |
| 1 | 3kΩ | PCM_JLCPCB:R_0603 | R27 |
| 1 | 4.7uF | Capacitor_SMD:C_0603_1608Metric | C1 |
| 1 | 40.5k | Resistor_SMD:R_0603_1608Metric | R2 |
| 1 | 43k | Resistor_SMD:R_0402_1005Metric | R9 |
| 1 | 5.1kΩ | PCM_JLCPCB:R_0402 | R21 |
| 1 | AMS1117-3.3 | Package_TO_SOT_SMD:SOT-223-3_TabPin2 | U1 |
| 1 | BQ25792RQMR | parts:BQ25792RQMR | IC3 |
| 1 | Battery input | Connector_JST:JST_PH_B2B-PH-K_1x02_P2.00mm_Vertical | J1 |
| 1 | CAT24C512WI-GT3 | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U17 |
| 1 | CP2102N-Axx-xQFN28 | Package_DFN_QFN:QFN-28-1EP_5x5mm_P0.5mm_EP3.35x3.35mm | U3 |
| 1 | Conn_01x12 | Connector_JST:JST_PH_B12B-PH-K_1x12_P2.00mm_Vertical | J8 |
| 1 | ESP32-WROOM-32U | RF_Module:ESP32-WROOM-32U | U4 |
| 1 | G*** | kibuzzard-6828A41A | kibuzzard-6828A41A |
| 1 | LM27313XMFX_NOPB | Package_TO_SOT_SMD:SOT-23-5 | IC1 |
| 1 | MBR0520 | Diode_SMD:D_0603_1608Metric | D1 |
| 1 | MCP23017_ML | Package_DFN_QFN:QFN-28-1EP_6x6mm_P0.65mm_EP4.25x4.25mm | U14 |
| 1 | Oled | Connector_PinSocket_2.54mm:PinSocket_2x02_P2.54mm_Vertical | J6 |
| 1 | Power switch | ts-1212f:ts-1212f | U18 |
| 1 | SN74LVC1G74RSE2 | parts:SN74LVC1G74RSE2 | IC5 |
| 1 | SolderJumper_2_Bridged | Jumper:SolderJumper-2_P1.3mm_Open_TrianglePad1.0x1.5mm | JP1 |
| 1 | TPS25751SRSMR | parts:QFN40P400X400X100-33N-D | IC2 |
| 1 | TPS3422EGDRYR | parts:DRY_R-PUSON-N6_ | IC4 |
| 1 | USBLC6-2SC6 | Package_TO_SOT_SMD:SOT-23-6 | U2 |
| 1 | USB_C_Receptacle_USB2.0_16P | Connector_USB:USB_C_Receptacle_HCTL_HC-TYPE-C-16P-01A | J3 |
More from X-Lemon-X/Pilot_6_axis
1- 2 layers74 × 54 mm

Similar boards
- 4 layers35 × 35 mm

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 mm

- 4 layers79.5 × 64.5 mm

RP2350 Duel
OpenStickCommunity/Hardware
A collection of hardware designs by members of the OpenStickCommunity
45 parts338 - 2 layers90 × 60 mm

- 2 layers266.7 × 99.6 mm

Ortho66 Optical
MasterSpoon/Ortho66_Optical
Ortho 66 Optical PCB using KeyChron low profile optical switches
385 parts7 - 2 layers99.5 × 90.5 mm

- 2 layers102 × 102 mm

- 6 layers63 × 73.2 mm

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









