Let's Make Robots!

What "Brain" should I chose for my robot?

I am considering a more advanced  "brain" for my Service Droid robot. I know I could use the computer to do all the advanced computing and relay commands to the robot, but if possible, I would like to have an integrated system. So far, I see 3 variants:

1. Raspberry Pi + webcam (+ screen?)
2. Android phone with integrated front camera
3. Android tablet (4.3" screen) + OTG adapter + webcam

At the moment, I do not have any of them, although I have a Galaxy S II Android 4 phone I could try to use before I commit to any new purchases. So, let's talk about each variant.

1. I don't know much about the Ras-Pi, other than it runs Linux and has some GPIO pins available, as well as I2C and USB interfaces ready to go. But this may become the most expensive route, because I would like to have a screen to do different stuff and in the end as a "face" to my robot. The Pi should either have WiFi integrated or I would need to add an adaptor. Ras-Pi is a modular system, so when you need to add lots of modules it becomes pretty expensive.

2. I found a 3.5" Android phone for around $50 on DX. I am not sure I could connect a webcam to an Android phone, but I could use the integrated front (screen side) camera. But it will require me to install the phone on the head, which will add some weight. The phone has integrated Bluetooth, so I could use that to control the Arduino on the robot. Cheap does not mean powerfull, but even a cheap phone should have comparable performance with the Ras-Pi.

3. I saw a 4.3" tablet on DX for under $50. It does not have any integrated cameras, but there is another tablet (pink) that has dual 0.3k cameras. These tablets do not have Bluetooth. But, I read on the forums that with an OTG cable adapter, you can connect almost anything to the tablet, so in theory, I could use a USB (powered!) hub after the OTG adaptor and connect a webcam and the Arduino directly. This would allow me to install the tablet on the slanted "chest" plate of the robot and the webcam on the head, along with a US sensor. Also, a direct cable connect to the Arduino eliminates the lag from the Bluetooth connection. 

Since I will have to learn how to program any of these devices, or at least to mod some other's people code to adapt it to my robot, I would like to know which will be easier, Linux or Android and then what language, Phyton, Processing, other?

What do I want to do with the brain software. I want to have some mapping abilities, voice recognition + TTS, vision recognition to be able to recognize people and objects, use the screen to display moods andother useful information, debugging, etc. I would probably use the WiFi to update the code, to have a video feed, and to have remote control. The processing power will probably not be enough in any of the variants for all of this stuff, so I'll do what I can.

That being said, I need advice on which variant will be easier to learn and develop further. Thanks.

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.

I have used multiple Arduinos on my hexapods. At first I tried communicating between them using I2C and had all sorts of weird servo trouble. The reason is the Arduino wire library that handles I2C. I then swtiched to software serial and had the same problem. In the end I used hardware serial and everything worked fine. I will use a Red Back Spider contoller (ATmega2560) on my service droid to do the low level stuff (4 motors/encoders + servos). An ATmega2560 has 4 hardware serial ports. I'll use one to talk to a raspberryPi.

I solved the problem with the I2C interrupts affecting the servos. All you do is have the interrupt set a flag. That way your main code handles the I2C data transfer which can then be interrupted by the servo timer interrupt.

Check my attached code for OB1 here: http://letsmakerobots.com/node/39492

 

 

Not that I am one to emulate, but on my son's Service Droid my plan is to use a RasPi for the web server, machine vision, TTS etc and then use a Dagu Mini Driver as the remote IO to manage the fiddly bits like encoders etc.  Oddbot kindly posted code to go I2C to a Dagu mini driver so all you have to do is send a packet of info down and back (20 ints or something like that).  The good news about this approach is that Mr. Oddbot wrote all the code for the Mini Driver so all you have to do is learn to program one processor and make it do I2C. 

As Tinhead suggests, you could do it all in Java and then Blue Tooth or Wi Fi to control the robot.   The only problem with that approach is the translation to the final destination will require rework and effort.  Nothing is easy with computers and is a straight shot over.  You can come close sometimes, but nothing is perfect. I have the T-Shirt several times from projects I was involved in that prove that point.

Whatever you do, I look forward to seeing what you can come up with.  I can't wait to see what my 15 year old boy comes up with.  He is going to be over the moon when he gets his Service Droid for Christmas.  I can't wait to give it to him!

Regards,

Bill

 

 

The latest version of the assembly manual can be downloaded from here:
https://drive.google.com/file/d/0B__O096vyVYqNWMzUUtoNkd6WHc/edit?usp=sharing

 

Thanks for your input Bill! I'm glad you got a SD for your kid, I'm sure he'll love it! I have to give you a bit of a warning, you'll have to help your son to assemble it, sometimes it's pretty hard to get all the parts correctly. Also, you say about the Mini Driver code that OddBot posted. While in theory it can work, in practice the servos twitch because there are too many interrupts messing with the servo routine. Some years ago I did the same thing on my MiniEric robot. I have started with a Roboduino and 7 servos plus 2 continuous rotation ones and all worked fine. Then I decided to use geared motors with encoders to be able to keep track of traveled distance and do precise turns. But the encoder interrupts started to mess the servo routine and the servos started to twitch badly. So, as OddBot just did, I used one Arduino board for just the motors and encoders, another for the servos, another for speech and another as the main brain and display. All connected through the I2C interface. OddBot left the MiniDriver take care of the motors and encoders and moved the servos to the Spider controller, that also reads all the sensors and waits for RC control through IR and he will add Bluetooth later so the robot will get speech through his Android phone. So, make sure you have arround a second controller for the robot, then the Ras-Pi board as the main brain. Good luck with your assembly! Show us what you did!

Cheers!

1. Build your hardware 

2. Use PC + arduino first to get the feel of what your brain needs to do 

3. Once you have stuff working as you want on the PC using MRL if that's what you want then you can think on how to get stuff over to the bot as MRL is java and that runs pretty much on anything.

I would not decide on buying anything until you're done with the step 3 as before that you don't really know what your load on the 'brain' will be. Once you have the hardware figured out GroG, me or others can help with the software side of things.

 

Thanks TH, that is the best idea so far! I'll set up a Bluetooth connection to control the robot by the PC or my phone. I'll set up MRL on the PC and work on the logic and try to get some results before I'll decide where to go further. Sounds good!

I installed today the battery and a charging plug on the robot, next I'll add a second controller and an I2C cable and the Bluetooth module. Also a few sensors to the gripers and head. I still don't have a head model, perhaps I'll build one later when I"ll get the 3D printer.

I just put some simple IR sensors in OB1's grippers for aligning the gripper with an object. I posted schematics, photos etc. Have a look.

 

I talked with Grog last night about what SBC works best with his MRL and he said I have better chances with the Ras-Pi or the BB, but the best so far was the Odroid (not sure yet which model, but they are expensive quad core boards with lots of RAM). The test is done with the new OpenCV 2.4.6 I think.

Option #4.

Why not go with a second hand 10'' netbook from Ebay? You can get them for less than 50 bucks and you will have everything you need. You can interface it with an Arduino and let it do the heavy processing including using it's webcam and screen as well keyboard.