The goal and purpose of this project is building a robot with the following features:

Inexpensive. The overall investment into this project should not exceed $150

The project should reuse stuff you typically can find at home to make the price even lower

The project should be extensible, so you can add your own functionality later

The resulting robot should be capable of working in both teleoperated (like an R/C toy) and programmable modes

The project has to be fun

The project has to be educational

The project has to be easy to accomplish. Estimated effort for this project is about 8 hours, but really depends on your qualifications.

The resulting robot should be easy to program. Instead of specialized programming tools, languages and devices you can use plain Linux shell script language to control it. You can also use any other programming language you like.

Robot is basically a combination of a computer and mechanics. For computer I decided to use Linksys WRT54GL router available in most households. You can actually use any Linux-capable router for this. Since I’m using OpenWRT Linux as the robot operating system all openwrt-compatible hardware can be used for this robotics project. You can find the list of compatible devices here: http://wiki.openwrt.org/TableOfHardware.

The project description is split into a series of posts. One part per day seems to be a reasonable pace, so overall this project will take you about one weekful of evenings. Here’s the project plan:

As you can see on the video the v1 has some limitations like the camera sends video to TV, instead of browser, the robot doesn’t have sensors etc. If you those features you might want to take a look at the routerbot v2. It is more expensive, but also way more functional. Also you can use v2 OS for v1, just edit /routerbot/version.sh file and change the version to “1″. This will give you web interface for v1 too.

For reference here is the full list of commands available for the routerbot. This set is actually available in v2, but as it was mentioned before you can run OS v2 on Routerbot v1.

cmd() – executes a command in terms of SSC-32 servo controller

get_distance() – returnes the distance to the object the camera is looking at

on() – sets the line high. For instance “on 15″ can turn on lights connected to PWM 15

off() – sets the line low. For instance “off 15″ can turn off lights connected to PWM 15

camera_lights_on() – turns on the camera headlights

camera_lights_off() – turns off the camera headlights

bottom_lights_on() – turns on the bottom lights

bottom_lights_off() – turns off the bottom lights

rangefinder_on() – turns on the range finder

rangefinder_off() – turns off the rangefinder

poweroff_robot() – turns off the routerbot

reboot_robot() – reboots the routerbot

emo() – make robot express an emotion (emo shy|excited)

And, before you continue building your robot please be aware that …DISCLAIMER
… by following these instructions you acknowledge that you’re making modifications to your valuable equipment (the router) that are not approved or even imagined by the manufacturer. The modifications you’re going to make will definitely void your warranty and possibly will turn your router into a nice-looking non-functional plastic brick. By publishing the articles about turning the router into a robot I’m only sharing my personal experience. If you’re going to do similar horrible things to your router you should take full responsibility for all deep-fried processors, burned pieces of silicon, melted plastic and other side effects of your curiosity. I’m not responsible for that. That is all your fault!

I put two voltage regulators and use the save pack 9.6 for everything. Some equipment I use already have internal regulators (like the router itself), so you can feed it with almost any power source. Some equipment (like web camera device) may not have it, so I provided regulated volteage. Overall 9.6 pack works quite well, but you can replace it with a LiPo too.

Andrey,
I have a problem, I hope you can help me on this one.
I flashed my WRT54G with your routerbot firmware, but it seems to be corrupted (bad download or something). It’s working, but I can only access it via wireless (192.168.1.235), and 192.168.1.234 (LAN 1) and all of the LAN ports are not active/not reachable. I cannot reflash it via tftp because wireless is the only connection I have, once it’s active the boot_wait period already closed.
Is there any other way to reflash it?
Thanks in advance.

When router boots it waits for the tftp connection on 192.168.1.1. So what you need is login to the router wirelessly, set boot_wait to on, reboot and reflash using regular procedure (use the same 192.168.1.1 destination IP address).

Also there is another way to flash the router. Next to the serial interface there is JTAG connector available on the router board. You can add header to that one and use JTAG interface to rewrite the image. It is not very complicated, but in your case you don’t need that, just use the procedure described in the previous paragraph.