sophiar_config.json 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. {
  2. "variable_list": [
  3. {
  4. "name": "probe_in_tracker",
  5. "type": "transform_obj"
  6. },
  7. {
  8. "name": "femur_ref_in_tracker",
  9. "type": "transform_obj"
  10. },
  11. {
  12. "name": "femur_in_femur_ref",
  13. "type": "transform_obj"
  14. },
  15. {
  16. "name": "tibia_ref_in_tracker",
  17. "type": "transform_obj"
  18. },
  19. {
  20. "name": "tibia_in_tibia_ref",
  21. "type": "transform_obj"
  22. },
  23. {
  24. "name": "camera_ref_in_tracker",
  25. "type": "transform_obj"
  26. },
  27. {
  28. "name": "left_camera_in_tracker",
  29. "type": "transform_obj"
  30. },
  31. {
  32. "name": "right_camera_in_tracker",
  33. "type": "transform_obj"
  34. },
  35. {
  36. "name": "femur_in_tracker",
  37. "type": "transform_obj"
  38. },
  39. {
  40. "name": "tibia_in_tracker",
  41. "type": "transform_obj"
  42. },
  43. {
  44. "name": "probe_in_femur_ref",
  45. "type": "transform_obj"
  46. },
  47. {
  48. "name": "probe_in_tibia_ref",
  49. "type": "transform_obj"
  50. },
  51. {
  52. "name": "probe_in_femur",
  53. "type": "transform_obj"
  54. },
  55. {
  56. "name": "probe_in_tibia",
  57. "type": "transform_obj"
  58. },
  59. {
  60. "name": "probe_tip_in_femur_ref",
  61. "type": "scalarxyz_obj"
  62. },
  63. {
  64. "name": "probe_tip_in_tibia_ref",
  65. "type": "scalarxyz_obj"
  66. },
  67. {
  68. "name": "picked_point_in_femur_ref",
  69. "type": "scalarxyz_obj"
  70. },
  71. {
  72. "name": "picked_point_in_tibia_ref",
  73. "type": "scalarxyz_obj"
  74. },
  75. {
  76. "name": "femur_in_femur_ref_error",
  77. "type": "double_obj"
  78. },
  79. {
  80. "name": "tibia_in_tibia_ref_error",
  81. "type": "double_obj"
  82. },
  83. {
  84. "name": "probe_tip_in_femur",
  85. "type": "scalarxyz_obj"
  86. },
  87. {
  88. "name": "probe_tip_in_tibia",
  89. "type": "scalarxyz_obj"
  90. },
  91. {
  92. "name": "picked_point_in_femur",
  93. "type": "scalarxyz_obj"
  94. },
  95. {
  96. "name": "picked_point_in_tibia",
  97. "type": "scalarxyz_obj"
  98. },
  99. {
  100. "name": "left_camera_in_tracker_denoised",
  101. "type": "transform_obj"
  102. },
  103. {
  104. "name": "right_camera_in_tracker_denoised",
  105. "type": "transform_obj"
  106. },
  107. {
  108. "name": "femur_in_tracker_denoised",
  109. "type": "transform_obj"
  110. },
  111. {
  112. "name": "tibia_in_tracker_denoised",
  113. "type": "transform_obj"
  114. }
  115. ],
  116. "object_list": [
  117. {
  118. "type": "transform_tree",
  119. "name": "transform_tree",
  120. "init_config": {
  121. "node_list": [
  122. {
  123. "name": "tracker"
  124. },
  125. {
  126. "name": "probe_ref",
  127. "parent": "tracker",
  128. "transform_var_name": "probe_in_tracker"
  129. },
  130. {
  131. "name": "probe",
  132. "parent": "probe_ref",
  133. "transform": [
  134. -0.23,
  135. -13.98,
  136. -119.65,
  137. 1,
  138. 0,
  139. 0,
  140. 0
  141. ]
  142. },
  143. {
  144. "name": "femur_ref",
  145. "parent": "tracker",
  146. "transform_var_name": "femur_ref_in_tracker"
  147. },
  148. {
  149. "name": "femur",
  150. "parent": "femur_ref",
  151. "transform_var_name": "femur_in_femur_ref"
  152. },
  153. {
  154. "name": "tibia_ref",
  155. "parent": "tracker",
  156. "transform_var_name": "tibia_ref_in_tracker"
  157. },
  158. {
  159. "name": "tibia",
  160. "parent": "tibia_ref",
  161. "transform_var_name": "tibia_in_tibia_ref"
  162. },
  163. {
  164. "name": "camera_ref",
  165. "parent": "tracker",
  166. "transform_var_name": "camera_ref_in_tracker"
  167. },
  168. {
  169. "name": "left_camera",
  170. "parent": "camera_ref",
  171. "transform": [
  172. 27.5464,
  173. -32.0497,
  174. -38.7030,
  175. 0.1844,
  176. 0.6772,
  177. 0.1825,
  178. -0.6885
  179. ]
  180. },
  181. {
  182. "name": "right_camera",
  183. "parent": "camera_ref",
  184. "transform": [
  185. 26.6363,
  186. -32.6076,
  187. -104.0095,
  188. 0.1855,
  189. 0.6805,
  190. 0.1809,
  191. -0.6854
  192. ]
  193. }
  194. ]
  195. },
  196. "start_config": {
  197. "watch_list": [
  198. {
  199. "target": "left_camera",
  200. "observer": "tracker",
  201. "transform_var_name": "left_camera_in_tracker"
  202. },
  203. {
  204. "target": "right_camera",
  205. "observer": "tracker",
  206. "transform_var_name": "right_camera_in_tracker"
  207. },
  208. {
  209. "target": "femur",
  210. "observer": "tracker",
  211. "transform_var_name": "femur_in_tracker"
  212. },
  213. {
  214. "target": "tibia",
  215. "observer": "tracker",
  216. "transform_var_name": "tibia_in_tracker"
  217. },
  218. {
  219. "target": "probe",
  220. "observer": "femur_ref",
  221. "transform_var_name": "probe_in_femur_ref"
  222. },
  223. {
  224. "target": "probe",
  225. "observer": "tibia_ref",
  226. "transform_var_name": "probe_in_tibia_ref"
  227. },
  228. {
  229. "target": "probe",
  230. "observer": "femur",
  231. "transform_var_name": "probe_in_femur"
  232. },
  233. {
  234. "target": "probe",
  235. "observer": "tibia",
  236. "transform_var_name": "probe_in_tibia"
  237. }
  238. ]
  239. }
  240. },
  241. {
  242. "type": "ndi_interface",
  243. "name": "ndi",
  244. "init_config": {
  245. "address_type": "ethernet",
  246. "ip": "10.0.0.5",
  247. "tcp_port": 8765,
  248. "com_port": "/dev/ttyUSB0",
  249. "tool_list": [
  250. {
  251. "rom_path": "./roms/GlassProbe_4Ball_4.rom",
  252. "outputs": {
  253. "transform": "probe_in_tracker"
  254. }
  255. },
  256. {
  257. "rom_path": "/home/tpx/data/roms/Glass_4Ball_1_Camera_20240130.rom",
  258. "outputs": {
  259. "transform": "camera_ref_in_tracker"
  260. }
  261. },
  262. {
  263. "rom_path": "./roms/Glass_3Ball_6.rom",
  264. "outputs": {
  265. "transform": "femur_ref_in_tracker"
  266. }
  267. },
  268. {
  269. "rom_path": "/home/tpx/data/roms/Glass_3Ball_5_Combined.rom",
  270. "outputs": {
  271. "transform": "tibia_ref_in_tracker"
  272. }
  273. }
  274. ]
  275. },
  276. "start_config": {
  277. "allow_unreliable": true,
  278. "prefer_stream_tracking": false
  279. }
  280. },
  281. {
  282. "type": "variable_validity_watcher",
  283. "name": "probe_visibility_watcher",
  284. "start_config": {
  285. "variable_name": "probe_in_tracker"
  286. }
  287. },
  288. {
  289. "type": "transform_obj_validity_watcher",
  290. "name": "camera_visibility_watcher",
  291. "start_config": {
  292. "variable_name": "camera_ref_in_tracker"
  293. }
  294. },
  295. {
  296. "type": "transform_obj_validity_watcher",
  297. "name": "femur_visibility_watcher",
  298. "start_config": {
  299. "variable_name": "femur_ref_in_tracker"
  300. }
  301. },
  302. {
  303. "type": "transform_obj_validity_watcher",
  304. "name": "tibia_visibility_watcher",
  305. "start_config": {
  306. "variable_name": "tibia_ref_in_tracker"
  307. }
  308. },
  309. {
  310. "type": "scalarxyz_transformer",
  311. "name": "probe_tip_in_femur_ref_transformer",
  312. "start_config": {
  313. "transform_type": "point",
  314. "transform_var_name": "probe_in_femur_ref",
  315. "target_value": [
  316. 0,
  317. 0,
  318. 0
  319. ],
  320. "output_var_name": "probe_tip_in_femur_ref"
  321. },
  322. "dependencies": [
  323. "ndi",
  324. "transform_tree"
  325. ]
  326. },
  327. {
  328. "type": "scalarxyz_transformer",
  329. "name": "probe_tip_in_tibia_ref_transformer",
  330. "start_config": {
  331. "transform_type": "point",
  332. "transform_var_name": "probe_in_tibia_ref",
  333. "target_value": [
  334. 0,
  335. 0,
  336. 0
  337. ],
  338. "output_var_name": "probe_tip_in_tibia_ref"
  339. },
  340. "dependencies": [
  341. "ndi",
  342. "transform_tree"
  343. ]
  344. },
  345. {
  346. "type": "transform_stabilizer",
  347. "name": "point_picker_in_femur_ref",
  348. "start_config": {
  349. "stable_type": "point",
  350. "input_var_name": "probe_tip_in_femur_ref",
  351. "output_var_name": "picked_point_in_femur_ref",
  352. "linear_tolerance_mm": 0.05,
  353. "temporal_interval_s": 3
  354. },
  355. "dependencies": [
  356. "probe_tip_in_femur_ref_transformer"
  357. ]
  358. },
  359. {
  360. "type": "transform_stabilizer",
  361. "name": "point_picker_in_tibia_ref",
  362. "start_config": {
  363. "stable_type": "point",
  364. "input_var_name": "probe_tip_in_tibia_ref",
  365. "output_var_name": "picked_point_in_tibia_ref",
  366. "linear_tolerance_mm": 0.05,
  367. "temporal_interval_s": 3
  368. },
  369. "dependencies": [
  370. "probe_tip_in_tibia_ref_transformer"
  371. ]
  372. },
  373. {
  374. "type": "scalarxyz_obj_watcher",
  375. "name": "picked_point_watcher_for_femur_ref",
  376. "start_config": {
  377. "variable_name": "picked_point_in_femur_ref"
  378. }
  379. },
  380. {
  381. "type": "scalarxyz_obj_watcher",
  382. "name": "picked_point_watcher_for_tibia_ref",
  383. "start_config": {
  384. "variable_name": "picked_point_in_tibia_ref"
  385. }
  386. },
  387. {
  388. "type": "landmark_registration",
  389. "name": "femur_landmark",
  390. "start_config": {
  391. "fiducial_points": [
  392. [
  393. 1.68412,
  394. 22.5766,
  395. 202.831
  396. ],
  397. [
  398. 13.5083,
  399. -24.1831,
  400. 200.386
  401. ],
  402. [
  403. 26.621,
  404. 2.0151,
  405. 191.341
  406. ]
  407. ],
  408. "point_var_name": "picked_point_in_femur_ref",
  409. "transform_var_name": "femur_in_femur_ref",
  410. "error_var_name": "femur_in_femur_ref_error"
  411. },
  412. "dependencies": [
  413. "point_picker_in_femur_ref"
  414. ]
  415. },
  416. {
  417. "type": "landmark_registration",
  418. "name": "tibia_landmark",
  419. "start_config": {
  420. "fiducial_points": [
  421. [
  422. 47.351,
  423. 46.6799,
  424. -70.5804
  425. ],
  426. [
  427. -45.3668,
  428. 23.3452,
  429. 1.94304
  430. ],
  431. [
  432. -55.3382,
  433. -4.55638,
  434. 54.7446
  435. ]
  436. ],
  437. "point_var_name": "picked_point_in_tibia_ref",
  438. "transform_var_name": "tibia_in_tibia_ref",
  439. "error_var_name": "tibia_in_tibia_ref_error"
  440. },
  441. "dependencies": [
  442. "point_picker_in_tibia_ref"
  443. ]
  444. },
  445. {
  446. "type": "transform_obj_watcher",
  447. "name": "femur_registration_result_watcher",
  448. "start_config": {
  449. "variable_name": "femur_in_femur_ref"
  450. }
  451. },
  452. {
  453. "type": "transform_obj_watcher",
  454. "name": "tibia_registration_result_watcher",
  455. "start_config": {
  456. "variable_name": "tibia_in_tibia_ref"
  457. }
  458. },
  459. {
  460. "type": "double_obj_watcher",
  461. "name": "femur_registration_error_watcher",
  462. "start_config": {
  463. "variable_name": "femur_in_femur_ref_error"
  464. }
  465. },
  466. {
  467. "type": "double_obj_watcher",
  468. "name": "tibia_registration_error_watcher",
  469. "start_config": {
  470. "variable_name": "tibia_in_tibia_ref_error"
  471. }
  472. },
  473. {
  474. "type": "scalarxyz_transformer",
  475. "name": "probe_tip_in_femur_transformer",
  476. "start_config": {
  477. "transform_type": "point",
  478. "transform_var_name": "probe_in_femur",
  479. "target_value": [
  480. 0,
  481. 0,
  482. 0
  483. ],
  484. "output_var_name": "probe_tip_in_femur"
  485. },
  486. "dependencies": [
  487. "ndi",
  488. "transform_tree"
  489. ]
  490. },
  491. {
  492. "type": "scalarxyz_transformer",
  493. "name": "probe_tip_in_tibia_transformer",
  494. "start_config": {
  495. "transform_type": "point",
  496. "transform_var_name": "probe_in_tibia",
  497. "target_value": [
  498. 0,
  499. 0,
  500. 0
  501. ],
  502. "output_var_name": "probe_tip_in_tibia"
  503. },
  504. "dependencies": [
  505. "ndi",
  506. "transform_tree"
  507. ]
  508. },
  509. {
  510. "type": "transform_stabilizer",
  511. "name": "point_picker_in_femur",
  512. "start_config": {
  513. "stable_type": "point",
  514. "input_var_name": "probe_tip_in_femur",
  515. "output_var_name": "picked_point_in_femur",
  516. "linear_tolerance_mm": 0.05,
  517. "temporal_interval_s": 3
  518. },
  519. "dependencies": [
  520. "probe_tip_in_femur_transformer"
  521. ]
  522. },
  523. {
  524. "type": "transform_stabilizer",
  525. "name": "point_picker_in_tibia",
  526. "start_config": {
  527. "stable_type": "point",
  528. "input_var_name": "probe_tip_in_tibia",
  529. "output_var_name": "picked_point_in_tibia",
  530. "linear_tolerance_mm": 0.05,
  531. "temporal_interval_s": 3
  532. },
  533. "dependencies": [
  534. "probe_tip_in_tibia_transformer"
  535. ]
  536. },
  537. {
  538. "type": "scalarxyz_obj_watcher",
  539. "name": "picked_point_watcher_for_femur",
  540. "start_config": {
  541. "variable_name": "picked_point_in_femur"
  542. }
  543. },
  544. {
  545. "type": "scalarxyz_obj_watcher",
  546. "name": "picked_point_watcher_for_tibia",
  547. "start_config": {
  548. "variable_name": "picked_point_in_tibia"
  549. }
  550. },
  551. {
  552. "type": "kalman_denoiser",
  553. "name": "left_camera_denoiser",
  554. "init_config": {
  555. "variable_in": "left_camera_in_tracker",
  556. "variable_out": "left_camera_in_tracker_denoised"
  557. }
  558. },
  559. {
  560. "type": "kalman_denoiser",
  561. "name": "right_camera_denoiser",
  562. "init_config": {
  563. "variable_in": "right_camera_in_tracker",
  564. "variable_out": "right_camera_in_tracker_denoised"
  565. }
  566. },
  567. {
  568. "type": "kalman_denoiser",
  569. "name": "femur_denoiser",
  570. "init_config": {
  571. "variable_in": "femur_in_tracker",
  572. "variable_out": "femur_in_tracker_denoised"
  573. }
  574. },
  575. {
  576. "type": "kalman_denoiser",
  577. "name": "tibia_denoiser",
  578. "init_config": {
  579. "variable_in": "tibia_in_tracker",
  580. "variable_out": "tibia_in_tracker_denoised"
  581. }
  582. },
  583. {
  584. "type": "empty_object",
  585. "name": "tracker_all",
  586. "dependencies": [
  587. "transform_tree",
  588. "ndi",
  589. "probe_visibility_watcher",
  590. "camera_visibility_watcher",
  591. "femur_visibility_watcher",
  592. "tibia_visibility_watcher",
  593. "left_camera_denoiser",
  594. "right_camera_denoiser",
  595. "femur_denoiser",
  596. "tibia_denoiser"
  597. ]
  598. },
  599. {
  600. "type": "empty_object",
  601. "name": "femur_landmark_all",
  602. "dependencies": [
  603. "tracker_all",
  604. "femur_landmark",
  605. "picked_point_watcher_for_femur_ref",
  606. "femur_registration_result_watcher",
  607. "femur_registration_error_watcher"
  608. ]
  609. },
  610. {
  611. "type": "empty_object",
  612. "name": "tibia_landmark_all",
  613. "dependencies": [
  614. "tracker_all",
  615. "tibia_landmark",
  616. "picked_point_watcher_for_tibia_ref",
  617. "tibia_registration_result_watcher",
  618. "tibia_registration_error_watcher"
  619. ]
  620. },
  621. {
  622. "type": "empty_object",
  623. "name": "femur_icp_all",
  624. "dependencies": [
  625. "tracker_all",
  626. "point_picker_in_femur",
  627. "picked_point_watcher_for_femur"
  628. ]
  629. },
  630. {
  631. "type": "empty_object",
  632. "name": "tibia_icp_all",
  633. "dependencies": [
  634. "tracker_all",
  635. "point_picker_in_tibia",
  636. "picked_point_watcher_for_tibia"
  637. ]
  638. }
  639. ]
  640. }