4 ms·
I worked for Unimation, the company that invented Robots. The 'research lab' consisted of myself and Ming. We were, I believe, the first people to ever connect
by daly 9y ago
I worked for Unimation, the company that invented Robots. The 'research lab' consisted of myself and Ming. We were, I believe, the first people to ever connect a computer to a robot. It was a PDP-1103 (https://en.wikipedia.org/wiki/PDP-11#/media/File:DEC_LSI11-23.jpg https://en.wikipedia.org/wiki/PDP-11#/media/File:DEC_LSI11-2...) connected to a 6-axis industrial robot (http://www.robothalloffame.org/inductees/03inductees/unimate.html http://www.robothalloffame.org/inductees/03inductees/unimate...).
We built a board to talk to the robot by replacing the robot plated-wire memory (https://en.wikipedia.org/wiki/Plated_wire_memory https://en.wikipedia.org/wiki/Plated_wire_memory) with our wires. We ran into two problems. The first was a hardware bug. We had a 'ground loop' (https://en.wikipedia.org/wiki/Ground_loop_(electricity) https://en.wikipedia.org/wiki/Ground_loop_(electricity)) when we connected the 5-volt DC computer buss to the 440-volt AC robot. The computer was unhappy.
The programming bug was more subtle. Ming's computer card required a 'trash read' (read-and-ignore-results) in order to initialize the card. So the first read of the robot position required 2 reads, the first result was ignored and the second result was used. Normally I wrote machine language using paper tape. But that week I got a BLISS language compiler (https://en.wikipedia.org/wiki/BLISS https://en.wikipedia.org/wiki/BLISS) from a programmer at CMU. It was a super-optimizing compiler. The machine language program worked. The BLISS language program did not. Ming finally convinced me that the BLISS program, despite what the source code said, was NOT issuing an inital double-read (using an oscilloscope on the data lines). The bug was that the BLISS compiler figured out that the first read results were never used and that it could optimize the first read away, no matter what the source code said. Props to the BLISS guys.
- ljf 9y agoPeople like you are exactly why I love HN - no matter the topic there is someone along with immense personal knowledge and a fascinating story. Thanks for sharing!
- phreeza 9y agoWhat drove the robot before that, just a bunch of relays? Or manual input?
- daly 9y agoThe robot had a 'teach mode'. You used a hand controller to move the robot to a position, pressed a 'teach' button, and then moved to a new position. The values from the 6 position encoders were written to the next memory location when the teach button was pressed. To run the robot you just step the memory and move to the recorded position. Ford had a long (multi-mile) production line. It took weeks to set up a new line, part of which was taken up by robot programming. You had to move the product line a few millimeters, teach a new robot position, and repeat. Our research problem was to teach the robot standing still and then, given information from an encoder on the production line, compute the path that the robot should take to hit the moving position. That would reduce the robot programming time to a few minutes. Really a simple problem. A 7-degree of freedom, non-collision robot path in real time based on static data, programmed on a micro with 8 kilobytes of memory, including space for initial data. Bill Perzley was the 'head of research', on loan from Condec Corp. He was a genius and a super-intense cigar smoker (the harder he thought, the more smoke was generated). He worked out the exact memory data BY HAND to make sure I got the right answers by program. Bill and I flew out to SRI International to learn how to compute robot joint positions from (Richard) Lou Paul. On the flight back to Connecticut we sat in the back of the plane near the restroom studying our notes. Bill was puffing on his cigars. By the end of the flight you couldn't see all the way up the cabin. Those were the days.
- phreeza 9y agoWhat drove the robot before that, just a bunch of relays? Or manual input?
- WalterBright 9y ago> The bug was that the BLISS compiler figured out that the first read results were never used and that it could optimize the first read away, no matter what the source code said. It's called "dead code elimination" in compiler jargon. It's a standard optimization. I don't know where it first appeared.