riggen 0.2.0__tar.gz → 0.2.1.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {riggen-0.2.0 → riggen-0.2.1.dev0}/Cargo.lock +207 -7
- {riggen-0.2.0 → riggen-0.2.1.dev0}/Cargo.toml +46 -2
- {riggen-0.2.0 → riggen-0.2.1.dev0}/PKG-INFO +80 -31
- {riggen-0.2.0 → riggen-0.2.1.dev0}/README.md +79 -30
- riggen-0.2.1.dev0/crates/riggen-core/src/command.rs +2139 -0
- riggen-0.2.1.dev0/crates/riggen-core/src/file.rs +1442 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/fk.rs +250 -5
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/history.rs +167 -6
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/ids.rs +13 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/inertial.rs +1 -1
- riggen-0.2.1.dev0/crates/riggen-core/src/lib.rs +38 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-core/src/pose.rs +1 -1
- riggen-0.2.1.dev0/crates/riggen-core/src/robot.rs +960 -0
- riggen-0.2.1.dev0/crates/riggen-core/src/validate.rs +2155 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-export/Cargo.toml +2 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/export.rs +271 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/fk_samples.rs +842 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/import.rs +510 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/lib.rs +33 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-export/src/mesh_store.rs +15 -8
- riggen-0.2.1.dev0/crates/riggen-export/src/mjcf.rs +922 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/mjcf_compose.rs +1081 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/mjcf_in.rs +4140 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/resolve.rs +1485 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/sdf.rs +881 -0
- riggen-0.2.1.dev0/crates/riggen-export/src/test_util.rs +286 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-export/src/urdf.rs +227 -12
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-export/src/urdf_in.rs +323 -203
- riggen-0.2.1.dev0/crates/riggen-export/src/xml.rs +833 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/Cargo.toml +1 -0
- riggen-0.2.1.dev0/crates/riggen-mesh/src/decomp.rs +510 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/error.rs +1 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/feature.rs +11 -6
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/lib.rs +59 -20
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/mass.rs +1 -1
- riggen-0.2.1.dev0/crates/riggen-mesh/src/msh.rs +284 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/obj.rs +2 -2
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/ray.rs +1 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/stl.rs +1 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/tri_mesh.rs +1 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-py/Cargo.toml +2 -2
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-py/src/doc.rs +16 -4
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-py/src/errors.rs +2 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-py/src/lib.rs +2 -2
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-py/src/robot.rs +373 -47
- {riggen-0.2.0 → riggen-0.2.1.dev0}/pyproject.toml +1 -1
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/__init__.py +28 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/_riggen.pyi +115 -5
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/errors.py +17 -2
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/robot.py +780 -32
- riggen-0.2.0/crates/riggen-core/src/command.rs +0 -1062
- riggen-0.2.0/crates/riggen-core/src/file.rs +0 -639
- riggen-0.2.0/crates/riggen-core/src/lib.rs +0 -34
- riggen-0.2.0/crates/riggen-core/src/robot.rs +0 -439
- riggen-0.2.0/crates/riggen-core/src/validate.rs +0 -701
- riggen-0.2.0/crates/riggen-export/src/export.rs +0 -164
- riggen-0.2.0/crates/riggen-export/src/fk_samples.rs +0 -164
- riggen-0.2.0/crates/riggen-export/src/lib.rs +0 -26
- riggen-0.2.0/crates/riggen-export/src/mjcf.rs +0 -343
- riggen-0.2.0/crates/riggen-export/src/resolve.rs +0 -771
- riggen-0.2.0/crates/riggen-export/src/test_util.rs +0 -136
- riggen-0.2.0/crates/riggen-export/src/xml.rs +0 -159
- {riggen-0.2.0 → riggen-0.2.1.dev0}/LICENSE-APACHE +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/LICENSE-MIT +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-core/Cargo.toml +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/aabb.rs +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/fit.rs +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/crates/riggen-mesh/src/hull.rs +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/__main__.py +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/py.typed +0 -0
- {riggen-0.2.0 → riggen-0.2.1.dev0}/python/riggen/show.py +0 -0
|
@@ -214,6 +214,15 @@ version = "1.0.104"
|
|
|
214
214
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
215
215
|
checksum = "330a5ed07fa54e4702c9d6c4174f74427fc0ef6e214bbd677ae50a5099946470"
|
|
216
216
|
|
|
217
|
+
[[package]]
|
|
218
|
+
name = "approx"
|
|
219
|
+
version = "0.5.1"
|
|
220
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
221
|
+
checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6"
|
|
222
|
+
dependencies = [
|
|
223
|
+
"num-traits",
|
|
224
|
+
]
|
|
225
|
+
|
|
217
226
|
[[package]]
|
|
218
227
|
name = "arboard"
|
|
219
228
|
version = "3.6.1"
|
|
@@ -572,6 +581,12 @@ dependencies = [
|
|
|
572
581
|
"syn 3.0.4",
|
|
573
582
|
]
|
|
574
583
|
|
|
584
|
+
[[package]]
|
|
585
|
+
name = "byteorder"
|
|
586
|
+
version = "1.5.0"
|
|
587
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
588
|
+
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
|
|
589
|
+
|
|
575
590
|
[[package]]
|
|
576
591
|
name = "byteorder-lite"
|
|
577
592
|
version = "0.1.0"
|
|
@@ -922,6 +937,12 @@ version = "1.2.1"
|
|
|
922
937
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
923
938
|
checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2"
|
|
924
939
|
|
|
940
|
+
[[package]]
|
|
941
|
+
name = "downcast-rs"
|
|
942
|
+
version = "2.0.2"
|
|
943
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
944
|
+
checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc"
|
|
945
|
+
|
|
925
946
|
[[package]]
|
|
926
947
|
name = "dpi"
|
|
927
948
|
version = "0.1.2"
|
|
@@ -1092,6 +1113,15 @@ dependencies = [
|
|
|
1092
1113
|
"serde",
|
|
1093
1114
|
]
|
|
1094
1115
|
|
|
1116
|
+
[[package]]
|
|
1117
|
+
name = "ena"
|
|
1118
|
+
version = "0.14.4"
|
|
1119
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1120
|
+
checksum = "eabffdaee24bd1bf95c5ef7cec31260444317e72ea56c4c91750e8b7ee58d5f1"
|
|
1121
|
+
dependencies = [
|
|
1122
|
+
"log",
|
|
1123
|
+
]
|
|
1124
|
+
|
|
1095
1125
|
[[package]]
|
|
1096
1126
|
name = "endi"
|
|
1097
1127
|
version = "1.1.1"
|
|
@@ -1488,6 +1518,28 @@ dependencies = [
|
|
|
1488
1518
|
"mint",
|
|
1489
1519
|
]
|
|
1490
1520
|
|
|
1521
|
+
[[package]]
|
|
1522
|
+
name = "glam"
|
|
1523
|
+
version = "0.33.6"
|
|
1524
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1525
|
+
checksum = "21fef0953c54fd3de2f44b743fbf77e044c81a25faee03636dfccc0d35135e23"
|
|
1526
|
+
dependencies = [
|
|
1527
|
+
"approx",
|
|
1528
|
+
"libm",
|
|
1529
|
+
]
|
|
1530
|
+
|
|
1531
|
+
[[package]]
|
|
1532
|
+
name = "glamx"
|
|
1533
|
+
version = "0.3.0"
|
|
1534
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1535
|
+
checksum = "9847f980afb0628849bcd6a406cdffd29eb9d53fca83e1646005901a9acd4c5c"
|
|
1536
|
+
dependencies = [
|
|
1537
|
+
"approx",
|
|
1538
|
+
"glam 0.33.6",
|
|
1539
|
+
"num-traits",
|
|
1540
|
+
"simba",
|
|
1541
|
+
]
|
|
1542
|
+
|
|
1491
1543
|
[[package]]
|
|
1492
1544
|
name = "glifo"
|
|
1493
1545
|
version = "0.2.0"
|
|
@@ -1629,6 +1681,15 @@ dependencies = [
|
|
|
1629
1681
|
"smallvec",
|
|
1630
1682
|
]
|
|
1631
1683
|
|
|
1684
|
+
[[package]]
|
|
1685
|
+
name = "hash32"
|
|
1686
|
+
version = "0.3.1"
|
|
1687
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1688
|
+
checksum = "47d60b12902ba28e2730cd37e95b8c9223af2808df9e902d4df49588d1470606"
|
|
1689
|
+
dependencies = [
|
|
1690
|
+
"byteorder",
|
|
1691
|
+
]
|
|
1692
|
+
|
|
1632
1693
|
[[package]]
|
|
1633
1694
|
name = "hashbrown"
|
|
1634
1695
|
version = "0.16.1"
|
|
@@ -1649,6 +1710,16 @@ dependencies = [
|
|
|
1649
1710
|
"foldhash",
|
|
1650
1711
|
]
|
|
1651
1712
|
|
|
1713
|
+
[[package]]
|
|
1714
|
+
name = "heapless"
|
|
1715
|
+
version = "0.8.0"
|
|
1716
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
1717
|
+
checksum = "0bfb9eb618601c89945a70e254898da93b13be0388091d42117462b265bb3fad"
|
|
1718
|
+
dependencies = [
|
|
1719
|
+
"hash32",
|
|
1720
|
+
"stable_deref_trait",
|
|
1721
|
+
]
|
|
1722
|
+
|
|
1652
1723
|
[[package]]
|
|
1653
1724
|
name = "heck"
|
|
1654
1725
|
version = "0.5.0"
|
|
@@ -2172,6 +2243,26 @@ version = "0.2.0"
|
|
|
2172
2243
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2173
2244
|
checksum = "2bf50223579dc7cdcfb3bfcacf7069ff68243f8c363f62ffa99cf000a6b9c451"
|
|
2174
2245
|
|
|
2246
|
+
[[package]]
|
|
2247
|
+
name = "num-complex"
|
|
2248
|
+
version = "0.4.6"
|
|
2249
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2250
|
+
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
|
|
2251
|
+
dependencies = [
|
|
2252
|
+
"num-traits",
|
|
2253
|
+
]
|
|
2254
|
+
|
|
2255
|
+
[[package]]
|
|
2256
|
+
name = "num-derive"
|
|
2257
|
+
version = "0.4.2"
|
|
2258
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2259
|
+
checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202"
|
|
2260
|
+
dependencies = [
|
|
2261
|
+
"proc-macro2",
|
|
2262
|
+
"quote",
|
|
2263
|
+
"syn 2.0.119",
|
|
2264
|
+
]
|
|
2265
|
+
|
|
2175
2266
|
[[package]]
|
|
2176
2267
|
name = "num-traits"
|
|
2177
2268
|
version = "0.2.19"
|
|
@@ -2598,6 +2689,33 @@ dependencies = [
|
|
|
2598
2689
|
"windows-link",
|
|
2599
2690
|
]
|
|
2600
2691
|
|
|
2692
|
+
[[package]]
|
|
2693
|
+
name = "parry3d-f64"
|
|
2694
|
+
version = "0.30.2"
|
|
2695
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2696
|
+
checksum = "8c5f71cd1d7f0c475116a52c61baa8d0de69fc258bc4debf86cb4c4ca8f35f3f"
|
|
2697
|
+
dependencies = [
|
|
2698
|
+
"approx",
|
|
2699
|
+
"arrayvec",
|
|
2700
|
+
"bitflags 2.13.1",
|
|
2701
|
+
"downcast-rs 2.0.2",
|
|
2702
|
+
"either",
|
|
2703
|
+
"ena",
|
|
2704
|
+
"foldhash",
|
|
2705
|
+
"glamx",
|
|
2706
|
+
"hashbrown 0.17.1",
|
|
2707
|
+
"log",
|
|
2708
|
+
"num-derive",
|
|
2709
|
+
"num-traits",
|
|
2710
|
+
"ordered-float",
|
|
2711
|
+
"rstar",
|
|
2712
|
+
"simba",
|
|
2713
|
+
"slab",
|
|
2714
|
+
"smallvec",
|
|
2715
|
+
"spade",
|
|
2716
|
+
"thiserror 2.0.20",
|
|
2717
|
+
]
|
|
2718
|
+
|
|
2601
2719
|
[[package]]
|
|
2602
2720
|
name = "peniko"
|
|
2603
2721
|
version = "0.6.1"
|
|
@@ -3105,7 +3223,7 @@ version = "0.0.1"
|
|
|
3105
3223
|
|
|
3106
3224
|
[[package]]
|
|
3107
3225
|
name = "riggen-app"
|
|
3108
|
-
version = "0.2.
|
|
3226
|
+
version = "0.2.1-dev"
|
|
3109
3227
|
dependencies = [
|
|
3110
3228
|
"console_error_panic_hook",
|
|
3111
3229
|
"eframe",
|
|
@@ -3113,6 +3231,7 @@ dependencies = [
|
|
|
3113
3231
|
"egui-wgpu",
|
|
3114
3232
|
"egui_kittest",
|
|
3115
3233
|
"getrandom 0.3.4",
|
|
3234
|
+
"js-sys",
|
|
3116
3235
|
"pollster 1.0.1",
|
|
3117
3236
|
"rfd",
|
|
3118
3237
|
"riggen-core",
|
|
@@ -3126,11 +3245,12 @@ dependencies = [
|
|
|
3126
3245
|
"wasm-bindgen-futures",
|
|
3127
3246
|
"web-sys",
|
|
3128
3247
|
"web-time",
|
|
3248
|
+
"zip",
|
|
3129
3249
|
]
|
|
3130
3250
|
|
|
3131
3251
|
[[package]]
|
|
3132
3252
|
name = "riggen-core"
|
|
3133
|
-
version = "0.2.
|
|
3253
|
+
version = "0.2.1-dev"
|
|
3134
3254
|
dependencies = [
|
|
3135
3255
|
"riggen-mesh",
|
|
3136
3256
|
"serde",
|
|
@@ -3139,8 +3259,9 @@ dependencies = [
|
|
|
3139
3259
|
|
|
3140
3260
|
[[package]]
|
|
3141
3261
|
name = "riggen-export"
|
|
3142
|
-
version = "0.2.
|
|
3262
|
+
version = "0.2.1-dev"
|
|
3143
3263
|
dependencies = [
|
|
3264
|
+
"quick-xml 0.36.2",
|
|
3144
3265
|
"riggen-core",
|
|
3145
3266
|
"riggen-mesh",
|
|
3146
3267
|
"serde",
|
|
@@ -3150,16 +3271,17 @@ dependencies = [
|
|
|
3150
3271
|
|
|
3151
3272
|
[[package]]
|
|
3152
3273
|
name = "riggen-mesh"
|
|
3153
|
-
version = "0.2.
|
|
3274
|
+
version = "0.2.1-dev"
|
|
3154
3275
|
dependencies = [
|
|
3155
3276
|
"glam 0.30.10",
|
|
3277
|
+
"parry3d-f64",
|
|
3156
3278
|
"stl_io",
|
|
3157
3279
|
"tobj",
|
|
3158
3280
|
]
|
|
3159
3281
|
|
|
3160
3282
|
[[package]]
|
|
3161
3283
|
name = "riggen-py"
|
|
3162
|
-
version = "0.2.
|
|
3284
|
+
version = "0.2.1-dev"
|
|
3163
3285
|
dependencies = [
|
|
3164
3286
|
"pyo3",
|
|
3165
3287
|
"riggen-core",
|
|
@@ -3171,7 +3293,7 @@ dependencies = [
|
|
|
3171
3293
|
|
|
3172
3294
|
[[package]]
|
|
3173
3295
|
name = "riggen-viewport"
|
|
3174
|
-
version = "0.2.
|
|
3296
|
+
version = "0.2.1-dev"
|
|
3175
3297
|
dependencies = [
|
|
3176
3298
|
"bytemuck",
|
|
3177
3299
|
"egui",
|
|
@@ -3180,6 +3302,12 @@ dependencies = [
|
|
|
3180
3302
|
"web-time",
|
|
3181
3303
|
]
|
|
3182
3304
|
|
|
3305
|
+
[[package]]
|
|
3306
|
+
name = "robust"
|
|
3307
|
+
version = "1.2.0"
|
|
3308
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3309
|
+
checksum = "4e27ee8bb91ca0adcf0ecb116293afa12d393f9c2b9b9cd54d33e8078fe19839"
|
|
3310
|
+
|
|
3183
3311
|
[[package]]
|
|
3184
3312
|
name = "ron"
|
|
3185
3313
|
version = "0.12.2"
|
|
@@ -3194,6 +3322,17 @@ dependencies = [
|
|
|
3194
3322
|
"unicode-ident",
|
|
3195
3323
|
]
|
|
3196
3324
|
|
|
3325
|
+
[[package]]
|
|
3326
|
+
name = "rstar"
|
|
3327
|
+
version = "0.13.0"
|
|
3328
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3329
|
+
checksum = "5912b862fa5ffb462607bfd1e35036c458c537921f508c8235a83d5f3987edfe"
|
|
3330
|
+
dependencies = [
|
|
3331
|
+
"heapless",
|
|
3332
|
+
"num-traits",
|
|
3333
|
+
"smallvec",
|
|
3334
|
+
]
|
|
3335
|
+
|
|
3197
3336
|
[[package]]
|
|
3198
3337
|
name = "rustc-hash"
|
|
3199
3338
|
version = "1.1.0"
|
|
@@ -3247,6 +3386,15 @@ version = "1.0.23"
|
|
|
3247
3386
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3248
3387
|
checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
|
|
3249
3388
|
|
|
3389
|
+
[[package]]
|
|
3390
|
+
name = "safe_arch"
|
|
3391
|
+
version = "1.2.0"
|
|
3392
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3393
|
+
checksum = "42c6efa15875e6ecb39ca61fb0b0c1a40b84fac5a5ffe71eef7d1000c8eb3f5f"
|
|
3394
|
+
dependencies = [
|
|
3395
|
+
"bytemuck",
|
|
3396
|
+
]
|
|
3397
|
+
|
|
3250
3398
|
[[package]]
|
|
3251
3399
|
name = "same-file"
|
|
3252
3400
|
version = "1.0.6"
|
|
@@ -3384,6 +3532,18 @@ dependencies = [
|
|
|
3384
3532
|
"libc",
|
|
3385
3533
|
]
|
|
3386
3534
|
|
|
3535
|
+
[[package]]
|
|
3536
|
+
name = "simba"
|
|
3537
|
+
version = "0.10.2"
|
|
3538
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3539
|
+
checksum = "f1a7200d82ff1c7b4235efd12f11e2537a402c91cf83a5cb97ce80eef787fde7"
|
|
3540
|
+
dependencies = [
|
|
3541
|
+
"approx",
|
|
3542
|
+
"num-complex",
|
|
3543
|
+
"num-traits",
|
|
3544
|
+
"wide",
|
|
3545
|
+
]
|
|
3546
|
+
|
|
3387
3547
|
[[package]]
|
|
3388
3548
|
name = "simd-adler32"
|
|
3389
3549
|
version = "0.3.10"
|
|
@@ -3518,6 +3678,18 @@ dependencies = [
|
|
|
3518
3678
|
"serde",
|
|
3519
3679
|
]
|
|
3520
3680
|
|
|
3681
|
+
[[package]]
|
|
3682
|
+
name = "spade"
|
|
3683
|
+
version = "2.15.1"
|
|
3684
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
3685
|
+
checksum = "9699399fd9349b00b184f5635b074f9ec93afffef30c853f8c875b32c0f8c7fa"
|
|
3686
|
+
dependencies = [
|
|
3687
|
+
"hashbrown 0.16.1",
|
|
3688
|
+
"num-traits",
|
|
3689
|
+
"robust",
|
|
3690
|
+
"smallvec",
|
|
3691
|
+
]
|
|
3692
|
+
|
|
3521
3693
|
[[package]]
|
|
3522
3694
|
name = "spirv"
|
|
3523
3695
|
version = "0.4.0+sdk-1.4.341.0"
|
|
@@ -3823,6 +3995,12 @@ dependencies = [
|
|
|
3823
3995
|
"rustc-hash 2.1.3",
|
|
3824
3996
|
]
|
|
3825
3997
|
|
|
3998
|
+
[[package]]
|
|
3999
|
+
name = "typed-path"
|
|
4000
|
+
version = "0.12.3"
|
|
4001
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4002
|
+
checksum = "8e28f89b80c87b8fb0cf04ab448d5dd0dd0ade2f8891bae878de66a75a28600e"
|
|
4003
|
+
|
|
3826
4004
|
[[package]]
|
|
3827
4005
|
name = "typeid"
|
|
3828
4006
|
version = "1.0.3"
|
|
@@ -4028,7 +4206,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
|
4028
4206
|
checksum = "38a91b4eaddff87b1cd1074985e3713da4af2c49742d1b356b2c01670a67a078"
|
|
4029
4207
|
dependencies = [
|
|
4030
4208
|
"cc",
|
|
4031
|
-
"downcast-rs",
|
|
4209
|
+
"downcast-rs 1.2.1",
|
|
4032
4210
|
"rustix 1.1.4",
|
|
4033
4211
|
"scoped-tls",
|
|
4034
4212
|
"smallvec",
|
|
@@ -4381,6 +4559,16 @@ dependencies = [
|
|
|
4381
4559
|
"web-sys",
|
|
4382
4560
|
]
|
|
4383
4561
|
|
|
4562
|
+
[[package]]
|
|
4563
|
+
name = "wide"
|
|
4564
|
+
version = "1.7.0"
|
|
4565
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
4566
|
+
checksum = "8cf05ca94c9fba0c51316899caa1d1e74a064fc310a5efa7375e614343d415be"
|
|
4567
|
+
dependencies = [
|
|
4568
|
+
"bytemuck",
|
|
4569
|
+
"safe_arch",
|
|
4570
|
+
]
|
|
4571
|
+
|
|
4384
4572
|
[[package]]
|
|
4385
4573
|
name = "winapi-util"
|
|
4386
4574
|
version = "0.1.11"
|
|
@@ -5004,6 +5192,18 @@ dependencies = [
|
|
|
5004
5192
|
"syn 3.0.4",
|
|
5005
5193
|
]
|
|
5006
5194
|
|
|
5195
|
+
[[package]]
|
|
5196
|
+
name = "zip"
|
|
5197
|
+
version = "8.6.0"
|
|
5198
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
5199
|
+
checksum = "2d04a6b5381502aa6087c94c669499eb1602eb9c5e8198e534de571f7154809b"
|
|
5200
|
+
dependencies = [
|
|
5201
|
+
"crc32fast",
|
|
5202
|
+
"indexmap",
|
|
5203
|
+
"memchr",
|
|
5204
|
+
"typed-path",
|
|
5205
|
+
]
|
|
5206
|
+
|
|
5007
5207
|
[[package]]
|
|
5008
5208
|
name = "zlib-rs"
|
|
5009
5209
|
version = "0.6.7"
|
|
@@ -3,19 +3,25 @@ resolver = "3"
|
|
|
3
3
|
members = ["crates/riggen-mesh", "crates/riggen-core", "crates/riggen-export", "crates/riggen-py"]
|
|
4
4
|
|
|
5
5
|
[workspace.package]
|
|
6
|
-
version = "0.2.
|
|
6
|
+
version = "0.2.1-dev"
|
|
7
7
|
edition = "2024"
|
|
8
8
|
license = "MIT OR Apache-2.0"
|
|
9
9
|
|
|
10
10
|
# `cargo run` is the interactive loop, and an unoptimized wgpu/egui is slow
|
|
11
11
|
# enough to be felt. Deps are built once at full optimization; our own crates
|
|
12
|
-
# stay at `1` so backtraces and stepping still work (docs/
|
|
12
|
+
# stay at `1` so backtraces and stepping still work (docs/ARCHITECTURE.md
|
|
13
13
|
# §Cargo workspace, carried from RoboCAD).
|
|
14
14
|
[profile.dev]
|
|
15
15
|
opt-level = 1
|
|
16
16
|
|
|
17
|
+
# `debug = false` for dependencies only: 93% of a debug binary was DWARF for
|
|
18
|
+
# crates nobody steps through (596 MB → 39 MB stripped, measured 2026-09-06),
|
|
19
|
+
# and cargo never collects the old copies, so `target/` reached 76 GB. Their
|
|
20
|
+
# symbol names survive in backtraces — that is the symbol table, not debug
|
|
21
|
+
# info — and our own crates above keep theirs in full.
|
|
17
22
|
[profile.dev.package."*"]
|
|
18
23
|
opt-level = 3
|
|
24
|
+
debug = false
|
|
19
25
|
|
|
20
26
|
# The wheel is the product (ADR-0002): its size is what `pip install` pulls
|
|
21
27
|
# and its startup is what the user sees. Stripped, thin-LTO, one codegen
|
|
@@ -25,6 +31,21 @@ strip = true
|
|
|
25
31
|
lto = "thin"
|
|
26
32
|
codegen-units = 1
|
|
27
33
|
|
|
34
|
+
# The web demo (ADR-0017, Architecture §The web build). What the browser
|
|
35
|
+
# pays for
|
|
36
|
+
# is the *download*, not the last few percent of throughput: `opt-level = "s"`
|
|
37
|
+
# and fat LTO over the whole graph trade a little speed for a much smaller
|
|
38
|
+
# `.wasm`, and the viewport still holds 60 fps (the demo's own status bar
|
|
39
|
+
# says so). `panic = "abort"` is deliberately **not** here: eframe's panic
|
|
40
|
+
# handler is what turns a crash into a page that says what happened
|
|
41
|
+
# (`web/main.js`), and unwinding is how it gets the message.
|
|
42
|
+
[profile.web]
|
|
43
|
+
inherits = "release"
|
|
44
|
+
opt-level = "s"
|
|
45
|
+
lto = "fat"
|
|
46
|
+
codegen-units = 1
|
|
47
|
+
strip = true
|
|
48
|
+
|
|
28
49
|
[workspace.dependencies]
|
|
29
50
|
riggen-mesh = { path = "crates/riggen-mesh" }
|
|
30
51
|
riggen-core = { path = "crates/riggen-core" }
|
|
@@ -45,6 +66,16 @@ stl_io = "0.11"
|
|
|
45
66
|
# build, where it does not compile without a JS shim we have no use for.
|
|
46
67
|
tobj = { version = "4", default-features = false, features = ["use_f64"] }
|
|
47
68
|
|
|
69
|
+
# Approximate convex decomposition (ADR-0011): Dimforge's pure-Rust V-HACD,
|
|
70
|
+
# `transformation::vhacd`, at f64 — the algorithm `riggen-mesh::decompose`
|
|
71
|
+
# wraps beside our own quickhull. Default features: `default-features =
|
|
72
|
+
# false` drops the crate's own `dim3`/`f64` selection and does not compile,
|
|
73
|
+
# and the default set pulls neither `rayon` nor `serde`. Its `glamx` bridge
|
|
74
|
+
# pins a third glam (0.33) beside our 0.30 and transform-gizmo's 0.32; no
|
|
75
|
+
# parry or glam-0.33 type appears in a riggen signature (ADR-0007's
|
|
76
|
+
# containment, applied again).
|
|
77
|
+
parry3d-f64 = "0.30"
|
|
78
|
+
|
|
48
79
|
# UI stack pinned together: egui/eframe/egui-wgpu 0.36.x from crates.io, wgpu
|
|
49
80
|
# version dictated by egui-wgpu — never depend on a different wgpu (ADR-0001).
|
|
50
81
|
egui = "0.36"
|
|
@@ -72,6 +103,11 @@ web-time = "1"
|
|
|
72
103
|
# URDF parser: the round-trip FK test reads our own URDF back through it
|
|
73
104
|
# (dev, step 6), and File › Import URDF… is built on it (step 13).
|
|
74
105
|
urdf-rs = "0.9"
|
|
106
|
+
# The XML pull parser behind `xml::parse`, the reading half of the MJCF
|
|
107
|
+
# import (ADR-0015 §2). 0.36 is the version `urdf-rs` already compiles, so
|
|
108
|
+
# this line adds a dependency and no crate. Escaping, CDATA and encodings
|
|
109
|
+
# are exactly what the writer's `escape` must not have to invert by hand.
|
|
110
|
+
quick-xml = "0.36"
|
|
75
111
|
|
|
76
112
|
# The Python SDK's binding layer (ADR-0009). `abi3-py310`: one extension
|
|
77
113
|
# module for every CPython ≥ 3.10 (`requires-python`), so the wheel matrix
|
|
@@ -80,6 +116,14 @@ urdf-rs = "0.9"
|
|
|
80
116
|
# still links libpython and `cargo clippy --workspace` sees the crate.
|
|
81
117
|
pyo3 = { version = "0.29", features = ["abi3-py310"] }
|
|
82
118
|
|
|
119
|
+
# Writing the export directory as one file, which is what a browser
|
|
120
|
+
# download is (ADR-0017 §6). `default-features = false`: no compression, no
|
|
121
|
+
# encryption, no time crate — a stored zip is a header, the bytes and a
|
|
122
|
+
# central directory, and the crate is here for the CRC-32 and the offsets,
|
|
123
|
+
# not for an algorithm. Not gated to wasm: the acceptance test that reads
|
|
124
|
+
# the archive back is native.
|
|
125
|
+
zip = { version = "8", default-features = false }
|
|
126
|
+
|
|
83
127
|
# Only to block on `Instance::enumerate_adapters` in the "is there a GPU at
|
|
84
128
|
# all?" probe of the snapshot harness — `egui_kittest` panics rather than
|
|
85
129
|
# reporting that itself.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: riggen
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.1.dev0
|
|
4
4
|
Classifier: Development Status :: 3 - Alpha
|
|
5
5
|
Classifier: Intended Audience :: Science/Research
|
|
6
6
|
Classifier: Topic :: Scientific/Engineering
|
|
@@ -26,10 +26,23 @@ Project-URL: Repository, https://github.com/Divelix/riggen
|
|
|
26
26
|
[](https://pypi.org/project/riggen/)
|
|
27
27
|
|
|
28
28
|
**The blazingly fast, lightweight robot assembler for RL researchers.**
|
|
29
|
-
Drop meshes in, get a simulation-ready MJCF or
|
|
30
|
-
from ten lines of Python.
|
|
29
|
+
Drop meshes in, get a simulation-ready MJCF, URDF or SDF out — in a
|
|
30
|
+
window, or from ten lines of Python.
|
|
31
31
|
|
|
32
|
-

|
|
33
|
+
|
|
34
|
+
## Try it in the browser
|
|
35
|
+
|
|
36
|
+
**[divelix.github.io/riggen](https://divelix.github.io/riggen/)** — the real
|
|
37
|
+
app, wasm, with the sample arm already in it. Orbit it, pose it from the
|
|
38
|
+
joint tree or with the wheel over a joint, drop your own `.stl` / `.obj` / `.riggen` / `.urdf` / `.xml` onto
|
|
39
|
+
the page, and Export to get the same MJCF, URDF and SDF the desktop writes,
|
|
40
|
+
as one zip. Needs a browser with WebGPU (Chrome/Edge 113+, Firefox 141+,
|
|
41
|
+
Safari 26+); the desktop app does not.
|
|
42
|
+
|
|
43
|
+
Drop a document **together with its meshes** — the browser hands a page one
|
|
44
|
+
flat set of files per drop and no directory, so a `.riggen` on its own can
|
|
45
|
+
only tell you which meshes are missing.
|
|
33
46
|
|
|
34
47
|
## Install
|
|
35
48
|
|
|
@@ -47,16 +60,35 @@ without a wheel, `pip install` builds the SDK from source with `cargo` on
|
|
|
47
60
|
|
|
48
61
|
## The first minute
|
|
49
62
|
|
|
50
|
-
1. `riggen --example arm` opens a four-part arm
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
63
|
+
1. `riggen --example arm` opens a four-part arm in **View**: the joint
|
|
64
|
+
tree on the left, the viewport with the robot. Drag with the left
|
|
65
|
+
button to orbit and with the right to pan (shift+left pans too, for a
|
|
66
|
+
trackpad; the middle button orbits and shift+middle pans), zoom with the
|
|
67
|
+
wheel, `Home` to frame everything. The five buttons top-right are the
|
|
68
|
+
**visibility row**: joints, joint names, frames, links, collision
|
|
69
|
+
geometry. Switching one off takes it out of the picture *and* out of
|
|
70
|
+
the cursor's reach, so with joints off you get the robot and nothing
|
|
71
|
+
else — the status bar says what is hidden.
|
|
72
|
+
2. Pose it: drag a joint's bar in the tree, or turn the wheel over it —
|
|
73
|
+
or over the joint's glyph in the viewport, which steps it by 5° (1°
|
|
74
|
+
with shift) instead of zooming. A click on a glyph selects the joint;
|
|
75
|
+
in View a mesh is not a thing to click. That is the kinematic tree you
|
|
76
|
+
will build for your own robot.
|
|
77
|
+
3. `Tab` (or the **View | Edit** control top-left) switches to **Edit**:
|
|
78
|
+
the robot at its zero configuration, the link tree, Properties, and the
|
|
79
|
+
five tools on the toolbar with their keys — `V` select, `G` move, `R`
|
|
80
|
+
rotate, `J` place joint, `B` align, `Esc` back to select. With
|
|
81
|
+
**Rotate** up, the wheel over one of the gizmo's three rings steps that
|
|
82
|
+
ring by 5° — 1° with shift — instead of zooming; with **Move** up, a
|
|
83
|
+
drag snaps to the vertex, box corner or bore centre under the cursor,
|
|
84
|
+
looking through the part it is carrying. `Tab` again brings the pose
|
|
85
|
+
back.
|
|
86
|
+
4. **File › Export…**, tick the formats you want (all three by default),
|
|
87
|
+
choose a directory. The dialog lists anything that would stop the
|
|
88
|
+
export (a link with no mass, a joint with no axis) and writes
|
|
89
|
+
`arm.xml`, `arm.urdf` and `arm.sdf` beside `meshes/*.stl` when there is
|
|
58
90
|
nothing.
|
|
59
|
-
|
|
91
|
+
5. Load it:
|
|
60
92
|
|
|
61
93
|
```sh
|
|
62
94
|
python -c "import mujoco; m = mujoco.MjModel.from_xml_path('out/arm.xml'); print(m.nbody, 'bodies')"
|
|
@@ -69,20 +101,32 @@ link under the root (meters or millimetres — the import units are in the
|
|
|
69
101
|
status bar). Reparent by dragging rows in the tree; **Place joint** puts a
|
|
70
102
|
revolute joint on a bore by clicking its edge; **Align** snaps a part's
|
|
71
103
|
bore concentric with its parent's; Properties computes the inertial from
|
|
72
|
-
the mesh and a material, and fits a hull or primitives for
|
|
104
|
+
the mesh and a material, and fits a hull, convex pieces or primitives for
|
|
105
|
+
collision. Every number there scrubs: drag it, step it with Ctrl+wheel,
|
|
106
|
+
or click and type (`2.86e-5` reads and edits as written). **+ Frame** puts a named frame on a link — a TCP, a sensor
|
|
107
|
+
mount — which Move and Rotate land on a picked feature the same way.
|
|
73
108
|
|
|
74
109
|
## What it does
|
|
75
110
|
|
|
76
111
|
- **Assembles**: STL and OBJ meshes into a kinematic tree — fixed, revolute
|
|
77
|
-
and prismatic joints, placed by clicking geometry, with limits
|
|
112
|
+
and prismatic joints, placed by clicking geometry, with limits — and
|
|
113
|
+
named frames (a TCP, a sensor mount) placed the same way.
|
|
78
114
|
- **Computes**: mass, centre of mass and the inertia tensor from the mesh
|
|
79
|
-
and a material density, or from a spec you type; convex hulls
|
|
115
|
+
and a material density, or from a spec you type; convex hulls, convex
|
|
116
|
+
decomposition (V-HACD, so a C-bracket keeps its notch) and fitted
|
|
80
117
|
boxes / cylinders / spheres for collision.
|
|
81
|
-
- **Exports**: MJCF and
|
|
82
|
-
meters as STL
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
118
|
+
- **Exports**: MJCF, URDF and SDF from the same document, meshes baked to
|
|
119
|
+
meters as STL — a named frame becomes an MJCF `<site>`, an SDF
|
|
120
|
+
`<frame>`, and the massless dummy link ROS expects — so MuJoCo loads it
|
|
121
|
+
with zero warnings and libsdformat, the SDF spec's own parser, reads the
|
|
122
|
+
`.sdf`, and the forward kinematics of both agree with riggen's (those
|
|
123
|
+
are CI jobs, not hopes).
|
|
124
|
+
- **Imports**: an existing URDF or MJCF — `package://` paths resolved
|
|
125
|
+
beside the file, MuJoCo's `<default>` classes and degrees understood, a
|
|
126
|
+
model spelled across several files opened through its main one
|
|
127
|
+
(`<include>` and MuJoCo 3's `<frame>` are resolved on the way in) — to
|
|
128
|
+
fix and convert it. Whatever the file held that the document cannot is
|
|
129
|
+
named, never dropped in silence.
|
|
86
130
|
- **Stays out of the way**: a native window through wgpu, a document that
|
|
87
131
|
is plain JSON (`.riggen`), undo for everything, and a headless CLI.
|
|
88
132
|
|
|
@@ -92,12 +136,12 @@ the mesh and a material, and fits a hull or primitives for collision.
|
|
|
92
136
|
usage:
|
|
93
137
|
riggen [FILE...] open a .riggen document, or drop meshes (.stl, .obj) as links
|
|
94
138
|
riggen --example arm open the bundled sample arm
|
|
95
|
-
riggen --export mjcf|urdf|both --out DIR [--fk-samples] INPUT
|
|
139
|
+
riggen --export mjcf|urdf|sdf|both|all --out DIR [--fk-samples] INPUT
|
|
96
140
|
write INPUT's export to DIR without opening a window
|
|
97
141
|
|
|
98
142
|
options:
|
|
99
143
|
--example NAME open a bundled example: arm (the five-link sample robot)
|
|
100
|
-
--export FORMAT headless export of INPUT (.riggen or .
|
|
144
|
+
--export FORMAT headless export of INPUT (.riggen, .urdf or .xml): mjcf, urdf, sdf, both or all
|
|
101
145
|
--out DIR where --export writes; created if missing
|
|
102
146
|
--fk-samples with --export: also write <name>.fk.json, five sampled joint configurations
|
|
103
147
|
--timing print the time from launch to the first frame on stderr
|
|
@@ -106,9 +150,11 @@ options:
|
|
|
106
150
|
```
|
|
107
151
|
|
|
108
152
|
`riggen --export` needs no display, so it runs in CI and in scripts: give
|
|
109
|
-
it a `.riggen` or
|
|
153
|
+
it a `.riggen`, a `.urdf` or an MJCF `.xml` and it writes the model or
|
|
154
|
+
models, the meshes and, with
|
|
110
155
|
`--fk-samples`, five joint configurations with every body's world pose —
|
|
111
|
-
the file `python/tests/test_mjcf_load.py` checks MuJoCo against
|
|
156
|
+
the file `python/tests/test_mjcf_load.py` checks MuJoCo against and
|
|
157
|
+
`python/tests/test_sdf_load.py` checks libsdformat against.
|
|
112
158
|
|
|
113
159
|
`python -m riggen` is the same executable, for an environment whose
|
|
114
160
|
`bin/` is not on `PATH`.
|
|
@@ -145,6 +191,7 @@ radians, Z-up; `degrees=True` wherever an angle is typed.
|
|
|
145
191
|
robot.fk({"arm_joint": 0.3})["arm"] # Pose((0.0, 0.0, 0.5), rpy=(0.0, 0.3, 0.0))
|
|
146
192
|
arm.inertial # Inertial(mass=…, com=…, inertia=…) from the mesh
|
|
147
193
|
robot.link("arm").joint.limits = (-1.0, 1.0) # radians; one edit
|
|
194
|
+
robot.link("arm").add_frame("tcp", (0, 0, 0.3)) # an MJCF <site>; frame.world(q) for its pose
|
|
148
195
|
robot.save("pendulum.riggen") # the window opens this file
|
|
149
196
|
```
|
|
150
197
|
|
|
@@ -163,9 +210,11 @@ model = mujoco.MjModel.from_xml_path("out/pendulum.xml")
|
|
|
163
210
|
```
|
|
164
211
|
|
|
165
212
|
`riggen.load(path)` reads a `.riggen`, `riggen.load_urdf(path)` an existing
|
|
166
|
-
URDF (with `packages={"name": "dir"}` for `package://` paths)
|
|
167
|
-
`
|
|
168
|
-
|
|
213
|
+
URDF (with `packages={"name": "dir"}` for `package://` paths) and
|
|
214
|
+
`riggen.load_mjcf(path)` an MJCF; `format` names a set of writers —
|
|
215
|
+
`"mjcf"`, `"urdf"`, `"sdf"`, `"both"` or `"all"`, the default — and
|
|
216
|
+
`fk_samples=True` adds the five joint configurations CI compares against
|
|
217
|
+
MuJoCo and libsdformat. [`examples/pendulum.py`](examples/pendulum.py)
|
|
169
218
|
is the snippet above as a file; [`examples/arm.py`](examples/arm.py) builds
|
|
170
219
|
the bundled arm from its four STLs with typed joints — its export is
|
|
171
220
|
byte-identical to the app's. Everything is typed (`py.typed`) and
|
|
@@ -228,9 +277,9 @@ https://github.com/Divelix/riggen riggen-app`; publishing the workspace to
|
|
|
228
277
|
crates.io so that `cargo install riggen` works is a later release.
|
|
229
278
|
|
|
230
279
|
Read, in order: [`SEED.md`](SEED.md) (what and why),
|
|
231
|
-
[`docs/
|
|
232
|
-
[`docs/
|
|
233
|
-
[`docs/
|
|
280
|
+
[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md),
|
|
281
|
+
[`docs/DATA-MODEL.md`](docs/DATA-MODEL.md),
|
|
282
|
+
[`docs/ROADMAP.md`](docs/ROADMAP.md), [`docs/adr/`](docs/adr/) — then
|
|
234
283
|
[`AGENTS.md`](AGENTS.md) for the rules, agent or human. The SDK's own
|
|
235
284
|
tests are `python/tests/sdk/` (pytest, against the built wheel).
|
|
236
285
|
|