I’m currently doing my internship, and I created a pick-and-place program for testing using RTDE Connection with the ur-rtde library.
The program runs fine at first, but after running for a long time (sometimes after many minutes), it randomly throws an error. Sometimes it completes successfully with no issues, but other times it fails with this error message:
RTDEReceiveInterface boost system Exception: End of file
i already use an wired ethernet cable and switch.
My current idea is to connect before i need some information from RTDEReceive like getactualTCP() and disconnect the RTDEReceiveInterfaceafterwards.
Is this a reasonable approach? Are there better patterns to avoid this RTDE errors ?
Does anyone know what might be causing this error? Thank you
I’m having exactly the same error message issue. I’m using RTDE to read the status of a Digital Input. The program starts working fine, but after a few seconds, this message appears in the Terminal and the program stops working.
The full error message is:
RTDEReceiveInterface boost system Exception: (asio.misc:2) End of file [asio.misc:2 at C:\Local\boost\include\boost-1_85\boost/asio/detail/win_iocp_socket_recv_op.hpp:89:5 in function ‘void __cdecl boost::asio::detail::win_iocp_socket_recv_op<class boost::asio::mutable_buffers_1,class <lambda_a02243a1da368a9ee5e01ff4be82f2bd>,class boost::asio::any_io_executor>::do_complete(void *,class boost::asio::detail::win_iocp_operation *,const class boost::system::error_code &,unsigned __int64)’]
Hi,
I’ve found a potential solution, but I’m still testing it to confirm whether it really works.
For context, I’m using a program for testing purposes, and originally it included a time.sleep(1 hour) delay. After that i need to get actual Joint position, and sometimes it gets error. I replaced that with a while loop that frequently calls rtde_receive to receive information.
And from this reference i found, the buffer can overflow if you don’t continuously retrieve data.
So, my approach is to call getActualTCP() and getActualQ() frequently, as those are the only pieces of information I need. So far, it’s been working, but I’m still in the testing phase to make sure it’s stable.
Using the GitHub link you shared, I followed the tips from the people there and managed to get the Robot working the way I want. I still get that error, but when the connection drops, it’s quickly reestablished. I’ll try to find ways to avoid the connection drops, but for now, I can use it this way.
After a some testing, I have an update. I found that frequently calling the RTDE receive without using it solved the problem. In my case, for example, I only use the actual TCP position and the actual joint position. So I just called the two of them frequently. This made the rtde_receive connection stable.