# Robotics/Design Basics/What you should know

Robotics spans multiple scientific and engineering disciplines, so when you want to design a better robot you should get some basic knowledge in these fields. How much you should learn depends on how complex you want to make your robot. To give an example: A small tethered tabletop robot would only require some basic knowledge in electronics and programming, a shoe box sized robot would require some additional knowledge on mechanics (mostly about balance) and a large robot might even require some knowledge on solid mechanics.
This page covers the fields that are very much used in robotics. You don't need to know everything about all of these subjects, however knowing the basics of each of these fields can help in building better robots and prevent you from making (some of the) beginner's mistakes.

## Mechanics

Mechanics is about:
* How forces are transferred between the different parts of a construction.
* Where the center of gravity lies.
* Friction
* Position, speed, acceleration
* Newton's laws
* Inertia
* Material properties
Mechanics helps keeping a robot in balance. Although you could build a robot without knowing anything about mechanics, it'll help in preventing your robot from tipping over when turning, or when picking up something.
Another point where mechanics pays off are axles. On small robots you can attach the wheels directly to the output shaft of the motor. However this doesn't work well for larger robots as this puts a lot of stress on the internals of the motor. A better way is to attach the wheel to an axle, and use gears to connect the motor to the axle. Knowledge of mechanics allows you to build such constructs.
If your robot is a small line follower almost any building material will work. However if your robot weighs a few kilos, something sturdier than cardboard and soda sippers is appropriate. And if your robot is human size you should consider metal and/or composite construction.
See Theoretical Mechanics for an introduction in this field.
the "Theoretical Mechanics" is just started, so there isn't much to read just yet.

## Electronics

Electronics is about:
* Electronic Components
* Analog Circuits
* Digital Logic
* MicroControllers
Electronics is something you can't go without (unless you want to build a complete mechanical robot or use pneumatics for control). Today there are plenty of books covering basic electronics (See Electronics).

## Programming

Computer programming is about:
* Control structures (sequence, selection, iteration)
* Data types (constants, variables, integer, real, string,...)
* Algorithms
* Hardware control (setting and reading registers, interrupts,...)
* logic
Anyone who has had an introductory course on programming (as they are given in American high schools) would be familiar with the first three points. The fourth point is rarely addressed in introductory courses, but is essential when programming microcontrollers. Although it might sound difficult, it can be very easy in practice (for most purposes). Much of this comes down to setting bits in a byte using simple Boolean logic, and writing this value into some register or memory location. Higher level languages like Bascom provide hardware addressing as special variables, which can be treated just like any other variable.
Microcontrollers (and processor boards) are one of the areas where using Assembly is still very valid. Memory (both RAM and program space) is very limited in these, although each new generation of microcontroller has more memory for about the same price. Many microcontrollers provide between 2K and 30K, and processor boards tend to have up to 256K. These numbers vary wildly, but are still significantly less than PCs have. However if you don't know an assembly language, most microcontroller and processor boards have high level language compilers available in many flavors (C, C++, Basic, Pascal, Fortran, etc.)
Robot programming is also about:
* The Event Loop. Most microcontrollers do not have the resources for threading. You will need to look at your robot's task a fraction of a second at a time, and choose which small action to take. What can the program do in that moment to get a little bit closer to its goal?
* Interpreting sensor data. Sensors have many ways of providing noisy or misleading information; how many types of error can you accept? Dirt in a rheostat, a broken switch, and a venetian blind flickering on a photodiode are obvious faults. How about temperature drift, non-linear response curves, or your robot seeing its own shadow?
* Decision making, or Artificial Intelligence is the art of making the right decision given the constraints of the current system.
* Motors and motion. Making motion on a robot often involves moving several motors at once, often with feedback from sensors.

## Solid Mechanics

Solid mechanics is about how forces distribute inside solid materials. Knowledge about this subject is useful because it explains how materials respond to loads. This helps to prevent using too thick or too thin materials. This isn't required for small or medium robots, but it allows to be more efficient with building materials and gives insight to why and how materials fail (break and/or deform). See [this wikibook] for a start on solid mechanics. Be warned: heavy math ahead.
Even if you have a mortal fear of math, bite through this as it gives valuable insights on how materials break and deform. No need to memorize the math, as long as you get the idea behind it.

## A.I.

Artificial Intelligence (in Robotics) is about:
* Finding the shortest way between 2,3 (or more) points
* Dealing with obstacles
* Handling new situations (machine learning)
There are many books available on AI on many different levels. This area has had a short but already fruitful history, but still has a very long way to go. AI isn't just about getting a computer to think and reason. It's more about ordering, sorting and organizing knowledge in a machine and constructing algorithms for extracting real world conclusions from these databases. A search engine like Google or Yahoo are examples of real uses of AI.
Other than pure AI books, books on how the brain works and such can provide interesting angles to AI on robots. Concepts like attention and concentration can have interesting uses in some form for integrating sensor data.

## Math

Although math is generally seen as the ultimate theoretical science, it can be one of the most important skills in many of the more advanced domains of robotics. e.g. Mechanics uses a lot of math. For simple constructs you won't need much more than high school level math, for more complicated shapes it becomes necessary to use more complex math tools like integrals. But since robotics is a very practical craft many things can be done with approximations. Math however can be very helpful in making the right approximation.

## See also

* Open hardware