roby 0.8.0 → 3.0.0

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.
Files changed (644) hide show
  1. checksums.yaml +7 -0
  2. data/.deep-cover.rb +3 -0
  3. data/.gitattributes +1 -0
  4. data/.gitignore +24 -0
  5. data/.simplecov +10 -0
  6. data/.travis.yml +17 -0
  7. data/.yardopts +4 -0
  8. data/Gemfile +15 -0
  9. data/README.md +11 -0
  10. data/Rakefile +47 -177
  11. data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
  12. data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
  13. data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
  14. data/benchmark/{genom.rb → attic/genom.rb} +0 -0
  15. data/benchmark/attic/transactions.rb +62 -0
  16. data/benchmark/plan_basic_operations.rb +28 -0
  17. data/benchmark/relations/graph.rb +63 -0
  18. data/benchmark/ruby/identity.rb +18 -0
  19. data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
  20. data/benchmark/ruby/yield_vs_block.rb +35 -0
  21. data/benchmark/run +5 -0
  22. data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
  23. data/benchmark/transactions.rb +99 -51
  24. data/bin/roby +38 -197
  25. data/bin/roby-display +14 -0
  26. data/bin/roby-log +3 -176
  27. data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
  28. data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
  29. data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
  30. data/doc/guide/{src → attic}/abstraction/index.page +1 -1
  31. data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
  32. data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
  33. data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
  34. data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
  35. data/doc/guide/attic/cycle/error_handling.page +98 -0
  36. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
  37. data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
  38. data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
  39. data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
  40. data/doc/guide/{src → attic}/cycle/index.page +1 -1
  41. data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
  42. data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
  43. data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
  44. data/doc/guide/attic/plans/building_plans.page +89 -0
  45. data/doc/guide/attic/plans/code.page +192 -0
  46. data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
  47. data/doc/guide/attic/plans/index.page +7 -0
  48. data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
  49. data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
  50. data/doc/guide/attic/plans/querying_plans.page +5 -0
  51. data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
  52. data/doc/guide/config.yaml +7 -4
  53. data/doc/guide/ext/extended_menu.rb +29 -0
  54. data/doc/guide/ext/init.rb +6 -0
  55. data/doc/guide/ext/rdoc_links.rb +7 -6
  56. data/doc/guide/src/advanced_concepts/history.page +5 -0
  57. data/doc/guide/src/advanced_concepts/index.page +11 -0
  58. data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
  59. data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
  60. data/doc/guide/src/advanced_concepts/transactions.page +5 -0
  61. data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
  62. data/doc/guide/src/base.template +96 -0
  63. data/doc/guide/src/basics_shell_header.txt +5 -7
  64. data/doc/guide/src/building/action_coordination.page +96 -0
  65. data/doc/guide/src/building/actions.page +124 -0
  66. data/doc/guide/src/building/file_layout.page +71 -0
  67. data/doc/guide/src/building/index.page +50 -0
  68. data/doc/guide/src/building/patterns.page +86 -0
  69. data/doc/guide/src/building/patterns_forwarding.png +0 -0
  70. data/doc/guide/src/building/patterns_forwarding.svg +277 -0
  71. data/doc/guide/src/building/runtime.page +95 -0
  72. data/doc/guide/src/building/task_models.page +94 -0
  73. data/doc/guide/src/building/tasks.page +284 -0
  74. data/doc/guide/src/concepts/error_handling.page +100 -0
  75. data/doc/guide/src/concepts/exception_propagation.png +0 -0
  76. data/doc/guide/src/concepts/exception_propagation.svg +445 -0
  77. data/doc/guide/src/concepts/execution.page +85 -0
  78. data/doc/guide/src/concepts/execution.png +0 -0
  79. data/doc/guide/src/concepts/execution.svg +573 -0
  80. data/doc/guide/src/concepts/execution_cycle.png +0 -0
  81. data/doc/guide/src/concepts/garbage_collection.page +57 -0
  82. data/doc/guide/src/concepts/index.page +27 -0
  83. data/doc/guide/src/concepts/plans.page +101 -0
  84. data/doc/guide/src/concepts/policy.page +31 -0
  85. data/doc/guide/src/concepts/reactor.page +61 -0
  86. data/doc/guide/src/concepts/simple_plan_example.png +0 -0
  87. data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
  88. data/doc/guide/src/default.template +9 -74
  89. data/doc/guide/src/event_relations/forward.page +71 -0
  90. data/doc/guide/src/event_relations/index.page +12 -0
  91. data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
  92. data/doc/guide/src/event_relations/signal.page +55 -0
  93. data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
  94. data/doc/guide/src/htmldoc.metainfo +21 -8
  95. data/doc/guide/src/index.page +8 -3
  96. data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
  97. data/doc/guide/src/installation/publications.page +14 -0
  98. data/doc/guide/src/{introduction → installation}/videos.page +14 -7
  99. data/doc/guide/src/interacting/index.page +16 -0
  100. data/doc/guide/src/interacting/run.page +33 -0
  101. data/doc/guide/src/interacting/shell.page +95 -0
  102. data/doc/guide/src/plugins/creating_plugins.page +72 -0
  103. data/doc/guide/src/plugins/index.page +27 -5
  104. data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
  105. data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
  106. data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
  107. data/doc/guide/src/style_screen.css +687 -0
  108. data/doc/guide/src/task_relations/dependency.page +107 -0
  109. data/doc/guide/src/task_relations/executed_by.page +77 -0
  110. data/doc/guide/src/task_relations/index.page +12 -0
  111. data/doc/guide/src/task_relations/new_relations.page +119 -0
  112. data/doc/guide/src/task_relations/planned_by.page +46 -0
  113. data/doc/guide/src/tutorial/app.page +117 -0
  114. data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
  115. data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
  116. data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
  117. data/doc/guide/src/tutorial/events.page +195 -0
  118. data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
  119. data/doc/guide/src/tutorial/index.page +13 -0
  120. data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
  121. data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
  122. data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
  123. data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
  124. data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
  125. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
  126. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
  127. data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
  128. data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
  129. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
  130. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
  131. data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
  132. data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
  133. data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
  134. data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
  135. data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
  136. data/doc/guide/src/tutorial/relations_display.page +153 -0
  137. data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
  138. data/doc/guide/src/tutorial/shell.page +121 -0
  139. data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
  140. data/doc/guide/src/tutorial/tasks.page +374 -0
  141. data/lib/roby.rb +102 -47
  142. data/lib/roby/actions.rb +17 -0
  143. data/lib/roby/actions/action.rb +80 -0
  144. data/lib/roby/actions/interface.rb +45 -0
  145. data/lib/roby/actions/library.rb +23 -0
  146. data/lib/roby/actions/models/action.rb +224 -0
  147. data/lib/roby/actions/models/coordination_action.rb +58 -0
  148. data/lib/roby/actions/models/interface.rb +22 -0
  149. data/lib/roby/actions/models/interface_base.rb +294 -0
  150. data/lib/roby/actions/models/library.rb +12 -0
  151. data/lib/roby/actions/models/method_action.rb +90 -0
  152. data/lib/roby/actions/task.rb +114 -0
  153. data/lib/roby/and_generator.rb +125 -0
  154. data/lib/roby/app.rb +2795 -829
  155. data/lib/roby/app/autotest_console_reporter.rb +138 -0
  156. data/lib/roby/app/base.rb +21 -0
  157. data/lib/roby/app/cucumber.rb +2 -0
  158. data/lib/roby/app/cucumber/controller.rb +439 -0
  159. data/lib/roby/app/cucumber/helpers.rb +280 -0
  160. data/lib/roby/app/cucumber/world.rb +32 -0
  161. data/lib/roby/app/debug.rb +136 -0
  162. data/lib/roby/app/gen.rb +2 -0
  163. data/lib/roby/app/rake.rb +178 -38
  164. data/lib/roby/app/robot_config.rb +9 -0
  165. data/lib/roby/app/robot_names.rb +115 -0
  166. data/lib/roby/app/run.rb +3 -2
  167. data/lib/roby/app/scripts.rb +72 -0
  168. data/lib/roby/app/scripts/autotest.rb +173 -0
  169. data/lib/roby/app/scripts/display.rb +2 -0
  170. data/lib/roby/app/scripts/restart.rb +52 -0
  171. data/lib/roby/app/scripts/results.rb +17 -8
  172. data/lib/roby/app/scripts/run.rb +155 -24
  173. data/lib/roby/app/scripts/shell.rb +147 -62
  174. data/lib/roby/app/scripts/test.rb +107 -22
  175. data/lib/roby/app/test_reporter.rb +74 -0
  176. data/lib/roby/app/test_server.rb +159 -0
  177. data/lib/roby/app/vagrant.rb +47 -0
  178. data/lib/roby/backports.rb +16 -0
  179. data/lib/roby/cli/display.rb +190 -0
  180. data/lib/roby/cli/exceptions.rb +17 -0
  181. data/lib/roby/cli/gen/actions/class.rb +5 -0
  182. data/lib/roby/cli/gen/actions/test.rb +6 -0
  183. data/lib/roby/cli/gen/app/.yardopts +6 -0
  184. data/lib/roby/cli/gen/app/README.md +28 -0
  185. data/lib/roby/cli/gen/app/Rakefile +15 -0
  186. data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
  187. data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
  188. data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
  189. data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
  190. data/lib/roby/cli/gen/class/class.rb +6 -0
  191. data/lib/roby/cli/gen/class/test.rb +7 -0
  192. data/lib/roby/cli/gen/helpers.rb +203 -0
  193. data/lib/roby/cli/gen/module/module.rb +5 -0
  194. data/lib/roby/cli/gen/module/test.rb +6 -0
  195. data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
  196. data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
  197. data/lib/roby/cli/gen/task/class.rb +44 -0
  198. data/lib/roby/cli/gen/task/test.rb +6 -0
  199. data/lib/roby/cli/gen_main.rb +120 -0
  200. data/lib/roby/cli/log.rb +276 -0
  201. data/lib/roby/cli/log/flamegraph.html +499 -0
  202. data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
  203. data/lib/roby/cli/main.rb +153 -0
  204. data/lib/roby/coordination.rb +60 -0
  205. data/lib/roby/coordination/action_script.rb +25 -0
  206. data/lib/roby/coordination/action_state_machine.rb +125 -0
  207. data/lib/roby/coordination/actions.rb +106 -0
  208. data/lib/roby/coordination/base.rb +145 -0
  209. data/lib/roby/coordination/calculus.rb +40 -0
  210. data/lib/roby/coordination/child.rb +28 -0
  211. data/lib/roby/coordination/event.rb +29 -0
  212. data/lib/roby/coordination/fault_handler.rb +25 -0
  213. data/lib/roby/coordination/fault_handling_task.rb +13 -0
  214. data/lib/roby/coordination/fault_response_table.rb +110 -0
  215. data/lib/roby/coordination/models/action_script.rb +64 -0
  216. data/lib/roby/coordination/models/action_state_machine.rb +224 -0
  217. data/lib/roby/coordination/models/actions.rb +191 -0
  218. data/lib/roby/coordination/models/arguments.rb +55 -0
  219. data/lib/roby/coordination/models/base.rb +176 -0
  220. data/lib/roby/coordination/models/capture.rb +86 -0
  221. data/lib/roby/coordination/models/child.rb +35 -0
  222. data/lib/roby/coordination/models/event.rb +41 -0
  223. data/lib/roby/coordination/models/exceptions.rb +42 -0
  224. data/lib/roby/coordination/models/fault_handler.rb +219 -0
  225. data/lib/roby/coordination/models/fault_response_table.rb +77 -0
  226. data/lib/roby/coordination/models/root.rb +22 -0
  227. data/lib/roby/coordination/models/script.rb +283 -0
  228. data/lib/roby/coordination/models/task.rb +184 -0
  229. data/lib/roby/coordination/models/task_from_action.rb +50 -0
  230. data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
  231. data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
  232. data/lib/roby/coordination/models/task_from_variable.rb +27 -0
  233. data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
  234. data/lib/roby/coordination/models/variable.rb +32 -0
  235. data/lib/roby/coordination/script.rb +200 -0
  236. data/lib/roby/coordination/script_instruction.rb +12 -0
  237. data/lib/roby/coordination/task.rb +45 -0
  238. data/lib/roby/coordination/task_base.rb +69 -0
  239. data/lib/roby/coordination/task_script.rb +293 -0
  240. data/lib/roby/coordination/task_state_machine.rb +308 -0
  241. data/lib/roby/decision_control.rb +33 -21
  242. data/lib/roby/distributed_object.rb +76 -0
  243. data/lib/roby/droby.rb +17 -0
  244. data/lib/roby/droby/droby_id.rb +6 -0
  245. data/lib/roby/droby/enable.rb +153 -0
  246. data/lib/roby/droby/event_logger.rb +189 -0
  247. data/lib/roby/droby/event_logging.rb +57 -0
  248. data/lib/roby/droby/exceptions.rb +14 -0
  249. data/lib/roby/droby/identifiable.rb +22 -0
  250. data/lib/roby/droby/logfile.rb +141 -0
  251. data/lib/roby/droby/logfile/client.rb +176 -0
  252. data/lib/roby/droby/logfile/file_format.md +97 -0
  253. data/lib/roby/droby/logfile/index.rb +117 -0
  254. data/lib/roby/droby/logfile/reader.rb +139 -0
  255. data/lib/roby/droby/logfile/server.rb +199 -0
  256. data/lib/roby/droby/logfile/writer.rb +114 -0
  257. data/lib/roby/droby/marshal.rb +264 -0
  258. data/lib/roby/droby/marshallable.rb +12 -0
  259. data/lib/roby/droby/null_event_logger.rb +25 -0
  260. data/lib/roby/droby/object_manager.rb +205 -0
  261. data/lib/roby/droby/peer_id.rb +6 -0
  262. data/lib/roby/droby/plan_rebuilder.rb +373 -0
  263. data/lib/roby/droby/rebuilt_plan.rb +160 -0
  264. data/lib/roby/droby/remote_droby_id.rb +6 -0
  265. data/lib/roby/droby/timepoints.rb +205 -0
  266. data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
  267. data/lib/roby/droby/timepoints_ctf.rb +125 -0
  268. data/lib/roby/droby/v5.rb +14 -0
  269. data/lib/roby/droby/v5/builtin.rb +120 -0
  270. data/lib/roby/droby/v5/droby_class.rb +45 -0
  271. data/lib/roby/droby/v5/droby_constant.rb +81 -0
  272. data/lib/roby/droby/v5/droby_dump.rb +1026 -0
  273. data/lib/roby/droby/v5/droby_id.rb +44 -0
  274. data/lib/roby/droby/v5/droby_model.rb +82 -0
  275. data/lib/roby/droby/v5/peer_id.rb +10 -0
  276. data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
  277. data/lib/roby/event.rb +79 -957
  278. data/lib/roby/event_constraints.rb +835 -0
  279. data/lib/roby/event_generator.rb +1047 -0
  280. data/lib/roby/event_structure/causal_link.rb +6 -0
  281. data/lib/roby/event_structure/forwarding.rb +6 -0
  282. data/lib/roby/event_structure/precedence.rb +7 -0
  283. data/lib/roby/event_structure/signal.rb +8 -0
  284. data/lib/roby/event_structure/temporal_constraints.rb +640 -0
  285. data/lib/roby/exceptions.rb +446 -152
  286. data/lib/roby/executable_plan.rb +549 -0
  287. data/lib/roby/execution_engine.rb +1997 -950
  288. data/lib/roby/filter_generator.rb +26 -0
  289. data/lib/roby/gui/chronicle_view.rb +225 -0
  290. data/lib/roby/gui/chronicle_widget.rb +925 -0
  291. data/lib/roby/gui/dot_id.rb +11 -0
  292. data/lib/roby/gui/exception_view.rb +44 -0
  293. data/lib/roby/gui/log_display.rb +273 -0
  294. data/lib/roby/gui/model_views.rb +2 -0
  295. data/lib/roby/gui/model_views/action_interface.rb +53 -0
  296. data/lib/roby/gui/model_views/task.rb +47 -0
  297. data/lib/roby/gui/model_views/task.rhtml +41 -0
  298. data/lib/roby/gui/object_info_view.rb +89 -0
  299. data/lib/roby/gui/plan_dot_layout.rb +427 -0
  300. data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
  301. data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
  302. data/lib/roby/gui/relations_view.rb +278 -0
  303. data/lib/roby/gui/relations_view/relations.ui +139 -0
  304. data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
  305. data/lib/roby/gui/relations_view/relations_config.rb +292 -0
  306. data/lib/roby/gui/relations_view/relations_view.ui +53 -0
  307. data/lib/roby/gui/scheduler_view.css +24 -0
  308. data/lib/roby/gui/scheduler_view.rb +46 -0
  309. data/lib/roby/gui/scheduler_view.rhtml +53 -0
  310. data/lib/roby/gui/stepping.rb +93 -0
  311. data/lib/roby/gui/stepping.ui +181 -0
  312. data/lib/roby/gui/styles.rb +81 -0
  313. data/lib/roby/gui/task_display_configuration.rb +42 -0
  314. data/lib/roby/gui/task_state_at.rb +38 -0
  315. data/lib/roby/hooks.rb +26 -0
  316. data/lib/roby/interface.rb +136 -469
  317. data/lib/roby/interface/async.rb +20 -0
  318. data/lib/roby/interface/async/action_monitor.rb +188 -0
  319. data/lib/roby/interface/async/interface.rb +498 -0
  320. data/lib/roby/interface/async/job_monitor.rb +213 -0
  321. data/lib/roby/interface/async/log.rb +238 -0
  322. data/lib/roby/interface/async/new_job_listener.rb +79 -0
  323. data/lib/roby/interface/async/ui_connector.rb +183 -0
  324. data/lib/roby/interface/client.rb +553 -0
  325. data/lib/roby/interface/command.rb +24 -0
  326. data/lib/roby/interface/command_argument.rb +16 -0
  327. data/lib/roby/interface/command_library.rb +92 -0
  328. data/lib/roby/interface/droby_channel.rb +174 -0
  329. data/lib/roby/interface/exceptions.rb +22 -0
  330. data/lib/roby/interface/interface.rb +655 -0
  331. data/lib/roby/interface/job.rb +47 -0
  332. data/lib/roby/interface/rest.rb +10 -0
  333. data/lib/roby/interface/rest/api.rb +29 -0
  334. data/lib/roby/interface/rest/helpers.rb +24 -0
  335. data/lib/roby/interface/rest/server.rb +212 -0
  336. data/lib/roby/interface/server.rb +154 -0
  337. data/lib/roby/interface/shell_client.rb +468 -0
  338. data/lib/roby/interface/shell_subcommand.rb +24 -0
  339. data/lib/roby/interface/subcommand_client.rb +35 -0
  340. data/lib/roby/interface/tcp.rb +168 -0
  341. data/lib/roby/models/arguments.rb +112 -0
  342. data/lib/roby/models/plan_object.rb +83 -0
  343. data/lib/roby/models/task.rb +835 -0
  344. data/lib/roby/models/task_event.rb +62 -0
  345. data/lib/roby/models/task_service.rb +78 -0
  346. data/lib/roby/or_generator.rb +88 -0
  347. data/lib/roby/plan.rb +1751 -864
  348. data/lib/roby/plan_object.rb +611 -0
  349. data/lib/roby/plan_service.rb +200 -0
  350. data/lib/roby/promise.rb +332 -0
  351. data/lib/roby/queries.rb +23 -0
  352. data/lib/roby/queries/and_matcher.rb +32 -0
  353. data/lib/roby/queries/any.rb +27 -0
  354. data/lib/roby/queries/code_error_matcher.rb +58 -0
  355. data/lib/roby/queries/event_generator_matcher.rb +9 -0
  356. data/lib/roby/queries/execution_exception_matcher.rb +165 -0
  357. data/lib/roby/queries/index.rb +165 -0
  358. data/lib/roby/queries/localized_error_matcher.rb +149 -0
  359. data/lib/roby/queries/matcher_base.rb +107 -0
  360. data/lib/roby/queries/none.rb +27 -0
  361. data/lib/roby/queries/not_matcher.rb +30 -0
  362. data/lib/roby/queries/op_matcher.rb +8 -0
  363. data/lib/roby/queries/or_matcher.rb +30 -0
  364. data/lib/roby/queries/plan_object_matcher.rb +363 -0
  365. data/lib/roby/queries/query.rb +188 -0
  366. data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
  367. data/lib/roby/queries/task_matcher.rb +344 -0
  368. data/lib/roby/relations.rb +42 -678
  369. data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
  370. data/lib/roby/relations/directed_relation_support.rb +268 -0
  371. data/lib/roby/relations/event_relation_graph.rb +19 -0
  372. data/lib/roby/relations/fork_merge_visitor.rb +154 -0
  373. data/lib/roby/relations/graph.rb +533 -0
  374. data/lib/roby/relations/models/directed_relation_support.rb +11 -0
  375. data/lib/roby/relations/models/graph.rb +75 -0
  376. data/lib/roby/relations/models/task_relation_graph.rb +18 -0
  377. data/lib/roby/relations/space.rb +380 -0
  378. data/lib/roby/relations/task_relation_graph.rb +20 -0
  379. data/lib/roby/robot.rb +85 -38
  380. data/lib/roby/schedulers/basic.rb +155 -25
  381. data/lib/roby/schedulers/null.rb +20 -0
  382. data/lib/roby/schedulers/reporting.rb +31 -0
  383. data/lib/roby/schedulers/state.rb +129 -0
  384. data/lib/roby/schedulers/temporal.rb +91 -0
  385. data/lib/roby/singletons.rb +87 -0
  386. data/lib/roby/standalone.rb +4 -2
  387. data/lib/roby/standard_errors.rb +405 -82
  388. data/lib/roby/state.rb +6 -3
  389. data/lib/roby/state/conf_model.rb +5 -0
  390. data/lib/roby/state/events.rb +181 -95
  391. data/lib/roby/state/goal_model.rb +77 -0
  392. data/lib/roby/state/open_struct.rb +591 -0
  393. data/lib/roby/state/open_struct_model.rb +68 -0
  394. data/lib/roby/state/pos.rb +45 -45
  395. data/lib/roby/state/shapes.rb +11 -11
  396. data/lib/roby/state/state_model.rb +303 -0
  397. data/lib/roby/state/task.rb +43 -0
  398. data/lib/roby/support.rb +88 -148
  399. data/lib/roby/task.rb +1361 -1750
  400. data/lib/roby/task_arguments.rb +428 -0
  401. data/lib/roby/task_event.rb +127 -0
  402. data/lib/roby/task_event_generator.rb +337 -0
  403. data/lib/roby/task_service.rb +6 -0
  404. data/lib/roby/task_structure/conflicts.rb +104 -0
  405. data/lib/roby/task_structure/dependency.rb +932 -0
  406. data/lib/roby/task_structure/error_handling.rb +118 -0
  407. data/lib/roby/task_structure/executed_by.rb +234 -0
  408. data/lib/roby/task_structure/planned_by.rb +90 -0
  409. data/lib/roby/tasks/aggregator.rb +37 -0
  410. data/lib/roby/tasks/external_process.rb +275 -0
  411. data/lib/roby/tasks/group.rb +27 -0
  412. data/lib/roby/tasks/null.rb +19 -0
  413. data/lib/roby/tasks/parallel.rb +43 -0
  414. data/lib/roby/tasks/sequence.rb +88 -0
  415. data/lib/roby/tasks/simple.rb +21 -0
  416. data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
  417. data/lib/roby/tasks/timeout.rb +17 -0
  418. data/lib/roby/tasks/virtual.rb +55 -0
  419. data/lib/roby/template_plan.rb +7 -0
  420. data/lib/roby/test/aruba_minitest.rb +74 -0
  421. data/lib/roby/test/assertion.rb +16 -0
  422. data/lib/roby/test/assertions.rb +490 -0
  423. data/lib/roby/test/common.rb +368 -591
  424. data/lib/roby/test/dsl.rb +149 -0
  425. data/lib/roby/test/error.rb +18 -0
  426. data/lib/roby/test/event_reporter.rb +83 -0
  427. data/lib/roby/test/execution_expectations.rb +1134 -0
  428. data/lib/roby/test/expect_execution.rb +151 -0
  429. data/lib/roby/test/minitest_helpers.rb +166 -0
  430. data/lib/roby/test/roby_app_helpers.rb +200 -0
  431. data/lib/roby/test/run_planners.rb +155 -0
  432. data/lib/roby/test/self.rb +112 -0
  433. data/lib/roby/test/spec.rb +198 -0
  434. data/lib/roby/test/tasks/empty_task.rb +4 -4
  435. data/lib/roby/test/tasks/goto.rb +28 -27
  436. data/lib/roby/test/teardown_plans.rb +100 -0
  437. data/lib/roby/test/testcase.rb +239 -307
  438. data/lib/roby/test/tools.rb +159 -155
  439. data/lib/roby/test/validate_state_machine.rb +75 -0
  440. data/lib/roby/transaction.rb +1125 -0
  441. data/lib/roby/transaction/event_generator_proxy.rb +63 -0
  442. data/lib/roby/transaction/plan_object_proxy.rb +99 -0
  443. data/lib/roby/transaction/plan_service_proxy.rb +43 -0
  444. data/lib/roby/transaction/proxying.rb +120 -0
  445. data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
  446. data/lib/roby/transaction/task_proxy.rb +135 -0
  447. data/lib/roby/until_generator.rb +30 -0
  448. data/lib/roby/version.rb +5 -0
  449. data/lib/roby/yard.rb +169 -0
  450. data/lib/yard-roby.rb +1 -0
  451. data/manifest.xml +32 -6
  452. data/roby.gemspec +59 -0
  453. metadata +788 -587
  454. data/Manifest.txt +0 -321
  455. data/NOTES +0 -4
  456. data/README.txt +0 -166
  457. data/TODO.txt +0 -146
  458. data/app/README.txt +0 -24
  459. data/app/Rakefile +0 -8
  460. data/app/config/ROBOT.rb +0 -5
  461. data/app/config/init.rb +0 -33
  462. data/app/config/roby.yml +0 -3
  463. data/app/controllers/ROBOT.rb +0 -2
  464. data/app/planners/ROBOT/main.rb +0 -6
  465. data/app/planners/main.rb +0 -5
  466. data/app/scripts/distributed +0 -3
  467. data/app/scripts/generate/bookmarks +0 -3
  468. data/app/scripts/replay +0 -3
  469. data/app/scripts/results +0 -3
  470. data/app/scripts/run +0 -3
  471. data/app/scripts/server +0 -3
  472. data/app/scripts/shell +0 -3
  473. data/app/scripts/test +0 -3
  474. data/app/tasks/.gitattributes +0 -0
  475. data/app/tasks/ROBOT/.gitattributes +0 -0
  476. data/bin/roby-shell +0 -25
  477. data/doc/guide/src/basics/app.page +0 -139
  478. data/doc/guide/src/basics/index.page +0 -11
  479. data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
  480. data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
  481. data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
  482. data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
  483. data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
  484. data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
  485. data/doc/guide/src/basics/relations_display.page +0 -203
  486. data/doc/guide/src/basics/shell.page +0 -102
  487. data/doc/guide/src/default.css +0 -319
  488. data/doc/guide/src/introduction/index.page +0 -29
  489. data/doc/guide/src/introduction/publications.page +0 -14
  490. data/doc/guide/src/relations/dependency.page +0 -89
  491. data/doc/guide/src/relations/index.page +0 -12
  492. data/ext/droby/dump.cc +0 -175
  493. data/ext/droby/extconf.rb +0 -3
  494. data/ext/graph/algorithm.cc +0 -746
  495. data/ext/graph/extconf.rb +0 -7
  496. data/ext/graph/graph.cc +0 -575
  497. data/ext/graph/graph.hh +0 -183
  498. data/ext/graph/iterator_sequence.hh +0 -102
  499. data/ext/graph/undirected_dfs.hh +0 -226
  500. data/ext/graph/undirected_graph.hh +0 -421
  501. data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
  502. data/lib/roby/app/scripts/replay.rb +0 -31
  503. data/lib/roby/app/scripts/server.rb +0 -18
  504. data/lib/roby/basic_object.rb +0 -151
  505. data/lib/roby/config.rb +0 -14
  506. data/lib/roby/distributed.rb +0 -36
  507. data/lib/roby/distributed/base.rb +0 -448
  508. data/lib/roby/distributed/communication.rb +0 -875
  509. data/lib/roby/distributed/connection_space.rb +0 -616
  510. data/lib/roby/distributed/distributed_object.rb +0 -206
  511. data/lib/roby/distributed/drb.rb +0 -62
  512. data/lib/roby/distributed/notifications.rb +0 -531
  513. data/lib/roby/distributed/peer.rb +0 -555
  514. data/lib/roby/distributed/protocol.rb +0 -529
  515. data/lib/roby/distributed/proxy.rb +0 -343
  516. data/lib/roby/distributed/subscription.rb +0 -311
  517. data/lib/roby/distributed/transaction.rb +0 -498
  518. data/lib/roby/external_process_task.rb +0 -225
  519. data/lib/roby/graph.rb +0 -160
  520. data/lib/roby/log.rb +0 -3
  521. data/lib/roby/log/chronicle.rb +0 -303
  522. data/lib/roby/log/console.rb +0 -74
  523. data/lib/roby/log/data_stream.rb +0 -275
  524. data/lib/roby/log/dot.rb +0 -279
  525. data/lib/roby/log/event_stream.rb +0 -161
  526. data/lib/roby/log/file.rb +0 -396
  527. data/lib/roby/log/gui/basic_display.ui +0 -83
  528. data/lib/roby/log/gui/basic_display_ui.rb +0 -89
  529. data/lib/roby/log/gui/chronicle.rb +0 -26
  530. data/lib/roby/log/gui/chronicle_view.rb +0 -40
  531. data/lib/roby/log/gui/chronicle_view.ui +0 -70
  532. data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
  533. data/lib/roby/log/gui/data_displays.rb +0 -171
  534. data/lib/roby/log/gui/data_displays.ui +0 -155
  535. data/lib/roby/log/gui/data_displays_ui.rb +0 -146
  536. data/lib/roby/log/gui/notifications.rb +0 -26
  537. data/lib/roby/log/gui/relations.rb +0 -269
  538. data/lib/roby/log/gui/relations.ui +0 -123
  539. data/lib/roby/log/gui/relations_ui.rb +0 -120
  540. data/lib/roby/log/gui/relations_view.rb +0 -185
  541. data/lib/roby/log/gui/relations_view.ui +0 -149
  542. data/lib/roby/log/gui/relations_view_ui.rb +0 -144
  543. data/lib/roby/log/gui/replay.rb +0 -366
  544. data/lib/roby/log/gui/replay_controls.rb +0 -206
  545. data/lib/roby/log/gui/replay_controls.ui +0 -282
  546. data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
  547. data/lib/roby/log/gui/runtime.rb +0 -130
  548. data/lib/roby/log/hooks.rb +0 -186
  549. data/lib/roby/log/logger.rb +0 -203
  550. data/lib/roby/log/notifications.rb +0 -244
  551. data/lib/roby/log/plan_rebuilder.rb +0 -468
  552. data/lib/roby/log/relations.rb +0 -1084
  553. data/lib/roby/log/server.rb +0 -547
  554. data/lib/roby/log/sqlite.rb +0 -47
  555. data/lib/roby/log/timings.rb +0 -233
  556. data/lib/roby/plan-object.rb +0 -371
  557. data/lib/roby/planning.rb +0 -13
  558. data/lib/roby/planning/loops.rb +0 -309
  559. data/lib/roby/planning/model.rb +0 -1012
  560. data/lib/roby/planning/task.rb +0 -180
  561. data/lib/roby/query.rb +0 -655
  562. data/lib/roby/relations/conflicts.rb +0 -67
  563. data/lib/roby/relations/dependency.rb +0 -358
  564. data/lib/roby/relations/ensured.rb +0 -19
  565. data/lib/roby/relations/error_handling.rb +0 -22
  566. data/lib/roby/relations/events.rb +0 -7
  567. data/lib/roby/relations/executed_by.rb +0 -208
  568. data/lib/roby/relations/influence.rb +0 -10
  569. data/lib/roby/relations/planned_by.rb +0 -63
  570. data/lib/roby/state/information.rb +0 -55
  571. data/lib/roby/state/state.rb +0 -367
  572. data/lib/roby/task-operations.rb +0 -186
  573. data/lib/roby/task_index.rb +0 -80
  574. data/lib/roby/test/distributed.rb +0 -230
  575. data/lib/roby/test/tasks/simple_task.rb +0 -23
  576. data/lib/roby/transactions.rb +0 -507
  577. data/lib/roby/transactions/proxy.rb +0 -325
  578. data/plugins/fault_injection/History.txt +0 -4
  579. data/plugins/fault_injection/README.txt +0 -34
  580. data/plugins/fault_injection/Rakefile +0 -12
  581. data/plugins/fault_injection/TODO.txt +0 -0
  582. data/plugins/fault_injection/app.rb +0 -52
  583. data/plugins/fault_injection/fault_injection.rb +0 -89
  584. data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
  585. data/plugins/subsystems/README.txt +0 -37
  586. data/plugins/subsystems/Rakefile +0 -13
  587. data/plugins/subsystems/app.rb +0 -182
  588. data/plugins/subsystems/test/app/README +0 -24
  589. data/plugins/subsystems/test/app/Rakefile +0 -8
  590. data/plugins/subsystems/test/app/config/app.yml +0 -71
  591. data/plugins/subsystems/test/app/config/init.rb +0 -12
  592. data/plugins/subsystems/test/app/config/roby.yml +0 -3
  593. data/plugins/subsystems/test/app/planners/main.rb +0 -20
  594. data/plugins/subsystems/test/app/scripts/distributed +0 -3
  595. data/plugins/subsystems/test/app/scripts/replay +0 -3
  596. data/plugins/subsystems/test/app/scripts/results +0 -3
  597. data/plugins/subsystems/test/app/scripts/run +0 -3
  598. data/plugins/subsystems/test/app/scripts/server +0 -3
  599. data/plugins/subsystems/test/app/scripts/shell +0 -3
  600. data/plugins/subsystems/test/app/scripts/test +0 -3
  601. data/plugins/subsystems/test/app/tasks/services.rb +0 -15
  602. data/plugins/subsystems/test/test_subsystems.rb +0 -78
  603. data/test/distributed/test_communication.rb +0 -195
  604. data/test/distributed/test_connection.rb +0 -284
  605. data/test/distributed/test_execution.rb +0 -378
  606. data/test/distributed/test_mixed_plan.rb +0 -341
  607. data/test/distributed/test_plan_notifications.rb +0 -238
  608. data/test/distributed/test_protocol.rb +0 -525
  609. data/test/distributed/test_query.rb +0 -106
  610. data/test/distributed/test_remote_plan.rb +0 -491
  611. data/test/distributed/test_transaction.rb +0 -466
  612. data/test/mockups/external_process +0 -28
  613. data/test/mockups/tasks.rb +0 -27
  614. data/test/planning/test_loops.rb +0 -432
  615. data/test/planning/test_model.rb +0 -427
  616. data/test/planning/test_task.rb +0 -126
  617. data/test/relations/test_conflicts.rb +0 -42
  618. data/test/relations/test_dependency.rb +0 -324
  619. data/test/relations/test_ensured.rb +0 -38
  620. data/test/relations/test_executed_by.rb +0 -224
  621. data/test/relations/test_planned_by.rb +0 -56
  622. data/test/suite_core.rb +0 -29
  623. data/test/suite_distributed.rb +0 -10
  624. data/test/suite_planning.rb +0 -4
  625. data/test/suite_relations.rb +0 -8
  626. data/test/tasks/test_external_process.rb +0 -126
  627. data/test/tasks/test_thread_task.rb +0 -70
  628. data/test/test_bgl.rb +0 -528
  629. data/test/test_event.rb +0 -969
  630. data/test/test_exceptions.rb +0 -591
  631. data/test/test_execution_engine.rb +0 -987
  632. data/test/test_gui.rb +0 -20
  633. data/test/test_interface.rb +0 -43
  634. data/test/test_log.rb +0 -125
  635. data/test/test_log_server.rb +0 -133
  636. data/test/test_plan.rb +0 -418
  637. data/test/test_query.rb +0 -424
  638. data/test/test_relations.rb +0 -260
  639. data/test/test_state.rb +0 -432
  640. data/test/test_support.rb +0 -16
  641. data/test/test_task.rb +0 -1181
  642. data/test/test_testcase.rb +0 -138
  643. data/test/test_transactions.rb +0 -610
  644. data/test/test_transactions_proxy.rb +0 -216
@@ -0,0 +1,71 @@
1
+ ---
2
+ title: Creating a Roby App - File Layout
3
+ sort_info: 5
4
+ ---
5
+
6
+ Creating a new application
7
+ --------------------------
8
+ New Roby applications are created by going into a new folder and running
9
+
10
+ ~~~ ruby
11
+ roby init
12
+ ~~~
13
+
14
+ Search paths: robot name and robot type
15
+ ---------------------------------
16
+ The configuration of the Roby application can be parametrized by a robot name
17
+ and a robot type. If only a single name is given, it is used for both.
18
+
19
+ These names influence Roby's loading sequence by either adding folders in the
20
+ search path or parametrizing the file that Roby is looking for.
21
+
22
+ File layout
23
+ -----------
24
+ This section gives an overview of a Roby application's file layout. You will be
25
+ reminded in the rest of the documentation, when it applies, to where certain
26
+ parts of the application should be stored.
27
+
28
+ config/
29
+ : configuration files. The files that are relevant for Roby are: app.yml,
30
+ init.rb and files named like robots (e.g. ROBOT_NAME.rb and ROBOT_TYPE.rb)
31
+
32
+ models/
33
+ : contain definition of models. There are two standard subdirectories, 'tasks'
34
+ for the [task models](task_models.html) and actions/ for the [action interface
35
+ and action libraries](actions.html)
36
+
37
+ scripts/
38
+ : additional scripts useful to manage / maintain the app. The controllers/
39
+ subfolder has a special meaning for running roby controllers. More on that
40
+ [later](../interacting/run.html)
41
+
42
+ data/
43
+ : non-code and non-model files that are relevant for the application
44
+
45
+ lib/
46
+ : additional library files (i.e. generic, non-roby-specific files). It gets
47
+ added to the load path automatically
48
+
49
+ logs/
50
+ : where the log files are going. See [this
51
+ page](../tutorial/relations_display.html) for a description.
52
+
53
+ Loading sequence
54
+ ----------------
55
+ This section will describe which files are loaded in which order. The ROBOT_NAME
56
+ and ROBOT_TYPE placeholders are used in place of robot name and robot type. Any
57
+ file or folder that is not found is simply ignored.
58
+
59
+ config/init.rb
60
+ : first file loaded
61
+
62
+ models/tasks,models/tasks/ROBOT_TYPE,models/tasks/ROBOT_NAME
63
+ : loading of task models. All three folders are searched for
64
+
65
+ models/actions/main.rb,models/actions/ROBOT_TYPE/main.rb,models/actions/ROBOT_NAME/main.rb
66
+ : loading of action models. Only the most specific file gets loaded.
67
+
68
+ config/ROBOT_TYPE.rb,config/ROBOT_NAME.rb
69
+ : loading of the robot's configuration file. Only the most specific file gets
70
+ loaded.
71
+
@@ -0,0 +1,50 @@
1
+ ---
2
+ title: Building a Roby app
3
+ sort_info: 0
4
+ ---
5
+
6
+ This section will deal with the issue of how to create global behaviour(s) by
7
+ __coordinating__ single-purpose units using Roby.
8
+
9
+ This behaviour-building is done at two levels when using Roby:
10
+
11
+ * at the _local_ level by creating interfaces, where high-level behaviours --
12
+ built using smaller pieces -- are "hidden" behind high-level tasks.
13
+ * at the _global_ level by coordinating behaviours, as for instance by
14
+ switching between them.
15
+
16
+ For instance, a move-to-goal behaviour could be represented by a simple MoveTo
17
+ task that gets an argument (the target), read the position information while
18
+ executing the task and emit an event (reached_target) when the goal is reached.
19
+ Additionally, one would model that the reached_target event also means that the
20
+ task is successful.
21
+
22
+ However, having an actual robot realize this behaviour is a bit more
23
+ complicated. One would for instance want to run a planner first to plan the path
24
+ to the goal, then execute it. While executing it, one would also like to monitor
25
+ localization and abort if it gets too bad.
26
+
27
+ In Roby, the local interface-building code is done at the level of models by
28
+ defining events and arguments to Roby tasks, and at runtime by adding actual
29
+ code to tasks. There are various places where the code can be hooked. The main
30
+ goal of this code is to make sure that events are emitted whenever _what they
31
+ represent_ happened. Sometimes, achieving this is as easy as regularly executing
32
+ code blocks that check for conditions and emit events accordingly. Sometimes, it
33
+ requires more advanced concepts such as for instance a state machine.
34
+
35
+ The global-coordination code is created __outside__ the tasks. Roby allows you
36
+ to define __actions__, whose job it to bind tasks together to form more complex
37
+ behaviours. These actions also form the "public" interface for your robot: you
38
+ can start / stop them and track their progress remotely using the Roby shell. It
39
+ is also the basis for generic error recovery.
40
+
41
+ This section will first detail the programming interfaces for these two aspects.
42
+ Then, a few pages will try to explain the role that they all have to play into a
43
+ Roby controller.
44
+
45
+ In other words, this section will describe:
46
+
47
+ * how to add code into tasks
48
+ * how to create plans inside planning methods
49
+ * where to put what
50
+
@@ -0,0 +1,86 @@
1
+ ---
2
+ title: Patterns and Protocols
3
+ sort_info: 400
4
+ ---
5
+
6
+ The art of building code in Roby is the art of putting __plan patterns and
7
+ protocols__ in tasks, and creating plans that conform to these patterns and
8
+ protocols in the planning methods. This page lists a few guidelines on how that
9
+ can be achieved
10
+
11
+ Keep Isolation
12
+ --------------
13
+ Moreover, a good guideline when building plans is to avoid having a given task
14
+ access other tasks that are at a distance of more than 1 in any given relation.
15
+ I.e. a task should only access other tasks that are in its direct neighborhood.
16
+
17
+ The most useful tool to achieve this is the forwarding relation: it allows to
18
+ "forward" an event between tasks, making the child event an equivalent of the
19
+ parent event. This is often used to declare that a high-level event is the
20
+ equivalent of a child event.
21
+
22
+ ![Example of using forwarding to create high-level events from low-level
23
+ ones](patterns_forwarding.png)
24
+ {: .align-center}
25
+
26
+ __Using forwarding to create high-level events from low-level ones__. This
27
+ allows the rest of the plan to only synchronize on the high-level "leak_found"
28
+ event instead of explicitely looking at the children. If the PipelineRepair is
29
+ implemented in a different way, the rest of the behaviour will stay unchanged.
30
+ {: .figurecaption}
31
+
32
+ This pattern is commonly used to forward failure and/or success up in the
33
+ dependency hierarchy: the success event of one child task is forwarded to the
34
+ success event of the parent task(s).
35
+
36
+ Don't put too much assumptions in
37
+ ---------------------------------
38
+ Ideally, when writing tasks, one should seek to write it in a way that has as
39
+ as little assumptions as possible about the tasks that are around it. It can
40
+ obviously require some functionalities / interfaces from them. But it should
41
+ not assume, say, that "localization_child is a task of type X".
42
+
43
+ The trick to achieve this is to use events as much as possible as an interface
44
+ to other tasks. The general guidelines here are:
45
+
46
+ * use events for synchronization
47
+ * use attributes for data transfer
48
+
49
+ Embed protocols in task code, embed plan building in actions
50
+ ------------------------------------------------------------
51
+ What tasks do with each other form __protocols__. I.e., any given task assumes
52
+ that other task will emit events A, B, C and have attributes filled in with data
53
+ when e.g. these events are emitted.
54
+
55
+ However, to be reusable, a task should not __by itself__ build the plan, i.e.
56
+ add the relevant tasks. This should be left to actions.
57
+
58
+ Embedding placeholders in the plan {#abstract-tasks}
59
+ ----------------------------------
60
+ If, at any point in execution, one wants to represent that a task __will__ be
61
+ there and executed, but without explaining __how__, it is possible, in Roby, to
62
+ add a task that will act as a placeholder.
63
+
64
+ This is simply done by adding an instance of the right task model and marking it
65
+ as abstract:
66
+
67
+ {coderay:: ruby}
68
+ task = MoveTo.new
69
+ task.abstract = true
70
+ root.depends_on(task)
71
+ {coderay}
72
+
73
+ Moreover, if a certain task model is used as a base for other models, but
74
+ without being executable, the model itself can be marked as abstract:
75
+
76
+ {coderay:: ruby}
77
+ class AbstractMoveModel < Roby::Task
78
+ abstract
79
+ end
80
+ {coderay}
81
+
82
+ __Note__ This is different from having an abstract class, as one can define one
83
+ in C++ or Java. Here, it is possible to create instances of AbstractMoveModel
84
+ and add the task instance in the plan. What is impossible is to execute this
85
+ task
86
+ {: .warning}
@@ -0,0 +1,277 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg
3
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
4
+ xmlns:cc="http://creativecommons.org/ns#"
5
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
6
+ xmlns:svg="http://www.w3.org/2000/svg"
7
+ xmlns="http://www.w3.org/2000/svg"
8
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
9
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
10
+ width="2416.17mm"
11
+ height="127.353mm"
12
+ version="1.2"
13
+ id="svg4167"
14
+ inkscape:version="0.47 r22583"
15
+ sodipodi:docname="02_leak_found.svg">
16
+ <metadata
17
+ id="metadata4599">
18
+ <rdf:RDF>
19
+ <cc:Work
20
+ rdf:about="">
21
+ <dc:format>image/svg+xml</dc:format>
22
+ <dc:type
23
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
24
+ <dc:title>Qt Svg Document</dc:title>
25
+ </cc:Work>
26
+ </rdf:RDF>
27
+ </metadata>
28
+ <sodipodi:namedview
29
+ pagecolor="#ffffff"
30
+ bordercolor="#666666"
31
+ borderopacity="1"
32
+ objecttolerance="10"
33
+ gridtolerance="10"
34
+ guidetolerance="10"
35
+ inkscape:pageopacity="0"
36
+ inkscape:pageshadow="2"
37
+ inkscape:window-width="1672"
38
+ inkscape:window-height="1023"
39
+ id="namedview4597"
40
+ showgrid="false"
41
+ inkscape:zoom="1.2021339"
42
+ inkscape:cx="826.15833"
43
+ inkscape:cy="209.536"
44
+ inkscape:window-x="0"
45
+ inkscape:window-y="0"
46
+ inkscape:window-maximized="1"
47
+ inkscape:current-layer="svg4167" />
48
+ <title
49
+ id="title4169">Qt Svg Document</title>
50
+ <desc
51
+ id="desc4171">Generated with Qt</desc>
52
+ <defs
53
+ id="defs4173">
54
+ <inkscape:perspective
55
+ sodipodi:type="inkscape:persp3d"
56
+ inkscape:vp_x="0 : 225.62538 : 1"
57
+ inkscape:vp_y="0 : 1000 : 0"
58
+ inkscape:vp_z="8561.2324 : 225.62538 : 1"
59
+ inkscape:persp3d-origin="4280.6162 : 150.41692 : 1"
60
+ id="perspective4601" />
61
+ <inkscape:perspective
62
+ id="perspective5356"
63
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
64
+ inkscape:vp_z="1 : 0.5 : 1"
65
+ inkscape:vp_y="0 : 1000 : 0"
66
+ inkscape:vp_x="0 : 0.5 : 1"
67
+ sodipodi:type="inkscape:persp3d" />
68
+ <inkscape:perspective
69
+ id="perspective5391"
70
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
71
+ inkscape:vp_z="1 : 0.5 : 1"
72
+ inkscape:vp_y="0 : 1000 : 0"
73
+ inkscape:vp_x="0 : 0.5 : 1"
74
+ sodipodi:type="inkscape:persp3d" />
75
+ <inkscape:perspective
76
+ id="perspective5422"
77
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
78
+ inkscape:vp_z="1 : 0.5 : 1"
79
+ inkscape:vp_y="0 : 1000 : 0"
80
+ inkscape:vp_x="0 : 0.5 : 1"
81
+ sodipodi:type="inkscape:persp3d" />
82
+ <inkscape:perspective
83
+ id="perspective6229"
84
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
85
+ inkscape:vp_z="1 : 0.5 : 1"
86
+ inkscape:vp_y="0 : 1000 : 0"
87
+ inkscape:vp_x="0 : 0.5 : 1"
88
+ sodipodi:type="inkscape:persp3d" />
89
+ <inkscape:perspective
90
+ id="perspective6251"
91
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
92
+ inkscape:vp_z="1 : 0.5 : 1"
93
+ inkscape:vp_y="0 : 1000 : 0"
94
+ inkscape:vp_x="0 : 0.5 : 1"
95
+ sodipodi:type="inkscape:persp3d" />
96
+ <inkscape:perspective
97
+ id="perspective6273"
98
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
99
+ inkscape:vp_z="1 : 0.5 : 1"
100
+ inkscape:vp_y="0 : 1000 : 0"
101
+ inkscape:vp_x="0 : 0.5 : 1"
102
+ sodipodi:type="inkscape:persp3d" />
103
+ <inkscape:perspective
104
+ id="perspective6295"
105
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
106
+ inkscape:vp_z="1 : 0.5 : 1"
107
+ inkscape:vp_y="0 : 1000 : 0"
108
+ inkscape:vp_x="0 : 0.5 : 1"
109
+ sodipodi:type="inkscape:persp3d" />
110
+ <inkscape:perspective
111
+ id="perspective9373"
112
+ inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
113
+ inkscape:vp_z="1 : 0.5 : 1"
114
+ inkscape:vp_y="0 : 1000 : 0"
115
+ inkscape:vp_x="0 : 0.5 : 1"
116
+ sodipodi:type="inkscape:persp3d" />
117
+ </defs>
118
+ <path
119
+ d="m 305.82972,258.63923 -7.74932,-4.46037 6.66802,-4.41531 1.0813,8.87568"
120
+ id="path4189"
121
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79973406;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
122
+ <polyline
123
+ points="-82.7557,0 0,0 "
124
+ id="polyline4195"
125
+ style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#808080;stroke-width:1.50321531;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
126
+ transform="matrix(0.28996405,0.44933638,-0.43790495,0.29753351,303.10297,255.91248)" />
127
+ <path
128
+ d="m 180.7602,259.51316 6.1442,-6.49583 2.73898,7.51369 -8.88318,-1.01786"
129
+ id="path4201"
130
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79973465;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
131
+ <polyline
132
+ points="-170.81,0 0,0 "
133
+ id="polyline4207"
134
+ style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#808080;stroke-width:1.23056054;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
135
+ transform="matrix(-0.56977681,0.23852362,-0.20770184,-0.65432843,181.78376,259.4697)" />
136
+ <path
137
+ d="m 287.105,215.326 5.7945,-6.8096 3.12988,7.35944 -8.92438,-0.54984"
138
+ id="path4297"
139
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79973435;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
140
+ <polyline
141
+ points="-178.215,0 0,0 "
142
+ id="polyline4303"
143
+ style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#808080;stroke-width:3.17111087;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
144
+ transform="matrix(-0.22491352,0.10184367,-0.09565297,-0.23947,287.105,215.326)" />
145
+ <text
146
+ xml:space="preserve"
147
+ x="117.76881"
148
+ y="287.1925"
149
+ font-size="9"
150
+ font-weight="400"
151
+ font-style="normal"
152
+ id="text4367"
153
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">PipelineDetector::Task</text>
154
+ <g
155
+ id="g5378"
156
+ transform="translate(41.173856,-10.906982)">
157
+ <path
158
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
159
+ id="path4357"
160
+ d="m 93.36057,270.96561 45.87246,0 0,19.33827 -45.87246,0 0,-19.33827" />
161
+ <path
162
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
163
+ id="path4381"
164
+ d="m 118.696,275.54505 c 0,1.32504 -1.07416,2.3992 -2.3992,2.3992 -1.32504,0 -2.3992,-1.07416 -2.3992,-2.3992 0,-1.32504 1.07416,-2.3992 2.3992,-2.3992 1.32504,0 2.3992,1.07416 2.3992,2.3992" />
165
+ <text
166
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"
167
+ id="text4391"
168
+ font-style="normal"
169
+ font-weight="400"
170
+ font-size="9"
171
+ y="285.0687"
172
+ x="96.659775"
173
+ xml:space="preserve">leak_found</text>
174
+ </g>
175
+ <path
176
+ d="m 300.48038,258.63956 15.99468,0 0,7.99734 -15.99468,0 0,-7.99734"
177
+ id="path4453"
178
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
179
+ <text
180
+ xml:space="preserve"
181
+ x="272.05612"
182
+ y="275.25073"
183
+ font-size="9"
184
+ font-weight="400"
185
+ font-style="normal"
186
+ id="text4463"
187
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">Camera::CameraTask</text>
188
+ <text
189
+ xml:space="preserve"
190
+ x="313.95895"
191
+ y="212.44673"
192
+ font-size="9"
193
+ font-weight="400"
194
+ font-style="normal"
195
+ id="text4559"
196
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">PipelineRepair</text>
197
+ <g
198
+ id="g5378-1"
199
+ transform="translate(146.01611,-58.975948)">
200
+ <path
201
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
202
+ id="path4357-9"
203
+ d="m 93.36057,270.9656 45.87246,0 0,21.65199 -45.87246,0 0,-21.65199" />
204
+ <path
205
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
206
+ id="path4381-4"
207
+ d="m 118.696,275.54505 c 0,1.32504 -1.07416,2.3992 -2.3992,2.3992 -1.32504,0 -2.3992,-1.07416 -2.3992,-2.3992 0,-1.32504 1.07416,-2.3992 2.3992,-2.3992 1.32504,0 2.3992,1.07416 2.3992,2.3992" />
208
+ <text
209
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"
210
+ id="text4391-7"
211
+ font-style="normal"
212
+ font-weight="400"
213
+ font-size="9"
214
+ y="290.27457"
215
+ x="96.659775"
216
+ xml:space="preserve">leak_found</text>
217
+ </g>
218
+ <g
219
+ id="g5378-1-8"
220
+ transform="translate(223.45568,-87.334106)">
221
+ <path
222
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
223
+ id="path4357-9-4"
224
+ d="m 93.36057,270.9656 45.87246,0 0,21.65199 -45.87246,0 0,-21.65199" />
225
+ <path
226
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
227
+ id="path4381-4-5"
228
+ d="m 118.696,275.54505 c 0,1.32504 -1.07416,2.3992 -2.3992,2.3992 -1.32504,0 -2.3992,-1.07416 -2.3992,-2.3992 0,-1.32504 1.07416,-2.3992 2.3992,-2.3992 1.32504,0 2.3992,1.07416 2.3992,2.3992" />
229
+ <text
230
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"
231
+ id="text4391-7-0"
232
+ font-style="normal"
233
+ font-weight="400"
234
+ font-size="9"
235
+ y="290.66019"
236
+ x="96.659775"
237
+ xml:space="preserve">leak_found</text>
238
+ </g>
239
+ <polyline
240
+ points="-41,0 0,0 "
241
+ id="polyline870-3"
242
+ style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#000000;stroke-width:0.23482139;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.23482139, 0.46964277;stroke-dashoffset:0;font-family:DejaVu Sans"
243
+ transform="matrix(2.4512254,-1.0558633,0.58150454,4.4507975,259.61204,219.1917)" />
244
+ <polyline
245
+ points="-41,0 0,0 "
246
+ id="polyline870-3-6"
247
+ style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#000000;stroke-width:0.36133578;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.3613358, 0.72267159;stroke-dashoffset:0;font-family:DejaVu Sans"
248
+ transform="matrix(1.7725875,-0.61664697,0.42051117,2.5993617,337.31448,190.07738)" />
249
+ <path
250
+ d="m 259.75338,218.7237 -5.30838,7.15899 -3.60384,-7.1103 8.91222,-0.0487"
251
+ id="path864"
252
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79714501;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.797145, 1.59429;stroke-dashoffset:0;font-family:DejaVu Sans" />
253
+ <path
254
+ d="m 337.0534,190.2699 -5.30838,7.15899 -3.60384,-7.1103 8.91222,-0.0487"
255
+ id="path864-1"
256
+ style="font-size:9px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79714501;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.797145, 1.59429;stroke-dashoffset:0;font-family:DejaVu Sans" />
257
+ <text
258
+ xml:space="preserve"
259
+ x="204.50826"
260
+ y="240.30687"
261
+ font-size="9"
262
+ font-weight="400"
263
+ font-style="normal"
264
+ id="text7981"
265
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">Compositions::FeatureDetection</text>
266
+ <text
267
+ xml:space="preserve"
268
+ x="204.58138"
269
+ y="247.42001"
270
+ font-size="9"
271
+ font-weight="400"
272
+ font-style="normal"
273
+ id="text8005-0-6"
274
+ style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"><tspan
275
+ style="font-size:6px"
276
+ id="tspan8506-3">detector.is_a?(PipelineDetector::Task)</tspan></text>
277
+ </svg>