AIBurroNAVIORaspberry PiRobocarsUncategorized

Updates to Burro self-driving platform

I’ve been busy implementing some cool updates to Burro, the self-driving RC car/robot platform I’m building. Here’s a summary:

The Adafruit Motor HAT is now supported in addition to NAVIO2. Both boards are fully supported 1, and in fact you can use the same SD card in different cars/robots, without the need to reinstall anything, as detection of boards is done in runtime. Currently, auto-detection assumes a RC car setup with Ackermann steering if using NAVIO2, and a differential steering setup if using the Adafruit Motor HAT 2.

My intention is to expand hardware support of Burro with more motor drivers. My next goal is to add support for native PWM generation on RPi, a technique used to drive two of Pololu’s motor driver HATs. It seems that RPi has a hardware PWM generator that can generate ultrasonic PWM for quiet motor operation, and is easily usable through WiringPi and its Python wrapper. In addition, if anyone would like to have a specific piece of hardware supported in Burro, I’m actively looking for hardware.

The second improvement is on the web interface. That has seen a gradual series of improvements in the last few weeks, and now presents more information in a more concise way. Even though I’m currently quite satisfied by the web interface’s current status, there is more to come on this matter, so stay tuned!

The new Burro web interface. Viewport image is illustrative.

In addition to these features, many tidbits have seen improvements, many bugs have been squashed and infrastructure improved, so that future features are easier to add. I have set a v1 milestone for Burro, and there are still a number of issues to attend to till it is reached.



Finally, the last weeks saw the first public release of the training code, which includes a series of pre-processing Python generators, for generating training examples and raining Neural Networks for autonomous driving using Keras. The training branch of burro contains an early implementation, which is functional but requires some tweaking to get it working. Once this is streamlined and bugs ironed out, I’m going to merge it into master and it’ll be part of Burro.

Take a look at the Burro repo on Github

  1. Even though NAVIO2 support includes additional features, such as RC decoding and status indicator
  2. With a little bit of configuration, NAVIO2 could be used to control a differential steering car with continuous rotation servos quite easily

4 Comments

  1. Russ

    Nice work! Can the NN be trained to drive the car more accurately, more in the center of its desired path?

    • yconst

      It depends on the training data – quantity and quality. If your driving is consistent and always on the line, the same behavior will be inherited by the model. One thing Ive found out is that to keep the car from getting outside the track, it’s good to train it in such scenarios as well. For instance, teaching it to get back in the track if outside etc.

  2. Russ

    I wonder how the Beaglebone Blue would work instead of the Navio 2? Less than half the price. The RasPi would do vision and CNN, the BBB do motors, encoders, and IMU. Either one could do the WiFi, or maybe both, with different channels. Of course, these chassis don’t have encoders yet. They would allow more accuracy.

  3. yconst

    Sure, it would work. The bet would be to get Tensorflow working. On the Pi a precompiled wheel is used. If there is such a thing for the Beaglebone it would be perfect I guess.

    Hardware-wise the bottom line is that if all you want is to drive an ESC and servo, you don’t even need a microcontroller, just PWM capability. AFAIK Raspberry can generate two quite accurate PWM channels, so it is possible to drive an RC car without any extra hardware, apart from a buck converter to power the servo (and maybe the pi).

Leave a Reply