kuka_navigation.json 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. {
  2. "controller_port": 5277,
  3. "variable_list": [
  4. {
  5. "name": "probe_in_tracker",
  6. "type": "transform_obj"
  7. },
  8. {
  9. "name": "model_ref_in_tracker",
  10. "type": "transform_obj"
  11. },
  12. {
  13. "name": "model_in_model_ref",
  14. "type": "transform_obj",
  15. "value": [
  16. 135.945,
  17. 39.1189,
  18. -267.07,
  19. 0.536927,
  20. 0.60565,
  21. -0.471815,
  22. -0.349698
  23. ]
  24. },
  25. {
  26. "name": "probe_in_model_ref",
  27. "type": "transform_obj"
  28. },
  29. {
  30. "name": "probe_in_model",
  31. "type": "transform_obj"
  32. },
  33. {
  34. "name": "tool_in_flange_const",
  35. "type": "transform_obj",
  36. "value": [
  37. 193.183270697813,
  38. 119.298696093691,
  39. 1.38808397963203,
  40. 0.341548509981856,
  41. -0.342944503560901,
  42. -0.618995814406514,
  43. 0.618528790400057
  44. ]
  45. },
  46. {
  47. "name": "tool_in_model",
  48. "type": "transform_obj"
  49. },
  50. {
  51. "name": "robot_flange_in_base",
  52. "type": "transform_obj"
  53. },
  54. {
  55. "name": "tip_in_model_ref",
  56. "type": "scalarxyz_obj"
  57. },
  58. {
  59. "name": "picked_point_in_model_ref",
  60. "type": "scalarxyz_obj"
  61. },
  62. {
  63. "name": "model_in_model_ref_error",
  64. "type": "double_obj"
  65. },
  66. {
  67. "name": "tip_in_model",
  68. "type": "scalarxyz_obj"
  69. },
  70. {
  71. "name": "picked_point_in_model",
  72. "type": "scalarxyz_obj"
  73. },
  74. {
  75. "name": "target_tool_in_model",
  76. "type": "transform_obj"
  77. },
  78. {
  79. "name": "target_tool_offset",
  80. "type": "transform_obj"
  81. },
  82. {
  83. "name": "target_flange_offset",
  84. "type": "transform_obj"
  85. },
  86. {
  87. "name": "target_flange_pose_temp",
  88. "type": "transform_obj"
  89. },
  90. {
  91. "name": "flange_move_sig",
  92. "type": "bool_obj"
  93. },
  94. {
  95. "name": "target_flange_pose",
  96. "type": "transform_obj"
  97. },
  98. {
  99. "name": "robot_flange_speed_limit",
  100. "type": "double_obj",
  101. "value": 5
  102. },
  103. {
  104. "name": "kuka_joint_speed_limit",
  105. "type": "array7_obj",
  106. "value": [
  107. 0.1,
  108. 0.1,
  109. 0.1,
  110. 0.1,
  111. 0.1,
  112. 0.1,
  113. 0.1
  114. ]
  115. },
  116. {
  117. "name": "robot_is_moving",
  118. "type": "bool_obj"
  119. },
  120. {
  121. "name": "kuka_control_mode",
  122. "type": "u64int_obj"
  123. }
  124. ],
  125. "object_list": [
  126. {
  127. "type": "transform_tree",
  128. "name": "transform_tree",
  129. "init_config": {
  130. "node_list": [
  131. {
  132. "name": "tracker"
  133. },
  134. {
  135. "name": "probe",
  136. "parent": "tracker",
  137. "transform_var_name": "probe_in_tracker"
  138. },
  139. {
  140. "name": "model_ref",
  141. "parent": "tracker",
  142. "transform_var_name": "model_ref_in_tracker"
  143. },
  144. {
  145. "name": "model",
  146. "parent": "model_ref",
  147. "transform_var_name": "model_in_model_ref"
  148. },
  149. {
  150. "name": "robot_base",
  151. "parent": "tracker",
  152. "transform": [
  153. 249.608683668030,
  154. 378.363630568367,
  155. -1999.86036620645,
  156. 0.694408974678311,
  157. 0.320622130095823,
  158. -0.539876883852255,
  159. -0.351469167724585
  160. ]
  161. },
  162. {
  163. "name": "robot_flange",
  164. "parent": "robot_base",
  165. "transform_var_name": "robot_flange_in_base"
  166. },
  167. {
  168. "name": "tool_real",
  169. "parent": "robot_flange",
  170. "transform_var_name": "tool_in_flange_const"
  171. },
  172. {
  173. "name": "tool",
  174. "parent": "tool_real",
  175. "transform": [
  176. 0,
  177. 0,
  178. -30,
  179. 1,
  180. 0,
  181. 0,
  182. 0
  183. ]
  184. }
  185. ]
  186. },
  187. "start_config": {
  188. "watch_list": [
  189. {
  190. "target": "probe",
  191. "observer": "model_ref",
  192. "transform_var_name": "probe_in_model_ref"
  193. },
  194. {
  195. "target": "probe",
  196. "observer": "model",
  197. "transform_var_name": "probe_in_model"
  198. },
  199. {
  200. "target": "tool",
  201. "observer": "model",
  202. "transform_var_name": "tool_in_model"
  203. }
  204. ]
  205. }
  206. },
  207. {
  208. "type": "ndi_interface",
  209. "name": "ndi",
  210. "init_config": {
  211. "address_type": "ethernet",
  212. "ip": "10.0.0.5",
  213. "tcp_port": 8765,
  214. "com_port": "COM3",
  215. "tool_list": [
  216. {
  217. "rom_path": "/home/tpx/data/roms/Probe_Small_3Ball.rom",
  218. "outputs": {
  219. "transform": "probe_in_tracker"
  220. }
  221. },
  222. {
  223. "rom_path": "/home/tpx/data/roms/Drill_3Ball.rom",
  224. "outputs": {
  225. "transform": "model_ref_in_tracker"
  226. }
  227. }
  228. ]
  229. },
  230. "start_config": {
  231. "allow_unreliable": true,
  232. "prefer_stream_tracking": false
  233. }
  234. },
  235. {
  236. "type": "transform_obj_validity_watcher",
  237. "name": "probe_visibility_watcher",
  238. "start_config": {
  239. "variable_name": "probe_in_tracker"
  240. }
  241. },
  242. {
  243. "type": "transform_obj_validity_watcher",
  244. "name": "model_ref_visibility_watcher",
  245. "start_config": {
  246. "variable_name": "model_ref_in_tracker"
  247. }
  248. },
  249. {
  250. "type": "scalarxyz_transformer",
  251. "name": "probe_tip_transformer_for_reg",
  252. "start_config": {
  253. "transform_type": "point",
  254. "transform_var_name": "probe_in_model_ref",
  255. "target_value": [
  256. 0,
  257. 0,
  258. 0
  259. ],
  260. "output_var_name": "tip_in_model_ref"
  261. },
  262. "dependencies": [
  263. "ndi",
  264. "transform_tree"
  265. ]
  266. },
  267. {
  268. "type": "transform_stabilizer",
  269. "name": "point_picker_for_reg",
  270. "start_config": {
  271. "stable_type": "point",
  272. "input_var_name": "tip_in_model_ref",
  273. "output_var_name": "picked_point_in_model_ref",
  274. "linear_tolerance_mm": 0.05,
  275. "temporal_interval_s": 3
  276. },
  277. "dependencies": [
  278. "probe_tip_transformer_for_reg"
  279. ]
  280. },
  281. {
  282. "type": "scalarxyz_obj_watcher",
  283. "name": "picked_point_watcher_for_reg",
  284. "start_config": {
  285. "variable_name": "picked_point_in_model_ref"
  286. }
  287. },
  288. {
  289. "type": "landmark_registration",
  290. "name": "model_registrator",
  291. "start_config": {
  292. "fiducial_points": [
  293. [
  294. 9.16363,
  295. 245.77,
  296. -35.5363
  297. ],
  298. [
  299. -38.2517,
  300. 238.265,
  301. 15.8886
  302. ],
  303. [
  304. -18.4721,
  305. 228.506,
  306. -24.2903
  307. ]
  308. ],
  309. "point_var_name": "picked_point_in_model_ref",
  310. "transform_var_name": "model_in_model_ref",
  311. "error_var_name": "model_in_model_ref_error"
  312. },
  313. "dependencies": [
  314. "point_picker_for_reg"
  315. ]
  316. },
  317. {
  318. "type": "transform_obj_watcher",
  319. "name": "registration_result_watcher",
  320. "start_config": {
  321. "variable_name": "model_in_model_ref"
  322. }
  323. },
  324. {
  325. "type": "double_obj_watcher",
  326. "name": "registration_error_watcher",
  327. "start_config": {
  328. "variable_name": "model_in_model_ref_error"
  329. }
  330. },
  331. {
  332. "type": "scalarxyz_transformer",
  333. "name": "probe_tip_transformer_for_nav",
  334. "start_config": {
  335. "transform_type": "point",
  336. "transform_var_name": "probe_in_model",
  337. "target_value": [
  338. 0,
  339. 0,
  340. 0
  341. ],
  342. "output_var_name": "tip_in_model"
  343. },
  344. "dependencies": [
  345. "ndi",
  346. "transform_tree"
  347. ]
  348. },
  349. {
  350. "type": "transform_stabilizer",
  351. "name": "point_picker_for_icp",
  352. "start_config": {
  353. "stable_type": "point",
  354. "input_var_name": "tip_in_model",
  355. "output_var_name": "picked_point_in_model",
  356. "linear_tolerance_mm": 0.05,
  357. "temporal_interval_s": 2
  358. },
  359. "dependencies": [
  360. "probe_tip_transformer_for_nav"
  361. ]
  362. },
  363. {
  364. "type": "scalarxyz_obj_watcher",
  365. "name": "picked_point_watcher_for_icp",
  366. "start_config": {
  367. "variable_name": "picked_point_in_model"
  368. }
  369. },
  370. {
  371. "type": "kuka_interface",
  372. "name": "kuka",
  373. "init_config": {
  374. "address": "10.0.0.10"
  375. },
  376. "start_config": {
  377. "output_config": {
  378. "report_frequency": 60,
  379. "flange_info": {
  380. "pose": "robot_flange_in_base"
  381. },
  382. "is_moving": "robot_is_moving",
  383. "current_control_mode": "kuka_control_mode"
  384. },
  385. "input_config": {
  386. "control_mode": "hard_flange_pose",
  387. "flange_pose": "target_flange_pose",
  388. "flange_speed_limit": "robot_flange_speed_limit",
  389. "joint_speed_limit": "kuka_joint_speed_limit"
  390. }
  391. }
  392. },
  393. {
  394. "type": "five_dof_offset_calculator",
  395. "name": "tcp_offset_calculator",
  396. "start_config": {
  397. "current_transform_var": "tool_in_model",
  398. "target_transform_var": "target_tool_in_model",
  399. "offset_transform_var": "target_tool_offset"
  400. },
  401. "dependencies": [
  402. "kuka",
  403. "ndi",
  404. "transform_tree"
  405. ]
  406. },
  407. {
  408. "type": "tcp_offset_to_flange_calculator",
  409. "name": "flange_offset_calculator",
  410. "start_config": {
  411. "tcp_offset_transform_var": "target_tool_offset",
  412. "tcp_in_flange_transform_var": "tool_in_flange_const",
  413. "flange_offset_transform_var": "target_flange_offset"
  414. },
  415. "dependencies": [
  416. "kuka",
  417. "tcp_offset_calculator"
  418. ]
  419. },
  420. {
  421. "type": "simple_offset_to_pose_controller",
  422. "name": "kuka_controller",
  423. "start_config": {
  424. "current_transform_var": "robot_flange_in_base",
  425. "offset_transform_var": "target_flange_offset",
  426. "target_transform_var": "target_flange_pose_temp"
  427. },
  428. "dependencies": [
  429. "kuka",
  430. "flange_offset_calculator"
  431. ]
  432. },
  433. {
  434. "type": "transform_obj_watcher",
  435. "name": "robot_old_flange_watcher",
  436. "start_config": {
  437. "variable_name": "robot_flange_in_base",
  438. "minimum_interval_ms": 2000
  439. }
  440. },
  441. {
  442. "type": "transform_obj_watcher",
  443. "name": "robot_new_flange_watcher",
  444. "start_config": {
  445. "variable_name": "target_flange_pose_temp",
  446. "minimum_interval_ms": 2000
  447. }
  448. },
  449. {
  450. "type": "transform_obj_d_latch",
  451. "name": "kuka_controller_latch",
  452. "start_config": {
  453. "input_name": "target_flange_pose_temp",
  454. "output_name": "target_flange_pose",
  455. "signal_name": "flange_move_sig"
  456. },
  457. "dependencies": [
  458. "kuka",
  459. "kuka_controller"
  460. ]
  461. },
  462. {
  463. "type": "empty_object",
  464. "name": "reg_model",
  465. "dependencies": [
  466. "probe_visibility_watcher",
  467. "model_ref_visibility_watcher",
  468. "picked_point_watcher_for_reg",
  469. "model_registrator",
  470. "registration_result_watcher",
  471. "registration_error_watcher"
  472. ]
  473. },
  474. {
  475. "type": "empty_object",
  476. "name": "icp_model",
  477. "dependencies": [
  478. "probe_visibility_watcher",
  479. "model_ref_visibility_watcher",
  480. "picked_point_watcher_for_icp",
  481. "point_picker_for_icp",
  482. "registration_result_watcher"
  483. ]
  484. },
  485. {
  486. "type": "empty_object",
  487. "name": "robot",
  488. "dependencies": [
  489. "kuka_controller_latch",
  490. "robot_old_flange_watcher",
  491. "robot_new_flange_watcher"
  492. ]
  493. }
  494. ]
  495. }