I have rebuilt my balancing robot. The reason was that I wanted to fit more sensors and functions, and there where no space for that in the previous design. I have also rewritten all the code and replaced the Kalman-filter I previously used for angle estimation with a complimentary filter instead. This in combination with a higher center of mass have made the robot a lot more stable and tolerant against pushes and other disturbances.
A Kalman-filter should work better than a complimentary filter, but the Kalman-filter is a lot more complicated. Since I do not understand exactly how the Kalman-filter worked, it was to hard for my to tune it properly. The estimated angle of the robot was reacting to slow. My current solution with a complimentary filter is much more responsive. That allowed me to increase the parameters of my PID regulators to make the robot more stable.
This video shows some new IR distance sensors I have installed on my self balancing robot robot. The IR sensors are short range (5-10 cm) and should prevent the robot from running into things that the main ultrasonic sensors miss. The video also shows two servos I have installed under the robot. They are not connected yet, but they will later be used to raise the robot up again if it falls over.
Made a new video demonstrating how my Arduino based balancing robot can enter balancing mode by itself. The video also shows the robot doing basic obstacle avoidance using its tree ultrasonic rangefinders. The obstacle avoidance if currently done by one of the Arduinos, but this a typical high level function that will later be handled by the Raspberry Pi.
I have made some progress with the self balancing robot. The speed of the motors is now controlled using two cascaded PID regulators. One regulator adjusts the speed of the motors to maintain a setpoint angle. The other PID regulator adjusts this setpoint angle according to a setpoint speed. This new control system allows the robot to return to its original position when disturbed. The robot can also find a new angle for balancing if the center of gravity is moved, or the robot is standing on an inclined plane.
In this video I use the Raspberry Pi for a very basic form of remote control. I connect to the robot using SSH, then I run a serial terminal program on the Raspberry Pi to send ascii characters the the main Arduino. The video also shows an example of video and photo quality from the Raspberry Pi camera.
The three ultrasonic distance sensors and the tilt servo for the camera module are not connected yet…
It was about three years since last time I built a robot. I have learned a lot of things since then, now it is time for a new robot project. Now I have built a self balancing robot based on Arduino. This robot uses stepper motors, the balancing is done using a PID regulator. In this video, the setpoint angle is adjusted proportionally to the speed of the motors to keep the robot from drifting away. Later I will add a second PID regulator for this instead.
Currently the robot can only stand still, but this will be a platform for more experiments in the future. There is a Raspberry Pi 2 installed in the robot. Right now it does nothing, but it will bu used to persorm higher level functions like navigation, obstacle avoidance, remote control and maybe computer vision using the raspberry pi camera module.
When I built the “Stik Pusher” indoor plane, I installed some LEDs that I did not connect. My intention was to add an Arduino but I wanted to test and make sure the plane worked as expected before I did it.
The main purpose of the Arduino is to monitor the battery voltage, but all control signals from the receiver to the servos and ESC (speed controller) now goes though the Arduino. The Arduino flashes the LEDs located on the fin, motor mount and nose depending on the battery status. If the voltage drops to low, the motor is stopped to protect the battery, but the the control surfaces still works. This is similar to how a normal “cutoff” function in an ESC works. My ESC in this plane in very small and simple and does not have this function built in.
I have also connected a serial bluetooth module the the Arduino for wireless communication. I also plan on connecting an ultrasonic range finder pointing downwards to experiment with an automatic altitude holding feature. This requires tuning some parameters, and this is where the bluetooth connectivity comes in handy. Maybe later. I will also try to control the plane with a smartphone app or laptop using this bluetooth connectivity.
To extend the life span on LiPo batteries, they should be stored at the correct voltage. Most hobby chargers have a build in program for storage charging LiPo batteries, but mine did not. So I desired to make my own. Read more about how I made it on the DIY LiPo storage discharger page
This is a project I have been working on for a while now. The alarm clock features a large 40×7 LED dot matrix display and a easy-to-use user interface for adjusting settings. The clock is controlled by an real time clock module that keeps track of date and time. The time of this module is set using a built in GPS every three seconds if the GPS has a valid position FIX. Read more about this project here: Arduino based GPS alarm clock