# Is Arduino suitable to be a Humanoid Robot controller?

I am not a Arduino developer here. However I would like to ask if any developer out there who have experience on the capability of Arduino, is Arduino suitable to develop a humanoid robot? Humanoid robot consists of visual camera, sensors and servos, wireless transceiver, compass, accelerometer and so on.

Correct me if I mentioned anything wrongly.

The Arduino Duemilanove only has 14 digital I/Os and six analogue inputs, and 2k SRAM maximum. It doesn't look like it could handle all those peripherals without port expansion, and it hasn't got nearly enough memory for image processing.

• however, perhaps an image processing shield exists, or could be developed, so that the Arduino would merely be doing the job of reading information from shields and commanding the invocation of certain actions from other shields Aug 26 '10 at 17:23

An Arduino on it's own has too little I/O and too little CPU power and memory. You could use multiple Arduinos (as suggested by vicatu) or use something more powerful such as the mbed (as suggested by Joby Taffey). I would suggest a hybrid of both ideas. Use a powerful processor to provide AI and overall control and use simpler microcontrollers as I/O managers. In fact I would suggest a complete hierarchy with as many layers as required with more powerful processors as you rise up through the hierarchy.

For example I have used the Gameboy Advance as the 'brains'of a robot while the I/O was managed by PIC16F84 microcontrollers. I think an ideal arrangement would be somthing as powerful as a PC (maybe a mini ITX board) or somthing like a Beagle board as the brains, a middle layer with multiple MBEDs or Zilog Z8s as sub-system managers (motion control, sensor management, some sensor preprocessing etc). and lots of small/cheap microcontrollers (Atmel/PIC/TI MSP430 etc) to manage the leg work. The upper layer can use ethernet ot USB, the lower lesvels can use RS232, I2C etc.

An advantage of this whole approach is the you can modularise your development (good for groups of friends or students). Individual modules can have better defined goals (and easier to achieve) and be complete projects in them selves. At higher levels you can concentrate on AI and overall robot control without having to worry about low level details (for example, if you can issue a command to turn the robot 45 degrees you have effectivly divided your problem in half. The higher level can concentrate on decisions on which way to turn (decision making) while a lower level controller just has to satifsy simple well defined motor comnmands from above. In a way this is modeling our robot on the way our brains work (not at a neurological level). When we decide to reach out and pick up a cup we dont have to conciously think about the mechanics of what we are doing. We could see this action as occuring at three levels:

1) High level - the decison to pick up the cup.

2) Mid level - co-ordinate motor actions and basic analysis of senory inputs.

3) Low level - perform motor action, collect sensor data.


• Your software should have a modular design, separating the high-level AI from the low-level motion control, regardless of whether those software components run on separate micros or a single micro. I suppose using separate micros would force that good design principle on the weak-minded. ;) Jan 12 '11 at 23:05
• In the context of the question the seperation is valid. There is no point in trying to write high level AI code on simple 8bit controllers, yet they are perfect as sensor interfaces and sensor data aggregators. If your robot is running on a single processor (and I've built a few based on ARM7/9) then it makes good sense anyway to have a modular design but I'm not trying to 'force' people to design things in a particular way.
– ttt
Jan 13 '11 at 16:39

You might be better off with something beefier than the Arduino. Perhaps an mbed (ARM Cortex-M3 based).

Although, even it may not have enough lines to control all those peripherals.

Like Tim Ring suggested, combining an Arduino with a more powerful device would be your best bet. Using a cheap Netbook as the brains would give you that additional power, you could even use the built in webcam as the camera, and do all of your image processing on the Netbook.

The Arduino would plug into a USB port on the netbook and could easily send and receive commands over a serial port - this way you could program all of your IO code into the Arduino and write your higher level "brain" code to run on the Netbook. For example, the Netbook could then issue commands like "Drive Forward For 2 Seconds" to the Arduino and the Arduino could control the motors to perform the task. You could ask it for the reading from the compass or GPS and the Arduino could send the value back.

You could also have your "brain" code monitoring the serial port for any data the Arduino wanted to send, for example, if it was driving forwards and a bumper sensor detected a collision, it could send a "Collision" command to the brain and the brain could decide what to do about it.

The huge benefit of using a Netbook would be the ability to display diagnostic and debug information on it's LCD. Coming from a PC prgramming background, I find debugging an Arduino with no visual feedback to be very tricky indeed.

The Arduino would get it's power from the Netbook too, meaning you only needed to supply a separate power source for the motors/servos.

Maybe an Arduino plus a whole bunch of Shields, or multiple Arduinos and multiple Shields communicating with one another (wirelessly or otherwise...). Anything is possible :)

Consider an ESMini module in conjunction with an Arduino. At 95x55mm you should have no trouble fitting it inside the torso or maybe even the head of a small humanoid robot, and it has the processing power of a low-end netbook.