I've got the motor controller working and sorted out a few misunderstandings with the PCA9685 (that's what I get for writing a bunch of code and not testing on the robot as I was building it... though that wasn't an option), and it drives. It even turns. It's basically hardware complete, though I'm still thinking about adding a camera to it.
I'm not too disappointed in the code I wrote, either (it's all C++). This validates a bunch of things:
- the I2C library I wrote
- the motor controller library
- the drive controller node that is controlled via rostopics
Next up: getting the IMU working. I don't have to write an I2C library, and I don't have to process incoming messages - just read, calibrate, and so forth.