Our gear shifting was simply a servo over the tranmission. We stuck screws in the white triangle thing (sorry, I don't know what it's called

) so that when the servo turned it would move the metal thing (once again...

) that shifted gears in the transmission. Then, we wrote a program to make the motors move backwards and forwards really quickly (not even long enough to move the robot) to set the gears in place. The program also does not allow shifting while the robot is moving and doesn't allow moving while the robot is shifting (which takes about 3/4 sec). It worked really well and I don't think we ever grinded the gears (maybe once or twice while we were fiddling around with the program).
What's even better was it was completely designed and programmed by us (the students). The engineers were surprised one day to find that our robot could shift, which turned out was incredibly important to us (we always balanced in low gear).