Image processing autonomous robot hardware advice

I'm looking to start a new project and need some advice on the hardware to use as I have very little experience with hardware.

The goal of the project is to have an autonomous robot that can navigate independent of any outside help. So it would preferably do it's own processing but I'm open to ideas. The robot would use an ultra sonic range finder to detect objects as it moves around. When an object is detected in the robots path it will take a picture. The image will then be processed and the height of the object will be determined. The robot will then decide if it can go over the object or else it will go around it. That is the project end game.

Here is the robot kit I'm looking at: http://www.robotshop.com/eu/en/dfrobotshop-rover-v2---arduino-compatible-tracked-robot-autonomous-development-kit.html

I probably wouldn't use the infrared sensor in the project because as far as I am aware it only detects motion and that's not necessary for this project. Correct me if I'm wrong with this.

So the pivot arm will be free for the ultrasonic range finder and then the camera would be in a static position on the bot. When an object is detected the robot would turn to face the object so the camera can snap a picture.

After spending days searching for cameras I settled on this one: http://www.adafruit.com/products/397

It seems like it will do what I need but if someone knows a better camera. Perhaps with a lower resolution as I don't need a high resolution image for this as the picture just needs to give a rudimentary image for height determination.

So my question: Is this project viable with this hardware and how could I allow this to independently process an image. Could I add a micro processor to the robot for cheap that could handle it?

My contingency plan is to have the image send to my computer, processed and a command sent back to the robot saying what action to take.

If anyone has any advice or snippets of information for this kind of project do let me know as any info helps.

Where are you transmitting the image to for analysis? How much processing power do you have available, and what latency can you accept?

I'm completely new to robotics and image processing and everything in between so I'm afraid I can't answer some of your questions as I have no idea.

In regards to the image analysis am I naiive in thinking that the arduino could do it because that's what I was assuming. Otherwise I was hoping I could somehow add a micro processor onto the arduino and they could communicate.

Do you understand what AWOL is asking you with this question ?

and what latency can you accept?

Thank you for clarifying latency. I would prefer no more than 5 seconds but at least for wireless transfer I’ve read that it could take up to 20 seconds or more to send an image which isn’t really acceptable as I want it to be quick.

An Arduino is not going to be able to process an image from that camera; there is neither the memory nor speed available from the processor to do it. First of all, such an image will be rather large; secondly, it is in jpeg format from the camera. That means you would need to read the image data from the camera then transmit it via the Arduino back to some off-board computer for processing the image. It will take time to acquire and transmit such an image.

As you have noted, you are a newbie at all of this. It is understandable that you don't have the skills to understand the problems you are facing, so I am curious why you have chosen such a complex project to begin with?

It might be better for you to start with the sub-systems first (ie - get a robot base moving, get the ultrasonics working seperate from the base, get a camera working seperately - get all the subsystems working and understand them - then combine them into a working system). If you don't take that route, you may simply get extremely frustrated with a lack of progress.

Furthermore - the challenge you have set up for yourself as a newbie to robotics is -not- a trivial one in the slightest! You have to maneuver a robot, have it recognize an object, have it take a photo, process that image in some manner to somehow determine it's height (not an easy task, btw), then have enough intelligence to decide what to do based on the analysis. We haven't even got into the specifics of power sources, motor controls, etc - all of which you will need to have experience in.

I would advise you to take a step back, and look into understanding what you are trying to do, and the individual sub-systems and processes involved. You will save a lot of time, effort, and money along the way, and at some later point you will have the skills to be able to tackle this project (whether you would be successful then is anyone's conjecture - I can honestly say that I would have an interesting time solving such a system, and I've been playing with diy robotics off-and-on for over 20 years).

I'm completely new to robotics and image processing and everything in between so I'm afraid I can't answer some of your questions as I have no idea.

One of the things we are expected to do when reading a post is to weigh the request against the experience of the requester Why ? Does it make sense to expend 50 man hours trying to explain every intimate detail to a Newbie with no experience trying to build a Mars Rover ? Be realistic. Unless you have a BSEET in electronics and 5 years programming experience the chance that you will be able to build an autonomous robot is slim to none. You will however be able to build a robot that roams around but I think the word "autonomous" implies a bit more than that.

The robot would use an ultra sonic range finder to detect objects as it moves around. When an object is detected in the robots path it will take a picture. The image will then be processed and the height of the object will be determined. The robot will then decide if it can go over the object or else it will go around it. That is the project end game.

That's about as far as you're going to get with a run of the mill arduino. Using a TRE, you might be able do it all if you could program it. http://arduino.cc/en/Main/ArduinoBoardTre It has HD video and a 1 Ghz processor but I don't know how difficult it would be to transmit the image and reconstruct it at the other end. Quite frankly, I think you are under estimating the difficulty of your project objective. How much time do you have ?

It had HD video.

On top of all the difficulties that others have mentioned you can't just drive over something because it is low. For example cars can easily drive over humans lying down, but it's not a good idea.

There is a very very clever guy called Dean Kamen (inventor of the Segway). Google some of his projects - and it will probably throw up some related robotic things - there is video of a DARPA robotic walking dog somewhere on the web. They may give you some small idea of how complex autonomy is - even though sheep manage it as a matter of routine.

...R

Thank you for all of the well thought out responses. I understand that this isn't a simple project to undertake but I have until about April next year to complete it which is an ample amount of time.

I may be a newbie at robotics but I have learned a substantial amount just in the past week so I don't think this project is impossible.

The robot kit that I linked that I intend to buy comes with a manual and sample code etc. So it 'should' be fairly simple to get the robot moving and the ultra sonic range finder working to some degree. It is supposedly a beginner kit.

As for the image processing I intend to use OpenCV and am currently learning to process images. The main bulk of the project is intended to be the processing of the images.

The reason I'm going down the processing the images for height road is because I don't see another way to justify using a camera when the sensors could do everything anyway but I would like image processing to be a large part of this project so I had to find something for it to do. This may sound silly to some of you of course but I wanted to do a project that combined robotics and image processing for my own reasons.

As for the robot not being able to make it over objects. As you can see it's a sturdy little robot with tank threads and I wouldn't expect it to make it over anything bigger than a DVD box

It's looking like I'll have to give up on the independent robot idea and just have the images sent to my PC via wifi or bluetooth and processed there. It would possible make the project simpler anyway.

Thanks for the responses so far

There is one little detail you may want to consider: the definition of "autonomous". If the robot can transmit images, to a "Base" computer, then it can transmit sensor data. As far as anyone watching is concerned, there is no way to tell which processor is making the navigation decisions, the onboard processor , or the "Base" computer. It may be more convenient to have the onboard robot process sensors, send the data, and wait for a motion command response . This may free up the onboard processor for image processing. Just a thought.

Yes raschemmel, this is looking like the only route I can take with this project.

The arduino uno will have 3 tasks: 1. Control the motors 2. Receive and process sensor data 3. Trigger the camera based on sensor readings and store the image on an SD card. It will then transmit the image through bluetooth or wifi to my computer which can use OpenCV to process the image and return a command to the robot.

I think this sounds more feasible. I think I'll need two separate power sources on board to keep the camera and arduino separate.

I just hope that the arduino uno can store images with an SD

Medelwr: I just hope that the arduino uno can store images with an SD

If the total number of pixels in an image exceeds 200 or 300 then it is beyond the practical capabilities of an Arduino. Even if a decent sized image magically found its way onto an SD card it would take an Arduino far too long to send it to a PC.

Also, remember that most cameras store images as jpegs to reduce the file size. There is no possibility of an Arduino converting a bitmap to a jpeg or vice versa. An 8bit resolution 320x240 monochrome bitmap will have 76,800 bytes.

...R

but I have until about April next year to complete it which is an ample amount of time.

No it is not. Maybe for a lesser project but identifying an object at a specific range is hard.

Rather than make things complex just try and do the image processing bit on a laptop. If you get that working then you could try and put it onto a robot but I think you will find impossible to do what you want even on a laptop before next April given your starting level.