Jesse Brockmann is a senior software engineer with over 20 years of experience. Jesse works for a large corporation designing real-time simulation software. He started programming on an Apple IIe at the age of six. Jesse has competed the last four years at AVC, and won in 2016 and 2017.
I first started working on my SparkFun AVC rover back in 2011, but I didn’t have a finished rover until 2014. I first heard about the competition on the SparkFun site and thought AVC would be a great challenge – even then I thought self-driving cars would become mainstream. I hope I can provide some useful information for those of you working on or considering making a rover.
My latest rover uses the following components:
- Traxxas Slash 4x4 Platinum LCG Truck
- Anaconda street tires
- Traxxas RPM sensor
- RC4WD 35-turn brushed motor
- Castle ESC
- 3S 5400mah LiPo
- Teensy 3.5
- 2GB+ micro SD card
- BNO-055 IMU
- Various jumper wires
- Tactile Buttons
- Custom JRover Baseboard and Button Board
- Digole 2” LCD display
- Airplane RC transmitter and receiver with PPM output
- USB battery bank
The most important parts of the rover are the Teensy, Inertial Measurement Unit (IMU) and RPM sensor. The IMU provides a heading, the RPM sensor determines the distance traveled and the Teensy is the brains of the rover. The Teensy 3.5 runs at 120mhz with 192k of RAM and has a SD card slot.
Another important part is the base platform. I chose the Slash 4x4 Platinum LCG (Low Center of Gravity) for a few reasons. Four-wheel-drive gives better traction, which lessens wheel slip that can cause errors in the location. A Slash can better handle some rough spots on track, but I chose LCG because it doesn’t need two or more inches of clearance. The Slash Platinum has upgraded parts for the knuckles that are less likely to fail upon impact with a hay bale, curb or barrel. It also has sway bars that improve turning performance. For street use I’m using Anaconda tires, but I am researching the best tire to use for a packed dirt surface. A 3s 5400mah LiPo is used to provide long runtime and enough speed/power, even with a brushed motor.
I use a Castle ESC because it’s programmable and has better failsafe behavior compared to the Traxxas ESC. I’ve had Traxxas ESC to full throttle when signal was lost. I’m using a 35-turn brushed motor for better slow-speed performance. During testing, this allows the rover to drive very slowly (less than 2 mph) without the jittering that happens with sensorless, brushless motors.
I designed my own carrier board (baseboard) for the Teensy and user input board (button board), because there was a specific set of features I desired. I wanted something simple, with breakouts for the PWM outputs, Serial, IO pins and both I2C buses, so I could separate the IMU from the display. I also wanted an input board with four buttons that was small, with robust mechanical buttons.
Keep in mind if you use mechanical switches that they can be triggered upon impact with a barrel or other obstacles, so try to shield them. Also, dirt or dust can get into the switches and cause failures, so you might want to have a backup.
The menu system is crucial for rover control. From this I can run diagnostics, change parameters, record a path or start an autonomous run. A 2-inch LCD Module is used to display this menu. An LCD has improved visibility in direct sunlight compared to an OLED. Two inches is a reasonably-sized display, and I can have eight lines of text on the display, which I find sufficient. The four buttons are used to select and change items as required, and I can also use the RC transmitter for control as well.
I use a standard airplane RC transmitter (TX) and receiver (RX) to send steering and throttle commands to the rover during manual mode, and also for recording waypoints. The baseboard can use standard RC signal Pulse Width Modulation (PWM) or Pulse Position Modulation (PPM) to read commands from the TX. Using a RX with PPM requires only one pin to read six channels, and the code for PPM is part of the Teensy libraries. The extra channels of an airplane-style TX allow for more advanced control of the menu system.
A USB battery pack is connected to the micro USB socket on the Teensy to power the rover. I suggest using a soldered battery rather than loose cells in a holder. Failures I had in the 2014 and 2015 AVCs were caused by loose cells. The micro USB connector on the Teensy is vulnerable, so avoid connecting/disconnecting as much as possible. I used some glue around the micro USB connector to strengthen it, as impacts can cause it to fail.
Winning path from 2016 AVC
Winning path from 2017 AVC
My rovers uses heading and distance traveled to determine its location. This is a method known as dead reckoning. The pure pursuit algorithm is used to steer the rover. It works by determining how far the rover is off of a direct line between waypoints, and computing a steering angle to put the rover back on the ideal track at a further point down the path.
If you want to build your own rover for AVC here are my recommendations:
- Skip GPS since you can get bonuses for not using it, and GPS isn’t that accurate (typically 3 meters).
- Don’t overthink your design; keep it simple.
- Drive your platform without any autonomous components for several hours. Get a feel for the platform and look for any weaknesses by intentionally hitting the curb a couple times.
- Keep in mind the effects of extra weight and test as much as you can.
- Be prepared for things to fail. Log your failures in a notebook and what you did to correct the issue. If you notice a pattern, don’t be afraid to try something else.
- Have spares for anything you see failing regularly or upgrade to a better part.
I am working on multiple upgrades: bump sensors, a new BNO-080 IMU, LIDAR sensors for obstacle detection, and closed-loop throttle control for speed. I also have several secret upgrades I am working on as well.
Will you be at the 2018 Sparkfun AVC in September?