Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
|
project:nr5 [2012/05/27 01:39] 109.192.98.64 |
project:nr5 [2012/07/12 16:21] (aktuell) 109.192.98.64 |
||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | |||
| ====== Nr. 5 - resurrection / Mitsubishi Movemaster RM-101 ====== | ====== Nr. 5 - resurrection / Mitsubishi Movemaster RM-101 ====== | ||
| {{tag>project software hardware electronics computing }} | {{tag>project software hardware electronics computing }} | ||
| Zeile 6: | Zeile 7: | ||
| Der Mitsubishi Movemaster RM-101 ist ein 5-Achsen-Roboterarm. | Der Mitsubishi Movemaster RM-101 ist ein 5-Achsen-Roboterarm. | ||
| Das Geraet wurde ca. 1984 gebaut. | Das Geraet wurde ca. 1984 gebaut. | ||
| + | |||
| + | ===== Media ===== | ||
| + | |||
| + | * [[http://vimeo.com/44572459|initial show off video @ vimeo]] | ||
| + | * [[http://twitter.com/4RM4/status/216724331542216704/photo/1/large|Light Painting]] | ||
| + | * [[http://hackaday.com/tag/rm-101/|Hackaday]] | ||
| + | * [[http://www.youtube.com/watch?v=hqOJN07eqFo|Pen Plotting]] | ||
| ===== Zustand ===== | ===== Zustand ===== | ||
| Zeile 11: | Zeile 19: | ||
| Etwas angeschmutzt, Reinigung und Schmierung erforderlich. | Etwas angeschmutzt, Reinigung und Schmierung erforderlich. | ||
| Der Anschluss "CON3" wurde mit einem 25p-Sub-D-Stecker verbunden. | Der Anschluss "CON3" wurde mit einem 25p-Sub-D-Stecker verbunden. | ||
| - | Eine Gehaeuseblende fuer den Anschluss fehlt. | + | Eine Gehaeuseblende fuer den Anschluss <del>fehlt</del> wurde angefertigt. |
| Die Belegung des Steckers legt den Anschuss an einen Printerport nahe. | Die Belegung des Steckers legt den Anschuss an einen Printerport nahe. | ||
| Zeile 67: | Zeile 75: | ||
| ===== ToDo ===== | ===== ToDo ===== | ||
| - | * Anschlussblende anfertigen und montieren. | + | * <del>Anschlussblende anfertigen und montieren</del>. |
| - | * den db25-Stecker mittels gewinkelter Pfostenleiste an das Geraet anbinden. | + | * <del>den db25-Stecker mittels gewinkelter Pfostenleiste an das Geraet anbinden.</del> skipped. |
| - | * Ansteuerung reversen. | + | * <del>Ansteuerung reversen.</del> |
| ===== Quellen ===== | ===== Quellen ===== | ||
| Zeile 83: | Zeile 91: | ||
| * [[Mitsubishi RV-M1 Instruction Manual |RV-M1]] gibt moegliche Tips fuer Befehle auf p.62(pdf) sec.3.3.1(toc) ff. Es wird explizit erwaehnt, dass der Robot als Printer angeschlossen werden kann. | * [[Mitsubishi RV-M1 Instruction Manual |RV-M1]] gibt moegliche Tips fuer Befehle auf p.62(pdf) sec.3.3.1(toc) ff. Es wird explizit erwaehnt, dass der Robot als Printer angeschlossen werden kann. | ||
| * [[http://linuxcnc.org/|LinuxCNC.org]] Steuerungssoftware (für wenn's tut) | * [[http://linuxcnc.org/|LinuxCNC.org]] Steuerungssoftware (für wenn's tut) | ||
| + | * [[http://www.etf.unssa.rs.ba/~slubura/robotika/sarajevo/ROBOT/calgari/ROBSYM.HTM|Denavit-Hartenberg parameters -> RM-101]] | ||
| + | |||
| + | ===== Manual ===== | ||
| + | |||
| + | On shack@shackit:mitsubishi-rm101 . | ||
| + | |||
| + | ===== Firmware Reverse Engineering ===== | ||
| + | |||
| + | ROM-Dump and IDA-Database on shack@shack:mitsubishi-rm101 . | ||
| + | |||
| + | ==== Kommandos ==== | ||
| + | |||
| + | Jedes Kommando besteht aus einem einzelnen Großbuchstaben, gefolgt von 0-7 Parametern, durch Kommata getrennt. Leerzeichen werden ignoriert. | ||
| + | |||
| + | Parameter können Hex oder Dezimal sein, + oder - als Präfix sind erlaubt. | ||
| + | |||
| + | Ein Kommando nimmt entweder keine, einen Hex- oder 1-7 Dezimalparameter. Hex und Dezimal werden nie gemischt. Maximallänge inkl. eventuellem Präfix in Klammern. | ||
| + | |||
| + | Wenn das Gerät im Error-Zustand landet (Error-LED, falscher Input), akzeptiert es nur noch das Kommando "N" (wahrscheinlich Reset). | ||
| + | |||
| + | ^ Kommando ^ Parameter ^ Kommentar ^ | ||
| + | | C | none | Schliesst den Greifer | | ||
| + | | E | 1 dez(3) | geraten: Save position (evtl. vertauscht mit M) | | ||
| + | | F | none | Oeffnet den Greifer | | ||
| + | | H | none | Set Current Position to Home Position | | ||
| + | | I | 6 dez(4) | Relative Bewegungen um 6 Achsen, s.u. | | ||
| + | | L | 1 dez(1) | | | ||
| + | | M | 1 dez(3) | geraten: Move to saved position | | ||
| + | | N | none | "neutrale" Position -- die, die er beim Einschalten hatte | | ||
| + | | O | 1 hex(4) | | | ||
| + | | P | 7 dez(4) | wahrscheinlich entsprechend PS bei RM-501 | | ||
| + | | Q | 1 dez(2) | | | ||
| + | | S | 1 dez(1) | | | ||
| + | | T | 1 dez(2) | | | ||
| + | | U | 4 dez(1) | Parameter müssen 0 oder 1 sein | | ||
| + | | V | 4 dez(1) | gleicher Code wie U, nur wird ein Zwischenergebnis invertiert | | ||
| + | |||
| + | === Kommando "I" === | ||
| + | |||
| + | allg: I1,2,3,4,5,6 | ||
| + | |||
| + | ^Stelle^Gelenk^Funktion | ||
| + | | 1 | Drehachse, Achse 1 von unten | "-" gegen Uhrzeigersinn "+" Uhrzeigersinn | ||
| + | | 2 | Schulter | "+" heben "-" senken | ||
| + | | 3 | Ellenbogen | "+" heben "-" senken | ||
| + | | 4 | Handgelenk | Differential, "rechts" "+" nach unten, "-" nach oben | ||
| + | | 5 | Handgelenk | Differential, "links" "+" nach oben, "-" nach unten | ||
| + | | | | Hand hoch: 4. Stelle negativ, 5. Stelle positiv, gleicher Betrag | ||
| + | | | | Hand runter: 4. Stelle positiv, 5. Stelle negativ | ||
| + | | | | Hand drehen: 4. und Stelle gleiches Vorzeichen, , gleicher Betrag | ||
| + | | 6 | Greifer | "-" oeffnet, "+" schliesst | ||
| + | |||
| + | 7200 ergibt eine Drehung des Greifers um 360 Grad. | ||
| + | |||
| + | Wenn ein Parameter die Betriebsgrenzen ueberschreitet, verliert das System Steps und | ||
| + | die Neutrale Position geht verloren -> Neukalibrieren. | ||
| + | |||
| + | ==== Tests 2012-06-18 ==== | ||
| + | |||
| + | ^ Kommando ^ Reaktion ^ Massnahme ^ Schluss ^ | ||
| + | | A | Error-LED | Power-Cycle | | | ||
| + | | N | none | - | | | ||
| + | | AN | Error-LED | - | | | ||
| + | | A\nN | Error-LED | - | N macht KEINEN reset | | ||
| + | | ' ' | none | - | | | ||
| + | | F | none | - | | | ||
| + | |||
| + | protokoll: | ||
| + | <code> | ||
| + | F oeffnet den Greifer, setzt Error-LED | ||
| + | N schliesst den Greifer, setzt Error-LED | ||
| + | F -> keine Reaktion | ||
| + | Power-Cycle | ||
| + | F0 oeffnet den greifer, schliesst ihn, oeffnet ihn abermals, setzt Error-LED | ||
| + | N schliesst den Greifer, setzt Error-LED | ||
| + | F0 -> keine Reaktion | ||
| + | F -> keine Reaktion | ||
| + | Power-Cycle | ||
| + | F oeffnet den greifer, keine Error-LED | ||
| + | N schliesst den greifer, keine Error-LED | ||
| + | F oeffnet den greifer, keine Error-LED | ||
| + | N schliesst den greifer, keine Error-LED | ||
| + | -> dreck ? | ||
| + | B -> nix, Error-LED | ||
| + | C -> nix, keine Error-LED | ||
| + | Power-Cycle | ||
| + | D -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | E -> nix, keine Error-LED | ||
| + | F -> oeffnet den greifer, keine Error-LED | ||
| + | G -> nix, Error-LED | ||
| + | Power-Cycle -> schliesst den greifer | ||
| + | H -> nix, keine Error-LED | ||
| + | I -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | J -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | K -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | L -> nix, keine Error-LED | ||
| + | Power-Cycle | ||
| + | L10 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | L1 -> nix, keine Error-LED | ||
| + | L2 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | L0 -> nix, keine Error-LED | ||
| + | M -> nix, keine Error-LED | ||
| + | M0 -> nix, keine Error-LED | ||
| + | M1 -> nix, keine Error-LED | ||
| + | M2 -> nix, keine Error-LED | ||
| + | M10 -> nix, keine Error-LED | ||
| + | O -> nix, keine Error-LED | ||
| + | O1111 -> nix, keine Error-LED | ||
| + | Power-Cycle | ||
| + | O1111 -> nix, keine Error-LED | ||
| + | P -> Error-LED | ||
| + | Power-Cycle | ||
| + | Q -> nix, keine Error-LED | ||
| + | R -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | R180 -> nix, Error-LED | ||
| + | S -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | S1 -> nix, keine Error-LED | ||
| + | T -> nix, keine Error-LED | ||
| + | T10 -> nix, keine Error-LED | ||
| + | U -> nix, Error-LED | ||
| + | 'U ' -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | U -> nix, Error-LED | ||
| + | U1010 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | U1010 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | U10,10,10,10 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | U1,1,1,1 -> nix, keine Error-LED | ||
| + | U0,0,0,0 -> nix, keine Error-LED | ||
| + | U5,5,5,5 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | V -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | V1,1,1,1 -> nix, keine Error-LED | ||
| + | V0,0,0,0 -> nix, keine Error-LED | ||
| + | V2,2,2,2 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | W -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | W0 -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | X -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | Y -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | Z -> nix, Error-LED | ||
| + | Power-Cycle | ||
| + | I500,500,500,500,500,500 -> arm bewegt sich um alle achsen :-) !!!!111111!!1einseinself!! | ||
| + | I500,500,500,500,500,500 -> arm bewegt sich um alle achsen :-) !!!!111111!!1einseinself!! -> inkrementelle bewegung | ||
| + | I-500,-500,-500,-500,-500,-500 -> arm bewegt sich in gegenrichtung | ||
| + | </code> | ||
| + | |||
| + | Fazit: | ||
| + | <code> | ||
| + | erste stelle: drehgelenk, achse 1 von unten -gegen Uhrzeigersinn +Uhrzeigersinn | ||
| + | zweite stelle: 1. schwenkgelenk +heben -senken | ||
| + | dritte stelle: 2. schwenkgelenk +heben -senken | ||
| + | vierte stelle: 3. handgelenk differential "rechts" nach unten, "-" nach oben | ||
| + | fuenfte stelle: 3. handgelenk differential "links" nach oben, "-" nach unten | ||
| + | -> hand hoch: 4. st negativ, 5. stelle positiv | ||
| + | -> hand runter: 4. st positiv, 5. stelle negativ | ||
| + | sechste stelle: greifer "-" oeffnet, "+" schliesst | ||
| + | </code> | ||
| ===== Befehle RM-501 ===== | ===== Befehle RM-501 ===== | ||
| Zeile 129: | Zeile 310: | ||
| * keine Reaktion vom Antrieb | * keine Reaktion vom Antrieb | ||
| * Beobachtung: einige Motoren werden richig uebel heiss - obwohl keine Bewegung ausgefuehrt wurde. | * Beobachtung: einige Motoren werden richig uebel heiss - obwohl keine Bewegung ausgefuehrt wurde. | ||
| + | |||
| + | ==== Scripte ==== | ||
| + | |||
| + | simples frontend 'robo': | ||
| + | <file txt robo> | ||
| + | #!/bin/bash | ||
| + | |||
| + | # | ||
| + | # usage: | ||
| + | # robo { n | N } - go to null position | ||
| + | # robo a.b.c.d.e.f [-r] - execute 'I' command with numerical parameters a..f | ||
| + | # - '.' is eqivalent to ',' | ||
| + | # - values of '0' may be omitted e.g.: ..100... = 0,0,100,0,0,0 | ||
| + | # - a trailing "-r" changes the sign of all the parameters | ||
| + | # robo Xn - send arbitrary command | ||
| + | # | ||
| + | |||
| + | IFC=/dev/usblp0 | ||
| + | |||
| + | case "$1" in | ||
| + | n|N) | ||
| + | echo "N" > $IFC | ||
| + | ;; | ||
| + | [-0-9,.]*) | ||
| + | P=${1//./,} | ||
| + | P=${P//,,/,0,} | ||
| + | P=$( echo "$P" | sed 's/,$/,0/' ) | ||
| + | P=$( echo "$P" | sed 's/^,/0,/' ) | ||
| + | #echo "*$P*" | ||
| + | P=$( echo "$P" | tr , '\n' ) | ||
| + | #echo "*$P*" | ||
| + | if [ "$2" = "-r" ]; then | ||
| + | P=$( | ||
| + | echo "$P" | | ||
| + | awk ' | ||
| + | # { print "-"$1"-" } | ||
| + | $1 == 0 { print "0" } | ||
| + | $1 != 0 { print $1 * -1 } | ||
| + | ' | | ||
| + | tr '\n' , | ||
| + | ) | ||
| + | else | ||
| + | P=$( | ||
| + | echo "$P" | | ||
| + | awk ' | ||
| + | # { print "+"$1"+" } | ||
| + | $1 == 0 { print "0" } | ||
| + | $1 != 0 { print $1 * 1 } | ||
| + | ' | | ||
| + | tr '\n' , | ||
| + | ) | ||
| + | fi | ||
| + | P=${P%,} | ||
| + | echo "I$P" > $IFC | ||
| + | ;; | ||
| + | *) | ||
| + | echo "$1" > $IFC | ||
| + | ;; | ||
| + | esac | ||
| + | </file> | ||
| + | |||
| + | ablauf 'nach rechts drehen, karte greifen, praesentieren' 'robo.sh': | ||
| + | <file txt robo.sh> | ||
| + | #!/bin/bash -xv | ||
| + | export PATH=$PATH:/home/shack | ||
| + | # echo "N" > /dev/usblp0 | ||
| + | read () { | ||
| + | : | ||
| + | } | ||
| + | |||
| + | read x | ||
| + | robo 2150,1250,0,1760,1760,0 | ||
| + | read x | ||
| + | robo 0,0,-1000,0,0,-1000 | ||
| + | read x | ||
| + | robo 0,0,0,-250,250,0 | ||
| + | read x | ||
| + | # robo 0,0,-250,0,0,0 | ||
| + | # read x | ||
| + | robo 0,-200,50,0,0,0 | ||
| + | read x | ||
| + | robo 0,-225,150,0,0,0 | ||
| + | #robo 0,50,-25,0,0,0 | ||
| + | read x | ||
| + | |||
| + | # griff | ||
| + | robo 0,0,0,0,0,1025 | ||
| + | read x | ||
| + | robo 0,500,1000,0,0,0 | ||
| + | #read x | ||
| + | #robo 0,-250,-250,0,0,0 | ||
| + | |||
| + | read x | ||
| + | robo N | ||
| + | # present | ||
| + | read x | ||
| + | robo 0,0,0,3600,3600,0 | ||
| + | </file> | ||