Architecture Journal
Drive Motor JGB37-520 12V 100RPM DC Gear Motor
The JGB37-520 is a metal-gearbox DC gear motor with a D-shaft output, widely available in Bangladesh from local electronics markets and online sellers. At 12V 100RPM it delivers enough torque to move a ~5kg rover chassis over uneven ground without stalling. The D-shaft is straightforward to couple to printed hubs. It is robust, repairable, and cheap enough to replace if one fails during testing.
The LX-16A is a serial bus smart servo that handles both drive and steering in the original Sawppy. It requires a proprietary TTL serial protocol, a specific controller board, and is expensive and difficult to source in Bangladesh. A single LX-16A costs more than the entire JGB37-520 drivetrain for this build. It also means 10 identical units for a 6-wheel drive + 4-steering configuration the import cost alone makes it impractical.
- Standard DC hobby motors (no gearbox) not enough torque at rover wheel speeds without external gearing. Would require additional mechanical complexity.
- Stepper motors too heavy, inefficient for continuous rotation, overkill for this application, hard to source in the right form factor locally.
- Worm gear motors self-locking behavior makes them unsuitable for a suspension system that needs to absorb terrain impacts through the drivetrain.
- High-RPM DC motors with encoder RPM too high, torque too low without significant reduction gearing.
You need a DC gear motor with the following minimum specifications:
| Specification | Minimum | Recommended |
|---|---|---|
| Voltage | 6V | 12V |
| No-load speed | 50 RPM | 80–120 RPM |
| Stall torque | 5 kg·cm | 8–15 kg·cm |
| Shaft type | D-shaft or round with flat | D-shaft preferred |
| Shaft diameter | 6mm | 6mm |
| Body diameter | 37mm class | 37mm (fits existing mounts) |
| Gearbox | Metal | Metal (plastic will strip under load) |
Steering Hiwonder LDX-277 PWM Servo
Standard 25T spline PWM servo with enough torque to hold steering position under load. Compatible with every standard servo controller and the ESP32-C3 PWM output directly. The 25T spline is an industry standard servo horns, couplers, and brackets are interchangeable with dozens of other brands. LDX-277 is sourceable in Bangladesh and the torque-to-cost ratio is good for this application.
Same reasons as drive serial bus protocol, expensive, import-only, proprietary ecosystem.
- MG996R / MG995 very common and cheap, but torque rating is often inflated by manufacturers. Plastic gears in some variants. Acceptable as a fallback but not first choice.
- Digital servos (high-end) unnecessary precision and cost for a steering application that only needs four positions.
- Linear actuators too slow for real-time steering response and mechanically complex to integrate into the existing knuckle geometry.
You need a standard PWM servo with the following minimum specifications:
| Specification | Minimum | Recommended |
|---|---|---|
| Torque | 10 kg·cm | 15–20 kg·cm |
| Spline | 25T standard | 25T standard |
| Voltage | 5V | 6–7.4V |
| Protocol | PWM (50Hz) | PWM (50Hz) |
| Gear material | Metal | Metal |
| Body width | ~40mm | Standard servo form factor |
Motor Driver BTS7960 43A H-Bridge Module
The BTS7960 is a high-current half-bridge driver chip. On a module it forms a full H-bridge capable of 43A peak, 14A continuous per channel. The JGB37-520 can draw 5–10A at stall the BTS7960 handles this without browning out or burning. Standard PWM input, 12V compatible, available in Bangladesh, and cheap. Three modules handle all six drive motors in pairs (front pair, middle pair, rear pair).
The DRV8833 is a dual H-bridge rated at 1.5A continuous, 2A peak per channel. The JGB37-520 stall current exceeds this by a factor of 3–5×. Under real terrain load the DRV8833 would trigger thermal shutdown or burn out. It is the right choice for small hobby motors but wrong for this drivetrain.
- L298N old design, very inefficient (up to 3V drop across the driver), runs extremely hot, wastes battery. Functional but wasteful.
- L293D 600mA per channel, completely insufficient for this application.
- IBT-2 module essentially the same as BTS7960 (same chip), just a different PCB layout. Fully compatible substitute.
- Sabertooth / Kangaroo capable but expensive, overkill, and harder to source locally.
You need a motor driver module with the following minimum specifications:
| Specification | Minimum | Recommended |
|---|---|---|
| Continuous current per channel | 10A | 15A+ |
| Peak current per channel | 20A | 43A |
| Operating voltage | 12V | 6–27V range |
| Input signal | PWM | PWM (3.3V logic compatible) |
| Heat dissipation | Heatsink required | Heatsink + airflow |
Acceptable fallback: L298N (inefficient but functional expect heat and reduced battery life).
Search for: BTS7960, IBT-2, "43A motor driver module" on local markets or AliExpress.
Low-Level MCU XIAO ESP32-C3 (or Arduino fallback)
The XIAO ESP32-C3 is a compact, low-cost microcontroller with enough GPIO for PWM servo control, motor driver signals, and IMU communication over I2C. It handles the real-time control loop: reading the MPU-6050, outputting PWM to servos, sending PWM + enable signals to the BTS7960 drivers, and communicating with the Raspberry Pi over UART or USB serial. Small footprint, 3.3V logic (compatible with BTS7960 input), Wi-Fi capable for debugging.
Arduino is a completely valid fallback and simpler to program for beginners. The Uno/Nano runs at 5V logic which requires level shifting to interface with 3.3V peripherals. It has fewer GPIO pins and no Wi-Fi. For the basic control loop it works fine it just needs a logic level converter between the Arduino and the BTS7960 if using a 5V board.
- STM32 Bluepill capable but complex toolchain setup, harder to find working USB bootloaders locally, steeper learning curve.
- Teensy excellent but expensive and import-only in Bangladesh.
- Raspberry Pi Pico good alternative, 3.3V logic, dual-core, MicroPython or C SDK. Viable substitute if ESP32-C3 is unavailable.
- NodeMCU ESP8266 lacks enough GPIO for this application (6 motor driver signals + 4 servo signals + I2C = tight), and no hardware PWM on enough pins.
You need a microcontroller with the following minimum specifications:
| Specification | Minimum | Recommended |
|---|---|---|
| PWM-capable GPIO pins | 16 | 20+ |
| I2C | 1 bus | 1 bus |
| UART | 1 port | 1 port (for Pi communication) |
| Logic voltage | 3.3V or 5V | 3.3V (check BTS7960 input spec) |
| Clock speed | 16 MHz | 80–240 MHz |
1. Arduino Mega 2560 most GPIO, easy to source, 5V (use level shifter for BTS7960)
2. Raspberry Pi Pico 3.3V, dual-core, MicroPython friendly
3. Arduino Uno/Nano limited pins but works for basic control loop
4. ESP32 DevKit (30-pin) direct ESP32 family substitute, more GPIO than XIAO
Single Board Computer Raspberry Pi (3B+, 4, or Zero 2W)
The Raspberry Pi runs the high-level autonomy stack: ROS 2, GPS navigation, SLAM, camera processing, and mission planning. It communicates with the ESP32-C3 over UART or USB serial the Pi sends movement commands, the ESP32 executes them in real time. This separation keeps the real-time control loop on dedicated hardware and the compute-heavy autonomy stack on Linux.
The Raspberry Pi Linux OS is not a real-time operating system. PWM timing, motor control loops, and servo signals require microsecond-level precision that Linux cannot guarantee. Running motor drivers directly from Pi GPIO is unreliable under CPU load. The ESP32-C3 handles everything time-critical; the Pi handles everything compute-heavy.
- Jetson Nano more powerful for ML inference, but expensive, harder to source in Bangladesh, overkill for initial navigation stack.
- Orange Pi / Banana Pi viable substitutes if Raspberry Pi is unavailable. ROS 2 support is less mature but workable on Ubuntu ARM builds.
- Beaglebone Black real-time PRU cores are interesting but ROS 2 ecosystem support is weaker.
- Old laptop/PC too heavy, too power-hungry for a rover platform.
You need a single board computer with the following minimum specifications:
| Specification | Minimum | Recommended |
|---|---|---|
| CPU | Quad-core ARM Cortex-A | Cortex-A53 or better |
| RAM | 1 GB | 2–4 GB |
| OS | Linux (Ubuntu/Debian ARM) | Ubuntu 22.04 ARM |
| USB | 1× USB 2.0 | 2× USB |
| UART / GPIO | Available | For ESP32 communication |
| Power consumption | <10W | <8W |
2. Radxa Rock 3 Ubuntu support, similar form factor
3. Raspberry Pi Zero 2W lower power, less RAM, still runs ROS 2 lite
4. Any SBC running Ubuntu 22.04 ARM with ROS 2 Humble packages available
IMU MPU-6050
6-axis IMU (3-axis accelerometer + 3-axis gyroscope) over I2C. Cheap, universally available everywhere in Bangladesh, well-supported in every Arduino and ESP32 library ecosystem. Sufficient for basic orientation estimation and tilt detection on the rover.
- MPU-9250 adds magnetometer, better for absolute heading but harder to source and more expensive. Upgrade path, not necessary for initial build.
- BNO055 has onboard sensor fusion which simplifies firmware but costs significantly more.
- ADXL345 (accelerometer only) no gyro, insufficient for dynamic orientation estimation.
Any I2C IMU module with the following:
| Specification | Minimum |
|---|---|
| Axes | 6DOF (accel + gyro) |
| Interface | I2C |
| Voltage | 3.3V or 5V with onboard regulator |
| Library support | Arduino / ESP32 compatible |
Decision Summary
| Component | Chosen | Rejected | Key reason |
|---|---|---|---|
| Drive motor | JGB37-520 | LX-16A smart servo | Cost, local availability, D-shaft simplicity |
| Steering | LDX-277 PWM servo | LX-16A smart servo | Standard 25T spline, PWM compatible |
| Motor driver | BTS7960 | DRV8833, L298N | Stall current handling (43A peak) |
| Low-level MCU | XIAO ESP32-C3 | Arduino Uno, STM32 | GPIO count, 3.3V logic, compact size |
| MCU fallback | Arduino Mega | Easy to source, simple toolchain | |
| SBC | Raspberry Pi | Jetson Nano, Orange Pi | ROS 2 ecosystem, local availability |
| IMU | MPU-6050 | BNO055, MPU-9250 | Universal availability, I2C, cheap |