Issue with driving servo joint position through external connection

I have been using Visual Components Premium v4.8 in conjunction with FANUC ROBOGUIDE (RG) through both FANUC Robot and OPC UA servers. I have been utilizing the group position values from RG to link them to the corresponding servo joints in VC. The positions track well most of the time, but occasionally (mostly during initial movement) the joint seems to make its way to the target position, coast back to starting position, then jump (or rubberband) back to it’s target position. Is there something I need to set up in my environment to prevent this from happening?

This has been causing issues for my simulation as I sometimes have sensors attached to the joint that cause my sequence to proceed based on interaction with other components. When the joint backtracks to starting position the way it does it causes unintended actions to take place.

I also recorded a video of this happening as well as used a python script to track the servo joint’s position (block position) along with the position given from the server. The time scale on the graph should correspond to the time in the video. Note how the logged position does not jump around like the block actually does in the simulation. Does anyone know why VC has this inconsistency?

How are you actually controlling that orange box in VC, is it a link in a component which you have also added to a servo controller and maybe a robot executor behavior? Are there Python scripts involved, and what simulation variables have you connected in the Connectivity feature?

To me it seems like you have 2 or more things fighting over / trying to set the position of the block. If you want the position to be driven by external control through Connectivity, it should be enough to just have a link node with its position tied to a component property using an expression, then just write to that component property from Connectivity.

The orange box is a link in a component, ‘Rail’, added to a servo controller but there are no python scripts involved with that joint movement. The servo joint position VALUE is paired with the server’s motion position through the Connectivity feature.

I think you are absolutely correct. Thank you for pointing out that I can just substitute the joint’s position VALUE with a component property. I did what you suggested there, paired the property to the server’s motion position through Connectivity, and the jumpiness seems to have stopped.

Thanks a bunch, TSy!

1 Like