views:

1015

answers:

12

I've been a Win32 programmer for the last 8 years now and as I see my mid-life crisis rapidly approaching I begin to wonder: What I have really accomplished? and am I really happy in my career and what do I really want to be doing in my work life?

I can see Bill Gates' vision of a future with robots in the home just like how a large percentage (most?) of western homes have a computer today. I think this could be an interesting field, especially in programming Artificial Intelligence.

So I'd like to know, how whould a software programmer go about learning and getting hired in the field of robotics?

I'm aware of the MS Robotics Studio; however I'm more interested in what steps to take to pursue this as a career.

+3  A: 

It really, really depends on the company that you apply to. A lot of companies, robotics companies included, are willing to hire you if they see you as a talented developer who can learn their domain quickly. Showing that you keep up-to-date with current developments in software engineering, and having some side projects to show them that are outside your current company's domain (in your case, non-Win32) can get you a long way.

With that said, walking in with a good knowledge of configuration space and pathfinding will help a bit at a robotics company, since those are both very basic concepts in robotic movement.

MattK
+7  A: 

Robotics today can be divided into four areas. First is R&D mainly done at universities but also at some large companies. This what you read about in things like the DARPA challenge. Second are personal robots, the main player in this arena is iRobot with things like the rommba. They also are active in the third area military mobile robots. This includes UAVs. Strictly speaking many of these are not robots, but simply remote devices. The fourth and last is the largest area industrial robotics. The assembly, painting, welding, everything else robot arms used in manufacturing.

The last area is where I work. It was a strange journey to get here. My background is Avionics, but the unions killed off the jobs where I worked and I went looking for another career. I'd always been involved in automated test equipment and simply moved in to general automation. Eventually I got a job a service tech for a robot supplier, they found out I could program and here I am.

Jim C
+12  A: 

What you certainly are going to need is a much better feel for hardware. From a software perspective you'll need to understand things like interrupts and registers. You're also going to need to know at least some basic electronics like resistors, capacitors and how to read a basic schematic.

Before diving into a high-level abstraction like Robotics Studio, I'd recommend getting an embedded development kit that targets what you already know to at least make the learning curve more gentle. If you know C/C++, then there are loads of dev kits for all sorts of microcontrollers out there (I really like the PIC learning kits from CCS). If you're a VB guy, then Parallax has a great selection of BASIC Stamp stuff. If you're a C# guy, then there are .NET Micro Framework kits (with a wide array of features and prices).

The basic idea is to get a kit and learn how to do things like turn on LEDs, drive servos, etc. Get you feet wet and see if you like it and have an aptitude for it. Once you're there, you can start adding on to what you have with peripherals, more complex kits or whatever strikes your interest (including investigating the Robotics Studio deeper).

Of course there's a whole separate software side in industrial robotics with PLCs, etc. but the cost to even get into that game is high, so you'd want to attend a formal school that provides you access to robots and dev tools like RSLogix.

I've done work in both sides. I spent several years writing drivers and kernels for CE systems at a hardware OEM, so that's where I learned to read schematics, how to deal with interrupts, drivers, etc.

I've always been interested in the hobby side, so I've done work with lots of PIC stuff in my free time as well as several Micro Framework kits. Expereince there is largely from free time spent playing with those. Having a solid CE app resume and that knowledge got me the job running the CE department for the OEM.

Now I do less low-level CE work, but a lot more PLC work. That was driven by a project where we wrote a solution that interfaced the two - a CE device communicating with PLCs on a plant floor.

It was all organic to get there, but it started with an interest in writing software for handhelds (CE, PalmOS, RIM) and ended up interfacing with industrial controls on a factory floor.

ctacke
Be careful. When I see CCS, BASIC, or .NET on a resume for a real-time programming position without some real experience to balance it, I think "unskilled hobbyist," and the resume goes on the bottom of the stack.
Doug Currie
Yes, but it depends on how you bill it (and what the job is exactly). Not all robotics requires real time, and I certainly wouldn't use those to say I know real time - I'd use my CE kernel and driver work. Real-time yet again another huge subject.
ctacke
I'd say a hobbiest at least shows self-motivated interest in the subject and would end up above the software guy who'd done nothing but web work. It may end up at the bottom of the stack, but at least still in the stack that I don't pitch in the round file.
ctacke
Don't count on .NET skills getting you in the door at any company doing embedded systems. C++/C is probably going to be a requirement.
Jason S
You assume that there's no place for UI or apps at every embedded systems company, which in my experience anyway is not the case. You could get in as an apps guy, then use the fact you're in to learn the lower-level side. There's more than one path to get where he wants.
ctacke
Agreed. I need hardcore Linux developers that can write C and C++. Anything else simply won't do. There are a LOT of UI guys out there that have a lot of experience - but hardcore robotics expertise is hard to come by.
jdt141
+5  A: 

There are a number of areas of engineering here, including control theory, motion control / kinematics (figuring out joint angles + such to put a robot in a certain position that changes w/r/t time), haptics (force feedback & all that), stability control, sensors/instrumentation, datalogging, etc. etc. etc.

in most, you have to get away from thinking of programming GUIs w/ API calls and file-locking and such, and towards more embedded systems where the I/O is sensor readings and motor control commands.

I wouldn't bother with MS Robotics Studio. To be honest, you may never get into an area where controlling the robot is your main job, or if you do you may find you don't like it! The engineers doing the most cutting-edge robotics are more likely to have a background in control theory (Z-transforms, feedback loops, etc) than software engineering.

I would say most software programmers in robotics/mechatronics are probably working as part of a team in a domain where more attention is paid to things like:

  • Timing. (Look into real-time systems)
  • Dealing with peripherals (e.g. driving an analog-to-digital-converter via a SPI or I2C bus by controlling the appropriate registers in a microprocessor)
  • Debugging hooks (often you can't just single-step through a program!)
  • Good practices for signal processing. (know your math)

Otherwise it's the same stuff as programming on the PC. If you know C++, that will go far. Getting into microcontrollers is probably the best way to dive into areas that are unfamiliar with you; there are some fairly inexpensive (sub-$100) prototyping kits from companies like TI, Freescale, Microchip, Atmel, etc. -- I'd look them over and pick a project that you might find interesting to implement. Just remember that processor speeds are more likely to be in the 10-100MHz range, and for many of them, 32KB of RAM can be considered a lot of memory. :)

If you're comfortable working with stuff like that, and you have decent problem-solving skills, I would say most companies in the robotics/automation/mechatronics areas would probably be able to use your services. You don't need any real "robotics" experience, just the skills needed to work on those kind of systems.

Jason S
+1 for actually describing both the technology areas and interactions software developers and engineers in robotics applications have
Andrew Walker
+2  A: 

A class in Artificial Intelligence and Machine Learning would be one of the most obvious routes to take judging by your description.

Perhaps starting off by programming AI for simple video games (tic-tac-toe, wompus, etc) would be an excellent way to see if it's something you really want to do.

There are also competitions held around the world that high schoolers participate in. They have to build a robot to compete against other team's robots. So if they can do it, odds are, you can too. It will involve learning how to program for a microcontroller and it might cost some money to get the sensors and machinery needed.

Joe Philllips
+1  A: 

So I lucked into the field, but there's just a ton to know. You have to be multidisciplinary. Not be afraid to pick up a wrench as well as sling code or analyze a circuit on an o-scope. Its very company dependent. A good education is a must - there are very few at the firm I work at who have only a Bachelor's. A MS is almost a must.

As for the "ignore MSRS" comment, I say the opposite. Embrace it. Its a good opportunity to learn some of the basics, and gives you a "platform" to try and implement algorithms. So, if you've never written an A* or D* algorithm, you can DO that. The core concepts of asynchronous programming and message passing are key. You can do that many ways, and MS with DSS and CCR does some things very very right in my opinion.

I would agree that control theory is key. I'm learning a lot of that on the job on an almost daily basis. AI, not so much. It depends on the sub-industry.

jdt141
+2  A: 

There are two distinct aspects to robotics. There is the SW/HW/RealWorld interface (motors, sensors, A/Ds, bus protocols, etc.) that requires electrical, circuit, and mechanical knowledge. Then there is the control and planning side. This essentially requires good math and classic Computer Science knowledge (pathing algorithms, efficient structures and algorithms for large data sets, object recognition). In between is the signal processing that turns real-world data into something the control SW can use.

Decide which of those areas interests you the most. If it's the low-level RealWorld interface, buy one of the many robot / cpu dev kits (Propeller). This will force you to learn the signal processing aspect soon enough. If you want to do the high-level control, start with the MSRS and don't worry about the nastiness of real sensors yet. But, you must be very aware that the simulated sensor data you get is ideal and you won't see that in the real world. The readme's for the MSRS even warn you about that.

Either way, you'll have to learn some of all aspects but you can focus on one area if you want.

Nice to see mention of real world. The real world is noisy. The motion limits are noisy. The incremental encoders can have accumulating errors. The light and cameras have electrical analog noises, the motion is noisy. I remember one nice saying that noise actually has no amplitude (it has infinite amplitude)
RocketSurgeon
+2  A: 

If you decide to pursue this, it can be very rewarding. Not many things in my career have been as satisfying as that first time I watched a robotic machine which I programmed start to make parts.

If you are interested in the industrial side of robotics, one option is to find a small manufacturer of custom automation equipment. I got my start in a company where the whole staff - machinists, electricians, engineers, sales and management - was less than 20 people. They made machines to order that packed and assembled electronic parts. I had practically no experience, but I convinced the boss I had the ability to learn. In a shop like that, you get to do as much as you can handle. My assignments progressed over 2 years from documenting existing code up to designing and coding the control system for a million dollar automated packaging system. It wasn't a sexy robot like Asimo or those automotive welders, but I still thought it was beautiful to watch it work. Try to find a place like that - if you have at least one skill they need today to get you in the door, you'll get plenty of opportunities to gain more on the job.

I disagree with the idea that you need a formal school to learn PLC programming - if you are the type of programmer who already has several languages in your toolbox, it will be easy enough to pick up. You should know some basic electronics though - relay logic is a completely different paradigm, which doesn't make much sense if you don't know how circuits work.

One other piece of advice - don't worry about getting a job today exactly where you hope to be in the future. Just start in the general direction. It took me 15 years doing all sorts of different and interesting things before I ended up finally working in the field I studied - and the journey was as much fun as the destination.

Good luck.

AShelly
A company named DeltaTau has language for their motion controllers named PLC. I was convinced for a while that this is what they name PLC, until I realized that PLC is whole separate family of control hardware. In addition to this there are PLC chips, which are what the real PLC is (like FPGA, PAL, single-time programmable chips etc)
RocketSurgeon
+1  A: 

There are not many companies building non-military robots, so rather than give you general advice what I'd say is investigate each specific company you are interested in. Each company will have a different set of skills they are looking for. Linux and VxWorks are much more popular than Windows as a robotics OS. Most really small robots don't even have an operating system. Depending on the application, experience with networking, controls, AI, or assembly could be preferred. Familiarity with electronic hardware and debugging tools is a must; familiarity with mechanical subjects may or may not be important. You'll have to research the companies you like to determine what skills are going to impress them.

In general, because there are few colleges that offer robotics curricula, you don't need experience or a degree specific to robotics to land an interview, but people who have that will be preferred, so if you can get something on your resume, it will only help. A robotics competition, particularly if you place well, looks good, as would a significant hobby project.

If you are interested in really cutting-edge AI, I would look seriously into a PhD program. Your average robotics company is going to get ideas from the papers published at ICRA, AAAI, and the like. The few robotics companies who devote significant resources to that kind of research hire PhDs. If you want to be inventing the algorithms, ally yourself with a university.

To meet the people in the field, start by going to open lectures at a local university with a robotics program. Before and after the lecture, usually given by a PhD student about his robotics research, there is often a time to mingle. Frequently employees of robotics companies will attend these lectures. If you go to enough of these you will eventually start hearing about which companies are hiring and learn the names of people who can connect you with those openings. Many robotics companies are so small that word of mouth is often the only way to know there's an opening. Robotics competitions - particularly ones with undergraduates - are also great places to network. Volunteer on competition day and listen.

amo
+1  A: 

You don't have to work on military stuff to do robotics. There are plenty of stuff that needs to be done that is "soft real time". Just imagine all the robotics-like jobs that are out there. I bet you would find lots of interesting challenges working with autonomous household vacuum machines. Or what about all the sensors and moving bits in modern cars? Moving mirrors and seats, self-closing doors and sun-roofs, ABS/ESP, paddle-shift gear systems, GPS/Phone and stereo integration etc. I read somewhere that 60% of the cost of developing a new car is software development.

Other examples are vending machines, automated car parks, RFID logistics systems, video conferencing automation, automation of factories/manufacturing, etc, etc, etc.

Some of these tasks may seem mundane to outsiders, but they can be really exciting, challenging and rewarding for people working there. Remember that any such products you see from a company are usually the 5-10 year old low-end cheap and boring consumer stuff. The bleeding edge stuff can take several years to create and you are bound to learn cool stuff and have some fun doing it.

I suggest you find an area you find exciting and try to get an interview. For example I applied for a Cable TV decoder manufacturer. The products I knew where the normal boring stuff, but during several rounds of interviews I got to see some really cool stuff. Moving to the military high-end of the robotics/intelligence field requires some relevant experience and I know people who started out with vending machines and ended up doing military stuff. The latter is a bit more advanced and requires more debugging ;)

Good luck!

danglund
+2  A: 

Cutting Edge Robotics is more of intelligent software than sleek electronics ! Try to dig up newer arenas in Robotics (Probabilistic Robotics, Behaviour based Robotics). Try out robot simulators (KiKS (in MATLAB) ,Player Project, MobotSim), all robot simulators are supported by scripts (Python, C++, BASIC)!

Wish you all the best !

Arkapravo
A: 

How to get robotics job? Friends and their recommendations. I don't know other method, except friends. I was working for 9 years for big financial software warehouse. My friend suggested me to move to smaller company which makes robots and semiconductor/electronics manufacturing automatic machinery. I gave it a try and passed though more or less normal hiring process and started 100% new career from software point of view.

Now after 7 month I know how to tune the motor, P.I.D. run the machine, vision, recognition not big deal. The greatest challenge is to strike balance between sophistication you want to put into software (like frameworks, patterns) and common sense, safety and reliability. Its a fun multidisciplinary job (and higher paying) after years of being a cubicle hamster in financial farm.

RocketSurgeon