I am part of my College team which is planning to enter a Mars Rover Challenge. In the point of view of a programmer, where should I start? I know C is the main language NASA used for their Rover and I have a basic understanding of it. Plus, how much should I look into the RTOS part for making a rover?

Any books/links to this topic would be greatly appreciated.


1 Answer 1


Ravi - This is a great question. So many great ideas stop simply because we don't know how to kick things off. I'll try to list a few options below for each of your questions so I don't sound like I'm selling one method or product.

Your question is at a very high level, so I'll try to point you to some great resources; if I went too deep, I'd have a novel for you - and there is no reason to recreate the wheel. Your (compound) question also allows for a lot of subjective opinion - I'll try to keep my answer as objective as possible. As a reference for when I inject my opinion, my 3-person university senior design team built an autonomous firefighting robot for RoboGames (A worldwide competition held annually near San Francisco, CA) and took 2nd place - not bragging, as we didn't win the gold, but we were in the same boat as you when we started: "where the heck do we even start?!?"

Where to Start

Planning is integral - the more time you spend here, the less money and frustration you waste later on, so again I reiterate that you have a great question here.
There are a LOT of getting started books/resources out there - it is so helpful it can be overwhelming and may actually seem like it adds to the confusion.

  • EDX.org - this is an amazing site that offers FREE full college courses on almost every course of knowledge from schools like MIT, Harvard, UC Berkley, etc - and its constantly adding new classes. Search 'Robot' or 'Embedded' for a dozen classes. Here are a couple EDX classes (Class 1 / Class 2) that are using a $50 dev board and showing you how to program the microcontroller and interface with sensors. (If you buy the board, you are already on your way just watching the videos and following along with the exercises).
  • RobotPark - A great site - just follow the links for 'learn' and 'design.'
  • FreeBookSpot - This site has a WEALTH of free ebook links on all topics. Search 'microcontrollers' or 'robot' to be greeted with over a hundred good resources. Look for beginner/getting started titles. (The main options will be PIC or Arduino - more on that to come). Almost all of these books offer step-by-step getting started demos and code samples. (This site sometimes updates their domain, so if this link is broken, search for 'freebookspot' on your favorite search engine).
  • Since this is a college project - I'd hit up a professor that teaches micro-controllers/robotics.


Some feel this is one of the more important decisions, others feel it is one of the least. If you pick up a class or book from the above section, it will most likely already define what dev board, language and programming IDE you should use for it's code samples.

As far as languages to use, here are some available options:

  • C - C is a great language that enables one of the widest range of micro-controllers to interface with (assembly language is the probably the widest, but has a larger learning curve and can add to development times). It is also more respected in the engineering community than the other options I will list below. Since you are a student, MicroChip offers you a free MPLab dev environment with C compiler for PIC programming.
  • Arduino - Seen as a quicker/easier option to use when getting started with a trade off that you are more limited in hardware (there are many that would argue this point - or that it doesn't matter). Arduino boards (and shields) are relatively cheap and easy to pick up from Amazon/SparkFun/etc. Here is a great intro on SparkFun's site for Arduino.
  • C#.NET - Many find C# extremely easy to pick up and use, and is a great fully-functional alternate option; it is also another free option, as it uses Microsoft's free libraries/IDE. Check out [Netduino's] site for more information.
  • Raspberry PI - a dev board with many online resources that easily allows linux to be loaded on it (Not a language, but I list it here as an easy option for using an OS on a dev board).


RTOS (Real Time OS) enables you to have a lot of power over processing data as it comes in without buffering. I found in academia, real time OS got a lot of interest from professors, but there are very few applications where I needed it for a rover. A good system of interrupts is usually more than adequate for prioritizing processor time for your different systems. I hope I'm not upsetting your professor/adviser if this is on their agenda - it is definitely a fun intellectual exercise (and has its uses); however, it can add unnecessary time and limit your hardware choices by forcing the use of an OS (real time or not).

Buying Parts

When you get started, sites like SparkFun and RobotShop offer great options and kits to make life easier. Amazon may even sell some of the same dev boards cheaper. If you need to get down to fine granularity and want the more advanced options, mouser and digikey are a great option.

Wrapping it up with a subjective opinion

Take it or leave it - but I'll offer you the advice I'd give myself if I was starting over again. See if you can get in a micro-controller / embedded system class at your university if offered as early as possible - this gives you access to a professor or TA that is yours for all your questions (use the heck out of them!). Visit the EDX site and start watching the free lecture / lab videos to see if you like the hardware/software in their demos/examples - if not, look at the free book site and find platform that interests you and run with it). Expect to run into overwhelming frustration when things that look correct don't go right. And keep up on this robotics stack exchange forum (among others) to keep getting fresh ideas and finding better ways of doing things.


Not the answer you're looking for? Browse other questions tagged or ask your own question.