Сортировочная ячейка Isaac Sim: CV-пайплайн и меши товаров

Замкнутый контур "поток -> CV -> механика": товары идут по конвейеру с шагом 700 мм,
класс определяется стереопайплайном во время движения, пушер и плуг реагируют физически.

Состав:
* control_test/ - ячейка и CV. run_sorting_cv.py + cv_worker.py (два процесса, потому что
  torch внутри Isaac роняет сцену), cell.py (физика лент, плуга, пушера), measure_plane.py
  (замер габаритов), README.md и .memory.md с замерами, проблемами и ловушками
* robozon_sorter/ - модули симуляции, scripts/ - утилиты, scene/ - сцены
* assets/ - меши товаров, плуг, объекты Objaverse

Бейзлайн CV: DEFOM-Stereo vitl, вход 480, iters 24, кроп зоны осмотра, без сегментации.
На потоке 700 мм - классы 8/9, габариты MAE 32.8 мм, 469 мс на товар при такте 700 мс.

Веса моделей (4.5 ГБ) и пропсы конвейера NVIDIA (274 МБ) не включены - источники и
команды скачивания в MODELS.md. Выход прогонов (captures/, runtime/) не включён:
воспроизводится.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dasha_f
2026-08-01 13:07:24 +00:00
parent 6ce460378a
commit 0d32f32db0
342 changed files with 18000 additions and 0 deletions
+206
View File
@@ -0,0 +1,206 @@
{
"center": [
-0.75,
0.0,
1.781
],
"belt_top": 1.781,
"rectified": true,
"cameras": {
"RealSense_D435": {
"baseline_m": 0.07352941176470584,
"intrinsics": {
"fx": 674.4192801798159,
"fy": 674.4192801798159,
"cx": 640.0,
"cy": 360.0,
"width": 1280,
"height": 720
},
"left_path": "/RigRS/RealSense_D435_Left",
"right_path": "/RigRS/RealSense_D435_Right",
"left_world": [
[
-0.999999612839731,
0.0008799547647936078,
0.0,
0.0
],
[
-0.0005857536015939647,
-0.6656630525216037,
0.7462522076351525,
0.0
],
[
0.0006566681858463012,
0.7462519187159471,
0.6656633102399899,
0.0
],
[
-0.7128235436455979,
0.4679059598012155,
2.1984051112352905,
1.0
]
],
"right_world": [
[
-0.999999612839731,
0.0008799547647936078,
0.0,
0.0
],
[
-0.0005857536015939647,
-0.6656630525216037,
0.7462522076351525,
0.0
],
[
0.0006566681858463012,
0.7462519187159471,
0.6656633102399899,
0.0
],
[
-0.7863529269426368,
0.46797066235745033,
2.1984051112352905,
1.0
]
]
},
"Orbbec_Gemini305": {
"baseline_m": 0.026470588235294006,
"intrinsics": {
"fx": 662.7394008259646,
"fy": 662.7394008259646,
"cx": 640.0,
"cy": 400.0,
"width": 1280,
"height": 800
},
"left_path": "/RigRS/Orbbec_Gemini305_Left",
"right_path": "/RigRS/Orbbec_Gemini305_Right",
"left_world": [
[
0.5003812738237227,
-0.8658051633055491,
0.0,
0.0
],
[
0.5765794758052561,
0.33322690230045576,
0.7459999595599041,
0.0
],
[
-0.6458906168126959,
-0.37328441003703045,
0.665945989053633,
0.0
],
[
-1.1614573934228245,
-0.22250996955474017,
2.1984051112352905,
1.0
]
],
"right_world": [
[
0.5003812738237227,
-0.8658051633055491,
0.0,
0.0
],
[
0.5765794758052561,
0.33322690230045576,
0.7459999595599041,
0.0
],
[
-0.6458906168126959,
-0.37328441003703045,
0.665945989053633,
0.0
],
[
-1.148212006762785,
-0.24542834152459286,
2.1984051112352905,
1.0
]
]
},
"Orbbec_Gemini345": {
"baseline_m": 0.12941176470588234,
"intrinsics": {
"fx": 628.9262483940416,
"fy": 628.9262483940416,
"cx": 640.0,
"cy": 400.0,
"width": 1280,
"height": 800
},
"left_path": "/RigRS/Orbbec_Gemini345_Left",
"right_path": "/RigRS/Orbbec_Gemini345_Right",
"left_world": [
[
0.49961921012690946,
0.866245141326728,
-0.0,
0.0
],
[
-0.5763830506655224,
0.33243712520337265,
0.7465039428509558,
0.0
],
[
0.6466554134758858,
-0.37296771028381803,
0.6653809910930556,
0.0
],
[
-0.3766700723271712,
-0.29002031174316084,
2.1984051112352905,
1.0
]
],
"right_world": [
[
0.49961921012690946,
0.866245141326728,
-0.0,
0.0
],
[
-0.5763830506655224,
0.33243712520337265,
0.7465039428509558,
0.0
],
[
0.6466554134758858,
-0.37296771028381803,
0.6653809910930556,
0.0
],
[
-0.31201346866368884,
-0.17791799933617253,
2.1984051112352905,
1.0
]
]
}
}
}
+374
View File
@@ -0,0 +1,374 @@
{
"backpack": {
"name": "backpack",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.4547,
0.3703,
0.3009
],
"k_round": 0.82,
"label_ru": "Не подходит для сортировки по габаритам"
},
"bag": {
"name": "bag",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.2017,
0.1753,
0.1703
],
"k_round": 0.896,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"banana": {
"name": "banana",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.1826,
0.0706,
0.033
],
"k_round": 0.94,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"barrel": {
"name": "barrel",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.88,
0.5418,
0.5418
],
"k_round": 0.995,
"label_ru": "Не подходит для сортировки по габаритам"
},
"bolts_cluster": {
"name": "bolts_cluster",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.1936,
0.1356,
0.0526
],
"k_round": 0.718,
"label_ru": "Подходит для сортировки"
},
"bottle": {
"name": "bottle",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.3048,
0.091,
0.091
],
"k_round": 0.995,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"box_300x200x200": {
"name": "box_300x200x200",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.301,
0.2005,
0.2
],
"k_round": 0.72,
"label_ru": "Подходит для сортировки"
},
"box_400x400x300": {
"name": "box_400x400x300",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.401,
0.4,
0.3005
],
"k_round": 0.716,
"label_ru": "Не подходит для сортировки по габаритам"
},
"broom": {
"name": "broom",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
1.1996,
0.3898,
0.1033
],
"k_round": 0.966,
"label_ru": "Не подходит для сортировки по габаритам"
},
"bucket": {
"name": "bucket",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.2874,
0.2874,
0.2723
],
"k_round": 0.995,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"chip_bag": {
"name": "chip_bag",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.25,
0.1622,
0.0691
],
"k_round": 0.811,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"cone": {
"name": "cone",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.5,
0.3505,
0.3505
],
"k_round": 0.991,
"label_ru": "Не подходит для сортировки по габаритам"
},
"cylinder": {
"name": "cylinder",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.4349,
0.05,
0.043
],
"k_round": 0.867,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"detergent": {
"name": "detergent",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.2782,
0.2599,
0.1798
],
"k_round": 0.742,
"label_ru": "Подходит для сортировки"
},
"headphones": {
"name": "headphones",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.1984,
0.1949,
0.0933
],
"k_round": 0.807,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"helmet": {
"name": "helmet",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.3535,
0.2971,
0.2799
],
"k_round": 0.895,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"lunchbox": {
"name": "lunchbox",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.2011,
0.1524,
0.0623
],
"k_round": 0.646,
"label_ru": "Подходит для сортировки"
},
"mug": {
"name": "mug",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.1129,
0.099,
0.0832
],
"k_round": 0.985,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"office_chair": {
"name": "office_chair",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
1.0953,
0.8599,
0.8254
],
"k_round": 0.996,
"label_ru": "Не подходит для сортировки по габаритам"
},
"pallet": {
"name": "pallet",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
1.2,
1.196,
0.1555
],
"k_round": 0.711,
"label_ru": "Не подходит для сортировки по габаритам"
},
"parcel_box": {
"name": "parcel_box",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.3444,
0.1551,
0.1437
],
"k_round": 0.699,
"label_ru": "Подходит для сортировки"
},
"pen": {
"name": "pen",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.1485,
0.0131,
0.009
],
"k_round": 0.842,
"label_ru": "Не подходит для сортировки по габаритам"
},
"perfume": {
"name": "perfume",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.12,
0.0531,
0.0531
],
"k_round": 0.924,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"pillow": {
"name": "pillow",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.4551,
0.4306,
0.2127
],
"k_round": 0.905,
"label_ru": "Не подходит для сортировки по габаритам"
},
"plate": {
"name": "plate",
"category": "round",
"zone": "D",
"obb_extents_m": [
0.2094,
0.2094,
0.0266
],
"k_round": 0.998,
"label_ru": "Не подходит для сортировки без доупаковки"
},
"pouf": {
"name": "pouf",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.4889,
0.4889,
0.264
],
"k_round": 0.994,
"label_ru": "Не подходит для сортировки по габаритам"
},
"sneaker": {
"name": "sneaker",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.2704,
0.208,
0.1254
],
"k_round": 0.706,
"label_ru": "Подходит для сортировки"
},
"tire": {
"name": "tire",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.6459,
0.6459,
0.2112
],
"k_round": 0.994,
"label_ru": "Не подходит для сортировки по габаритам"
},
"tool_case": {
"name": "tool_case",
"category": "sortable",
"zone": "B",
"obb_extents_m": [
0.3,
0.1435,
0.06
],
"k_round": 0.454,
"label_ru": "Подходит для сортировки"
},
"umbrella": {
"name": "umbrella",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.8944,
0.734,
0.7249
],
"k_round": 0.628,
"label_ru": "Не подходит для сортировки по габаритам"
},
"watch": {
"name": "watch",
"category": "oversize",
"zone": "C",
"obb_extents_m": [
0.23,
0.23,
0.0046
],
"k_round": 0.995,
"label_ru": "Не подходит для сортировки по габаритам"
}
}