Noise-Bot: Difference between revisions

From Noisebridge
Jump to navigation Jump to search
mNo edit summary
No edit summary
(41 intermediate revisions by 11 users not shown)
Line 1: Line 1:
:''Not to be confused with [[Noisebot]].''
Hereby known as "MC Hawking - The Wheelchair Robot"  
Hereby known as "MC Hawking - The Wheelchair Robot"  


Here's the beast: http://spaz.org/~jake/robot-emc/DSCN9886.JPG
UPDATE: MC Hawking has moved to [http://www.sudoroom.org sudoroom]!
 
[[User:Azureviolin|Hao]] is working on an opensource robot project [http://www.dorabot.com DORA Project], and have already mount a robotic arm on Noise-Bot/McHawking, and he refers to it as "DoraBot".
 
== Photos ==
 
 
[[File:DoraBot_2012_08_25.jpg|thumb|center|550px|DoraBot on Aug.25,2012, [http://www.dorabot.com DORA Project]]]
[[File:Noise-bot-sideview-2011.jpg|thumb|center|350px|McHawking in 2011]]
[[File:20_Noisebot.jpg|thumb|center|550px|Old Picture]]
 
== Videos ==
[http://www.youtube.com/watch?v=kJKXFENEDdE  rachel driving rachel] 
 
[http://www.youtube.com/watch?v=XI_19brMqUU  attacks a wheelchair] 


Videos:
[http://www.youtube.com/watch?v=R-5oosZ_wq4  driving around noisebridge]
[http://www.youtube.com/watch?v=kJKXFENEDdE| rachel driving rachel] 
[http://www.youtube.com/watch?v=XI_19brMqUU| attacks a wheelchair] 
[http://www.youtube.com/watch?v=R-5oosZ_wq| driving around noisebridge]


== IMPORTANT! ==
== IMPORTANT! ==
Line 12: Line 25:
Improperly used, the robot can destroy itself, its suroundings, and run you over. Please know what you are doing and don't be afraid to ask questions.  
Improperly used, the robot can destroy itself, its suroundings, and run you over. Please know what you are doing and don't be afraid to ask questions.  


* RTFI! Know how to engage / disengage wheel clutches, and where the power switch is incase it goes crazy.
* RTFI! Know how to engage / disengage wheel clutches, and where the power <S>switch</S> is incase it goes crazy.  These instructions are found below.
 
* DO NOT UNPLUG THE ARDUINO IF THE WHEELCHAIR CONTROLS HAVE POWER AND THE CLUTCHES ARE ENGAGED.  THE ROBOT WILL MOVE AT THE HIGHEST SPEED IN A RANDOM DIRECTION.


* Always warn humans nearby that the robot could lose control and run them over.  
* Always warn humans nearby that the robot could lose control and run them over.  
Line 20: Line 35:
* if someone is sitting in the chair when it is on, warn them that the robot could go crazy and kill them, it has almost happened.
* if someone is sitting in the chair when it is on, warn them that the robot could go crazy and kill them, it has almost happened.


* always make sure it's plugged into the battery charger, and that the charger is plugged in and powered on.  The batteries are throwaways and barely hold a charge as is, so we need to keep it on the charger.
* We have not implemented even basic safety shutoffs, so you should be watching it all the time. It will very happily drive through its operator and the wall without stopping.
 
* <S>'''If it appears to be getting out of hand, the power switch is just behind the joystick, where you turned it on.'''  This will power down the motors and stop it where it is immediately, with the brakes on.  At this point you can disconnect the parallel-port interface and drive it home with the joystick, or </S>disengage the wheel clutches and push it home manually.  [there is no longer a manual power switch for the drive. jake is looking for a STOP button]


* We have not implemented even basic safety shutoffs, so you should be watching it all the time. It will very happily drive through its operator and the wall without stopping.  
* If it REALLY IS getting out of hand, use furniture to try to stop its movement <S>so you can get at the power switch.</S>  DO NOT try to use your body to stop it, it's heavier and stronger than you are and it doesn't feel pain.


* '''If it appears to be getting out of hand, the power switch is just behind the joystick, where you turned it on.'''  This will power down the motors and stop it where it is immediately, with the brakes on.  At this point you can disconnect the parallel-port interface and drive it home with the joystick, or disengage the wheel clutches and push it home manually.
== People who have worked on it ==


* If it REALLY IS getting out of hand, use furniture to try to stop its movement so you can get at the power switch.  DO NOT try to use your body to stop it, it's heavier and stronger than you are and it doesn't feel pain.
* [[User:Jake|Jake]]
* Lilia
* [[User:Dr jesus|Dr. Jesus]]
* Evan
* [[User:Azureviolin|Hao]]
* [[User:Flipzagging|Neil]]


== Hardware ==
== Hardware ==
Line 32: Line 54:
M.C. Hawking the Wheelchair Robot, AKA Noise-Bot, uses an electric wheelchair (Action Arrow Storm Series).  This is a mid-sized electric wheelchair which can be dis-assembled without tools and transported in a car, which is how it got to noisebridge.  It uses two 12-volt lead-acid batteries such as car batteries.  The batteries are wired in series for 24 volts, and it is necessary that they are matched so that one doesn't wear-out the other during use and charging.
M.C. Hawking the Wheelchair Robot, AKA Noise-Bot, uses an electric wheelchair (Action Arrow Storm Series).  This is a mid-sized electric wheelchair which can be dis-assembled without tools and transported in a car, which is how it got to noisebridge.  It uses two 12-volt lead-acid batteries such as car batteries.  The batteries are wired in series for 24 volts, and it is necessary that they are matched so that one doesn't wear-out the other during use and charging.


At this time (nov 2010) the batteries are throwaways which have just enough capacity to play around with the thing for a couple of hours before having to go back on the charger.
At this time (April 2011) the batteries have been replaced with full-size gel-cells with decent capacity.
 
An Arduino has been added to monitor battery voltage, and has the ability to turn off power to everything except itself and the wheelchair joystick (but that is coming soon).  If the battery voltage drops below 18 volts for 25 consecutive seconds, the Arduino will turn off the computer until the batteries go above 24 volts - when the charger is hooked up.
There is also a DB25F connector wired to the Arduino so that the wheelchair's joystick interface board can plug into the Arduino instead of the PC parallel port.  It is wired so that the four directions connect to four PWM-capable outputs of the Arduino.
 
The Arduino program is written to watch for direction commands sent by the computer through the serial interface as a two-byte sequence.  Case-sensitive F B L R for the four directions, followed by a byte corresponding to the magnitude of thrust in that direction.  The left-right axis is independant of the forward-backward axis.  To stop, send SS (Capital S twice).  All direction commands expire after one second and so must be re-sent often enough to prevent auto-cancellation.  All this is moot if you have not sent a "Pz" lately, which is the command to activate the wheelchair-power-enable relay.  It must be a capital-P followed by a lowercase z.  This command expires after 2000 milliseconds, so your software has to send it over and over or the power relay will click off and you won't go anywhere.  Read the latest version of robotpower?.pde.
 
'''The arduino's FTDI chip is a USB serial port, accessed at /dev/arduino1 OR at /dev/ttyUSB0'''
This was set in some udev config file, and it corresponds to this arduino's FTDI chip serial number.
 
You can hopefully find the latest version of the robotpower arduino program in the home directory of mchawking.  This program is where things like low battery shutoff voltage, and the timeout period for motion commands, are set.
[http://spaz.org/~jake/robot-emc/robotpower8.pde | Arduino program as of September 2011]
 
Note that the Arduino program can't see the arduino's serial port (/dev/ttyUSB0) unless it is run by root.
 
[http://spaz.org/~jake/robot-emc/IMG_0602.JPG | Robot Arduino without DB25 yet]
 
The battery charger consists of a voltage-regulated power-supply connected to the battery pack through a large Diode.  The robot has an AC power plug mounted on a bracket in between the front wheels and facing foward.  There is an electrical outlet mounted on a wooden bracket at the appropriate height for electrical docking.  There is a USB camera (with built-in LED lights) on the robot which allows for visual alignment of the electrical connection.  In the future, the robot will be able to plug itself in by driving up to its special socket, so that the onboard computer does not have to be shut down or manually plugged into mains AC to avoid draining the batteries.
 
There is a computer (separate from the wheelchair controller which technically has a computer in it) which is in a stamped aluminum case just like the media server.  It uses a model [http://spaz.org/~jake/robot-emc/MS-9642-Manual.pdf | MS-9642] mini-motherboard and a [http://www.mini-box.com/M3-ATX-DC-DC-ATX-Automotive-Computer-car-PC-Power-Supply?sc=8&category=981 | Mini-Box M3-ATX power supply]


The battery charger plugs into the wheelchair on the joystick side, just in front of the wheelThe wheelchair is electronically immobilized by the third terminal of the chargers' plug, which is connected to ground.
The box is currently powered by a custom voltage regulator made by jake.  It accepts up to 40 or so volts, but will never deliver more than 23 to the M3-ATX which is hard-limited to 25 volts.  If the voltage is at or below 23 volts, its FETs are in full conduction and there is zero dropoutOnce on, the M3-ATX will keep the computer running unless voltage goes below 7 volts, at which point the 24-volt battery array of the wheelchair is being seriously damaged.


There is also a computer, which at this time is a Hewlett Packard or Compaq or something, a P3 laptop with about 512M ram, and a 40-gigabyte hard drive.  This laptop came from the e-waste bin 6 months ago, and the backlight didn't work and the battery was goneA fuse had popped in the inverterboard powering the screen lighting but otherwise it worked.  The fuse was shorted over and the light returned to the screen, which lasted until 11/15/2010.  An inverter was added to the laptop on the outside of the screen 11/24/2010.  It has an on/off switch and should be off when the computer is closed, not on (then why is it plugged into power?) or the light is otherwise not needed.
The voltage regulator's input plugs into a connector coming from the wheelchair controller's blue power connector, which is connected through a T-splitter going to the charger and to the batteries'''This is where the voltage regulator gets disconnected when the computer is being worked on, so there are no shocking "surprises".''' The output of the voltage regulator goes to three tab terminals and a cord to the LCD monitor, to provide the computer's power supply with constant voltage, ground, and a second positive terminal for the unused on/off switch function of the power supply.  Read up on the M3-ATX linked above.


A circuitboard zip-tied to the arm-rest interfaces the parallel port of the computer to the joystick.  This circuit uses transistors to trick the wheelchair controlbox into thinking that the joystick is somewhere other than at-rest in the center.  Of the eight bits of the parallel port, two make the chair go forward, two to the right, two to the left, and two backwards.  For each direction, there is one bit causing low speed and another causing medium speed.  Both bits cause high speed.  As of 11/15/2010 a steady-state on the parallel port is not ignored by the circuit, so a compute crash will cause the chair to go out of control.  In the future, the circuit will ignore non-changing status bits, but the software has to be changed first.
A circuitboard zip-tied to the arm-rest interfaces the parallel port of the computer to the joystick.  This circuit uses transistors to trick the wheelchair controlbox into thinking that the joystick is somewhere other than at-rest in the center.  Of the eight bits of the parallel port, two make the chair go forward, two to the right, two to the left, and two backwards.  For each direction, there is one bit causing low speed and another causing medium speed.  Both bits cause full speed.  This "speed" is separate from the speed control function of the two switches (one of which also controls on/off).  A steady-state on the parallel port is not ignored by the circuit, so a computer crash will cause the chair to go out of control.  In the future, the Arduino will connect instead of the PC parallel port, and it contains software to "expire" any direction command not refreshed by the PC.


The laptop is currently powered by a custom voltage regulator made by jakeIt accepts up to 40 or so volts, but will never deliver more than 23 to the laptopIf the voltage is at or below 23 volts, its FETs are in full conduction and there is zero dropout.  The laptop will not turn on with less than 17 volts, but once on, will remain running unless voltage goes below 12 volts.
Sensors have been installed on the motor which allow the computer to track movement and speed.  An old ball-mouse has been disassembled and its sensors mounted on wires, and these sensors were placed at the open end of the drive motorsAn optical interruptor is attached to the end of the motors' driveshafts, so the "mouse" reports movement on the x and y axes of the mouse when the left and right wheelmotors turnThe "mouse" is DB9 serial, and is seen by the computer as a serial accessory rather than as an actual Human Interface Device to move a mouse cursor (this would not be the case if a USB serial adaptor were used).  The serial port corresponding to this "mouse" (which uses standard serial mouse protocol to report "movement") is '''/dev/odometry''' as set in udev config files.


The voltage regulator's input plugs into the wheelchair's charger port, on the joystick side, just in front of the wheel.  The voltage regulator's output cable is soldered directly to the laptop's mainboard.
An LCD monitor has been mounted permanently as the seatback.  '''The ON/OFF switch for the monitor and its built-in amplified speaker-system is a pushbutton switch on the left (as you look at it) "shoulder" of the robot. Sometimes the speakers enter a feedback loop and power to the screen should be shut off to cease this irritation.''' The monitor is an [[Inexio]] touchscreen but we have not implemented the touchscreen function yet.


A dedicated embedded PC is being prepared to replace the laptopAn LCD monitor is being prepared to be mounted permanently as the seatback.
A robot arm made of mostly aluminum and animated by air-cylinders was fitted to the robot, but few electronic valves and no air compressor or tank have been acquiredSomeone will have to invest time and energy to get the arm to do more than make the thing look more menacing.  As of 11/15/2010 the arm was removed to make the robot more wieldy/less unwieldy.


A robot arm made of mostly aluminum and animated by air-cylinders is fitted to the robot, but few electronic valves and no air compressor or tank have been acquired.  Someone will have to invest time and energy to get the arm to do more than make the thing look more menacing.  As of 11/15/2010 the arm was removed to make the robot more wieldy/less unwieldy.
Several electrically-operated linear actuators were acquired and would make great "muscles" for a large robot arm made from scratch.  The air-powered arm is not a good match though, so a new arm should be made with those linear actuators causing magnified movement at joints such as elbows and a shoulder.


== Software ==
== Software ==


The laptop has a 40-gigabyte hard drive with two significant partitions.  One is '''Ubuntu 10.04''', and the other is '''Windows XP''' where it boots to nowThe Windows is installed to facilitate software associated with the '''Emotiv''' EEG headset that Steve has been working to interface to the wheelchair drive function.
The PC is running a stock Ubuntu with PyParallel being used by the controller program to access the parallel portAll the software from the home directory as of 11/15/'''2010''' is here:
 
http://spaz.org/~jake/robot-emc/
 
As of April 2011 the software has been moved around and a lot of projects are in the works.  Contact Lilia Kai at gmail or Jake at spaz if you want to get involved in reading or writing programming for the robot.


The Ubuntu is stock with PyParallel being used by the controller program to access the parallel port.  All the software from the home directory as of 11/15/2010 is here:
As of September 2011 the latest motor-control firmware for the Arduino is here:


http://spaz.org/~jake/robot-emc/
http://spaz.org/~jake/robot-emc/robotpower8.pde


On the embedded PC, the above software is present in the home directory of user '''tvbrain''' but needs to be copied/moved to user '''mchawking''' to avoid confusion.
'''As always, the latest software is actually on the robot, in ~mchawking/ or ~mchawking/trunk/ or ~mchawking/trunk/scripts/ etc..'''


=== Login ===
=== Login ===
This applies to both the laptop and the embedded PC, although only one will be hooked up at a time.


  username: mchawking
  username: mchawking
  password: emc
  password: [redacted]


== Network Connection ==
== Network Connection ==
The laptop uses a PCMCIA wireless card when running Ubuntu, because the '''WUSB600N by Cisco''' doesn't work properly under Ubuntu for some strange reason. The Windows XP system is using the WUSB600N just fine though and drivers for the PCMCIA card have not yet been installed.
The embedded PC is using a '''Cisco Aironet 1220B''' which was hardware-hacked by Jake to accept power from the ATX power supply of the computer.  This consists of 3.3V and 5.0V which, plus ground, come into it with a custom three-terminal connector.  A '''Generic Realtek USB 802.11b''' interface, which is sub-excellent, is also available in case the Cisco is not working or if the robot needs to access an 802.11b network.


The embedded PC is using a '''Generic Realtek USB 802.11b''' interface, which is sub-excellent, but the '''WUSB600N by Cisco''' doesn't work properly under Ubuntu for some strange reason.
The Cisco Aironet 1220B named wbr2 on the wheelchair associates to a matching Cisco 1220B named wbr1 at 2169 Mission.  They use 802.11a to communicate on a dedicated channelThey use the default username and password for that platformThe embedded PC uses its ethernet port '''eth1''' to talk to the Noisebridge network via a connection to wbr2's ethernet port.
 
In the future, one of those fancy '''Cisco AP's''' will be the way onto the net - some of them have '''four antenna connectors''' and do "A" which is apparently really good.  They have an ethernet port to talk to the computer, and a serial port for configuration, and they run on 48 volts (POE is supported but has opposite polarity of 3com standard)Hopefully they run OK at lower voltages like 16v so they can be powered directly from the wheelchair's batteriesThat way the onboard computer can suspend and do '''wake-on-lan''' if the wireless device starts sending it packets.


The embedded PC  is configured from '''/etc/networks/interfaces'''  Also, Network-Manager which is the gui-compatible 21st century newschool network configuration system is been pushed to the side, possibly for good.  The embedded PC is now configured to find the wireless network called '''noisebridge''' and take the internal IP below.
The embedded PC  is configured from '''/etc/networks/interfaces'''  Also, Network-Manager which is the gui-compatible 21st century newschool network configuration system is been pushed to the side, possibly for good.  The embedded PC is now configured to find the wireless network called '''noisebridge''' and take the internal IP below.
Line 75: Line 117:
=== Noisebridge internal IP address ===
=== Noisebridge internal IP address ===


The robot has claimed an IP on the internal network of
The robot's USB wireless interface has claimed an IP on the internal network of


  172.30.0.50
  172.30.0.50
=== Static world IP address ===
For those not inside the noisebridge internal network, a '''static IP''' from sonic.net has been assigned.  The '''static IP''' is
REDACTED


=== Access from outside 2169 Mission ===
=== Access from outside 2169 Mission ===
Line 97: Line 133:
== Local Operation ==
== Local Operation ==


'''The electric wheelchairs' controller brain will not allow movement unless the joystick is at rest for a second when power is switched on.  If the computer has not initialized the parallel port to the "stop" bitpattern, and the switch is flipped on, the green LED will flash endlessly because it thinks you are leaning on the joystick and don't intend to do so'''.
The electric wheelchairs' controller brain will not allow movement unless the joystick is at rest for a second when power is switched on.  If the computer has not initialized the parallel port to the "stop" bitpattern, and the switch is flipped on, the green LED will flash endlessly because it thinks you are leaning on the joystick and don't intend to do so.


The drive-wheels have clutches which can be disengaged from their motors (and brakes) by pressing a button and rotating a collar until it can be pulled outwards.  When the clutches are disengaged, the robot can be pushed around like a shopping cart, and the motors can be activated without actually causing movement.  Sometimes the robot must be pushed forward or backward in order to engage or disengage the wheel clutches, because they are like gears and only fit together in some positions.
The drive-wheels have clutches which can be disengaged from their motors (and brakes) by pressing a button and rotating a collar until it can be pulled outwards.  When the clutches are disengaged, the robot can be pushed around like a shopping cart, and the motors can be activated without actually causing movement.  Sometimes the robot must be pushed forward or backward in order to engage or disengage the wheel clutches, because they are like gears and only fit together in some positions.
Line 103: Line 139:
'''Disengaging the clutches before testing movement software is highly recommended, as you will be able to see the motors trying to run you over without the robot being able to actually do it.'''  This is like taking the laser off of Johnny Five before sending him to the lightning-prone recharging booth.
'''Disengaging the clutches before testing movement software is highly recommended, as you will be able to see the motors trying to run you over without the robot being able to actually do it.'''  This is like taking the laser off of Johnny Five before sending him to the lightning-prone recharging booth.


== Operation Outside 2169 Mission ==


dfgdlfndlfkngdlfkgn
The robot has been successfully field tested at a local conventionThe procedure to convert the robot for operation outside Noisebridge is:
 
If you are badass, you can compile the code in simulation mode following the instructions here:
http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Installing_EMC2#Building_emc2_simulator
 
The resulting binary should run and give you a UI on your system.  There's actually nothing machine-specific that you need at this point: your UI will look pretty much exactly what we have now. Select the "axis.ini" config file.
 
You should now just be able to:
 
*open one of the sample gcode files
*power the machine 'on' (unset emergency stop [red X], and set power [orange square] buttons)
*'home' the various axes (must home all axes, use radio buttons to select)
*'run' the gcode. (blue "play" triangle)
 
For most of the configurations there is a smaller window w/ an inverted cone representing the spindle (this is the default view). This will show the progress of your milling run. You can change the view and pan/zoom/tilt with the mouse.
 
For a sanity check, try simulating a run of the NB logo gcode from [[Identity]]
 
Then try gcode from the [[#Toolchains | toolchain ]] of your choice.
 
 
== Toolchains ==
 
Many tools exist for generating/converting to gcode. Here's a good list: http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Cam
 
In particular, here's how you generate gcode from
 
===Bitmaps, Images===
 
The EMC2/Axis application will import most image formats and create a raster scan tool path with milling depth proportional to image intensity. Haven't tried this but it looks very cool!
 
=== Text /TrueType ===
text / truetype : http://www.timeguy.com/cradek/truetype
 
===DXF/QCAD===
 
DXF is a standard file format used by many CAD programs (as well as exportable from inkscape and Adobe Illustrator). It's a good choice, especially as gcode export from Inkscape seems to be buggy.
 
QCAD is an open-source 2d CAD program. Linux users can apt-get qcad, there is open-source executable for Windows as well (but it's hard to find as Ribbonsoft took it closed-source (wtf?) and most searches end up at their page.) QCAD is very solid and a great place to start with CAD, especially if you can't afford/don't need Autodesk/Solidworks.
 
We use a DXF-GCode conversion called, unsurprisingly, dxf2gcode http://www.christian-kohloeffel.homepage.t-online.de/dxf2gocde.html [URL is not a typo]. In the /home/nb/dxf2gcode directory, run the dxf2gcode_v01.py command.
 
Open your dxf file from File->Read DXF. It seems to barf on DXF exported from Inkscape, but is fine with QCAD, so a workaround is to load the Inkscape dxf in QCAD and save it from  QCAD (it's also easy to scale and rotate if necessary).
 
I am still working through the various dxf2gcode options but setting "infeed depth" to the same value as "mill depth" gives you a one-pass toolpath (otherwise it seems to do it in two passes.)
 
Coordinate units are kind of a crapshoot and don't make much sense right now.
 
Note that it may be doing a lot of math without benefit of the numpy library so it can be SLOW. It has no progress indication, and doesn't redraw the screen, so it may look like it crashed. Sometimes it actually does. But be patient!
 
=== EagleCAD ===
Cadsoft [http://www.cadsoft.de/ EagleCAD ] is a  schematic editor and PCB layout tool. It's not open source, but there's a
free version that is very decent and limited only to the size of board you can lay out.
 
To generate GCode from your Eagle layout, get the scripts from http://www.pcbgcode.org/. These do "Isolation routing," that is, they will generate GCode to mill away copper outside the traces you laid out on a copper-covered PCB (as well as drill it).
 
I've added MAXCNC mill-specific commands to the pcbgcode config stuff, including setting the spindle speed to maximum and turning on the motor. (Config file is /home/nb/eagle-5.6.0/ulp/gcode-defaults.h on the mill PC).
 
 
First experiments milling PCBs = success! [[User:Jtfoote|Jtfoote]] 23:57, 17 October 2009 (PDT)
 
I used .01 carbide end mills from here:
http://www.amazon.com/Niagara-Cutter-059918-Overall-Carbide/dp/B000N477OK/
 
On 1-sided copper-plated (1-oz) circuit boards from here: http://www.mpja.com/prodinfo.asp?number=14868+DT
 
 
To start, create a layout in Eaglecad. To work best, use one layer (which can make routing a pain), and use a minimum trace size of 0.012 inches. Make sure you do a DRC check with 10 mil isolation spacing (thouugh I have found it misses trace-pad distances).
 
From the Eagle command line,
 
run pcb-gcode-setup
 
This creates several gcode .ngc file in the same directory as your eagle .brd file. They have suffixes like
"top" "bot" and "d" for top copper, bottom copper, and drill. Run AXIS2 and load the appropriate file. Look CAREFULLY at the tool path. Does it really isolate everything you want it to? If not, you may have to increase spacing and re-run. Check especially places of small pitch and tight clearances, especially between traces and pads.
 
Milling the copper is a tradeoff between quality and speed. At fast speeds, the copper tends to get rough at the milled edges. Slow speed rates help a lot but can lead to impractically long milling times.
 
2.5 ips gives beautiful results, but a good compromise is something like 5 - 8 ips (set in the pcb-gecode setup). If you look at File->properties in the EMC2-Axis tool it will give you a rough idea of the milling time.
 
Setting the Z home at precisely zero (at the board surface) is very important, because we are working at depths of hundredths of an inch. After several attempts I don't think you can do this well with just the manual jog, and risk breaking the tool. Here's what I did that worked:
 
# Raise the head so you can put the tool in the collet. Put it in as far as you can.
# Tighten gently, only enough to keep from falling out.
# Drop the head to about 1/4 an inch above the workpiece. Don't touch!
# Loosen the mill tool in the collet
# GENTLY let the mill tool drop to touch the workpiece surface
# finger-tighten the collet -- tightly!
# Home the Z axis VERY IMPORTANT DON'T FORGET!!
# Raise the head and wrench-tighten the collet
 
I think the default Z Down dimension of -0.01 may be too much given that 1-oz copper is supposed to be only 1.4 mils thick (0.0014 inches). I've had good results with -0.008; .0.005 led to problems because I think the PCB I used was not perfectly flat at at some  places this depth did not hit "bottom." With further experiments this may be because the clamps are compressing the PCB: at least it seemed to work fine more than 1/2 inch away from them.
 
====Drilling vias====
 
For through-hole components, you'll need to drill vias.  Doing this is a multi-step, involved process.  Because etching is sensitive to the trueness/truing of your board's surface, you only want to etch the board when it's mated directly to a metal block, but you need a plastic sacrificial stop for drilling.    So, etch as normal, then add two registration marks to the top of the board.  Unmount it, add the plastic backing, change tools, remount, and rezero, respecting the registration.  From there, you can run the drill program after suitable modification (you need to manually comment out all M06/tool change commands).
 
Generating the drill file:
 
Settings specific to drilling:
* Machine:
** Tool Change: you can't actually change tools at the moment, so this is just to expedite your cutting process, and stay within the limits of the mill
*** X: 0.0
*** Y: 0.0
*** Z: 0.2
** Drill depth: Measure your board with calipers, then add 10mil for good measure (I used -0.100" for the single-sided board I did yesterday)
** GCode Options:
*** Ensure "Do tool change with zero step" is UNCHECKED.  If this is checked, EMC hangs.  No, really, you don't want to deal with this problem.  It's awful close to "EMC hangs, you have to hard kill it, and then rezero the whole setup."
 
Once you've got the GCode files for etching and drilling generated, you need to tweak the drill file.  As it's currently configured, our milling rig doesn't handle tool changes well (the CNC doesn't support automatic tool change, but the EMC software thinks it does, so the whole setup gets Very Unhappy when it runs into these commands).  To remove these, open your drill ngc/tap file in a Text Editor Of Your Choice, and comment out all lines containing the tool change command M06.  In GCode, comments are parenthesized lines, and they cannot be nested.
 
Cheat sheet:
<pre>
sed: 's/^\(M06.*\)$/( \1 )/;'
vim: :g/^M06/s/^\(.*\)$/( \1 )/
emacs: M-% ^\(M06.*\)$ <enter> ( \1 )
</pre>
 
Open your drill file in EMC and make sure it looks sane.  There will be a bunch of tool change steps, where it runs itself back to (0,0,0.2), then goes back to work.  This is the tool change position specified above; you may want adjust the point to be closer to the centroid of your drill pads, to shave off a minute or two.
 
After your etch file looks good, and your drill files look reasonably good, go ahead and set up for etching as above.  When etching is completed, don't take the board out!  We need to add registration marks for the remounting.  Manually walk the head down to (0,0,0.5).  Once you're there, turn on the spindle, and gently lower the head til it just bites the copper.  Personally, I went to (0,0,-0.008), which is the depth used for etching.  Leave the spindle on, and raise the head back to (0,0,0.5).  You can turn the spindle off if you'd like, then slew over to (1,1,0.5).  Once there, turn the spindle back on, and go down to (1,1,-0.008) to make the second registration mark.  Raise the head out of the board, then turn off the spindle.  I'd also recommend slewing back to (0,0) at this point, to make re-registration easier.
 
Next, load up the drill file in EMC.  You should still have the outline of the paths the head just etched on the display, with the drill file overlaid.  This is a good chance to sanity check the line-up of things, etc.  Once that looks right, move to adding a plastic backstop and re-rigging the board.
 
With those two registration marks in place, you can re-rig the board with a sacrificial plastic backstop underneath of it.  There's a few of these in the document trays next to the mill.  Change out to your PCB drill-end, re-zero as for etching, and ensure you have good registration (make sure the drill-end is sitting on the 0,0 mark when you insert it, raise to (0,0,0.1), and slew to (1,1,0.01) to eyeball the match up.  If you want to be totally certain, you can turn the spindle on and just bite the board, but, in doing so, you're likely to obliterate your registration mark, so I'd advise against that.
 
Make sure you're happy with everything, and, assuming you are, hit Run.  Keep an eye on things and be ready to hit the kill switch (if babysitting feels tedious, just imagine yourself doing all these holes on the drill press, and then try not to hug your newfound robot slave/friend). -- [[User:Jbm]] 2010-05-07 13:20; a big thank-you to [[User:jtfoote]] for all his help in familiarizing me with the setup.
 
===[http://www.inkscape.org/  Inkscape ] ===
 
Latest: the gcode export from Inkscape is buggy. It's python so could possibly fix, but it looks kind of involved.
Workaround: File->Save As-> .dxf, then use the QCAD->DXF toolchain.
 
 
 
 
For Inkscape 0.46, use this: http://bitbucket.org/jst/inkscape-gcode/
(Do "get source", put all files in /usr/share/inkscape/extensions/)
 
IMPORTANT: Read the "Help" tab when you Effect->Export->Export as Gcode
This tells you how to set the origin, and how to name your layers for different tools.
 
In the exported GCode, you need to add/change the following lines:
 
Set the cut height to -0.01 (for example, YMMV)
#2=-0.0100 (Height to cut at)
 
Add commands to turn on the motor after the first line:
 
G00 Z#1
S 1000 (set motor speed to 1000 RPM)
M3    (turn spindle motor on)
 
And you are good to go.
---
 
This is cool but only works for Inkscape 0.43: http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?InkscapeHowto
 
== Tooling ==
 
Cutting fiberglass (PCB) will eventually destroy any kind of steel cutting tool. The glass in the resin matrix is much harder than steel. You need carbide tooling.  Note that carbide is too brittle for most metals and will just snap.
 
Suppliers:
* http://www.precisebits.com/applications/pcbtools.htm
* http://thinktink.com/
* [http://www.smallparts.com/b/256305011 smallparts.com]  carries Niagara carbide end mills in fine pitches suitable for circuit boards. Available via Amazon as well.
* http://www.ottofrei.com/ also sells carbide tooling locally, which you can pick up at their store on 760 Market street #905
* High Speed Stainless (HSS) tooling available here: http://littlemachineshop.com/
* Spring loaded tool holders account for warped PCBs and mills:  [http://www.2linc.com/spring_loaded_engraving_tool.htm 2linc] <-- expensive.  Cheap ones exist.
* Really small end mills [http://bitsbits.com/ bitsbits]
 
Search for "small parts inc" on amazon.com.  They have reasonable prices and reasonable shipping for endmills.  (You can also search for endmills)  I believe we have a 1/4" and 1/8" collet for the mill, so you're looking for tools with a 1/4" or 1/8" shank.  I mostly bought HSS for cutting plastic, but I have some harder ones with exotic coatings for aluminum and brass.  --lamont
 
== Parallel port DB-25 pinout ==
 
* One pinout from http://www.machsupport.com/forum/index.php?action=dlattach;topic=1319.0;attach=891)
* http://www.super-tech.com/root/drawings/gif/SuperCam_pinouts.gif "setptype = user1" (confusingly not labeled MAXNC10)
 
OK, got a definitive pinout, seem to conform to those above. [[User:Jtfoote|Jtfoote]] 23:11, 28 September 2009 (PDT)
 
Pin  1:  Tool speed PWM, active low
Pin  2,3: A quad input
Pin  4,5: Y quad input
Pin  6,7: X quad input
Pin  8,9: Z quad input
 
Pin 10: 7420 quad nand output (motion complete ack?)
Pin 11: NC
Pin 12: X,Y,Z limit (or'ed active high when at limit)
Pin 13: spare digital (unused header labeled "probe")
Pin 14: Enable, active high
Pin 15: NC
Pin 16: input to 4x PICs: enable, active low (reset?)
Pin 17: Enable, active high
Pin 18: GND
Pin 19-25 - NC
 
 
== Misc other info ==
 
Manual:
http://engineering.purdue.edu/AAE/Academics/Courses/Raisbeck/images/resources/cnc/MAXNCmanual.pdf
 
 
This guy rebuilt his, has derogatory things to say: http://hans-w.com/cnc.htm
 
This other guy has some interesting upgrades. Especially notable is the new motor mount, and appropriate dxf http://www.timeguy.com/cradek/cnc/motor-mount
 
 
[[User:seph]] was hacking on one. Some notes from him are at http://www.directionless.org/tmp/maxnc/
There's a pinout, and an emc2 config. He also recommends thinking about eventually upgrading a lot of the components. Seph's work is what I (mikew) based the current functional HAL and INI files on.
 
Here's the link to how to drive the mill with a pc joystick:
http://wiki.linuxcnc.org/cgi-bin/emcinfo.pl?Using_A_Joypad_To_Move_Your_CNC_Machine
 
== Workshop notes, 1.15.2010 ==
'''Machine parts and geometry'''
*The '''bed''' is the blue anodized aluminum extrusion to which the workpiece is affixed.
*The '''collet''' is mounted at the end of the motor. It holds the milling bit. '''Note:''' do not lose the collet, as it is basically impossible to obtain a replacement.
*The '''milling bit,''' which superficially resembles a drill bit, is used to machine the workpiece. To setup the machine, bits are inserted into the collet and then tightened with two wrenches.
*The '''workpiece''' is whatever you're milling - copper-clad board for PCBs, aluminum, acrylic, etc.
*'''Workpiece holders''' are small threaded rods with metal "clips" that are designed to hold the workpiece firmly to the bed. They should not be over-tightened, as it can cause workpiece distortion.
*'''Backing material''' is a piece of scrap material used between the bed and workpiece. It's important to use backing material to protect the bed.
*'''Limit switches''' are located at the end of each axis. These act as safeties in case the milling machine reaches the end of its travel. '''Note:''' if you're milling and manage to trip a limit switch, the mill shuts off, in which case you'll need to redo your work. Be diligent.
 
*The X axis runs side to side; e.g. the "width" of the bed.
*The Y axis runs forward and back; e.g. the "depth" of the bed.
*The Z axis runs up and down; e.g. the space between the bed and collet.
 
'''Affixing the workpiece to the mill'''
*Use a piece of aluminum stock between the PCB and the bed.
*Use adjustable wrenches to cinch down the workpiece holders to the PCB. You only want the bolts to be finger-tight; the fiberglass substrate can actually be compressed if too much pressure is used, causing distortions in the milled part. '''Do not use pliers.'''
*The collet faces ''upwards'' (like the tip of a rocket) into the spindle.
*Keep the plastic guard attached to the milling bit. Place the bit into the collet, and bolt the collet into the spindle.
 
'''Zeroing the machine'''
*'''Note:''' In the MaxNC control program, it's important to zero the mill - to set it to 0,0,0 - before routing a board. Occasionally, the milling machine will not home to 0,0,0 in the MaxNC control program. To fix this, go to ''Machine > Zero Coordinate System > P1 G54.''
*In AXIS' ''Manual Control'' tab, adjust the X, Y, and Z axis feed controls until the tool is at the upper right corner of the circuit board.
*Chuck the bit, finger-tight.
*It is critical to zero the Z axis correctly. The idea is to drop the bit down onto the surface of the copper, with zero force, and then zero the axis. Use the manual controls to drop the bit, step by step, until it is about 1/4" above the surface of the PCB.
*Loosen the collet so that the bit drops onto the board. Tighten the collet.
*Immediately zero the Z axis.
 
'''Milling'''
*Controls for starting / stepping / stopping milling operations are located in AXIS' top toolbar.
*At this point, all of the axes should be zeroed.
*Click the Go button in the toolbar to start milling.
 
== Upgrade ==
I'd like to upgrade the maxnc.  Right now its a bit sloppy.  I want to (1) fix it up, (2) make a locating system for two-sided PCBs, (3) make a sweet document with tons of pictures so its easy. -moo
 
Hey moo, who are you?
The mill seems plenty accurate for our purposes, are you finding it isn't? (though a pcb jig would be sweet).
I think someone bent the X spindle through misuse, if we fix anything let's fix that... [[User:Jtfoote|Jtfoote]] 05:37, 13 May 2010 (UTC)
 
 
=== Ideas for maxnc accuracy improvement ===
In order of utility and least cost
* tear-down + lube, wax x-y interface
* inspect replace x-axis gib
* replace set-screws, with hex cap with nut to lock down
* x-axis motor mount (stiffer)
* do swivel ball bearing set screws. (make sense with a gib? ) (anyways grease + locktite)
* add bearings at ends of lead-screws to stabilie (original MaxNC has these... )
* z-motor mount (plans at http://www.timeguy.com)
* spindle replacement


=== dual layer PCB fixture & locating system ===
* Connect to the Cisco Aironet 1220B wireless device behind the monitor with an RS232 to RJ45 cable, wired to the Cisco pinout, and set your computer's terminal to the appropriate baud rate and settings.  The following instructions assume familiarity with the programming of Cisco wireless devices through a serial connection.
''' Part 1 ''' work plate for prepared pcbs (i.e. has holes for locating)
* Log into wbr2 and say "enable". Enter the password.
* make pin indexed work plate that attaches with t-nuts (no need to drill holes in the maxnc)
* Say "copy nvram:outside-config nvram:startup-config", then "reload".
* add large dowel pins for indexing PCBs with pre drilled holes.
* Once wbr2 has restarted, there will be an 802.11a wireless network named "robots" you can associate to.
* release pockets to scoop under pcb
* Secure any loose items on the robot.  Put a garbage bag or something over the rest to protect connectors from splashes.
* Inflate the tires and check for leaks.
* Charge the robot's batteries fully, just in case.
* Power down the robot and move it to wherever it needs to go.  Follow the instructions under "local control" if you'll be driving.
* Once at the destination, if your computer has 802.11a (5.8GHz) wifi (many Macbook Pros have this), you can log into 172.30.0.50 over the "robots" wireless network to do whatever you need to do.


''' part 2 prep work-plate'''
When ready to return:
* something sacrificial with indexing corner, to drill holes in PCBs needed to locate in dowel pins above
* Charge the robots batteries fully.
* Face mill both to get '''flat surface'''.
* Put a splash guard on the robot's exposed bits again.
* Secure any loose items on the robot.
* Inflate the tires and check for leaks.
* Power down the robot and move it back to 2169.  Do not do this in a hurry.  Take note of public transit instructions for wheelchair users BEFORE arriving at the station or stop.
* Once back at 2169, clean the robot.
* Log into wbr2 and say "enable".  Enter the password.
* Say "copy nvram:noisebridge-config nvram:startup-config", then "reload".




This could make it really easy to get good dual sided pcbs.
=== Autonomous Behaviors ===
Process would be:
==== Face Following ====
# Switch on monitor & grab wireless keyboard.
# Switch on wheelchair (on low speed!) and
# As user mchawking, open a terminal window in home directory.
# <S>./botsetup.sh </S>
# cd trunk/scripts/lilia/
# python noise-bot.py


# load prep pate, clamp down pcb in corner
[[Category:Pages with a Noisebridge Tiny URL]]
# home
# run pre-written g-code
# swap plates
# home.
# Place pcb in dowel pins, glue, mill side 1
# Flip pcb (release, reglue)
# Mill side 2
# Remove, release CA glue with acetone

Revision as of 20:17, 7 July 2013

Not to be confused with Noisebot.

Hereby known as "MC Hawking - The Wheelchair Robot"

UPDATE: MC Hawking has moved to sudoroom!

Hao is working on an opensource robot project DORA Project, and have already mount a robotic arm on Noise-Bot/McHawking, and he refers to it as "DoraBot".

Photos

DoraBot on Aug.25,2012, DORA Project
McHawking in 2011
Old Picture

Videos

rachel driving rachel

attacks a wheelchair

driving around noisebridge

IMPORTANT!

Improperly used, the robot can destroy itself, its suroundings, and run you over. Please know what you are doing and don't be afraid to ask questions.

  • RTFI! Know how to engage / disengage wheel clutches, and where the power switch is incase it goes crazy. These instructions are found below.
  • DO NOT UNPLUG THE ARDUINO IF THE WHEELCHAIR CONTROLS HAVE POWER AND THE CLUTCHES ARE ENGAGED. THE ROBOT WILL MOVE AT THE HIGHEST SPEED IN A RANDOM DIRECTION.
  • Always warn humans nearby that the robot could lose control and run them over.
  • DO NOT "UPGRADE" UBUNTU OR THE KERNEL ON THE HOST MACHINE! (unless you are going to stick around and make everything work with it...)
  • if someone is sitting in the chair when it is on, warn them that the robot could go crazy and kill them, it has almost happened.
  • We have not implemented even basic safety shutoffs, so you should be watching it all the time. It will very happily drive through its operator and the wall without stopping.
  • If it appears to be getting out of hand, the power switch is just behind the joystick, where you turned it on. This will power down the motors and stop it where it is immediately, with the brakes on. At this point you can disconnect the parallel-port interface and drive it home with the joystick, or disengage the wheel clutches and push it home manually. [there is no longer a manual power switch for the drive. jake is looking for a STOP button]
  • If it REALLY IS getting out of hand, use furniture to try to stop its movement so you can get at the power switch. DO NOT try to use your body to stop it, it's heavier and stronger than you are and it doesn't feel pain.

People who have worked on it

Hardware

M.C. Hawking the Wheelchair Robot, AKA Noise-Bot, uses an electric wheelchair (Action Arrow Storm Series). This is a mid-sized electric wheelchair which can be dis-assembled without tools and transported in a car, which is how it got to noisebridge. It uses two 12-volt lead-acid batteries such as car batteries. The batteries are wired in series for 24 volts, and it is necessary that they are matched so that one doesn't wear-out the other during use and charging.

At this time (April 2011) the batteries have been replaced with full-size gel-cells with decent capacity.

An Arduino has been added to monitor battery voltage, and has the ability to turn off power to everything except itself and the wheelchair joystick (but that is coming soon). If the battery voltage drops below 18 volts for 25 consecutive seconds, the Arduino will turn off the computer until the batteries go above 24 volts - when the charger is hooked up. There is also a DB25F connector wired to the Arduino so that the wheelchair's joystick interface board can plug into the Arduino instead of the PC parallel port. It is wired so that the four directions connect to four PWM-capable outputs of the Arduino.

The Arduino program is written to watch for direction commands sent by the computer through the serial interface as a two-byte sequence. Case-sensitive F B L R for the four directions, followed by a byte corresponding to the magnitude of thrust in that direction. The left-right axis is independant of the forward-backward axis. To stop, send SS (Capital S twice). All direction commands expire after one second and so must be re-sent often enough to prevent auto-cancellation. All this is moot if you have not sent a "Pz" lately, which is the command to activate the wheelchair-power-enable relay. It must be a capital-P followed by a lowercase z. This command expires after 2000 milliseconds, so your software has to send it over and over or the power relay will click off and you won't go anywhere. Read the latest version of robotpower?.pde.

The arduino's FTDI chip is a USB serial port, accessed at /dev/arduino1 OR at /dev/ttyUSB0 This was set in some udev config file, and it corresponds to this arduino's FTDI chip serial number.

You can hopefully find the latest version of the robotpower arduino program in the home directory of mchawking. This program is where things like low battery shutoff voltage, and the timeout period for motion commands, are set. | Arduino program as of September 2011

Note that the Arduino program can't see the arduino's serial port (/dev/ttyUSB0) unless it is run by root.

| Robot Arduino without DB25 yet

The battery charger consists of a voltage-regulated power-supply connected to the battery pack through a large Diode. The robot has an AC power plug mounted on a bracket in between the front wheels and facing foward. There is an electrical outlet mounted on a wooden bracket at the appropriate height for electrical docking. There is a USB camera (with built-in LED lights) on the robot which allows for visual alignment of the electrical connection. In the future, the robot will be able to plug itself in by driving up to its special socket, so that the onboard computer does not have to be shut down or manually plugged into mains AC to avoid draining the batteries.

There is a computer (separate from the wheelchair controller which technically has a computer in it) which is in a stamped aluminum case just like the media server. It uses a model | MS-9642 mini-motherboard and a | Mini-Box M3-ATX power supply

The box is currently powered by a custom voltage regulator made by jake. It accepts up to 40 or so volts, but will never deliver more than 23 to the M3-ATX which is hard-limited to 25 volts. If the voltage is at or below 23 volts, its FETs are in full conduction and there is zero dropout. Once on, the M3-ATX will keep the computer running unless voltage goes below 7 volts, at which point the 24-volt battery array of the wheelchair is being seriously damaged.

The voltage regulator's input plugs into a connector coming from the wheelchair controller's blue power connector, which is connected through a T-splitter going to the charger and to the batteries. This is where the voltage regulator gets disconnected when the computer is being worked on, so there are no shocking "surprises". The output of the voltage regulator goes to three tab terminals and a cord to the LCD monitor, to provide the computer's power supply with constant voltage, ground, and a second positive terminal for the unused on/off switch function of the power supply. Read up on the M3-ATX linked above.

A circuitboard zip-tied to the arm-rest interfaces the parallel port of the computer to the joystick. This circuit uses transistors to trick the wheelchair controlbox into thinking that the joystick is somewhere other than at-rest in the center. Of the eight bits of the parallel port, two make the chair go forward, two to the right, two to the left, and two backwards. For each direction, there is one bit causing low speed and another causing medium speed. Both bits cause full speed. This "speed" is separate from the speed control function of the two switches (one of which also controls on/off). A steady-state on the parallel port is not ignored by the circuit, so a computer crash will cause the chair to go out of control. In the future, the Arduino will connect instead of the PC parallel port, and it contains software to "expire" any direction command not refreshed by the PC.

Sensors have been installed on the motor which allow the computer to track movement and speed. An old ball-mouse has been disassembled and its sensors mounted on wires, and these sensors were placed at the open end of the drive motors. An optical interruptor is attached to the end of the motors' driveshafts, so the "mouse" reports movement on the x and y axes of the mouse when the left and right wheelmotors turn. The "mouse" is DB9 serial, and is seen by the computer as a serial accessory rather than as an actual Human Interface Device to move a mouse cursor (this would not be the case if a USB serial adaptor were used). The serial port corresponding to this "mouse" (which uses standard serial mouse protocol to report "movement") is /dev/odometry as set in udev config files.

An LCD monitor has been mounted permanently as the seatback. The ON/OFF switch for the monitor and its built-in amplified speaker-system is a pushbutton switch on the left (as you look at it) "shoulder" of the robot. Sometimes the speakers enter a feedback loop and power to the screen should be shut off to cease this irritation. The monitor is an Inexio touchscreen but we have not implemented the touchscreen function yet.

A robot arm made of mostly aluminum and animated by air-cylinders was fitted to the robot, but few electronic valves and no air compressor or tank have been acquired. Someone will have to invest time and energy to get the arm to do more than make the thing look more menacing. As of 11/15/2010 the arm was removed to make the robot more wieldy/less unwieldy.

Several electrically-operated linear actuators were acquired and would make great "muscles" for a large robot arm made from scratch. The air-powered arm is not a good match though, so a new arm should be made with those linear actuators causing magnified movement at joints such as elbows and a shoulder.

Software

The PC is running a stock Ubuntu with PyParallel being used by the controller program to access the parallel port. All the software from the home directory as of 11/15/2010 is here:

http://spaz.org/~jake/robot-emc/

As of April 2011 the software has been moved around and a lot of projects are in the works. Contact Lilia Kai at gmail or Jake at spaz if you want to get involved in reading or writing programming for the robot.

As of September 2011 the latest motor-control firmware for the Arduino is here:

http://spaz.org/~jake/robot-emc/robotpower8.pde

As always, the latest software is actually on the robot, in ~mchawking/ or ~mchawking/trunk/ or ~mchawking/trunk/scripts/ etc..

Login

username: mchawking
password: [redacted]

Network Connection

The embedded PC is using a Cisco Aironet 1220B which was hardware-hacked by Jake to accept power from the ATX power supply of the computer. This consists of 3.3V and 5.0V which, plus ground, come into it with a custom three-terminal connector. A Generic Realtek USB 802.11b interface, which is sub-excellent, is also available in case the Cisco is not working or if the robot needs to access an 802.11b network.

The Cisco Aironet 1220B named wbr2 on the wheelchair associates to a matching Cisco 1220B named wbr1 at 2169 Mission. They use 802.11a to communicate on a dedicated channel. They use the default username and password for that platform. The embedded PC uses its ethernet port eth1 to talk to the Noisebridge network via a connection to wbr2's ethernet port.

The embedded PC is configured from /etc/networks/interfaces Also, Network-Manager which is the gui-compatible 21st century newschool network configuration system is been pushed to the side, possibly for good. The embedded PC is now configured to find the wireless network called noisebridge and take the internal IP below.

Noisebridge internal IP address

The robot's USB wireless interface has claimed an IP on the internal network of

172.30.0.50

Access from outside 2169 Mission

Configuration of the firewall is done (thanks Jof), so that connections to the machine can be initiated from the outside world. This is important if people are expected to log in and drive it around from Germany or Singapore.

DNS entry

In the future someone will assign that IP address a DNS entry like

robot.noisebridge.net

Local Operation

The electric wheelchairs' controller brain will not allow movement unless the joystick is at rest for a second when power is switched on. If the computer has not initialized the parallel port to the "stop" bitpattern, and the switch is flipped on, the green LED will flash endlessly because it thinks you are leaning on the joystick and don't intend to do so.

The drive-wheels have clutches which can be disengaged from their motors (and brakes) by pressing a button and rotating a collar until it can be pulled outwards. When the clutches are disengaged, the robot can be pushed around like a shopping cart, and the motors can be activated without actually causing movement. Sometimes the robot must be pushed forward or backward in order to engage or disengage the wheel clutches, because they are like gears and only fit together in some positions.

Disengaging the clutches before testing movement software is highly recommended, as you will be able to see the motors trying to run you over without the robot being able to actually do it. This is like taking the laser off of Johnny Five before sending him to the lightning-prone recharging booth.

Operation Outside 2169 Mission

The robot has been successfully field tested at a local convention. The procedure to convert the robot for operation outside Noisebridge is:

  • Connect to the Cisco Aironet 1220B wireless device behind the monitor with an RS232 to RJ45 cable, wired to the Cisco pinout, and set your computer's terminal to the appropriate baud rate and settings. The following instructions assume familiarity with the programming of Cisco wireless devices through a serial connection.
  • Log into wbr2 and say "enable". Enter the password.
  • Say "copy nvram:outside-config nvram:startup-config", then "reload".
  • Once wbr2 has restarted, there will be an 802.11a wireless network named "robots" you can associate to.
  • Secure any loose items on the robot. Put a garbage bag or something over the rest to protect connectors from splashes.
  • Inflate the tires and check for leaks.
  • Charge the robot's batteries fully, just in case.
  • Power down the robot and move it to wherever it needs to go. Follow the instructions under "local control" if you'll be driving.
  • Once at the destination, if your computer has 802.11a (5.8GHz) wifi (many Macbook Pros have this), you can log into 172.30.0.50 over the "robots" wireless network to do whatever you need to do.

When ready to return:

  • Charge the robots batteries fully.
  • Put a splash guard on the robot's exposed bits again.
  • Secure any loose items on the robot.
  • Inflate the tires and check for leaks.
  • Power down the robot and move it back to 2169. Do not do this in a hurry. Take note of public transit instructions for wheelchair users BEFORE arriving at the station or stop.
  • Once back at 2169, clean the robot.
  • Log into wbr2 and say "enable". Enter the password.
  • Say "copy nvram:noisebridge-config nvram:startup-config", then "reload".


Autonomous Behaviors

Face Following

  1. Switch on monitor & grab wireless keyboard.
  2. Switch on wheelchair (on low speed!) and
  3. As user mchawking, open a terminal window in home directory.
  4. ./botsetup.sh
  5. cd trunk/scripts/lilia/
  6. python noise-bot.py