Combat robot classes are split up by weight, so it's important to be efficient with how the weight is used. Normal robots have drive motors and weapon motors, and significant weight in frame and weapon. If we could merge these, the damage potential increases massively.
This is where meltybrains come in. They work by spinning the frame of the robot at high speed, then as the robot rotates, varying the speed of each wheel, so when its pointing in the desired direction of translation the wheel spins faster, and when the wheel is pointing the opposite direction the wheel spins slower.
Meltybrains face serious challenges. Some major ones are below:
Achieving high tip speed (essential for a big hit) results in extreme forces on the frame
Accurate determination of the current angle is required to vary the wheel speeds properly
The wheel speeds need to be adjusted hundreds of times per second
These challenges result in few builders attempting them.
As part of my research I've taken lots of inspiration from a few places
If your measuring time (which micrcontrollers do), if your measuring position you can calculate speed (thanks derivatives), and if you measuring speed you can estimate precision (thanks integrals).
Measures the centripetal acceleration, then uses that to calculate the speed at a known radius, and hence the spin rate.
One challenge is finding an acceleromter capable of measuring the massive acceleration. This can be minimised by placing the accelerometer more centrally, but this increases measurement error.
Measures the position of the wheels. This can then be used to calculate both spin rate and spin position.
Some challenges including effectively measuring the very fast wheel. This also doesn't account for wheel slip.
This does have the benefit of enabling better wheel speed adjustment algorithms since the speed can be measured easily.
Magnetometers measure the local magnetic field. Assuming the magnetic field around the robot is constant the angle of the magnetic field is the angle of the robot.
A major issue is the magnetic field isn't constant. Theres two motors spinning around at full pelt right next door, plus some bonus rapidly changing high current wires.
A Light outside the arena emits a constant IR signal, then a sensor on the robot receives that light whenever it is pointed in that direction.
This works really well sometimes, but is heavily dependent on the environment. Some arena's cause lots of reflections so the robot can "see" the beacon in multiple locations.
Gyroscopes measure the rotation of objects. Which is exactly what we want. Unfortunately they only work up to relatively low spin rates, so are practically unusable for meltybrains.
This makes use of the robots rotation, to spin a coil. The spinning coil in a magnetic field generates a voltage as it rotates, with the voltage being proportional to the sine of the current angle.
Honestly I'm not sure. I will probably have wheel encoders on the robot, for better wheel speed control. The accelerometer seems like a relatively good option. I'm currently looking at the ADXL375, which does +/- 200g. I'll probably start with those two, and see how it goes, potentially introducing a magnetometer later.
I've designed and ordered an assembled PCB with an ATTiny1616 and an ADXL375, which has arrived and works (I'm honestly surprised how well it worked. The only hiccup was using the wrong I2C address). I've done some math in Excel, so I'll see where that goes.