DVT Kamera mit einem RV-3SB

  • Hallo,
    wir stehen vor folgendem Problem. Und zwar haben wir den Projektauftrag in der Schule den Roboter S-Series RV-3SB in verbindung mit einer Kamera zu programmieren.
    Wir wollen es so gestalten, dass wir mit der Kamera einen bestimmten bereich überwachen und dort dann irgend wo einen kleinen Zylinder positionieren können. Die Kamera soll diesen Zylinder erkennen und die position dem Roboter mitteilen.


    Kamera: Cognex DVT 510
    Software: Framework 2.7


    Wir sind jetzt soweit das wir über den Sensor "Objektfind" die Position erkennen und in die Koordinaten des Roboters transformieren. Zusätzlich bekommen wir es hin dass wir die X und Y koordinaten per Datalink ausgeben können. sie werden uns im Terminal angezeigt.


    Da keiner bei uns in der Schule irgend wie ne ahnung davon hat hoffen wir hier hilfe zu bekommen.
    Das ganze hat schonmal funktioniert nur dann wurde was verändert und es lief nicht mehr, daraus haben wir noch folgendes cosimir Programm.
    Nur leider funktioniert das nicht in zusammenhang mit unserer Kamera konfiguration.


    Jetzt hoffen wir, dass ihr uns das programm einmal Kommentieren könnt und uns evtl mitteilen könnt wie der Ausgabe String der Kamera gestaltet werden muss.


    Anbei einmal das schon vorhandene Cosimir Programm:


    10 SPD 1000
    20 ACCEL 100,100
    30 JOVRD 100
    40 CLOSE #1 'close connection 1
    50 DLY 0.25 'delay 0.25 s
    60 CLOSE #2 'close connection 2
    70 OPEN "COM2:" AS #1 'open connection 1 on COM3:Ethernetconnection to DVT-camera(DataLink) Port 10002
    80 OPEN "COM3:" AS #2 'open connection 2 on COM4:Ethernetconnection to DVT-camera(SystemDriver)Port 10003
    90 MPOS = 1
    100 '------------------------------------------------------------------------------
    110 ' Communication with camera
    120 '------------------------------------------------------------------------------
    130 *SCHLEIFE
    140 PRINT #1,"#PSNDeckel";CHR$(13)
    150 PRINT #1,"#PI-2";CHR$(13)
    160 DLY 1
    170 PRINT #1,"#YI";CHR$(13)
    180 INPUT #2,MFOUND
    190 IF MFOUND=0 THEN *ENDE
    200 INPUT #2,MDATAX
    210 INPUT #2,MDATAY
    220 PPICK.X=MDATAX
    230 PPICK.Y=MDATAY
    240 MOV PPICK,-40
    250 MVS PPICK
    260 DLY 0.5
    270 HCLOSE 1
    280 WAIT M_IN(901)=1
    290 MVS PPICK, -40
    300 MOV PPLACE,-40
    310 DLY 0.5
    320 MVS PPLACE
    330 HOPEN 1
    340 WAIT M_IN(900)=1
    350 *ENDE
    360 END


    Hoffe ihr könnt uns Helfen!
    schonmal im Voraus :danke:

  • ANZEIGE
  • Hallo,


    zu der Kamera kann ich leider gar nichts sagen, an dem Roboterprogramm sind allerdings ein paar Sachen auffällig.


    Das Roboterprogramm sendet seine Daten an eine andere Stelle, als die woher es seine Eingaben bekommt. Da muss es also Kameraseitig noch eine Verbindung geben.


    Wie genau die Verbindungen sind, hängt auch noch von den Roboterparametern NETPORT und COMDEV ab. Auffällig ist in diesem Zusammenhang, dass die beiden OPEN-Befehle COM2 und COM3 öffnen, in den Kommentaren aber von COM3 und COM4 die Rede ist.


    Dann hat das Programm drei INPUTs, es erwartet also drei Strings, nicht einen. Wie diese Strings genau aussehen müssen, kann man so auch nicht exakt sagen, weil das u.a. von den Parametern CPRCE13 und evtl. auch CTERME13 abhängen kann.



    Gut, nachdem das Programm also etwas irgendwohin gesendet hat, erwartet es eine Zeile, in der eine Zahl steht.


    Also etwas in der Form


    Code
    1<CR>


    oder


    Code
    PRN1<CR>


    Das hängt von den Parametern ab.


    (Ich schreibe hier <CR> wenn ich das Zeichen mit dem Code 13 meine.)


    Ist die Zahl, die geschickt wurde, ungleich 0 geht es weiter, sonst ist das Programm zuende.


    In ersterem Fall wird dann auf zwei weitere Zeilen gewartet, die z.B. so aussehen könnten:


    Code
    123.4<CR>
    567.8<CR>


    oder


    Code
    PRN123.4<CR>
    PRN567.8<CR>



    Warum man das so umständlich macht und nicht einfach nur eine Zeile schickt, kann ich nicht sagen, vielleicht kann es die Kamera nicht besser.


    Als Optimierung würde ich jedenfalls vorschlagen, die Zeilen 200 und 210 wegzulassen und die 180 in


    Code
    180 INPUT #2,MFOUND,MDATAX,MDATAY


    zu ändern.


    Dann könnten die Daten so aussehen


    Nichts gefunden:


    Code
    0,0,0<CR>


    Gefunden


    Code
    1,12.05,-2.74<CR>



    Vorausgesetzt die Kamera kann so etwas.



    Grüße


    Urmel

    Einmal editiert, zuletzt von Urmel ()

  • Wenn dir die Kamera die Koordinaten auf einen Terminalprogramm anzeigen kann, ist die eigenliche Arbeit getan. Folgende Vorgehensweise hat sich dabei bewährt:


    Stelle den Zylinder an einen zentralen Punkt, teache den Roboter auf diese Position. Dieses ist die Referenzposition. wenn du nun eine veränderte Positon findest, einfach die Vektoränderung ausrechnen.


    Ein Beispiel:
    Referenposition - (+100.00,+50.00,+250.00,+0.00,+0.00,+0.00)
    Erkannte Position - (+150.00,+150.00,+250.00,+0.00,+0.00,+0.00)


    Das heißt, du hast eine Verschiebung in x + 50mm, und Y +100mm


    Bevor du einen Gegenstand greifst, hast du ja eine Anfahrposition , glaube PPick,-40. In PPick rechnest du die Verschiebung hinein, das war alles.


    Die Kamera muss nur immer gleichartige Ausgabestrings erzeugen, zb xxxx,yyyy,zzzz,aaaa,bbbb,cccc. Das kannst du nun im Robbi in seine einzelteile zerlegen.

Erstelle ein Benutzerkonto oder melde dich an um zu kommentieren

Du musst ein Benutzerkonto haben um einen Kommentar hinterlassen zu können

Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Geht einfach!
Neues Benutzerkonto erstellen
Anmelden
Du hast bereits ein Benutzerkonto? Melde dich hier an.
Jetzt anmelden