Robot, Model, and Measurements
This section describes the robot, the reduced model used by all model-based estimators, and the contact model.
Contact Model
The obstacle is a plane at a known position along its normal. We place candidate contact points at the 12 joints and the tip, with normal forces and gaps.
The last condition, complementarity, states that force acts only where the robot touches the obstacle. Contact in the estimators is frictionless; Section 5.4 tests the effect of friction in the ground truth.
Identifiability and Detectability
This section shows that tendon measurements cannot locate contact on their own and that complementarity supplies the missing information. We first analyze the quasi-static map from forces to measurements, and then the dynamic system with unknown contact inputs.

Constrained Moving Horizon Estimation
This section presents the estimator, its real-time implementation, and its stability.
Real-Time Iteration
Following prior work, we solve one Gauss–Newton quadratic program (QP) per sample, linearized at the window from the previous sample shifted by one step. The residual Jacobians come from small per-stage functions compiled to C, which compile in minutes, unlike a function for the whole window. We solve the QP with OSQP, warm-started and polished, with specified solver tolerances.
Because complementarity is nonconvex, we replace it in the QP by a linearized penalty.
The real-time estimator takes 28 ms per sample on average (95th percentile 47 ms; 2.2% of samples above the 50 ms budget) in Python on a two-core virtual machine, with accuracy equal to the fully converged MHE.
Simulation Study
This section compares the estimators on a finite-element ground truth. We first describe the setup and baselines, and then report the nominal comparison, robustness tests, convergence, model mismatch, and a control experiment without contact.

Discussion and Conclusion
We presented an analysis and an estimator for locating contact on tendon-driven continuum robots using only tendon lengths and tensions. A key takeaway is that the information needed to locate contact is not in the measurements but in the geometry: tendon measurements leave at least seven force directions unobservable, and a known obstacle with complementarity restores identifiability and strong detectability. Using this insight, we presented a constrained MHE that runs in real time and locates contact to approximately 1 mm in a finite-element benchmark, where a tuned EKF with projection does not. The control experiment without contact, in which the MHE and the EKF performed identically, confirms that the benefit comes from the constraints rather than from the optimization.
The approach is well suited to tasks in which the geometry of the surroundings is known or can be measured beforehand, such as instrument guidance against registered anatomy or manipulation inside known enclosures. There are situations in which it would not be the choice, such as contact with unknown or moving obstacles, where shape sensing remains necessary. One question that remains open is how best to combine the two: for example, by estimating a parametrized obstacle together with the contact forces.
Acknowledgment
Portions of the manuscript text, the simulation and analysis code, and the figures were drafted with the assistance of the AI system Claude (Anthropic); the author reviewed, verified, and takes full responsibility for all content.
Data and Code Availability
The simulation scenes, estimator code, and result data are available from the author upon request.
Frequently Asked Questions
Can tendon measurements alone locate contact? No. The analysis finds at least seven force directions unobservable from tendon measurements alone.
What provides the missing information for contact localization? A known obstacle geometry and the complementarity condition restore identifiability and strong detectability.
How accurately does the estimator locate contact in the benchmark? It locates contact to approximately 1 mm in the finite-element benchmark.
How quickly does the real-time estimator run? It takes 28 ms per sample on average, with a 95th-percentile time of 47 ms.
