Using serial communications you can easily pass messages back and forth - I'd be tempted to use Bluetooth, or you could use an Xbee/Zigbee solution. But I'd be wary of getting the laptop to do things like motor control simply because of the latency issues. It would be better to give the robot as much autonomous functionality as possible and use the laptop for higher-level functions. For example, you might have a quasi-AI program running on the laptop that decides that under circumstances A, B and C, the robot needs to go into 'flight mode' or 'attack mode'. And the laptop communicates this to the robot. But it's left to the robot's microcontroller to convert that high-level command into, say, motor control.
Similarly, you'll probably want as much processing of sensor inputs as possible to be performed on the robot, and for some reponses (eg, for simple obstacle avoidance) to be carried out by the microcontroller, simply to achieve responsiveness. Then abstract out high-level functions (like mapping, say) to the laptop.