System block diagram

The Mini-Mapper is a robotics project I'm using to learn about electronics and embedded programming. The idea is to have a two-wheeled robot that can sense and explore its environment, with the additional requirements of having it do turtle graphics and allowing some sort of direct remote control from a PC.

The electronics in this will be relatively basic, but I'm hoping that it should be possible to do some entertaining software things along the way. (Examples include navigation, control and sensor fusion, some networking and communications things, some digital signal processing and some mapping/machine learning algorithms.)

I'm experimenting with making some videos and keeping a sort of mixed video and documentary build log as I go.

Log entries in reverse chronological order

Learning objectives

The things I'm hoping to learn about with this are:

  • Motor control: drivers, encoders, PWM, etc.
  • Control theory: PID control, soft start, odometry, precise position control, sensor fusion, waypoint-based state space navigation (I don't know if that's the right term for it, but I know what I mean!).
  • A very small amount of RF: using more or less integrated modules, maybe a bit of microstrip design, mostly to learn about modulation and detection at a basic level.
  • Microcontroller programming: possibly two different platforms (MSP430 and STM32), possibly a bit of assembler, a bit of C, and a bit of Rust.
  • USB, SWD, I2C, ASK, OOK and assorted other TLAs.
  • Some signal processing, both analogue and digital, mostly for dealing with some ultrasonic sensing.
  • Basic analogue circuit design: opamps, mostly...
  • Get better at PCB layout, and learn something about EMC and EMI.
  • Mapping and navigation algorithms like SLAM.

That's quite a grab-bag of things, I know, but I've structured things so that I have three well-constrained prototyping projects to do up-front to learn some of these things before trying to put everything together into a robot.

Prototyping sub-projects

  1. A prototype motor driver and encoder board: this is a platform for developing some motor control code, and is also a way to make sure that all the mechanical constraints for the motor setup work nicely in the final robot boards. [IN PROGRESS]

  2. A 434 MHz communications module: this is a thing that either plugs into a PC USB port or talks to a microcontroller over a serial line and implements a simple point-to-point networking protocol for software on the PC to talk to the microcontroller using a 434 MHz radio.

  3. Ultrasonic distance sensing: a handmade solution to learn some more analogue electronics and have fun with signal processing. This is more of an experimental project, since I don't quite know how to do what I want to do. I have some transducers and I'm just going to see how far I get.