Skip to the content
PCBKitNew board
2 layers72.5 × 66 mmVango pcb, the printed circuit board in 3D

A differential drive robot that draws pictures

Size
72.5 × 66 mm
Copper layers
2
Thickness
1.6 mm
Parts
16
Nets
48
Pads
107
Tracks, vias
115, 34
Pours
1
Routed
Yes
KiCad
KiCad 7 (file 20221018)
Created
19 Jun 2023
Updated
28 Aug 2023

Overview

Vango pcb is an open-source printed circuit board by nmarks99, from the nmarks99/VanGo repository on GitHub, published under the MIT licence. It is a 2-layer board of 72.5 × 66 mm with 16 parts on 48 nets, routed with 115 tracks and 34 vias.

It is built around the XT60PW-M. Its parts include 5 ICs, 5 connectors and 1 switch. It belongs with the robots and motor control boards and the ESP32 boards of this library.

Main components

1

README

README.md

VanGo: A Drawing Robot

VanGo is a differential drive robot that can draw SVG images on a page.

First, an SVG image is converted to XY coordinates using this online tool: Coordinator. Then, using these XY coordinates, a trajectory of waypoints is generated for the robot to follow. Trajectory tracking is implemented using a simple PID steering control algorithm, and the robot determines its pose in space through wheel odometry, using quadrature encoders on the motors. For more in-depth information, please see the VanGo documentation at https://nmarks99.github.io/VanGo/. VanGo is still relatively early in development and several aspects of the project need more work and fine tuning, such as the trajectory tracking algorithm, a command line interface for the client application, and improved mechanical design. However, in its current state, VanGo demonstrates a good proof of concept.

Project Structure

  • vango-firmware is the firmware for the ESP32 board based on esp-idf-hal
  • vango-client is a desktop command line application for controlling the robot
  • vango-utils is a utility library used by both the firmware and client.
  • hardware directory contains the KiCAD project for the PCB

Future Development

This project also uses another library I have developed, diff-drive, primarily for pose estimation via wheel odometry. In the future I hope to use both the VanGo and diff-drive projects as starting points for developing a general purpose, high-performance, and open-source, differential drive robot that anyone can build with firmware based on Rust on the ESP32 (think DIY TurtleBot).

Other Notes

One of my biggest motivations for this project was to learn more rust programming, particularly embedded rust, which is why this project is 100% rust code 🦀. Like mostly everyone else, I've primarily used C and C++ for programming microcontrollers in the past, most of the time using the Arduino framework together with PlatformIO which I've found to be a very pleasant experience. After having worked on this project for several months, using Rust on the ESP32, I've found it to be a equally pleasant experience, after some intial growing pains. Below are some of my opinions on the state of embedded Rust. Note this is generally with regards to Rust on ESP (esp-rs), however some of it applies to embedded Rust in a broader sense.

The Good

  • Using esp-idf-hal you get to program the ESP32 in Rust (almost) as if you were writing a program on your desktop This means you get to take full advantage of the Rust standard library and mostly any external crates you may need.
  • Using Cargo works the same as it would in your other Rust projects and integrates seamlessly with flashing the board. you can see in my vango-firmware/.cargo/config.toml file, I created an alias cargo flash to flash the board from the command line and also set the partition table (sets how much space in memory you are reserving for your program): flash = "espflash --release --partition-table partitions.csv"
  • As in the case for non-embedded Rust, if the code compiles it almost always just works, which is super nice, especially for embedded projects where you not only have to build, but also flash the board. I've found that bugs are often very easy to track down in Rust. The only subtle error I encountered, and it's not even that subtle, is that if you accidentally enter a loop that is doing nothing but looping, it will probably trigger the watchdog timer and continually reset the board. There is a way to disable the WDT, but you can also just add a short delay (1ms even is enough) if you are in a loop doing nothing.

The Bad

  • Finding example code is (unsurpisingly since Arduino is much more mature) a little difficult compared to Arduino. For example, I had a very tough time finding an example of how to do some basic things like GPIO interrpts and timer based interrupts, which I could find examples for very easily in Arduino. However, after figuring it out, a timer interrupt in esp-idf-hal turns out to be almost as easy to use as the popular IntervalTimer in Arduino. Another thing that was very tough to find example code for was bluetooth. Eventually I found esp32-nimble which works quite well and isn't too complicated. The developer is was also quick to reply to an issue I opened for an additional feature.
  • Flashing the board takes forever. I haven't timed it but it probably takes like a minute or two maybe which is much longer than similar Arduino programs. This may just be something specific to my project, but it was fairly annoying to wait for the board to be flashed whenever I made updates.

Parts

16
QtyValueFootprintReferences
3Conn_01x02Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical3V3, J6, J7
2MD41Bvango_fplib:MD41BU1, U3
1Adafruit_Feather_HUZZAH32_ESP32Module:Adafruit_FeatherA1
1Conn_01x06Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ4
1I2CConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ3
1Left Motorvango_fplib:N20_motorU4
1NeoPixelConnector_PinSocket_2.54mm:PinSocket_1x04_P2.54mm_VerticalJ2
1REG15Dvango_fplib:REG15DU2
1Right Motorvango_fplib:N20_motorU5
1SG90_ServoConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalServo
1SPIConnector_PinSocket_2.54mm:PinSocket_1x03_P2.54mm_VerticalJ5
1SW_SPDTConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalSW1
1XT60PW-MConnector_AMASS:AMASS_XT60IPW-M_1x03_P7.20mm_HorizontalJ1

Questions

How big is the Vango pcb PCB?

It measures 72.5 × 66 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Vango pcb use?

16 parts, built around the XT60PW-M. 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 Vango pcb KiCad files?

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

Can I use the Vango pcb 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).

Similar boards

  • 6 layers56.1 × 88 mmBldc&foc motor controller, the printed circuit board in 3D

    Bldc&foc motor controller

    bejaouihamza/bldc-foc-pcb

    This open-source hardware project is a compact, single-board FOC (Field-Oriented Control) motor driver designed for precision robotics, drones, CNC machines, and automation systems.

    108 parts16
  • 4 layers262 × 110.5 mmHM CENTRAL-02 painel, the printed circuit board in 3D

    HM CENTRAL-02 painel

    BenjamimKrug/robo_humanoide

    Repositorio para arquivos gerais necessários para o desenvolvimento do Robô humanoide

    303 parts10
  • 4 layers100 × 70 mmElonMux, the printed circuit board in 3D

    ElonMux

    EPFLXplore/Power_HW

    KiCad design files for the power boards of the Xplore rover.

    329 parts7
  • 2 layersPowerBoard2, the printed circuit board in 3D

    PowerBoard2

    geisel-m/NULunabotics

    The repository for everything related to NU Lunabotics

    26 parts5
  • 6 layers100 × 100 mmBms board, the printed circuit board in 3D

    Bms board

    AerospaceNU/bms-pcb-design

    373 parts4
  • 4 layers70.8 × 100 mmFlapjack, the printed circuit board in 3D

    Flapjack

    Caleb646/Flapjack

    A custom VTOL drone platform — from airframe to PCB to firmware.

    116 parts4
  • 2 layers71.7 × 75.3 mmPi HAT V2, the printed circuit board in 3D

    Pi HAT V2

    danielwilczak101/EasyControls

    Originally part of the NASA Asteroid flyer program has been repurposed by the EPPL to allow anyone interested in controls to go online and connect with a real working device and test their own control algorithms on a…

    42 parts4
  • 4 layers13.4 × 4.5 mmLre avio daq2, the printed circuit board in 3D

    Lre avio daq2

    IITB-Rocket-Team-Avionics/Ember

    Experimental Flight Computer with potential mitigations of previous issues faced by FLYTE and a testbed for new systems.

    172 parts4MIT