Skip to content

feat: add ROS-free standalone test, MuJoCo DER evaluation, and update .gitignore#83

Open
muhammad-mahad wants to merge 1 commit into
RMDLO:masterfrom
muhammad-mahad:master
Open

feat: add ROS-free standalone test, MuJoCo DER evaluation, and update .gitignore#83
muhammad-mahad wants to merge 1 commit into
RMDLO:masterfrom
muhammad-mahad:master

Conversation

@muhammad-mahad

@muhammad-mahad muhammad-mahad commented Jun 26, 2026

Copy link
Copy Markdown

Summary

TrackDLO currently requires a physical robot setup (ROS, RealSense camera) to run any evaluation. This PR adds two hardware-free scripts and a .gitignore update.

standalone_test.py

A minimal ROS-free smoke test for the trackdlo_cpp pybind11 backend.

  • Synthesises a catenary rope drooping across N frames
  • Samples dense point clouds with configurable Gaussian noise
  • Runs the full reg → sort_pts → cpd_lle pipeline and reports per-frame tracking error vs ground truth
  • Dependencies: numpy, matplotlib, and the compiled trackdlo_cpp.so already in pybind_ext/ — nothing else required
  • Result on default config: mean 16 mm, max 21 mm, ~41 ms/frame
python standalone_test.py
python standalone_test.py --frames 30 --noise 0.005 --visualize-3d

eval/mujoco_eval.py

A higher-fidelity evaluation using the adapteddlo_muj Discrete Elastic Rod (DER) simulator (MuJoCo 3.x).

  • Builds a physics-accurate DER rope with real gravity (bending + torsion)
  • Moves one endpoint sinusoidally over the sequence (0 → 20 cm → 0)
  • Samples point clouds from DER segment surfaces
  • Measures TrackDLO accuracy against DER ground truth
  • Dependencies: mujoco ≥ 3.0, numpy, matplotlib, adapteddlo_muj
  • Result on default config: mean 16 mm, max 37 mm (at peak lift), ~19 ms/frame on a 0.8 m / 30-segment cable
python eval/mujoco_eval.py
python eval/mujoco_eval.py --adapteddlo-path /path/to/adapteddlo_muj
python eval/mujoco_eval.py --frames 30 --r-len 1.0 --r-pieces 40

.gitignore

Added *.pdf and MUJOCO_LOG.TXT to suppress generated outputs from both scripts.

Test plan

  • python standalone_test.py → runs to completion, prints mean/max error, saves trackdlo_standalone_results.pdf
  • python eval/mujoco_eval.py → runs to completion, prints mean/max error, saves eval/mujoco_eval_results.pdf
  • git status shows no new untracked files after both runs

… .gitignore

standalone_test.py — run the TrackDLO CPD-LLE pipeline on a synthetic
catenary sequence without ROS or a physical camera.  Requires only
numpy, matplotlib, and the compiled trackdlo_cpp pybind11 extension
already in pybind_ext/.

eval/mujoco_eval.py — hardware-free evaluation using adapteddlo_muj as
a physics-accurate DER simulator (MuJoCo 3.x).  DER node positions
serve as ground-truth; synthetic point clouds sampled from capsule-
segment surfaces are fed to TrackDLO.  Demonstrates 16 mm mean tracking
error at ~19 ms/frame on a 0.8 m, 30-segment cable under gravity with
20 cm endpoint manipulation.

.gitignore — suppress *.pdf result plots and MUJOCO_LOG.TXT.
@muhammad-mahad

Copy link
Copy Markdown
Author

Following up with a bit more context in case it's useful. These two scripts are fully additive — standalone_test.py and eval/mujoco_eval.py — and they don't touch any existing tracking code or change the ROS pipeline, so the diff should be low-risk to merge.

The motivation: I wanted to be able to exercise the registration → sorting → CPD pipeline without a robot or a ROS stack, so it's reproducible on any machine. standalone_test.py runs synthetic catenary sequences with configurable noise; eval/mujoco_eval.py drives a physically realistic rope using adapteddlo_muj's Discrete Elastic Rod simulator (gravity + endpoint manipulation) and measures tracking error against the simulated ground truth. On a 0.8 m / 30-segment cable I get ~16 mm mean error at ~19 ms/frame.

Happy to split this into a smaller PR (just the standalone test) or adjust to fit the repo's conventions — whatever's easiest to review. @tbretl no rush, just flagging since the repo's been quiet; glad it was useful to reproduce TrackDLO either way.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant