views:

169

answers:

3

I'm a software developer with a Microsoft Web development background. As a matter of pure interest and intrigue, I'd love to learn more about what goes into making autonomous vehicles or car technology in general (adaptive cruise control, self parking, etc).

Does anyone here have past experience with this sort of technology, or have a recommended set of books, website, development frameworks, open source projects, etc. that would be useful?

Thanks!

**Edit - Including some responses I got from various DARPA teams via email:

Aaron from Cornell wrote:

Check out http://code.google.com/p/cornell-urban-challenge/

Mike from Stanford wrote:

In terms of getting into robotics, there are a couple of open source robotics toolkits on the web (Player/Stage, CARMEN, Willow Garages robot OS, microsofts robot toolkit) that might be worth investigating. These aren't transportation specific, however. There are plenty of scientific papers about how the different DARPA teams approached autonomous driving. For that I would suggest the Journal of Field Robotics. They had several issues devoted to both the Grand Challenge and Urban Challenge. Finally, if there is another competition, definitely look for a nearby team and volunteer. For both races we had a couple of people that weren't from the university but were willing to work hard and contribute.

John from Osh Kosh wrote:

For books etc, start here: http://www.amazon.com/s/ref=nb_sb_ss_i_3_5?url=search-alias%3Daps&field-keywords=darpa+urban+challenge&sprefix=DARPA

There is also a lot of literature on the web, such as Google Scholar, although most of the whitepapers you will find are "researchy", and don't dive into the coding aspects too much. You may want to consider joining the IEEE Intelligent Transportation Systems Society; they publish whitepapers on all manner of research and applied technologies.

We used C++ on Linux machines for sensor processing, and C# on Windows machines for the autonomy programming.

Although I've not used this myself, here is a link to an SDK by some people at Stanford University. http://kartorobotics.com/

Good luck!

+1  A: 

Check the archives of GPS World for some high-level stuff. Do a search for "DARPA" to pull up some articles for the Urban and Grand Challenges.

John at CashCommons
+1  A: 

Sensor data (like Project Natal for the XBOX) and A.I. neural nets that detect terrain features and classify them with a Bayesian filter using mostly C and inline assembler. Sure, there's GPS and all that, but GPS, even the military GPS is crap for real-time decision making. I would look into facial recognition code, like Intel's OpenCV library, and speech recognition, like VoxForge, as they deal with visual object detection (spacial) and machine learning (probabilistic models), respectively. Knowledge of the Arduino architecture will allow simple coding to transfer commands to physical actions of micro-motors controlling the vehicle. After that it's just a ton of debugging.

aaa
+4  A: 

I work with autonomous rovers at all levels (mechanical, electronics and software) and it is a lot of work.

At the mechanical level, you need to create or retrofit a mobile platform in order for that to accept automation. I will post my experiences with one of my projects to embody the discussion.

My project is based on a small (100cc) gasoline ATV. In the mechanical phase I had to prepare the ATV to receive all the devices for the automation. For example, cut the handlebars, install pulleys, make metal brackets to install servo motors, install potentiometers on the handlebar axis to close the steering control loop, etc.

Then you have to do some research and specify the motors for automation. For example, we had to do some field tests to determine what is the force that we (humans) apply to the handlebar to steer the ATV in several situations and what is the angular rate of the steering. With that information, you need to find a motor and gearbox that will allow to mimic that sort of movement.

Then comes one layer above, the electronics for control. We chose to buy motor controllers off the shelf. Basically you give a command (often a serial command) containing either a reference speed or (in our case) a reference position for the servo motors. Obviously we had several motors to control. Steering, front brakes, rear brakes, gear shifting, throttle.

Then we created the software running on the onboard computer to control the motor controllers. At this point we had a mobile robot that we could drive using a a remote computer via WiFi, but not autonomous yet.

Next phase was installing, acquiring and processing the signal from sensors. We had 2 GPS units, accelerometers, gyroscopes and magnetometers. We received input from all these sensors and created an estimate of position vector (Euler angles), a dynamic vector (velocity, acceleration) and an estimate of current position given a reference frame (map). Nowadays, we would opt to buy an integrated IMU (inertial measurement unit) instead of having to work on our own and worry with things like temperature compensation and Kalman filter design.

When you have all these things done, then you need to process all that information and feed the actuation system with the results, given the pre-defined goal (go from point A to point B for example). We used Behavior Based Robotics implemented in C#. You can program these small behaviors in layers. For example, you create behaviors like BehBatteryLow that will sound an alarm if battery level drops below a threshold. This are low level behaviors that might get encompassed by higher level behaviors like BehAvoidObstacle or BehNavigateToWaypoint. Behaviors may be conflicting, so you need things like Arbiters.

"Behavior Based Robotics" by Ronald C. Arkin is a good starting point, but by googling some keywords from my post you might get to some interesting places as well.

Cheers and good luck!

Padu Merloti