Posts by ArthurWong

    For anyone who may face the same issue as mine, I would like to summarize my mistakes for your information:

    Regarding the error "Signal flow (running): Object ETHERNET 1 returns error RSITimeout" there are two causes, one is the Ethernet communication isn't set up correctly, the other is the IPOC tag.

    1. Port number: I used the same port number for server and message sent to client (robot) by the server, which is wrong. The port number of client can be defined, but in this case it is automatically allocated by robot itself, and it is not 59152. A naive mistake.

    2. IPOC: I guess this IPOC tag in xml file is used as timestamp. In the packets back and forward between example Testserver.exe and robot, they have the same IPOC number. (I guess) With some level of tolerance, a same IPOC number should be sent back to robot within 100 cycles, otherwise this RSI timeout error happens.

    3. xml.etree.ElementTree: the functions from this library needs some time to execute, be caution of timing.


    and the following is my UDP server code:

    For any RSI project, adding a Monitor object and capturing the data from inside RSI is crucial to debugging.


    I would recommend using WireShark or something similar to check exactly what is being sent to the robot. Tiny formatting errors can be fatal.


    Before attempting motion control, I would suggest trying an RSI program that just receives some data from your server and echoes it back. Isolate the motion issue from the communications issue.

    Hi Skyfire,


    Thank you so much for your advice, they are really helpful. Using wireshark I am able to analyze what is the exact process of UDP communication. Finally I got me bugs fixed, now my server can be used to control robot! Appreicate it!


    bests,

    Arthur Wong

    Hi Quang,


    Thank you so much for your advice. I was really inspired that there is a software to check connection detail. Finally I make my own program working!


    Your project looks quiet fun, what's that for? Using joystick to control robot?


    bests,

    Arthur Wong

    Dear all,


    My robot is kuka KR6-R900, with KRC4 compact and KSS 8.6.6. The version of RSI is 4.0.


    I am trying to connect an external PC to my robot to achieve real time motion control. Right now I am basically following the RSI_Ethernet example in the manual while I developed a UDP server in Python 3.9 to imitate the function of Testserver.exe.


    Testing with Testserver.exe is good, I am able to acquire signal and command movement. However, using my own UDP server, I am able to receive xml message from robot but send command to robot. So I guess the ethernet configuration and UDP connection are alright. What happens is RSI will stop in few seconds after the execution of "RSI_MOVECORR()", and pops out "stop by $CORRECTION function (reset or block selection required)" and "Signal flow (running): Object ETHERNET 1 returns error RSITimeout". Meanwhile my UDP server will terminate after receiving several xml message from robot.


    I guess the possible cause is either the robot address is set wrong in my UDP server, or the XML format is incorrect. I put effort on checking everything but haven't sort this problem out yet. Any advice from you is appreciated!


    My Ethernet configuration:


    robot side:

    IP: 192.168.1.2 (RSI, virtual 6)

    subnet: 255.255.255.0

    (I forget other settings but they are default)


    external PC side:

    IP 192.168.1.1

    submnet prefix length 24

    gateway 192.168.1.2

    DNS 8.8.8.8/ 8.8.4.4


    XML message from robot:

    Code
    <Rob Type="KUKA">
    <RIst X="445.0" Y="0.0" Z="790.0" A="180.0" B="0.0" C="180.0"/>
    <RSol X="445.0" Y="0.0" Z="790.0" A="180.0" B="0.0" C="180.0"/>
    <Delay D="0"/>
    <Tech C11="0.0" C12="0.0" C13="0.0" C14="0.0" C15="0.0" C16="0.0"  C17="0.0" C18="0.0" C19="0.0" C110="0.0"/>
    <DiL>0</DiL><Digout o1="0" o2="0" o3="0"/>
    <Source1>0.0</Source1>
    <IPOC>29106442</IPOC>
    </Rob>


    XML message sent to robot from external PC:

    Code
    <Sen Type="ImFree">
    <EStr>Message from RSI TestServer</EStr>
    <Tech T21="1.09" T22="2.08" T23="3.07" T24="4.06" T25="5.05" T26="6.04" T27="7.03" T28="8.02" T29="9.01" T210="10.00" />
    <RKorr X="0.000" Y="1.0000" Z="0.0000" A="0.0000" B="0.0000" C="0.0000" />
    <DiO>125</DiO>
    <IPOC>53189046</IPOC>
    </Sen>


    UDP server code (Python 3.9):

    I am not suprised that KUKA is not willing to share these info. This is usually treated as company secret by KUKA. I know in the past there have been shared projects between KUKA and other companies or university partners where these data was handed out. Usually the external partner than had to sign a non disclosure agreement. Also in these projects the initiative usually came from KUKA itself by funding e.g. a joint project. So probably you will not have a chance to get the info. As a former long time R&D developer for KUKA dynamics system and trajectory planning algorithms I know this data by heart, but I am also bound by a non disclosure agreement.

    Thanks a lot for providing this information Fubini. If it doesnt violate your non-disclosure agreement, could you please tell me whether the inertia parameter calculated from CAD is close to their true value by any chance?


    I have already realized that KUKA (or maybe any commerical industrial robot) works well on industrial but is not friendly to research facility... sigh

    Hi Fubini,


    I have inquired KUKA FOCUS CENTER in usa about the meaning of inertia parameters in $robcor.dat, and they replied me today that this is the information they are not able to give. Could you please share your experience of how to get this information? Many thanks.


    bests

    a simple way to figure out the dh-parameter:


    where did you get your d1 from (0.1803). Hermanns drawing shows 400mm.

    I your T1 you used the correct values for sin(alpha1) and cos(alpha1).

    Hi “MOM”, thanks to your and Hermanns’s help, I figured out where I was wrong. Right now my T06 is same as KUKA’s calculated TCP value.


    I was wrong in three aspects:

    • For d1 I used 180.3 rather than 400. I derived 180.3 from CAD file, and I think this is the height of movable components of link 1 excluding the base height. 400 includes both moveable components and base height.
    • In A3 I forgot the 25 mm length in along y axis in local coordinate 3.
    • My previous A4 mastering on robot wasn’t correct. It has 90 deg deviation.

    The correct link length of KUKA KR6R900-2:

    a1=25 d1=400

    a2=455

    a3=205 b3=25(along y axis in local coordinate 3)

    d4=215

    a5=67

    d6=23


    and regarding the transformation matrix T06, it is not strictly necessary to follow DH-convention. As long as each local coordinate system is constructed following right hand rule, same TCP can be derived from any transformation matrix. In my case, I set up local coordinate system in each joint, and transformation matrix from i+1 to i is x,y,z of i+1 coordinate expressed with respect to i coordinate system, and displacement of origin of i+1 coordinate with respect to i coordinate system.

    Results:



    T06 code:

    Hi “MOM”, here is my example, sorry for the long delay. I have double checked our type, it is KR6R900-2. I also make sure $base and $tool are set to 0.


    This is the coordinate system I used, which is slightly different from KUKA’s, thus for the same configuration, my angular expression is slightly different from KUKA.

    LInk parameters I used:

    a1=25 d1=180.3

    a2=455

    a3=205

    d4=215

    a5=67

    d6=23


    see my next post for code and results

    so why you are not telling the correct parameters?

    could be helpful for others too

    I didnt find out which parameter is wrong yet. And you are right about WCP calculation from my T06 is wrong. I didnt figure out whether it was wrong robot type, while my link parameter input was wrong anyway.


    our robot type is KUKAKR6R900-2 if my memory is correct.


    the link length I use is from CAD file:

    a1=25 d1=180.3

    a2=455 d2=4.5

    a3=205 d3=-4.5

    a4=3.25 d4=215

    a5=67 d5=-3.25

    d6=23


    I know from the current stage it is a little bit confusing as I didnt define my coordinate system. I will make it clean in the coming example

    I appreciate your help indeed sir, while I have to clarify:

    • I didn’t blame anyone
    • My lab was shut down for maintenance, why are you so pushing? Would it bother you if my example is delayed?
    • Your psychological predication/assumption is opposite
    • I always admit it was my calculation mistake not KUKA’s, and I know the link parameter I input was wrong. The purpose for this post is finding the correct one.

    No the error is actually in x, y and z, around 30 mm, varying case by case. So I highly suspect it was the problem of the link length I input.


    I didn't touch $TOOL and $BASE. I will double check whether they are null. I will post an example.

    so choose the right documentation for your robot to get the correct link length.

    I am using the correct link length from the right documentation, which gives me a different T06 from what robot itself calculates.


    set the values to specific axes value and save the the cartesion positions

    (e.g. set A5 to 0.0 => cart position, then set A5 to 90.0 => difference will tell you the length of the distance between T06 and WCP)

    That is equivalent to collecting data + nonlinear optimization + plenty of debugging time. I just want to save my time and cut the corner.

    Thank you Fubini, that's really really helpful!!! Link inertia identification is actually a part of my research so there is no way around it. You showed me a perfect start point from where I will move forward. Thanks a lot!

    there are a few ways:

    have you checked simulink?


    developing a base system application, like RSI or OccuBot without any help from kuka

    you will not be able to handle any if your ideas

    Thank you "MOM" for all of your help. we are at the very very early stage of research. While KUKA Focus center starts to ignore my questions.... Perhaps I need to check whether we have purchased support package or not.

    RSI connects your real-time motion command into the robot's motion control at a much deeper level than KRL. But it doesn't bypass all of the path/motion planning engine.

    Thank you so much SkyeFire, for your detailed response. We don't plan to bypass all of the trajectroy engine, but we would like to change the command sent to PID controller. That is something possible right?

Advertising from our partners