Universal Robots Forum

RTDE connect with C#

Hi all,

I’m doning that control UR3 with C#, socket communication.

I have success the control UR3 using the URscript functions like this:

string strQhome = "movej(p[0.20, -0.20, 0.50, 0.0, 2.20, -2.20], a=1.4, v=1.05, t=0, r=0)" + "\n";
byte[] sendURbuffer = Encoding.UTF8.GetBytes(strQhome);
socket_UR.Send(sendURbuffer);

However, I wanna feedback(or listen) from my UR3 state data(like actual_TCP_pose, is_steady… etc.) using the RTDE interface.

I already checked the UR support site, but I don’t understand how to work the RTDE interface using C#.

Is any example for C#?
or
Send to the some protocol to UR3 using socket communication?

Please help me.
Thank you.

2 Likes

It is not easy to implement an RTDE client using C#. I have done it successfully for my company’s product but won’t be able to share any code.

You will need to follow and truly understand the RTDE specification and the example Python implementation provided at the support site you linked. One significant problem you will face with C# is that CLR on Windows uses small-endian byte order while the RTDE messages need to be in the big-endian (“network”) byte order so you need to do your own marshalling.

I also found it useful to capture packets from the reference Python implementation using Wireshark and compare those with my own implementation. This way I also noticed that the RTDE specification had some errors and missing important information that I reported and have since been corrected.

Thank you…!

I’ll try something as your advise!

You have to be careful with UTF8 encoding. Controller expects ASCII codes, and will not recognize multibyte UTF8 encoded characters (or worse, misinterpret them). In production code you should either make sure that no character is encoded as multibyte, or use ASCII encoding.

2 Likes

OMG…!
I don’t know about that… wow…
Thank you so much !!!