Omni-Directional Robot Build Part 3 – The Controller.
While spending some time relaxing and dreaming of robots and imagining how to build a 3 wheel omni-directional robot I kept thinking how similar they are to the tricopter and quadcopters I have previously made. So surely a flight controller from a quadcopter could be used to control a robot.
To have an omni-directional robot move in a direction dictated by the controller the signals from the receiver need to be mixed together to provide appropriate throttle settings for the motors. When Daniel made Sidewinder he bought a purpose built mixer to control the robot. Unfortunately this was killed several years ago during a wiring mix-up and they are not made anymore. While I am sure it would be possible to setup the mixing on the transmitter I think it is better to have the mixing done on-board the robot as this would allow the use of a gyro. In this case a gyro is a sensor that was designed for model helicopters that measure how fast the model is turning and adjusts the Yaw (steering) to correct as necessary.
In the case of an omni-directional robot the the gyro would be connected to the channel from the receiver that steers the robot (I will call this Yaw from now on) and will help keep the robot pointed in the correct direction. Why do need this? Not all motors are made identically or gearboxes or wheels so a robot will never drive perfectly straight. Also any dirt, debris or cracks in the floor can cause a wheel to lose traction and veer a robot off course. The gyro will sense the change in heading and correct automatically. Several 2 wheel robots have used these before as have I and it really helps. I get the impression that some people think of them as taking away from the skill of driving but I will take any advantage I can get.
The gyro would need to be placed before an on-board mixer as we only want to correct the yaw channel. If the mixing was done on the transmitter the received channel for each motor would contain the forward/reverse, left/right and yaw signals and gyro would not know how to correct the yaw specific component of the signal. If it is placed on a yaw only channel before mixing then the gyro does not need to know which direction the robot is moving and will concentrate on keeping the correct heading.
Fortunately all multi-rotor flight control boards contain a gyro sensor and a processor for signal mixing. Most flight controllers also contain several other features including accelerometers, digital compasses, telemetry, and LED controllers that might be fun to play with later.
I decided to use a board that uses CleanFlight firmware as I am familiar with setting it up and felt confident in being about to hack it if needed. After looking around Hobbyking I found a suitable controller called a Skyline32 Mini that was on sale. The board is Naze32 compatible so is well documented and also has a magnetometer to use as a compass. While I was not looking for such a compact controller it was on sale for $6 so I grabbed it. I also needed a new receiver so bought a Quanum FR8 Nano PPM receiver but have not been able to use it since I didn’t read the specs correctly and it isn’t compatible with my transmitter. So until I get a new transmitter I will have to use 4ch receiver as that is all I have. While I only need 3 channels to control an omni-directional robot (forward/reverse, left/right and yaw) a flight controller expects 4 inputs (Pitch, Roll, Yaw and Throttle). I was hoping I could set the throttle to 50% and ignore it this has been proven wrong.
The next page on controller setup will explain why.