EquipoiseBot is my two wheeled self balancing robot project. It can be controlled using a homebuilt IR remote. This is my fourth robot built in the autum and winter of 2011 – 2012.



The robot uses two accelerometers and one gyro to make it balance. Two different values representing the angle of the robot are calculated. One from the accelerometers using the mathematical tangens-function and one from the gyro using integration. Those two angle values has different pros and cons. The angle signal from the accelerometers is very noisy, but this is an absolute value of the angle relative to earths gravity. The signal from the gyro is less noisy but it has drift problems.

The two angle values are combined in a filter to make one new value that is both accurate and absolute, relative to earths gravity. This new angle is used as input in a PID regulator to contol the motors, keeping the robot in balance.

The remote is built in the casing of an old transmitter from an RC helicopter. The transmitter sends the X and Y positions of the control stick over IR using using standard 1200 baud serial data modulated with 38KHz and a homemade data protocol.

The steering signal from the remote is just added to one of the motorsignals and subtracted from the other. The forward/reverse signal from the remote are added to the anglevalue after the filter described above. The steering works great but the forvard/reverse is far from perfect. The remote is comanding the robot to lean at an angle, not to drive at a comanded speed. Also there is nothing thats prevents the robot from driving to fast, if this ocurs the robot falls over. This makes the robot hard to control.

EquipoiseBot is equipped with quadrature wheel encoders. Those are not used at all but in the future they can be used to make the robot stand still in one place, or to improve the remote control function.

Update 2017-09-20
Download the SketchUp-file here: EquipoiseBot_SketchUp.zip  (5MB).
I do not provide and schematics or code for this project.



8 thoughts on “EquipoiseBot

  1. Sjaak van der Zande

    Hello Axel,

    Some years ago I contacted you about the EquipoiseBot. Since then I am experimenting too with balancing robots.
    I have read many sites about this subject, but I still can’t manage the robot to balance in a stable way. I can send you
    some video about this, if you want to see it. When changing the PID parameters in many ways, it still shakes slightly.
    Not how it should operate properly, but it manages to balance. I used Xbee Wifi modules to change those parameters
    wirelessly. The offset angle or tilt angle to balance this robot is also problem. The center of gravity is not perfectly located above the wheels axis , so the robot needs a little tilt angle to keep the balance.

    Now I am making a new balancing robot with stepper motors. And I have found a site
    and also the ARDUINO GITHUB SOFTWARE for making this robot. I am going to make it like this Manolo example using bluetooth communication. Another example, I have read, is from . Both Manolo and B-Robot use a double PID-controller. This seems to solve the problem with the tilt angle, caused by the CG.

    My first robot lacks the cascading PID controller and uses brushed motors without encoders. Well one thing is for sure. I love experimenting
    with balancing robots and I want to make one day a good one. By the way I am very impressed by your new “Balancing robot with Raspberry Pi” also with stepper motors. Stepper motors are more precise and I have found out that brushed motors have always differences in speedvariations.

    I have also a question for you, Axel. What is the best way to configure the cascading PID controller? There is little information about
    this to find on any sites I have mentioned above. Any useful information is welcome for me and my new project. What is the best way
    to approach this configuration.

    Also have a look on my own first website . Still “work in progress” with new projects coming soon.

    With kind regards,
    Sjaak van der Zande

    1. Axel Post author

      To make a good balancing robot that can compensate for CG changes etc. two cascaded PID regulators are needed. The “Equipoise Bot” does not use this method but the “Balancing robot with Raspberry Pi” does. The idéa is that one PID regulator controls the speed of the wheels depending on the differance between the robot’s angle and a setpoint-angle. Then another PID regulator controls controls this setpoint-angle based on the difference between the robot’s speed and a setpoint speed. If you want the robot to stand stil, this setpoint-speed is 0. The robot’s speed is the output of the first PID regulator if the robot uses stepper motors, or encoder speed data if the robot uses DC motors. You start by tuning the first angle-PID until the robot can stand upright and then tune the speed-PID. I will keep an eye on your website 🙂

      1. Sjaak van der Zande

        Hello Axel,

        Thanks for your reply about the explanation of configuring the parameters of the cascading PIDs. First the angle-PID and then the speed-PID. I will keep that in mind. Your design “Balancing robot with Raspberry Pi” is very nice and practical. Do you have maybe a converted PDF file of your mechanical design to construct the balancing robot myself? Your design-files I have downloaded, but I don’t have SketchUp. Please give me some design format to work with. Freecad is my kind of 3D designing program.

        With kind regards,
        Sjaak van der Zande

        1. Sjaak van der Zande

          Hi Axel,

          I have downloaded SketupViewer to view your design.
          I could print it to 1:1 scale, but I needed to cut and paste it in the old fashion way
          (scissors and scotch tape) to have the demensions of your design.

          In FREECAD I will make a 3D model for futher use and get the seperate parts to print it out
          on paper to make my Balancing Robot. Maybe I will print some 3D-parts with PLA to make this robot.

          Bye Sjaak

          1. Axel Post author

            Hi. I usually copy and paste the parts of a SketchUp model I want to print in a separate file, and use the built in printing functions in SketchUp to make a tile-print in scale 1:1. And yes, I also cut the papers to size manually and tape them together. You can probably save a lot of work if you have a 3D printer 🙂

        2. Axel Post author

          Hi. I have not done a PDF for any of my robots, but SketchUp Make is free, you can download it to view and print my design. I think you can export parts of the 3D model to a PDF using SketchUp if you want. I have never tried Freecad, but it looks interesting. Maybe I should try using that program on some other design in the future.

  2. Armin Schlegel

    Do you share your code and design? Is it possible to download it anywhere?
    Thanks and Regards

    1. Axel Post author

      I am not very satisfied with the code or electronics solution in this robot, therefore I will not share it. But a have updated the page and added an old SketchUp file with contains all mechanical parts. Its made in an old version of SketchUp, but you should be able to open in current versions of the program.


Leave a Reply

Your email address will not be published. Required fields are marked *

Warning: Undefined array key "rerror" in /customers/b/a/5/brinkeby.se/httpd.www/axelsdiy/wp-content/plugins/wp-recaptcha/recaptcha.php on line 291

This site uses Akismet to reduce spam. Learn how your comment data is processed.