Interactive companion to the paper
Actuation and Control of Passive Tendon-Driven Soft Extensions Through Rigid Manipulator Motion
A passive soft extension is mounted at the end effector (EE) of an industrial manipulator, and its tendons are anchored to arm links upstream of the EE. Joint motion changes the exterior spans \lo_i of the tendons and therefore their tensions, which bend the soft extension. The manipulator thus positions the soft extension and also actuates its tendons, whereas the soft extension itself contains no motors, sensors, or electronics.
When the task constrains the pose of the EE, for example when the tool passes through an access aperture, only the joint motions compatible with this EE constraint can actuate the soft extension. The controller regulates the tip in the null space of the EE constraint with a damped least-squares control law. Its model combines the analytic arm and tendon kinematics with a deformation map identified from probing motions, and quadratic programming with control barrier functions imposes obstacle-clearance, fulcrum, and model-validity constraints. The analysis bounds the number of deformation directions that the tendons can transmit under an EE constraint and shows that a weighted tip-error function does not increase under the nominal control law.
These pages illustrate the model, run the closed loop on the simulated UR10 of the paper, and animate the analysis. The simulations run in the browser, with a JavaScript port of the Python package of this repository.
Video
the mechanism, the simulations, and the six experiments on the real setup
The video shows how joint motion changes the tendon spans and deforms the soft extension, the three EE constraints and the barrier functions, the three simulated scenarios, and the six experiments on the real setup.
On the real setup, a UR10 carries handmade soft extensions of foam tubing, each costing less than US$10, with two cord tendons in parallel or helical routing. An RGB-D camera measures three body points and the tip. The experiments regulate the tip with a free EE, a position-constrained EE, and a fulcrum at a finite aperture, with virtual obstacles.
Each experiment is shown with the camera view, a 3-D view from the log, and the tip error, spans, and barrier values over time (3 min). Download the video (MP4, 16 MB)
Interactive pages
in the order of the paper
Modeling
The arm, the tendons, and the soft extension. Move the joints by hand or along the null space of an EE constraint, follow the spans, the tensions, and the split of the tip velocity into transport and deformation, and identify the span map from probing motions.
Control demo
The closed loop of the simulations: scenarios S1–S3 with a position-constrained EE or a laparoscopic fulcrum, obstacles, and infeasible targets. Change the EE constraint, the model, the gains, and the barriers.
Analysis
The bound on the rank of the tendon-transmitted deformation under each EE constraint, with movable anchors; the descent of the weighted tip error under the nominal control law (Fig. 7); and the conditions that the analysis does not cover.
Results in the paper
simulations (Sec. VI) and experiments on the real setup (Sec. VII); click to enlarge
Code
Python reference implementation, and these pages
The package softext/ implements the simulated UR10 with its Cosserat-rod soft extension, the span kinematics and the differential model (2)–(11), the identification from probing motions, the EE constraints and the null-space control law (12)–(18), the barriers and the QP (19), and the analysis of Sec. V. With the span map identified by the paper's simulator, it reruns the scenarios of Sec. VI and the descent of Fig. 7.
pip install -r requirements.txt python examples/run_scenario.py S2 # laparoscopic fulcrum (Sec. VI) python examples/identify.py # probing and validation error (Sec. VI-A) python examples/rank_bound.py # Proposition 1 for the EE constraints python figures/fig7_stability.py # Fig. 7 python figures/fig8_scenarios.py # Fig. 8 (S1-S3) python -m unittest discover tests
The pages are static files (HTML, CSS, and JavaScript, with KaTeX and three.js included), so they run on any web server. To open them locally:
python run.py # http://127.0.0.1:8765
The browser simulation is a line-by-line port of the package; tests/test_web_parity.py runs it with Node.js and checks that both give the same closed-loop logs.