ftRtdeInputEnable() causes immediate PROTECTIVE_STOP (C207A0) in URSim


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:

  1. Call ftRtdeInputEnable(true) — tells the controller to read external_force_torque RTDE input
  2. Start a 20 Hz thread feeding wrench data via setExternalForceTorque()
  3. 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:

  1. 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)?
  2. 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.
  3. 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?
  4. 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.