Arduino is limited in complexity, but not in size. The limits happen as you try to add more and more peripherals onto your robot. Two things can happen. 1, you run out of pins to connect things too, and 2, you run out of free processing time so your timing gets more and more off, possibly causing problems. Both are easy to work around if you plan ahead and write good code. As for interfacing, a lot of that can be handled offsite from the robot, in your interface, and then communicated to the robot through something simple like a serial interface. The only thing I would not recommend trying is images and video. The Arduino just doesn't have enough memory or processing power to do anything useful with those unless it is a very small image over a very long period of time. Images are just too much data at once.