Beiträge von Pitl

    Hallo,


    einfach im Controllerobjekt auf Configure >> Configure Controller >> SAFETY_ZONE_SECTION gehen und dann den Power Timeout auf 0 stellen.


    Viele Grüße,
    -Pitl

    Hallo,
    der Code den du zeigst benötigt eine Voraussetzungen damit es finktioniert. Ich habe hier ein kleines Programm, welches dir den Tooloffset eines Tips aus dem Greiferobjekt ausliest und dieses Tool dann setzt. Du musst eigentlich nur den Link zur Variable $object zum Grieferobjekt in deiner Workspace anpassen.
    AUTO $object
    AUTO REAL rob, wait.time, status, tip
    AUTO LOC tool.trans



    rob = 1


    ; Link zum Greiferobjekt in der Workspace
    $object = "/SmartController 155/Gripper R1 Cobra800 (Pro)"


    ; Setzen des Indexes für den die Tooltransformation ausgelesen werden soll (0-basierend)
    wait.time = 3
    tip = 1
    CALL rm.write.num($object, "SelectedIndex", wait.time, tip, status)
    IF status < 0 THEN
    HALT
    END


    ;Auslesen der Tooltransformation des gesetzten Tips
    CALL rm.read.trns($object, "ToolOffset", wait.time, tool.trans, status)
    IF status < 0 THEN
    HALT
    ELSE
    ; Setzen des Tooloffsets
    SELECT ROBOT = rob
    TOOL tool.trans
    END


    Viele Grüße,


    -Pitl

    So sollte es gehen:


    using Ace.Core.Server.Program;
    using System;
    using System.Collections.Generic;
    using System.Diagnostics;
    using Ace.Adept.Server.Controls;
    using Ace.Adept.Server.Device;
    using Ace.Core.Server.Sim3d;
    using Ace.Adept.Server.Motion.Robots;
    using Ace.HSVision.Server.Parameters;
    using Ace.Core.Server;



    namespace Ace.Custom {


    public class Program {


    public AceServer ace;


    public void Main () {

    //IQuattro650 quattro6501 = (IQuattro650) ace["/SmartController /R1 Quattro650"];
    IQuattro650 quattro6501 = (IQuattro650) ace["/SmartController/R1 Quattro650"];
    IAdeptController contr = quattro6501.Controller;
    IBox box = (IBox) ace["/Box"];
    IIODrivenEndEffector iODrivenEndEffector = (IIODrivenEndEffector) ace["/SmartController/Gripper R1 Quattro650"];
    IVariableNumeric varSchritt = (IVariableNumeric) ace["/Numeric Variable Schritt"];

    IVPlusGlobalVariableCollection vPlusGlobalVariableCollection = (IVPlusGlobalVariableCollection) ace["/V+ Global Variables"];
    quattro6501.Parent = null;

    switch ((int) varSchritt.CurrentValue)
    {
    case 1:
    box.Visible = false;
    box.Parent = null; //keine Ahnung wie man einen Parent NULLen kann
    Transform3D transPick1;
    transPick1 = contr.Link.ListL("pick1");
    box.WorldLocation= transPick1;
    box.Visible = true;
    break;

    case 2:
    box.Visible = false;
    box.OffsetFromParent = new Transform3D(0,0,0,0,0,0);
    box.Parent = (ICartesianObject) quattro6501;
    box.Visible = true;
    break;

    case 3:
    box.Visible = false;
    box.Parent = quattro6501.Parent; //keine Ahnung wie man einen Parent NULLen kann
    Transform3D transPlace1;
    transPlace1 = contr.Link.ListL("place1");
    box.WorldLocation = transPlace1;
    box.Visible = true;
    break;

    }



    }
    }
    }


    Viele Grüße,
    -Pitl

    Hallo,
    mit DECOMPOSE kannst du eine Transformation in ihre 6 einzelnen Bestandteile zerlegen. Das geht wie folgt:
    ; Zerlegen der Transformation position in ein Array
    DECOMPOSE world[] = position
    ; Zurordenen der einzelne Werte des Arrays
    x = world[0]
    y = world[1]
    z = world[2]
    yaw = world[3]
    pitch = world[4]
    roll = world[5]


    Ich habe noch nie Transformationen multipliziert aber schon oft addiert. Das geht so:
    trans3 = trans1:trans2


    Viele Grüße,
    Pitl

    Ja die Verlinkungen der Tools müssen gerade gerückt werden.


    Du hast oben in deinem Inspection Tool noch eine rote Flagge, d.h. da ist ein Fehler. Einfach mit der Maus auf die Flagge halten, dann wird der Fehlertext angezeigt.


    -Pitl

    Genau so geht es. Wichtig immer eine neue Sequenznummer vergeben und die Locatormodelle croppen. Sonst speichert ihr bei einer 5MP Kamera für das Model wirklich 5MP Daten ab und das blähr euere Workspace unnötig auf.



    -Pitl

    Sorry für die späte Antwort. Ich war für eine Weile offline, tut auch mal gut.


    Das du von der Bootdiskette aus kein CALIBRATE starten konntest liegt whrscheinlich daran, dass auf der Diskette kein Verzeichnis CALIB vorhanden war, bzw. nicht die entsprechenden Dateien in diesem Verzeichnis vorhanden waren. Leider hast du diese zerschossen, ist halt ein UNIX Format und kein DOS.


    Ich habe aber noch eine Idee. Wenn die High Power, trotz Power Timeout von 15s, das ist der Timeout für das Blinken, sofort reinkommt, kann das an zwei Sachen liegen.
    Die erste hätte mit deinem NVRAM zu tun. Wenn du keine CAT-1 Lizenz hast, kommt die High Power ohne Drücken des Knopfes sofort rein, auch wenn der Timeout gesetzt ist. Welche Lizenzen installiert sind siehst du ebenfalls in Config_c unter dem Menüpunkt Controller NVRAM --> Display NVRAM contents.
    Das zweite wäre dass das Drücken des Knopfes durch eine externe Hardwareverschaltung realisiert wird sobald die High Power angefordert wird.



    Viele Grüße,


    -Pitl

    Das hört sich ganz danach an, wie wenn dein Power Timeout in der Config_c auf 0 steht. Nur wenn dieser nicht auf 0 steht fängt die Taste an zu blinken.


    Das System schaltet jetzt die Leistung direkt ein und das scheint für deinen Robbi zu schnell zu sein. Ich sehe aber noch keinen Zusammenhang zu der leeren Batterie deines NVRAM's. Alle Daten für deinen Roboter stehen im Betriebssystem und das hat mit dem NVRAM nur indsofern zu tun, dass es schaut welche Lizenzen in deinem NVRAM freigeschaltet sind.
    Da du Dallas Chip sagst gehe ich davon aus, dass du eine SIO hast. Wie es aussieht ist da noch etwas mehr defekt als nur die Batterie des Chips leer. Hast du den ein Backup des Betriebssystems auf Disketten, welches du einmal booten könntest.


    -Pitl

    Ich bin nicht sicher ob delta.v2 an dieser Stelle das richtige Tool ist. Leider ist bei Adept die Erfahrung mit von Stäubli entwickelten Tools begrenzt.


    Bitte setz dich noch einmal mit Robotif in Verbindung. Auch wenn die deinen Roboter nicht hochpräzise kalibrieren könnten, sollten die mit den vorhandenen Mitteln zu einem Ergebnis kommen, das besser ist als das jetzige. Es kann natürlich sein, dass die dafür, zu Recht, Geld sehen möchten, bei der Historie des Roboters.


    -Pitl

    OK, dann scheinen die Roboterdaten zu stimmen. Die erste Achse kannst du um 90 Grad verfahren und dann visuell checken ob das auch stimmt. Ich denke aber das deine Kalibrierung einfach nicht mehr in Ordnung ist.


    -Pitl

    Du kannst dir wie oben geschrieben eine Flankenauswertung programmieren.


    Zu deinem Beispiel:


    i.part.avail = 1001



    MOVE lc.pick.prepos


    IF NOT SIG(i.part.avail) THEN
    DO
    WAIT
    UNTIL SIG (i.part.avail)
    END


    MOVE lc.pick
    BREAK



    -Pitl

    Wenn der Roboter nichts machen soll so lange ein Signal 0 ist geht das so:


    i.rob.start = 1001
    IF NOT SIG(i.rob.start) THEN
    DO
    WAIT
    UNTIL SIG(i.rob.start)
    END


    Wenn der Roboter nur etwas machen soll so lange ein Signal 1 ist geht das so:
    WHILE SIG(i.rob.start) DO
    Robbie mach was
    END


    -Pitl

    Da hat Adept doch alles richtig gemacht. Wir stellen uns das nächste Mal wieder neben den Denso Stand, die können dann die Frauen verkaufen und wir die Roboter.


    Ich bin selber auch da gewesen. Bei uns (Adept) gibt es sehr großes Interesse an den Mobilrobotern, so dass wir seit der Automatica schone eine Inhouse Show für die kleinen Flitzer nachgelegt haben und demnächst noch eine machen.


    -Pitl

    Einfach laden. Aus dem Monitor mit load Pfad\xyz.lib und aus dem Programm mit MCS "load Pfad\xyz.lib. V+ ist die Dateiendung von der Sache her egal, die Struktur der zu ladenden Daten müssen stimmen.


    -Pitl