Fun Projects for your LEGO MINDSTORMS NXT!

Home     Projects     Help     Contacts

NXT Segway with Rider
Building: Advanced


Building Instructions



You can use the NXT with either AA batteries or the NXT Rechargeable Battery Pack.





Insert the cross brace between the motors, keeping the wires routed under it as shown above.  Wrap and then connect the B and C wires to the two motors as shown below, then finally attach the color sensor as shown, which should be connected to the port 3 wire.








Connect the body motor for the rider to port A.  The ultrasonic sensor is not attached in this design.

NXT Segway with Rider Programming
Download Programs (help)

Important Usage Information

Note: Unlike balancing robots that use a gyroscopic sensor or other special sensors, this design uses only the color sensor, which does not know which way is "up" in an absolute sense, so it can only guess on its relative tilt based on the amount of reflected light received from the ground.  As a result, getting a good balance is a bit of a challenge when you are using it.  Please read the following important tips. 

Getting the NXT Segway with Rider robot to balance requires good lighting and surface conditions for the color sensor, and also requires that you start the robot exactly balanced to begin with, so be prepared to experiment with different surfaces and lighting, and also some practice at getting the robot started out balanced to begin with.  Here are some tips:

  • Lighting.  External (room) lights can confuse the color sensor, especially if the amount of lighting or shadow varies as the robot moves around.  For best results, find a location where the color sensor will be in shadow from any room lights, even as the robot moves forward and backward by a couple of feet in either direction.  Also, florescent lights will interfere less than incandescent lights.   In particular, make sure that when you remove your hand(s) to release the robot in the beginning, that the shadow/lighting conditions don't change at that point.

  • Surface.  The robot requires a surface that has very uniform brightness.  Blank white paper will work well, or any surface that is a uniform solid color with no pattern.  A wood floor with a wood grain pattern, or a tile floor with texture will not work well, because the light reflection will vary as the robot moves.

  • Initial Balance.  Since the color sensor cannot tell which way is up, the robot must start perfectly balanced to begin with, and then the program will try to maintain that balance position by trying to seek out the same reflected light reading that the color sensor had at the beginning of the program.  Specifically, the robot must be physically balanced, which is not the same as holding it visually straight up.  If you just hold it upright with your hand, it will not be physically balanced.

At the beginning of the program, the program will beep three times over three seconds, to give you time to get the robot balanced with your hands, then it measures the position at the 4th (higher tone) beep, so the goal is to have it perfectly balanced at the 4th beep.  Then it starts to try to stay balanced automatically.  Note that if you start the robot very close to but not quite balanced, it will drive forward or backward in the direction that it was leaning at the start.  Getting a good start may require some practice, so be patient!

A good way to start the robot balanced is to start the program, then during the three beeps, support the robot only by the top of the driver's head (ultrasonic sensor) very lightly using one finger and thumb with an open gap, trying to keep the robot from leaning to either side very much at all.

The Programs

Two programs are provided for the NXT Segway with Rider, Segway and SegwayBT.  Both of these programs balance the robot using a form of "PID Controller".  See this Wikipedia article on PID Control for technical information on how a PID controller works.

The Segway program will make the robot automatically balance itself, based on its initial position, without any leaning movement by the rider.  When using this program, you can lock the rider in place to keep him upright as explained below.

The SegwayBT program adds Bluetooth remote control to allow you to control the forward and backward lean of the rider from another NXT brick via Bluetooth.  First, establish a Bluetooth connection from the second NXT (the remote control) to the Segway NXT on Connection 1, then run the SegwayRemote program on the remote control NXT and the SegwayBT program on the Segway NXT, starting with the Segway balanced.  Now pressing the gray Left and Right arrow buttons on the remote control NXT will cause the rider to lean slightly in that direction.  Use only slight movements (e.g. one or two presses in each direction), so that the Segway can keep up with the motion. 


Locking the Rider in Place

When using the Segway program, which does not do any rider leaning, you can lock in the rider in place as shown below to make the robot easier to work with.  Remember to remove the lock when using the SegwayBT program.

You can use either of these axles to hold the rider in place.  The size 5 axle will look better, but the size 8 axle with stop is easier to insert and remove.


  • The Segway and SegwayBT programs use a "PID Controller" strategy to balance the robot.  This type of control strategy can be used in several other applications of robotics.  The article A PID Controller For Lego Mindstorms Robots provides a good introduction to PID control, as applied to line following with an NXT robot, by developing it and comparing it to simpler methods.  Can you adapt the Segway program to re-use the PID strategy for another application such as line following?

  • The SegwayBT program does not modify the power to the wheels to make the robot go forward and backward.  Rather, it simply leans the driver's body, which forces the robot to adjust to stay balanced, which has the effect of causing the robot to move forward and backward (somewhat like a real Segway getting started).  Can you modify the control program to modify the motor power instead of the driver lean to achieve forward/backward movement?

  • The solid axle between the wheels is not necessary, but it prevents the robot from wandering sideways as it adjusts its balance.  Try removing the center connection.  Now can you imagine modifying the SegwayBT program to adjust the motor power to the wheels to make the robot turn left and right by remote control, while remaining balanced?

  • The Segway program is a basic PID controller that uses the color sensor's reading to determine an "error" in its position and then tries to correct for it.  If the robot starts not quite balanced, it will drive steadily in one direction, or perhaps even accelerate in that direction and then fall.  The Segway program does not consider the robot's forward/backward position when determining the "error" for the PID controller.  Can you imagine modifying the error calculation to use the rotation sensor of one of the drive motors to add an error factor that increases as the robot wanders away from its starting point?  Can the controller use this to keep the robot close to its starting point instead of wandering away?  Will this affect its ability to stay balanced?


"Segway" is a registered trademark of Segway, Inc.

Home     Projects     Help     Contacts

2007-2011 by Dave Parker.  All rights reserved. 
All project designs, images, and programs are protected by copyright.  Please see the usage policy.