Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
656 commits
Select commit Hold shift + click to select a range
ea3d6b8
fix bilateral constraint upper limit diff
KishanSawant Aug 14, 2026
45af7f2
fix(solver): name a force command's signal after the wrench it feeds
vamsikalagaturu Aug 14, 2026
9c7bdee
fix(solver): a greater-than gate errs positive when it must rise
vamsikalagaturu Aug 14, 2026
ba5f85c
fix(runtime): isolate FT communication failures
vamsikalagaturu Aug 14, 2026
c65d44c
Treat subscriptions as writing declared poses
vamsikalagaturu Aug 14, 2026
27c0b2d
feat(ir): a Cartesian moment command drives f_ext, not a solver row
vamsikalagaturu Aug 14, 2026
3858b2a
fix(schedule): build a commanded wrench from this tick's control signal
vamsikalagaturu Aug 14, 2026
dae3d44
feat(scene): a world pose may be stated of a frame a scene object car…
vamsikalagaturu Aug 14, 2026
3062cdc
fix(rdf-parser): qualify handler-owned ids by their handler
vamsikalagaturu Aug 15, 2026
bc0d160
feat(profile): ramp speed along geometric paths
vamsikalagaturu Aug 15, 2026
91dae04
test: follow the models and message types the suite reads
vamsikalagaturu Aug 15, 2026
75af0ed
docs(dsl): explain path concepts and equations
vamsikalagaturu Aug 15, 2026
43c8384
feat(operations): lower algo-ext:Subtraction
vamsikalagaturu Aug 15, 2026
a46e124
fix(runner): a pose the model reads binds its config section
vamsikalagaturu Aug 15, 2026
ef5bb21
fix(runner): reject an agent home a real-world run cannot use
vamsikalagaturu Aug 15, 2026
3623635
fix(runner): name the declaration an unbound pose section is missing
vamsikalagaturu Aug 15, 2026
1b6f269
fix(runner): a pose the model does not read is skipped, not rejected
vamsikalagaturu Aug 15, 2026
13fdbaa
feat(cli): add `rerun`, which repeats a generation's last run
vamsikalagaturu Aug 15, 2026
e21c716
feat(cli): `rerun` takes the generation the last gen or run made
vamsikalagaturu Aug 15, 2026
f919917
feat(cli): point a `latest` symlink at the newest generation
vamsikalagaturu Aug 15, 2026
5951b37
refactor(cli): `rerun` is `run` for the generation `latest` points at
vamsikalagaturu Aug 15, 2026
8e25bc2
fix(runtime): a path-following motion stops at the path end
vamsikalagaturu Aug 15, 2026
abe69b9
feat(communication): fill a message holding an array of what it reports
vamsikalagaturu Aug 15, 2026
f7dd8ae
fix(resources): a placement is not composed through a context quantity
vamsikalagaturu Aug 15, 2026
9b2e688
feat(communication): publish a monitor's verdict at the rate it states
vamsikalagaturu Aug 15, 2026
46ee7b2
fix(quantities): a config-sourced pose is not a literal, decomposed one
vamsikalagaturu Aug 15, 2026
ee395a0
fix(rdf-parser): a node under a controller is handler-scoped too
vamsikalagaturu Aug 15, 2026
dc46f5d
build: require mj_kdl_wrapper 0.3.6, sync health check to match
vamsikalagaturu Aug 15, 2026
88ee6c2
fix(rdf_parser): reach a compose-orientation base pose in both walks
vamsikalagaturu Aug 15, 2026
581f813
fix(introspection): replay an aborted run without manifest.json
vamsikalagaturu Aug 15, 2026
707515c
feat(cli): tell the user when rerun falls back to the working directory
vamsikalagaturu Aug 15, 2026
c2a3dda
docs: rename the build/run walkthrough, fix stale replay-verify claims
vamsikalagaturu Aug 15, 2026
ce33323
feat(ros): answer a goal where the monitor says the run finished
vamsikalagaturu Aug 15, 2026
d48fa5d
test: own the models and the interfaces the cases read
vamsikalagaturu Aug 15, 2026
29b8e5e
test: read the graph's ROS vocabulary off a fixture of this package
vamsikalagaturu Aug 15, 2026
a48a526
docs(dsl): correct concepts.md against the grammar, generate Paths fi…
vamsikalagaturu Aug 15, 2026
81f76ea
Lower and render multiplication and division
vamsikalagaturu Aug 16, 2026
5964562
Lower and schedule axis alignment, including the moment path
vamsikalagaturu Aug 16, 2026
283589b
Drive an axis alignment only past the angle it tolerates
vamsikalagaturu Aug 16, 2026
2944b14
Re-tare a sensor on occurrence, bound an admittance, answer a goal once
vamsikalagaturu Aug 16, 2026
9bd3b00
Require the mj_kdl_wrapper that forwards once a tick
vamsikalagaturu Aug 16, 2026
c1d5e31
fix: handle level monitors and empty FT retare events
KishanSawant Aug 17, 2026
ce9acfa
Verify IR scheduling of quantity-expression op chains (plan 05 phase E1)
vamsikalagaturu Aug 17, 2026
ba1f219
Document quantity expressions as a dedicated DSL page (plan 05 phase F)
vamsikalagaturu Aug 17, 2026
6fc8dac
Drive a controlled expression along its gradient (plan 05 phase E2)
vamsikalagaturu Aug 17, 2026
ce3e2ea
Document controlled-expression rules
vamsikalagaturu Aug 17, 2026
a23f4d5
Install matplotlib for the docs path diagrams
vamsikalagaturu Aug 17, 2026
9845039
Note the docs dependency list follows the pyproject docs extra
vamsikalagaturu Aug 17, 2026
e70618e
Mint the measured-derivative an alignment controller references
vamsikalagaturu Aug 18, 2026
6ee02e5
feat: add generation replay dashboard
vamsikalagaturu Aug 20, 2026
bd51504
feat: publish run lifecycle events
vamsikalagaturu Aug 20, 2026
29be6e1
Read the pooled-relation encoding the DSL now writes
vamsikalagaturu Aug 21, 2026
95f5357
A snapshot pose has no components bound into it
vamsikalagaturu Aug 21, 2026
1361c4d
Read the plane operators and the link-pair poses the DSL writes
vamsikalagaturu Aug 21, 2026
1f863ad
Read the line distance and projection operators, completing Table IIa
vamsikalagaturu Aug 21, 2026
ed952c1
Drive a geometric constraint through its operator's gradient row
vamsikalagaturu Aug 21, 2026
d3b6126
feat: derive dashboard constraint plots from their evaluators
vamsikalagaturu Aug 21, 2026
5246ddd
Note that a direction is a versor, and which versor
vamsikalagaturu Aug 21, 2026
4b980b4
Merge branch 'plan/16' into dev
vamsikalagaturu Aug 21, 2026
d116da9
Name the observation vocabulary where it now lives
vamsikalagaturu Aug 21, 2026
a4636b8
Merge branch 'plan/16' into dev
vamsikalagaturu Aug 21, 2026
fa7b3df
feat: embed JupyterLab in the dashboard
vamsikalagaturu Aug 21, 2026
9a8a99f
fix: sample a plot inside the motion window it draws
vamsikalagaturu Aug 21, 2026
fcae403
feat: query a run with SPARQL
vamsikalagaturu Aug 21, 2026
a5d8769
Tare a sensor from a still arm, and average what it reads
vamsikalagaturu Aug 21, 2026
a4de170
Hold the arm against gravity before the first motion runs
vamsikalagaturu Aug 21, 2026
947997f
Carry constraint identity, signal roles and constant attribution in t…
vamsikalagaturu Aug 21, 2026
2ed0577
Carry the plotting contract in the frame-log header
vamsikalagaturu Aug 21, 2026
69008df
Read a run's constraints from its own log and vendored source
vamsikalagaturu Aug 21, 2026
91427d5
feat: keep a run's queries, and make removal recoverable
vamsikalagaturu Aug 21, 2026
c742138
Capture each run's console and list only files the run dir has
vamsikalagaturu Aug 21, 2026
a073648
Name the evaluator and the pair it compares on every slot
vamsikalagaturu Aug 21, 2026
d57ab87
Keep whole-subspace aliases of logged spatial slots off the sample list
vamsikalagaturu Aug 21, 2026
08cae7f
feat: serve the dashboard from an installed motion-spec
vamsikalagaturu Aug 21, 2026
8f0da79
Merge plan/05: a run explains itself
vamsikalagaturu Aug 21, 2026
4f39b3f
feat: answer a run's queries from the run
vamsikalagaturu Aug 21, 2026
4fd225e
test: say what these contracts now hold
vamsikalagaturu Aug 21, 2026
fb641f9
feat: read an aggregate monitor member by member
vamsikalagaturu Aug 21, 2026
040e4c8
feat: say what a signal is, and stop the page moving under the reader
vamsikalagaturu Aug 21, 2026
980e482
feat: run a generation from its page, and be there when it starts
vamsikalagaturu Aug 22, 2026
3a12e24
feat: the dashboard carries the terminal, the default camera, and the…
vamsikalagaturu Aug 22, 2026
7e60be6
feat: the dashboard streams a run live, from the block the runtime pu…
vamsikalagaturu Aug 22, 2026
32e52ac
feat: read and edit a model where it is browsed, and say what a gener…
vamsikalagaturu Aug 22, 2026
8772530
remove the camera shm block: cameras record, ROS will publish
vamsikalagaturu Aug 22, 2026
835d203
feat: knock on the hardware before a run, and go where the run is
vamsikalagaturu Aug 22, 2026
45149d9
refactor: split the dashboard into modules, and read a generation's o…
vamsikalagaturu Aug 22, 2026
80a4153
fix: orientation errors take the short way, and a pose may stand wrt …
vamsikalagaturu Aug 22, 2026
afba44f
Merge branch 'plan/ori-impl' into dev
vamsikalagaturu Aug 22, 2026
4a62328
feat: a run with a ros block publishes its cameras
vamsikalagaturu Aug 22, 2026
f8453d7
Merge branch 'plan/cam-ros' into dev
vamsikalagaturu Aug 22, 2026
d33aa2e
feat: a real robot's camera reaches the browser, and the timeline mar…
vamsikalagaturu Aug 22, 2026
9ad15d1
test: follow the models and the run gate; docs: give the dashboard it…
vamsikalagaturu Aug 22, 2026
e956d37
feat: log every event the run fires, in the enum's own order
vamsikalagaturu Aug 22, 2026
0a2dfe9
feat: the timeline tells the whole run, live and after
vamsikalagaturu Aug 22, 2026
fce7116
feat: health says what is missing, and the page says it as a list
vamsikalagaturu Aug 23, 2026
2763a71
fix: take rdf-utils from the remote grc_meta names, and unwedge colle…
vamsikalagaturu Aug 23, 2026
de20275
ci: install pillow, and call the docs workflow docs
vamsikalagaturu Aug 23, 2026
e2675a3
test: guard the alignment case on the checkout it reads from
vamsikalagaturu Aug 23, 2026
6ce748d
dashboard: LAN serving, git-aware sources, syntax check on save
vamsikalagaturu Aug 24, 2026
5d5f773
dashboard: highlight model sources, by shape rather than vocabulary
vamsikalagaturu Aug 24, 2026
8db6d08
Compress the frame log when the run is archived
vamsikalagaturu Aug 24, 2026
2e7e7c9
Resolve the packed frame log by either name, everywhere
vamsikalagaturu Aug 24, 2026
3cb577d
Say why an asset needed ROS, rather than that an import failed
vamsikalagaturu Aug 24, 2026
4a9c3cb
Project the arc plane-normal onto the chord's perpendicular
vamsikalagaturu Aug 24, 2026
be5ea6e
Lint the design graph for values nothing reads
vamsikalagaturu Aug 24, 2026
b9169c8
Record who reads each constant: solvers, gains and group terms
vamsikalagaturu Aug 24, 2026
984c0db
Read a run's signals: coherent modes, contact, saturation
vamsikalagaturu Aug 24, 2026
15728b4
Link runtime occurrences causally and give the spans intervals
vamsikalagaturu Aug 24, 2026
0125795
Record solvers and controller gains as constant consumers
vamsikalagaturu Aug 24, 2026
fba348f
Report oscillation, contact and saturation from the frame log
vamsikalagaturu Aug 24, 2026
f71c202
Lint the design graph for declarations nothing references
vamsikalagaturu Aug 24, 2026
bef0d7f
Record a motion's snapshot latch as a value it reads
vamsikalagaturu Aug 24, 2026
58c9fc9
Reduce the trace vocabulary to the eight composed terms
vamsikalagaturu Aug 25, 2026
4773d0f
Merge branch 'plan/014' into dev
vamsikalagaturu Aug 25, 2026
c053f19
Record a run as one provenance activity nested from run to constraint
vamsikalagaturu Aug 25, 2026
743a9ca
Give rec the run IRI motion-spec already minted
vamsikalagaturu Aug 25, 2026
ddf046c
Emit the prospective plan graph and consolidate generation-time prove…
vamsikalagaturu Aug 25, 2026
4d0e6c8
Allow the adopted p-plan namespace in the dashboard vocabulary gate
vamsikalagaturu Aug 25, 2026
824490e
Consolidate the run's provenance at run end and answer the nine plan-…
vamsikalagaturu Aug 25, 2026
4d99f32
Drop the prospective plan graph and ask coverage of the derived desig…
vamsikalagaturu Aug 25, 2026
a0f3fc2
Expect lineage on every force solver input
vamsikalagaturu Aug 25, 2026
5f29648
Name the snapshot latch in the IR and read authored bounds instead of…
vamsikalagaturu Aug 25, 2026
c8c5593
Reject a constraint whose bound no evaluator would ever compare
vamsikalagaturu Aug 25, 2026
21ddf6d
obs dashboard: plan015 snapshot
vamsikalagaturu Aug 26, 2026
4a35395
obs dashboard: plan016 snapshot
vamsikalagaturu Aug 26, 2026
49aed10
obs dashboard: plan017 snapshot
vamsikalagaturu Aug 26, 2026
b8b69a4
obs dashboard: merged (plans 015-017 combined) snapshot
vamsikalagaturu Aug 26, 2026
172f1e4
obs dashboard: plan021 snapshot
vamsikalagaturu Aug 26, 2026
3f25527
obs dashboard: final worktree state snapshot
vamsikalagaturu Aug 26, 2026
e8d93c8
Merge dev: re-point the obs dashboard onto the ms-prov runtime vocabu…
vamsikalagaturu Aug 26, 2026
df1f916
dashboard: drop the merge conflict markers left in style.css
vamsikalagaturu Aug 26, 2026
6a834a3
dashboard: explore panel rework, graph sources, replay plots that fol…
vamsikalagaturu Aug 26, 2026
c7f353c
dashboard: read generated files in the page, with the frontend vendored
vamsikalagaturu Aug 26, 2026
bee2381
Record observed values as qudt:QuantityValue, and drop the bundle node
vamsikalagaturu Aug 26, 2026
6dcc7aa
Merge feat/obs-dashboard: generated-file viewer, explore rework, vend…
vamsikalagaturu Aug 26, 2026
7a9ed20
Trim the dashboard graph tests, and stop asserting a fixed set of gra…
vamsikalagaturu Aug 26, 2026
25a9199
Fold the Views page into the transport timeline
vamsikalagaturu Aug 26, 2026
352bcd4
Surface the real gen failure in the dashboard's generate chain
vamsikalagaturu Aug 27, 2026
81fb09d
Start a hardware run from the dashboard without probing the devices f…
vamsikalagaturu Aug 27, 2026
420e29f
check if ft error is persistent and disable arm stop
KishanSawant Aug 27, 2026
c257364
stash
vamsikalagaturu Aug 27, 2026
1af5675
feat: read the FT sensor through robotiq_driver_noros
vamsikalagaturu Aug 27, 2026
2cf6eda
Start a hardware run from the CLI without probing the devices first
vamsikalagaturu Aug 27, 2026
1272726
Start a hardware run from the CLI without probing the devices first
vamsikalagaturu Aug 27, 2026
3a5be87
Stop a run whose device stays silent past its grace period
vamsikalagaturu Aug 27, 2026
e9fdb04
Give the run page's console the whole panel, and a way to search it
vamsikalagaturu Aug 28, 2026
9db2664
Merge feat/reports into feat/ft
vamsikalagaturu Aug 28, 2026
d9b4604
Reach the device probe where it still lives, and stop pinning node order
vamsikalagaturu Aug 28, 2026
8aab89d
Merge feat/ft: FT sensor through robotiq_driver_noros, run-page conso…
vamsikalagaturu Aug 28, 2026
6bad15b
Read the live camera's channel from the model instead of building it
vamsikalagaturu Aug 28, 2026
a58614c
Pick provenance archives by the vocabulary the questions actually read
vamsikalagaturu Aug 28, 2026
0db2d8d
Retire the plans that have landed
vamsikalagaturu Aug 28, 2026
5275deb
Drop the plans folder
vamsikalagaturu Aug 28, 2026
0f4dc03
Fix the versor-versor cone gradient and complete the drawer-opening p…
vamsikalagaturu Aug 28, 2026
538bbc3
Mutation harness, specification diff, and a diagnostic journal
vamsikalagaturu Aug 29, 2026
6724daa
entry_program: stamp frames with the platform clock, not wall time
vamsikalagaturu Aug 29, 2026
b48e3c0
Mutation scorer v2: onset ranking, event-timing monitors, dataflow ca…
vamsikalagaturu Aug 29, 2026
648c099
Natural-fault campaigns, four-class taxonomy, and observed-object walk
vamsikalagaturu Aug 29, 2026
11b1e17
Goal-status untils schedule no closure; secondary body mappings are m…
vamsikalagaturu Aug 29, 2026
3c177bc
Add sim perturbations: IR, scheduling, xfrc application, arrows, fram…
vamsikalagaturu Aug 31, 2026
1fa3746
Fix frozen scene-site pose reads; arrow tail-out and dotted aim guide
vamsikalagaturu Aug 31, 2026
5c8f196
Record what a trial drew, and read vector components
vamsikalagaturu Aug 31, 2026
875ebc2
Confirm an FT zero before committing it, and log the raw sample
vamsikalagaturu Sep 1, 2026
6673a94
Let the loop own every observation it answers, not just the FT wrench
vamsikalagaturu Sep 1, 2026
217e11f
Answer a run that has not started, and give the dashboard a mark
vamsikalagaturu Sep 1, 2026
7870ae0
Require mj_kdl_wrapper 0.3.14
vamsikalagaturu Sep 1, 2026
ef0319b
Gate a motion inside its own state on a fresh observation
vamsikalagaturu Sep 2, 2026
79f3e4e
Spawn a bolted-on scene object after its host
vamsikalagaturu Sep 2, 2026
0a8f6c5
Place a free body from the frame a detection reports
vamsikalagaturu Sep 2, 2026
9531cb1
Publish the simulation clock when the deployment asks for it
vamsikalagaturu Sep 2, 2026
4da3911
Bag the topics the deployment config names for the run
vamsikalagaturu Sep 2, 2026
2e0e865
Dashboard: empty every folder a deleted generation leaves behind
vamsikalagaturu Sep 2, 2026
a97321d
Keep colcon out of the package
vamsikalagaturu Sep 2, 2026
3850baf
Stamp every message from the clock the run publishes
vamsikalagaturu Sep 3, 2026
e554ffc
Let the simulation clock outlive the end state
vamsikalagaturu Sep 3, 2026
fe4d9c0
Place a frame stated against a placed frame
vamsikalagaturu Sep 3, 2026
59f7b37
Let a motion bound to the end state say when the run is over
vamsikalagaturu Sep 3, 2026
073cd52
Improve run recovery and coordination control
vamsikalagaturu Sep 3, 2026
b051d50
Require mj_kdl_wrapper 0.3.15
vamsikalagaturu Sep 3, 2026
8bc9ae9
gen/run: --name, and record which distribution each draw came from
vamsikalagaturu Sep 4, 2026
51da846
Joint current, world reads across the tree, and the FT tare with its …
vamsikalagaturu Sep 4, 2026
405e134
quantities: materialize a composed orientation's base pose first
vamsikalagaturu Sep 4, 2026
694600d
Publish a pose on /tf as a transform
vamsikalagaturu Sep 5, 2026
3e2d6b7
Read a joint-velocity off the bound gripper on robif2b
vamsikalagaturu Sep 5, 2026
26e55de
feat: add admittance hold and comply modes
vamsikalagaturu Sep 5, 2026
7498dcc
Dashboard: list a run's own files, and select runs by checkbox
vamsikalagaturu Sep 5, 2026
7621a99
Dashboard: offer a real run the cameras it can record
vamsikalagaturu Sep 5, 2026
990ed78
fix: compose partial orientation targets as rotation vectors
vamsikalagaturu Sep 5, 2026
c7b3808
ros_video: pace real camera frames by capture time, encode off the ex…
vamsikalagaturu Sep 5, 2026
080ba69
fix: smooth admittance release into idle hold
vamsikalagaturu Sep 5, 2026
bc74b5d
Dashboard: verdict, run notes, remembered run bar, last-run mark, run…
vamsikalagaturu Sep 5, 2026
a5b4a4f
Dashboard: give the run note its own grid row and the query editor's box
vamsikalagaturu Sep 5, 2026
2f338ea
Dashboard: a Notes tab per run, and one themed pick box
vamsikalagaturu Sep 5, 2026
dad4f54
Dashboard: declutter the timeline strip
vamsikalagaturu Sep 5, 2026
ddfcf7c
Generate momentum-observer wrench estimates; simulator joint-velocity…
vamsikalagaturu Sep 5, 2026
95553e9
Take the held weight out of a wrench estimate at each re-tare
vamsikalagaturu Sep 5, 2026
c650389
Require mj_kdl_wrapper 0.3.16
vamsikalagaturu Sep 5, 2026
982a891
Dashboard: organize results and return to an investigation
vamsikalagaturu Sep 6, 2026
099df4b
Dashboard: protect a bundle from deletion, theme every select, and da…
vamsikalagaturu Sep 6, 2026
9b9911a
Dashboard: write a generation into the page that is up, and reserve b…
vamsikalagaturu Sep 6, 2026
0de9e4e
Real FT 300-S reads negated; admittance drives on force beyond the en…
vamsikalagaturu Sep 7, 2026
38af8db
Negate Kortex torque feedback for the observer and the logged torque
vamsikalagaturu Sep 7, 2026
10497cf
Renew a close request the fingers have been pried off
vamsikalagaturu Sep 7, 2026
450289e
Generate warning-free controllers
vamsikalagaturu Sep 7, 2026
079c9a9
Require mj_kdl_wrapper 0.3.17
vamsikalagaturu Sep 7, 2026
b49a3af
Recover runtime.ttl only when asked
vamsikalagaturu Sep 7, 2026
91268c3
Draw sampled quantities in the controller, once per run
vamsikalagaturu Sep 8, 2026
c76a501
Make ROS optional and the STST install repairable
vamsikalagaturu Sep 15, 2026
20437be
Build generated controllers with a build type
vamsikalagaturu Sep 15, 2026
b183e4c
Gather health's apt remedies into one install line
vamsikalagaturu Sep 15, 2026
3470d73
Give every unpublished dependency its source
vamsikalagaturu Sep 15, 2026
d2583af
Install the toolchain into the workspace, standalone
vamsikalagaturu Sep 15, 2026
1422b96
Read a frame the scene could not place from the tree that reports it
vamsikalagaturu Sep 15, 2026
c1d2594
Record each drawn value as a coordinate the run generated
vamsikalagaturu Sep 15, 2026
7e56993
Skip the archive's SHACL checks without a metamodels checkout
vamsikalagaturu Sep 15, 2026
fe5389f
Refactor the dashboard frontend and add a formatter
vamsikalagaturu Sep 15, 2026
e39d434
Record what a run was launched under, and drop the last grc_meta paths
vamsikalagaturu Sep 15, 2026
e6db17c
One console per generation, and one format for every line in it
vamsikalagaturu Sep 15, 2026
b146ba6
Show a generation's console, its settings file, and keep the tree fol…
vamsikalagaturu Sep 15, 2026
4f28fde
Draw the dashboard's icons, instead of borrowing characters
vamsikalagaturu Sep 15, 2026
48aab01
setup fix
vamsikalagaturu Sep 15, 2026
10faa1f
setup: cap build parallelism, log crashes, drop the rdflib fork, spli…
vamsikalagaturu Sep 16, 2026
0e650e7
setup: keep src/ for --dev, and build a plain install from .ms-sources
vamsikalagaturu Sep 16, 2026
529e798
health: end with a per-target verdict, and drop kdl_parser everywhere
vamsikalagaturu Sep 16, 2026
1435e56
codegen: refuse a scene whose MJCF assets are not there, and say when…
vamsikalagaturu Sep 16, 2026
be51634
assets: resolve a model's own files at generation time, and match mar…
vamsikalagaturu Sep 16, 2026
aba9c8d
config: write the settings the run used, and stop bumping formats bef…
vamsikalagaturu Sep 16, 2026
7591373
health: check ament_package, and give each target its own verdict line
vamsikalagaturu Sep 16, 2026
9949f50
setup: build a ROS workspace's extensions without pip's build isolation
vamsikalagaturu Sep 16, 2026
a6a76a8
setup: refuse before the first clone when a prerequisite is missing
vamsikalagaturu Sep 16, 2026
c6c8b1f
setup: make the environment file enough on its own, and check the dis…
vamsikalagaturu Sep 16, 2026
559b29a
readme: give the commands for each way of installing, and warn when -…
vamsikalagaturu Sep 16, 2026
df73e69
readme: activate the environment in the uv block like every other one
vamsikalagaturu Sep 16, 2026
98f5dcf
setup: let a workspace answer for its own sources
vamsikalagaturu Sep 16, 2026
35fc11c
Fix setup health checks and device measurement handoff
vamsikalagaturu Sep 16, 2026
d12c44e
Add CMake cache reset to setup and pin wrapper 0.3.19
vamsikalagaturu Sep 16, 2026
b536fb6
setup: record what was built, ask before removing, and hand out the e…
vamsikalagaturu Sep 17, 2026
09feff6
setup: install the checkout a workspace has, Python as well as C++
vamsikalagaturu Sep 17, 2026
79b7057
health: name what mj_kdl_wrapper asks the system for
vamsikalagaturu Sep 17, 2026
50bdcb3
Let a run started with logs off reach its play button and its console
vamsikalagaturu Sep 18, 2026
0e1288b
Rebuild provenance on rdf-utils and prov-extension: one generation do…
vamsikalagaturu Sep 19, 2026
d9a77b8
Record the caller's executable as the run's input when archiving with…
vamsikalagaturu Sep 19, 2026
8d8c784
Read the provenance document by its constant, not a stale path
vamsikalagaturu Sep 20, 2026
74565f1
Generate one Vereshchagin solver with driver weights
vamsikalagaturu Sep 20, 2026
cccaedf
Require the camera target only when the scene has a camera
vamsikalagaturu Sep 20, 2026
6fdbaa5
Pin mj_kdl_wrapper v0.3.21
vamsikalagaturu Sep 20, 2026
2d0c058
Follow rec's trimmed API
vamsikalagaturu Sep 20, 2026
d59e1dc
Follow rec's state and verdict; run simulations side by side from the…
vamsikalagaturu Sep 20, 2026
0db484b
Stop selected runs from the selection bar, and every live run of a ge…
vamsikalagaturu Sep 20, 2026
0cae728
Feat/world model (#4)
vamsikalagaturu Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 21 additions & 11 deletions .github/workflows/gh-pages.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
name: Build and deploy documentation
name: docs

on:
push:
branches: [main]
branches: [main, dev]
pull_request:
branches: [main, dev]
workflow_dispatch:

permissions:
Expand All @@ -19,32 +21,40 @@ jobs:
name: Build documentation
runs-on: ubuntu-latest
steps:
- name: Install dependencies
- name: Checkout
uses: actions/checkout@v4
- name: Install Graphviz
run: |
sudo apt-get update
sudo apt-get install -y python3-sphinx python3-sphinx-rtd-theme
- name: Checkout motion-spec-ral
uses: actions/checkout@v4.2.0
sudo apt-get install -y graphviz
- uses: actions/setup-python@v5
with:
path: motion-spec-ral
python-version: "3.12"
# conf.py imports nothing from motion_spec, so the package itself is not built.
# Keep this list in sync with the [docs] extra in pyproject.toml (minus sphinx-autobuild);
# installing the extra directly would pull workspace deps that are not on PyPI.
- name: Install documentation dependencies
run: pip install sphinx myst-parser furo matplotlib
- name: Build documentation
run: |
sphinx-build -M html ${{ github.workspace }}/motion-spec-ral/docs/sphinx/source ${{ github.workspace }}/motion-spec-ral/build
run: sphinx-build -W -b html docs/sphinx/source docs/_build/html
- name: Setup Pages
uses: actions/configure-pages@v5
- name: Upload artifacts
uses: actions/upload-pages-artifact@v3
with:
path: ${{ github.workspace }}/motion-spec-ral/build/html
path: docs/_build/html
retention-days: 1

# Build on every branch and PR so failures surface early; publish only from
# main or dev.
deploy:
name: Deploy documentation
needs: build
if: github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev')
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: test

on:
push:
branches: [main, dev]
pull_request:
branches: [main, dev]
workflow_dispatch:

jobs:
test:
runs-on: ubuntu-latest
env:
MOTION_SPEC_GEN: ${{ github.workspace }}/generations
steps:
# Where the manifest's layout puts it, so the test fixtures find thirdparty/motion-spec-dsl.
- uses: actions/checkout@v4
with:
path: thirdparty/motion-spec
- uses: actions/setup-python@v5
with:
python-version: "3.12"

# PyPI's vcstool imports pkg_resources, which current setuptools no longer ships.
- name: Install motion_spec
run: |
sudo apt-get update -q && sudo apt-get install -y vcstool protobuf-compiler
pip install -e "thirdparty/motion-spec[test]"

# The Python packages motion_spec.repos lists, in its order: none are on PyPI, and most
# test modules import one, so leaving them out fails collection rather than a test.
- name: Import the manifest and install its Python packages
run: |
vcs import --input thirdparty/motion-spec/motion_spec.repos .
python - <<'EOF'
import subprocess, sys
from motion_spec.setup import STST_REPOSITORY, is_thirdparty, manifest_files, read_manifest
for repository in read_manifest(manifest_files()[0]):
if is_thirdparty(repository) and repository.path != STST_REPOSITORY:
subprocess.run([sys.executable, "-m", "pip", "install", repository.path], check=True)
EOF

- name: Run tests
run: pytest -q thirdparty/motion-spec/tests
20 changes: 19 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,22 @@
__pycache__/
comp-rob2b/

build/
build/
.stst/
generated/
/runs/
docs/_build/
docs/sphinx/source/_static/dsl-paths/

# Python packaging artifacts
*.egg-info/
dist/
.eggs/

# uv lock — not used by CI or the other monorepo packages
uv.lock
generations/

# npx fetches prettier on demand; nothing here is installed into the repo
node_modules/
package-lock.json
3 changes: 3 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Vendored libraries are mirrored by scripts/vendor_frontend.py and pinned to their upstream
# versions: reformatting them would make every future mirror a diff.
src/motion_spec/dashboard/frontend/vendor/
3 changes: 3 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"printWidth": 100
}
Empty file added COLCON_IGNORE
Empty file.
61 changes: 0 additions & 61 deletions Makefile

This file was deleted.

122 changes: 112 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,100 @@
# motion-spec-ral
Code base for RAL paper: *From Composable Models to Correct-by-Construction Software for Contact-Rich Robotic Mobile-Manipulation Tasks*
# motion-spec

## Documentation
[![test](https://github.com/secorolab/motion-spec/actions/workflows/test.yml/badge.svg?branch=dev)](https://github.com/secorolab/motion-spec/actions/workflows/test.yml)
[![docs](https://github.com/secorolab/motion-spec/actions/workflows/gh-pages.yml/badge.svg?branch=dev)](https://github.com/secorolab/motion-spec/actions/workflows/gh-pages.yml)

Validate, compile, build, run, and inspect guarded robot motion specifications.

`motion-spec` consumes the RDF dataset that
[motion-spec-dsl](https://github.com/secorolab/motion-spec-dsl) emits from a `.robmot`
model, validates it against the [metamodels](https://github.com/secorolab/metamodels) with
SHACL, lowers it to an intermediate representation, and generates the C++ controller that
runs it. Each execution is archived as a run that carries its own provenance: the model and
contracts it came from, and a full-rate frame log that can be replayed or recovered back
into RDF.

## Install

```bash
mkdir -p ~/ws/src && cd ~/ws
git clone https://github.com/secorolab/motion-spec.git src/motion-spec
vcs import src < src/motion-spec/motion_spec.repos
vcs import src < src/motion-spec/motion_spec.real.repos # with --real only
python3 -m venv .venv && source .venv/bin/activate
pip install -e src/motion-spec # the CLI, PyPI dependencies only
motion-spec setup --workspace . --dev # builds and installs what src/ holds
source setup-motion-spec.bash # .zsh under zsh
motion-spec health
motion-spec examples # models to run, in src/ms-examples
```

With ROS, `--ros` builds the CMake packages with colcon, and the environment file sources the
distribution and the overlay; the venv has to see the distribution's Python packages:

```bash
source /opt/ros/jazzy/setup.bash
python3 -m venv --system-site-packages .venv && source .venv/bin/activate
pip install -e src/motion-spec
motion-spec setup --workspace . --dev --ros
source setup-motion-spec.bash
```

What motion-spec builds against is listed in one place: the vcstool manifest
`motion_spec.repos` — rdf-utils, the DSL compilers and rec under `thirdparty/`,
then Orocos KDL, coord2b, mj_kdl_wrapper and STSTv4 — with the device drivers in
`motion_spec.real.repos`. `setup` fetches nothing: it pip-installs the Python packages the
imported checkouts hold into the active environment (or a `.venv` it creates), builds the CMake ones
into `install/` with the arguments in the workspace's `colcon.meta`, and writes the environment
file that is the one step between a new shell and a working workspace.

| | |
|---|---|
| `--dev` | Python packages installed editable (`pip install -e`); without it they install as snapshots. Sources are in `WORKSPACE/src` either way |
| `--real` | also install `motion_spec.real.repos`: serial, robotiq_driver_noros, robif2b |
| `--repos FILE` | install other manifests instead of the shipped one |
| `--ros` | build with colcon, and source the distro and the overlay instead of exporting paths |

The documentation comprises
A checkout already at a manifest path is never moved: it is built as it stands, with a warning
when it is not on the pinned commit, and rebuilt on every run while it has uncommitted changes.
`--clean` removes builds, installed files and markers, never a source tree. Details:
**[Setup](https://secorolab.github.io/motion-spec/setup.html)**.

* the [setup instructions](https://secorolab.github.io/motion-spec-ral/setup.html)
* a [tutorial](https://secorolab.github.io/motion-spec-ral/tutorial.html).
## Requirements

## Third-party software
What every model needs, whichever target it drives:

* [`orocos-kdl`](thirdparty/orocos-kdl/) is a modified version that retains the GNU Lesser General Public License version 2.1 and originates from the OROCOS [Kinematics and Dynamics Library](https://github.com/orocos/orocos_kinematics_dynamics).
* [`GEN3_URDF_V12.urdf`](thirdparty/kinova/GEN3_URDF_V12.urdf) is licensed under the BSD-3-Clause license and originates from Kinova's [ros_kortex](https://github.com/Kinovarobotics/ros_kortex).
| Stage | Needs | For |
|---|---|---|
| Python | 3.11+, with Click, RDFLib, rdf-utils, Jinja, pySHACL and protobuf | the CLI, RDF loading, validation, the IR |
| Authoring | motion-spec-dsl, scene-dsl, coord-dsl, textX | compiling `.robmot`, `.fsm` and `.scenex` sources |
| Generation | STSTv4 and `protoc` | rendering the C++, and the frame-log codec |
| | Git, a JDK and Ant | building STSTv4 itself — a JRE is not enough |
| Build | CMake and a C++20 compiler | configuring and compiling a generated controller |
| | coord2b, Eigen, Orocos KDL, toml++ | what every generated controller links |
| MuJoCo | mj_kdl_wrapper, GLFW, OpenGL, EGL, `ffmpeg` | the simulation, its viewer, and the video recorder |

PyPI packages arrive with `pip install`; `motion-spec setup` installs rdf-utils, the authoring
packages and rec, and builds STSTv4, coord2b, Orocos KDL and mj_kdl_wrapper; vcstool, Eigen,
toml++ and `protoc` come from apt. Orocos KDL
must be the [secorolab fork](https://github.com/secorolab/orocos_kinematics_dynamics) —
generated controllers call the Vereshchagin solvers with fixed joints, which
`liborocos-kdl-dev` does not carry.

Per-target and ROS dependencies are installed only when a model asks for them: mj_kdl_wrapper
for MuJoCo, robif2b and urdfdom for a real robot, `rclcpp` and friends for a model that
publishes a topic. `motion-spec health` checks all of it and, for anything missing, names what
it is for and the command that installs it.

## Documentation

Full documentation: **<https://secorolab.github.io/motion-spec/>**

- [Setup](docs/sphinx/source/setup.rst) — dependencies, installation, health checks
- [Pipeline and artifact concepts](docs/sphinx/source/concepts.rst) — commands, generation layout, archives
- [Dashboard](docs/sphinx/source/dashboard.rst) — browsing generations, live runs, replay
- [CLI tutorials](docs/sphinx/source/tutorials/index.rst)
- [DSL concepts and tutorials](docs/sphinx/source/dsl/index.md)
- [Original RAL tutorial](docs/sphinx/source/tutorial.rst)

## Contributors

Expand All @@ -24,6 +107,25 @@ All Python scripts are licensed under the Mozilla Public License 2.0 (see [`LICE

The models are licensed under the MIT No Attribution (see [`LICENSE.MIT-0`](LICENSE.MIT-0)) License.

## Citation

This is the companion code for *From Composable Models to Correct-by-Construction Software for
Contact-Rich Robotic Mobile-Manipulation Tasks*, IEEE Robotics and Automation Letters 10(10),
2025 — [10.1109/LRA.2025.3597864](https://doi.org/10.1109/LRA.2025.3597864). Please cite it if
you use this software.

```bibtex
@ARTICLE{11122613,
author={Schneider, Sven and Kalagaturu, Vamsi and Bruyninckx, Herman and Hochgeschwender, Nico},
journal={IEEE Robotics and Automation Letters},
title={From Composable Models to Correct-by-Construction Software for Contact-Rich Robotic Mobile-Manipulation Tasks},
year={2025},
volume={10},
number={10},
pages={9894-9901},
doi={10.1109/LRA.2025.3597864}}
```

## Acknowledgement

This work is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme SESAME under grant agreement No 101017258.
This work is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme SESAME under grant agreement No 101017258.
53 changes: 0 additions & 53 deletions check.py

This file was deleted.

Loading
Loading