Help! About real-time communication with Kuka robot

  • Hi,


    I am a new-comer in this forum. And I started to work with Kuka robot just several days ago. The work I want to do is to integrate a laser scanner, which is connected to a PC, with Kuka robot to accomplish 3D scanning. I met problems about getting the robot’s position at real time and synchronizing the scanner and the robot. Following are some of my tests and thoughts. Hope some one can help me to figure out. Thanks in advance. :hilfe:


    (1) At beginning, I wish to develop based on OPC. After test, I am disappointed in its performance. First, it seems that the OPC server do not update the variable more frequently than 5 Hz, which is declared in the Kuka OPC manual. If I use SyncIO to read the $POS_ACT more frequently than 5 Hz, I got several same robot positions, though the robot keeps moving. Then I tried to implement scanning function in the callback function, which is called when OPC detects variable change event. But it seems the interval between the time when the robot’s position changes and the time when OPC detects the change and calls the callback function is not little and also not constant. So, my conclusion is that OPC is not fit for this application. Is it right? :kopfkratz:
    (2) I find a paper in ICRA 2003 which claims that through Ethernet, the real-time robot position can be gotten within 15ms. It seems that TCP or UDP protocol could be used to transmit the robot position when timers triggered in KRL. But I am not sure if it can work, for I have not an idea of the delay of the network transmission. And also, I could not find installation CD for Ethernet-KRL module and the code examples cited in KUKA.Ethernet KRL User Guide. Is it a standard configuration of Kuka robot or optional? I will be appreciated if anyone has the experience can share that with me? :cry:
    (3) Also, I am thinking about hardware trigger method. That means as the scanner take a measurement, at the same time it generates a 24V plus to the robot. The robot controller responses to that plus through interrupt to record its position ($POS_INT), and then send the data through serial communication port or Ethernet. In the Kuka Expert Programming Manual, it says that 4 special inputs (named $MEAS_PULSE) on the peripheral connector X11 could interrupt the controller with reaction time of 125us. But I can not figure out which pins are the special ones after referring to manual “Operating Handbook Connection / Periphery”. Does anyone know that? And about the serial communication, I also could not find in manuals the detail introduction of the corresponding instructions in KRL (CREAD, CWRITE etc). Can anyone share a manual with me? :oops:
    (4) Finally, I think maybe another hardware trigger method is valuable. With that method, robot controller will record its position in an interrupt procedure which is triggered by a timer, then it send a 24V output signal to the external equipment, say the scanner, to trigger the measurement. Then robot position is sent to the PC for 3D reconstruction. But from my experience on ABB robot, it seems sometimes there is a delay of about one control cycle of robot existing between the position recorded and the digital output sent. Is there someone have the similar experience on Kuka robot? :huh:


    It is a quite long question list. I hope it is not bothersome. And I will appreciate your experts’ responses (in English please). Thanks a lot. (My email: wushuihua@eyou.com) :hilfe:

  • Schritt für Schritt zum Roboterprofi!
  • Hi Shuihua,


    first of all I have to say that I have absolutely no experience with KUKA robots :pfeif:
    so I can't answer a single of your technical questions.


    But maybe I can suggest some ideas if you give a little more information:
    - what precision/resolution do you want to achieve ?
    - how fast do you want to move ? (mm/s)
    - what is your method of measuring:
    do you want to scan in straight lines over the object and take the distance/height from the laser
    or do you want to keep the laser on constant distance to the object an take the height from
    the robots position ?
    - what objects do you want to scan ? (concave/convex) Do you need all 6-axis ?


    addi

  • Dear Addi, thanks for your suggestions.


    The accuracy I want to achieve is 0.2mm. The expected scanning speed is 20mm/sec. I want to scan the point cloud of the surface of one workpiece. It is 3D (x,y,z). The scanning processes are as follows:
    (1) The scanner can take a snapshot of the laser line and then reconstructs the 3D points.
    (2) Robot's position at that exact moment should be recorded.
    (3) The data from the scanner and the robot position will be integrated to reconstruct the scanned point.
    So, according to the requirement, I hope the syncronization time of the scanner and the robot should not more than 10ms.


    Thanks.

  • Shuihua,


    OK, so what about not reading the position from the robot but calculate it yourself. :huh:


    Idea: I think the robot will have the ability to move at constant speed with good accuracy (regarding the speed)
    This is important for example in glueing applications.
    So if you take the start- and stop-point of one straight scan movement (taking into account the acceleration/deceleration
    ramps), you can calculate the scanner position at any point in time.
    If the scanner is then triggered/read with an accurate time rate you will have a relatively accurate position without
    the need of reading the robots position. All calculations can be done on the PC.


    What do you think ?


    regards
    addi

  • Sounds like a SICK IVC Cam.


    I had the same Problem a few weeks ago. But I only need a accuracy of 1-2mm.
    I used a fix Velocity of the robot. The scanrange is 800mm. After the Robot reached the programmed velocity, the signal for the cam is triggerd on by an interrupt and off by "trigger on Path" 100mm before reaching the end position.
    After the cam calculated the data i send via serialport to an opc-client and from the client to ProConOs Soft-PLC. The SoftPLC sends it to the Robot by SOFTPLCREAL[] Variables.

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

  • The solution suggested by IrrerPolterer presents a good work-around :grinser043:


    In case such solution does not work for you, you might wanna use a fieldbus-card
    in your robot, for example the Hilscher Profibus-Card. Fieldbus-Cards are options
    to be ordered with the robot, but may also be retrofitted. However, you'll need to
    explicitely state that you require a Hilscher Prodibus Card, as KUKA normally delivers
    a Siemens-Card when ordering Profibus. The KRC internal communication with the
    Siemens-Cards occurs in the IPO-cylce which is currently 12ms. However, from what
    i know, the communication method KUKA uses for the Hilscher-Cards allows data
    exchange in 4ms cycles.


    Such card, in conjunction with the KUKA ProConOS Softplc you should allow you
    to exchange data at a 4ms deterministic update rate. Your external PC would
    also need to be equipped with a Fieldbus-Card of course.


    According to the KUKA ProConOS manual, calling the function block which reads the
    robots kartesian position from the real-time system should not be called in intervals
    shorter than 12ms if the application allows so, as this call causes high CPU load, but
    well, it says "should...". If your robot is a new generation robot with 2Ghz CPU then
    calling the function block in 4ms intervals could well work. If the ProConOS task-
    management and fieldbus is configured accordingly, 4ms should be achievable this
    way. But don't take this as a guarantee. You might wanna talk with a KUKA-Expert
    to get a *hopefully* binding answer.


    Regards, Peter :)

    APT Techniques GmbH<br />Software-Entwicklung für Roboter &amp; SPS.

  • Thanks all. You are so kind. I will try the solutions in my application.


    As a newly-contact-Kuka man, I am not familiar with some detail about Kuka robot. Can someone give me some guidance of the programming of Ethernet-KRL and the serial communication on the robot?


    Thanks.


  • Sounds like a SICK IVC Cam.


    I had the same Problem a few weeks ago. But I only need a accuracy of 1-2mm.
    I used a fix Velocity of the robot. The scanrange is 800mm. After the Robot reached the programmed velocity, the signal for the cam is triggerd on by an interrupt and off by "trigger on Path" 100mm before reaching the end position.
    After the cam calculated the data i send via serialport to an opc-client and from the client to ProConOs Soft-PLC. The SoftPLC sends it to the Robot by SOFTPLCREAL[] Variables.


    IrrerPolterer - two quick questions. I am struggling with an IVC-3D at the moment. When you say "after the robot reached the programmed velocity", do you 'guess' when the robot is at programmed speed, or is there a System Variable that I can use?


    I have written a Visual Basic program that will run under XPe on the robot. The IVC will send information via TCP/IP to the VB program, which will then transfer the data into Global Variables using CrossCom. This sounds easier than your method of using ProConOs, but as I have never done it before, I am now concerned that my way will not work. Am I doing something wrong? :huh:

  • When you say "after the robot reached the programmed velocity", do you 'guess' when the robot is at programmed speed, or is there a System Variable that I can use?


    I use $VEL_ACT for that...



    Zitat


    I have written a Visual Basic program that will run under XPe on the robot. The IVC will send information via TCP/IP to the VB program, which will then transfer the data into Global Variables using CrossCom. This sounds easier than your method of using ProConOs, but as I have never done it before, I am now concerned that my way will not work. Am I doing something wrong? :huh:


    The ProConOs does a lot of more in my application. Auto-Extern, Controlling some components and so on...ProConOs has it's own OPC-Server. And my VB-Client gets access using the dlls from ProConOs OPC-Server! :)
    And the easiest way to send variables to the robot is the proconos library ExVarLib by KUKA! You can send REAL, BOOL or Integer Vars using this library. You can Use $SOFTPLCREAL[1...256?] /$SOFTPLCBOOL[...],$SOFTPLCINT[...] directly in the robotprogram.
    Another way is the $SEN_PINT[] Variable

    Greetings, Irrer Polterer!

    Wie poste ich falsch? Nachdem ich die Suche und die FAQ erfolgreich ignoriert habe, erstelle ich das gleiche Thema in mehreren Unterforen, benutze einen sehr kreativen Titel wie "Hilfe", am Besten noch mit mehreren Ausrufezeichen, und veröffentliche einen so eindeutigen Text, dass sich jeder etwas Anderes darunter vorstellt.


    Life is a beta version. Full of bugs and no Manual.

    Einmal editiert, zuletzt von IrrerPolterer ()

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