semi-autonomous systems

with bluetooth, an NXT robot can be controlled yet still be autonomous.

Basically, the robot polls the bluetooth however-many times per second (4 is a good number)

It then makes decisions about what to do based on:
(a) the data it pulled in from the bluetooth mailboxes
(b) local sensor data
(c) local variables or anything else the program wants to work with

I've written elsewhere about this, but i'll repeat it here - a great example of this is using a sonar sensor to throttle down the robot, even when the RC commands are telling it to run into a wall. If you set it up right, the robot will go slower and slower the closer it gets to the wall. Thus, sensor-input and other platform-local conditions can be used to override or mitigate the RC "commands".