Setup:
- URSim e-Series 5.21.0 (Docker: universalrobots/ursim_e-series:5.21.0)
- ur_rtde C++ library (latest)
- Goal: inject simulated F/T data via setExternalForceTorque() to drive forceMode() compliance in URSim
What we’re trying to do:
We want to use ftRtdeInputEnable(true) + setExternalForceTorque() to feed external wrench data into URSim’s force controller so we can test forceMode() compliance against a simulated wall (from Isaac
Sim). The flow is:
- Call ftRtdeInputEnable(true) — tells the controller to read external_force_torque RTDE input
- Start a 20 Hz thread feeding wrench data via setExternalForceTorque()
- Call forceMode() — arm should comply against the wall using injected forces
Problem:
ftRtdeInputEnable(true) causes immediate PROTECTIVE_STOP with fault C207A0 (“Fieldbus Input not connected”) ~103ms after the call, every time.
Observed timing from logs:
568.238ms ftRtdeInputEnable(true) called
568.341ms Safety mode: PROTECTIVE_STOP ← 103ms later
Root cause we’ve identified:
ftRtdeInputEnable() internally stops the running URScript, re-uploads it with enable_external_ft_sensor(True, …), and restarts it. This restart takes ~100ms.
During that restart window, setExternalForceTorque() internally calls verifyProgramRunning() which returns false → no data is written to the external_force_torque RTDE register → the built-in 10Hz
(100ms timeout) FT watchdog fires → PROTECTIVE_STOP.
We tried:
- Starting the feed thread before calling ftRtdeInputEnable() — still fires (data can’t reach the register during restart)
- Calling rtde_control_->setWatchdog(0.5) before ftRtdeInputEnable() — no effect (different watchdog mechanism)
- Adding 200ms / 500ms sleep after the call — still fires at ~103ms regardless
Questions:
- The enable_external_ft_sensor() URScript function appears to accept a watchdog_timeout parameter. Is there a way to pass a custom timeout via ftRtdeInputEnable() (the ur_rtde C++ API doesn’t expose
this parameter)? - Is there a way to call rtde_set_watchdog(“external_force_torque”, 2.0, “ignore”) in URScript before enable_external_ft_sensor() is called, so the restart window is tolerated? We tried
sendCustomScriptFunction() but the custom function’s watchdog config is lost when ftRtdeInputEnable() restarts the script. - In URSim 5.x Polyscope, is there a UI option to pre-configure an external F/T sensor? We looked under Installation → Fieldbus and found no F/T sensor option. Is this a URSim limitation?
- What is the recommended approach for testing forceMode() with injected RTDE F/T data in URSim?
This External force-torque sensor implementation article confirmed the C207A0 Fieldbus watchdog issue but didn’t cover the URSim-specific case.