Robot Inspiration Series #3: Self-Balancing Wheeled Robots - Part 3

Building a self-balancing NXTway robot is not so hard, as shown in this tutorial. The completed NXTway robot will be able to move forward and turn (to avoid objects).

For this tutorial, you will need:
- HiTechnic gyro sensor
- RobotC installed on your computer (you can download it here).

Step one:

Build the robotic platform. You may use your own idea or use the instructions provided below.

Here are some tips if you decide to build one yourself:

- Wheel size is important. I first tried wheels that were too big and the robot just flopped on its face. Why? The program I used was design for wheels of a specific size, hence wheels that are too small would also not work.

- Wheel spacing must be also considered if you want your robot to turn. If the wheels are further apart, then the robot needs more rotations to turn; if the wheels are closer together, then the robot needs fewer rotations to turn.

- Orientation of the gyro sensor is also important; if it is incorrect, the robot will fail to balance. For the correct orientation, see in the pictures below.

Here are the instructions for the simple NXTway I made:
(click on picture for a larger view)

Step 2:

You will need to program your NXTway. We will use a motion control algorithm that was created by Ramin, which works quite well -- much appreciation to you, Ramin, for making it available. Copy Ramin's program from here and paste it into the RobotC programming environment. Compile and download the program to NXT.

Step 3:

To operate your NXTway, you can follow these steps:

(1) Hold the robot upright on a flat surface
(2) While holding the robot upright, run the program. The program will wait a few seconds then "beep".
(3) Once the robot "beeps", let go, and it will start to balance on its own.

That’s it!!

Happy building,


Kirk Backstrom said…
Sorry for the delay for Part 3 - work has been bogging me down as of late.

Fay Rhodes said…
I'm glad you finally got to it! I can't wait to try it---just as soon as I acquire a gyro-sensor.
Now I've seen two self-balancing robots that use gyros, and both have RobotC programs. This makes me wonder... are NXT-G programs too slow to meet the processing requirements of the gyro? I've been experimenting around with my gyro in NXT-G, trying to get it to measure the magnitude of tilt, but it seems like there might be problems with the proccessing speed.

Laurens Valk said…
Great post!

Note that if you use the code, you must modify it slightly. The code calculates the bias for the sensor (specific value, depends on your gyro). Then however, in Ramin's code, he hard-codes his bias value, 600.5. You could either replace that with your own bias or delete that line.

This nxtlog project has a nxtg program and seems to balance quite well.

However, some days ago I have tried both the robotc code and the nxtg one, and none of the example programs have worked well for me :). I'll try to find a way to get my robot balanced.

Laurens Valk said…
It seems like the link is not working.. Here it is again:
Anonymous said…
Kirk, this is very good. I'm enjoying this inspiration series very much and so are my kids/students. We were worried summer would slow down on nxt news but since July 4 your team has posted 40++ items that have given me plenty of activity ideas. nxtlog hasn't posted a single item since July 4 and my kids don't even visit it anymore (one uses their forum I think). My point is that nxtstep has done a great job of developing material for parents/teachers and I want to encourage your team to keep up the good work. So many blogs pop up and die out but I believe nxtstep has shown it intends to keep the fires lit. I'm a blog nut and I look forward to checking my feed everyday. My kids and I are grateful.

Laurens Valk said…
I have to revise my above comment. I tried fresher betteries and I recalculated my bias and now it balances perfectly with Ramin's code.
Kirk Backstrom said…

Glad you got Ramin's code to work perfectly. It worked perfect for me too - no modifications needed.

Only one modification I would like is for the program to enable the robot to be remote controlled.

Kirk Backstrom said…
Thank you Keith for your kind comments. And feedback like yours lets us know we are on the right track - we are doing what we can to make our readers happy.

- Kirk
RawMean said…
Thank you for putting these instructions together. I just wanted to point out that my self-balancing RobotC code does obstacle avoidance (i.e., it turns to avoid hitting stuff) as well (using the sonar sensor).

Anonymous said…
Nice post! However, the link to Ramin's code ( is broken... I am very interested in taking a look at it. Could someone, please, post a working link to the source code? Thank you!
RawMean said…
I fixed the link (sorry, I had a DNS problem). Also, if you have installed RobotC, my code is in the "sample code" directory of the RobotC distribution.

Unknown said…
My computer cant go to the website
Can somebody send me the code, just leave a comment on this side please :D
RawMean said…
My home server ( is down again and I am on travel currently. If you have RobotC installed, you can get the code from the "sample code" directory of the RootC installation.

I'll fix the server once I get home.

SDC said…
Facinating, however I can't find the Ramin RobotC program either. Can anybody please direct me to a copy of that code?
RawMean said…
The code is now provided in the "sample code" folder of RobotC.


Unknown said…
Can somebody send me Ramin's code? I have RobotC 2.01 and couldnt find it in the sample programs. thanks
RawMean said…
Hi Drew,

the code is in the following directory of your RobotC installation:

C:\Program Files\Robotics Academy\ROBOTC for MINDSTORMS\Sample Programs\NXT\Miscellaneous

If you still can find it email me (lesswire1 at and I'll send it to you.

Unknown said…
Found it, Thank you Ramin! Don't I feel silly now, it was there the whole time.

Popular Posts