Read Me!
If you have been linked to this page, it simply means that you have asked a
Frequently Asked Question. The answer to your question can be found below, along
with many other very commonly asked questions.

Please don't feel offended for being sent this link. This is simply a way to reduce
the workload of Admin and others who want to help you with your question.

And remember, just because your question may not be here does not mean it hasn't already
been asked. Please search this website before
asking any questions in the robot forum! Also, to help us better help
you, make sure you read this post before asking any questions.

Questions:

Can you give me detailed instructions on how to build a robot from scratch?
It is entirely a myth that you can build a robot from 'scratch.' You cannot.
What you really want to do is build a custom robot, instead of buying a kit off the shelf, right?
What we recommend you to do is build the $50 Robot.
This step-by-step robot tutorial will help you make a complete robot, custom to your
design. This tutorial will teach you more than any kit ever could, and give you more
'I built it myself' pride, too.

Can I scrap my old computer and other electronics to make a robot?
Yes and no. BEAM robots
can be made 100% from common scrapped electronics.
However, you cannot make a programmable robot 100% from scrapped electronics.
Probably not even 25%. Why is this? Because to program, you need such things as a
microcontroller and a special programmer for it.
You also will probably want to use servos, and some
type of robot sensor that you just won't have otherwise.
But there are things you can scrap to save you money, such as batteries, capacitors,
and various hardware components (screws, wheels, casings, wiring). Check
these twoposts for more ideas, and to suggest ideas of your own.

I want to make a robot that's fast and strong, what motor should I use?
Well it depends on how you define 'fast' and 'strong'. Like all engineering problems,
you cannot solve them with subjective questions. You need to first decide quantitatively how fast
you want your robot to go, and how strong your robot needs to be. Put these exact
numbers into an equation, and the math will tell you what motor can handle your exact specs.
Remember, if you guess the answer, you could find yourself having spent wasted money on
a motor that is way too weak. Now before you panic, don't worry I have you covered on the math.
First, read my robot dynamics tutorial, then head over
to my robot motor factor calculator to do all the math for you.

What is the best microcontroller?
A similar question would be, what is the best car? Well that depends on a lot!
Microcontrollers have many different features. Some features
you may need, others you won't, depending on what your robot does. If you don't know what features you plan
to use, its really hard to answer this question. There are several points you need to consider. For example,
is there a lot of source code already available on the web, or does hardly anyone use that particular microcontroller type?
How much are you willing to pay? Is there a power bus on it, or do you need to do extra wiring?
Does it have a built in programmer or do you need to buy one separately?
Then you also need to consider the brand, the most common being PIC and AVR.
I 'grew up' using PIC's, as they are (were?) really popular and have tons of available code. But compiling
software for PIC's range in the $100's. I have since moved to AVR, as compiling software is free,
the hardware is better, and they are starting to become really popular. My $50 Robot
is made using AVR, so that could save you time figuring it out. I recommend
browsing for available microcontrollers
and reading up on the features before you make your decision.

I personally wasn't happy with the microcontrollers available on the market, so I invented my own
AVR-based Axon (for sale). This is what I currently use on all my latest robots.

What is the best language to learn for programming robots?
The most common languages that robots are programmed in is C, C++, Java, BASIC, Python, XML, Lisp, and Assembly.
In most languages, the concepts are exactly the same, its the syntax that is different. If you learn one
of the basic languages, swapping to a different language will not be so hard. The programming language you need to use is
determined by the compilers available for the hardware you wish to use. For example, if you want to
program your robot in Java for a microcontroller, you need a compiler that converts Java to machine code
specifically for that EXACT microcontroller. The most useful language, and the one I recommend for programming
microcontrollers, is C. C can be considered the default robot language, and should be the one you learn to use.
All source code I publish on this site will be in C.

What's the difference between a servo and a motor?
A servo is a DC motor
but with tons of extra goodies, such as feedback control and a motor driver.
I know what you are thinking, "I want a basic motor because it is cheaper than a servo."
But if you want to use a basic motor for a robot, you MUST purchase and wire up a motor driver
separately. Servos are much easier to use than a basic motor as this circuitry is already done for you, and at a very
affordable price.

How do I control a DC motor?
Search for ESC, motor driver, and motor controller. These devices, all the same but under different names,
take in a low current low voltage signal from your remote control,
computer, or microcontroller output, and convert
it to a high voltage high current signal for your DC motor.
While you are at it, look up PWM too - a method of sending signals to control your motor.

Why is my circuit not working?
You would be amazed how many people ask this question without even posting a schematic or telling us
what the circuit is supposed to do! 90% of the time these following steps will fix your circuit:

First, check to make sure all of your grounds are common.
If you have two circuits (say one for a sensor, and another for the microcontroller), they usually
need a reference voltage so that they can work together. This would be referred to as grounding.
Forgetting to ground circuits is a very common (and the most likely) mistake among beginners, so
its why you often read 'don't forget to ground your circuit!'
It is called 'ground' because back in the old days, dirt (earth) was considered the reference voltage.

Check voltages all over your circuit. Get out your multimeter and verify that voltages are what you think they
are. Check the battery voltage (to make sure its charged), check the voltage to your microcontroller, and
the voltage coming out of your sensors. Make sure no component is receiving huge amounts of current or is
overheating. Check for shorts. If your circuit isn't working, this will tell you exactly WHERE the problem is.
Don't know what the voltages should be? Check the component datasheets and use Ohm's law =P

Lastly, make sure your battery is fully charged and can output the required current you need. For example,
don't use a cheap 9V battery to power your motors.

How do I give my robot perfect positioning?
You want your robot to move a certain distance and have perfect positioning with zero error.
You want your robot to just use encoders with zero drift. You want your robot arm to rotate
with the gripper moving to an exact spot. Well to be frank, its impossible! You will
never ever ever have 'perfect'. Error is something that will always exist - what, did you think
your robot can actually align itself down to the very atom?

So what you really need to ask yourself is, 'what is acceptable error?' 10%? 5%? 1%?
Of course we all want .000001%, but that just isn't going to happen. Why is this? Well all
sensors have some particular resolution, meaning at some point it can only sense some minimum
amount of change. If the change is below that minimum, your robot will collect error. And over time,
this error can add up to be rather huge.

For example, lets say your robot car has a 1% error. If it drives 100 miles, the error will be 1 mile!
Considering a road is only a few meters wide, you got a big problem there =P

Why can't you have .0000001% error? Well, the less error a sensor has, the more expensive it becomes
and the more difficult it is to use. Computationally, your robot would have to store numbers with that many
decimal places, too - a huge drain of memory and processing power. If your acceptable error is high, like 20%
or even 90%, you can save quite a lot of time and money. But it really depends on your application.

For example, what if your robot arm had to position a ball into a basket that's 1 foot wide. If the arm
misses by ~3 inches, the ball is still going to go in the basket. So your acceptable error in this case would
be 3 inches. No point in spending tons of money and effort in getting .00001 inch accuracy!

So if error can't be avoided, how can robots ever work? Well, you need to use multiple sensors: local
sensors and global sensors. Local sensors are encoders, range finders, cameras, etc. They can keep track
in high resolution what's happening to your robot - but drift with error. Global sensors are a compass,
GPS, pressure sensors, etc. Global sensors help your robot navigate because the error *never* drifts - however, the resolution
tends to be fairly poor. Ideally, you'd use local sensors for most robot activities, and global sensors
for comparison to detect and minimize drift.

For example, if your 1% error robot car is driving around with GPS, the GPS error won't go above more than a few
dozen meters. The local sensors keep the robot on the road, and the global sensor detects and eliminates drift. A
Kalman filter is a common technique to combine sensor data.

How do I attach a camera to my robot?
Everyone wants a camera on their robot. But don't kid yourself, camera vision
is *hard*. If you've never built a robot before, don't even think about it.
But at some point you're going to be up for the challenge and I'm here to help you.
First, read all about computer vision basics,
Then when you're ready, let's continue on to go over your options:

The first option is using a camera with a microcontroller. But a microcontroller alone
won't have the processing power to do vision. Instead, you need to buy a camera that does
dedicated onboard image processing. There are three on the market, the
CMUcam (three versions), the
AVRcam,
and the Blackfin. Prices range
from about $100 to $300, so they aren't for tight budgets. Your microcontroller
will also require an available UART for interfacing
(check the datasheet).

The CMUcam has been around the longest, and in fact I've used it on two of my robots:
Taurus2 and Pikachu.
I've posted Taurus2 source code to interface the original CMUcam with the PIC16F877. My biggest
complaint about the original CMUcam is a firmware bug that causes it to crash if the blue color
maxes out (such as in bright sunlight) [download bug error].
The CMUcam2 and CMUcam3 are more 'open source' and come with more
features, but are more expensive. I haven't used the newest versions, though. The creator
of the CMUcam, at least a few years ago, answered my emails and helped me through my interfacing troubles.

The AVRcam, in terms of features, is comparable to the CMUcam2. I almost ended up buying it too,
but despite it being 'open source', there is no actual open source community on the web for it.
I couldn't find any interface code for it, the AVRcam forum blocks new members, and the creator
ignores my emails. No support, therefore I passed it up.

The Blackfin is the newest of the bunch, and the one I'm currently using on my
Experimental Robot Platform. I've also posted source code to
interface the Blackfin with my Axon microcontroller. It's still lacking
a bit in features and documentation as of this writing, but the creator is actively developing and improving it daily.
He is also *very* responsive in terms of support. If you post a question in the
SoR Forum, he'll be quick to answer it.

Your second option is to interface a webcam with your laptop/PC. Since you probably
own both of these already, this is your cheapest option. But you might not want to
put your laptop on a robot that crashes into walls . . . Just download
RoboRealm and you're set to go!

Your last option, the easiest of the three, is best for
remote control robots. In this option, you buy
a wireless camera (you can find them really cheap on
EBay).
Then using the receiver that came with the camera, attach it to an old analog TV for viewing. Now that
TV's are soon to be legally required to be digital, there will be tons of analog types available
ultra cheap.

DC motors on the other hand cannot operate directly from a microcontroller. You'll need to
buy/make a motor driver, buy/attach your own gears (yes, you need gears for a motor to work properly),
wire everything up to a circuit board (servos are plug-n-play), and then program PWM. And unlike
with a servo, this method will require more than one I/O pin.

If you are making the $50 Robot, I highly recommend
using servos because they are cheaper and much simpler to use - don't be fooled into
the 'I only need a DC motor' trap!