Multi-mode Autonomous Robot

I am working on putting together a fairly in-depth robot project. I want to go ahead and plan to make sure that the controller I use will have the capability to accomplish everything from the beginning.

What I would like to know is whether or not the Arduino Uno can do what I plan.

My goal is to have a 4 position toggle to run different modes.

1) PC controlled over wifi 2) Gaming controller or phone app over bluetooth 3) Autonomous follow with basic object collision avoidance 4) Stationary voice/sound activated actions/noises

Yes I realize this is complex. Yes I have almost 10 years of robot building experience. No I have never worked with the Arduino before. My goal is to build 1 mode at a time expanding on what I have already done.

Is it possible? What basic controller parts/shields would you recommend for each mode?


Is it possible?

Of course it is possible. Whether the Arduino is capable, or not, remains to be seen.

Connecting a WiFi shield and a voice recognition shield at the same time may, or may not, be possible. It would depend on whether there are pin conflicts that can not be worked out.

Whether there is enough memory to deal with all the modes, or not, depends on which Arduino you choose.

Arduino could be a great choice to read analog sensor values, and use GPIO to control motors, led's and so on. Ive build a similar robot and I had some problems with Arduino UNO, FIO, and MEGA: I was running out of RAM. I was able to pull everything off with arduino DUE. DUE however is a fairly new board so there are some annoying issues which require workarounds. Also, some libraries are incompatible with arduino DUE

You may want to consider using a Raspberry PI and use it as a main brain which connects to wifi and does most of the processing. You can link the arduino to PI and use arduino as your ADC (pi has no analog pins) and to write PWM.

You can also use multiple arduino boards talking to each other with UART or SPI if you find yourself running out of memory.

I had considered going with a Raspberry Pi to control the Arduino. I had also considered having 4 independent Arduinos, 1 for each mode.

I was just wondering if anyone had undertaken this scale of a project with a single Arduino.

Any recommendations are appreciated.

The main limitation you will hit with something like the Uno is the number of wires available to drive motors, sense collisions and whatever. The higher-level communications will be done through a bus like I2C, SPI or Serial.

You need to plan out the system and work out what motor shields and sensors you have, what pins they use and what pins are left over for communication. Then you can look at your communication shields (WIFI, bluetooth etc) and check that they can co-exist. Depending on the circumstances, it may be better if they use different hardware interfaces or it may be better if they all use one SPI bus.

If you then try to write a test sketch with all of those motor, sensor and comms libraries loaded, it's unlikely to fit into a UNO. A little bit of work can make it all fit but user-interface code really chews through the limited flash memory available so something that 'works' doesn't do anything useful. A MEGA or DUE would be more likely to be able to fit everything without too much effort.

Once you've got each motor, sensor and comms working individually, you need to step back and plan out your program. It seems like you will need a low-level motor driver code underneath a simple command structure like "turn left" and then the different communications all interface to that same command structure.

Any recommendations are appreciated.

You probably need to get a couple of the below $4 UNOs and start testing the various parts of your project.

I'd try to organize/implement all in several layers. The bottom (physical) layer handles the actuators, based on input (commands, parameters). Next comes linear command input from PC or RC. Then the specific input modules for various protocols (PC, remote console, speech...). The feedback steering module, based on sensor input, can operate in autonomous mode, based on a fixed goal, or again based on commands indicating one of multiple goals.

Then e.g. speech recognition can be implemented on a dedicated module, additional controller, or PC, with the only requirement that it sends commands in an already implemented protocol. In practice speech recognition should be physically separated from the noisy and vibrating robot actuators.

What about using a Yun which has built-in WiFi and doing most of the programming on the Linux side?


Robin2: What about using a Yun which has built-in WiFi and doing most of the programming on the Linux side?

Would the Yun be able to accomplish everything I needed?

CountryNerd: Would the Yun be able to accomplish everything I needed?

I think so. That's why I suggested it.

You need to read the Yun specs carefully and decide for yourself.

You might need a major rethink about the project to get the ideal division of the work between the Linux and the Arduino side. Personally I like to do as little as possible on the Arduino and leave all the heavy lifting to Linux - whether on my laptop or elsewhere.

You may be interested in develop on PC deploy on Yun