roby 0.8.0 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,192 @@
1
+ ---
2
+ title: Executing code
3
+ sort_info: 125
4
+ ---
5
+ Roby allows you to mix model-based descriptions (the tasks, the plan, ...) with
6
+ model-free code.
7
+
8
+ The first forms an __explicit__ representation of the system's activity, on which other
9
+ tools can reason. That's the interest: one can reason on it, and -- for instance
10
+ -- detect problems before they actually appear, or provide information about the
11
+ future to other systems, or ...
12
+
13
+ The second allows to iron out the "gory details". While model-oriented
14
+ development is all nice on the paper, real systems are usually not "sticking" to
15
+ the model willingly. This aspect of Roby allows to adapt the model to the real
16
+ thing.
17
+
18
+ This page will cover how you can have some code executed at runtime, and in
19
+ which conditions
20
+
21
+ Event commands and event handlers
22
+ ---------------------------------
23
+ These have already been described (see [here](tasks.html) and
24
+ [there](events.html)).
25
+
26
+ Executing an event command through a subtask (or subplan)
27
+ ---------------------------------------------------------
28
+ It is, sometimes, desired that the command of an event is realized by a task
29
+ itself, instead of simply using a code block.
30
+
31
+ At execution time, this can be done with
32
+
33
+ {coderay:: ruby}
34
+ event.achieve_with(task)
35
+ {coderay}
36
+
37
+ The corresponding task will be started, and the event is going to be emitted as
38
+ soon as the task's success event is emitted. The task can, obviously, be the
39
+ root task of a complete Roby subplan.
40
+
41
+ Polling handlers
42
+ ----------------
43
+ Poll handlers are code blocks attached to tasks. These code blocks are executed
44
+ __if the task is running__ at each of the system's execution cycle (by default,
45
+ it means once every 100ms).
46
+
47
+ A single polling block can be defined on task models:
48
+
49
+ {coderay:: ruby}
50
+ class MyTask < Roby::Task
51
+ poll do
52
+ # Code executed if any instance of class MyTask
53
+ # is running
54
+ #
55
+ # In here, +self+ refers to the task instance
56
+ end
57
+ end
58
+ {coderay}
59
+
60
+ It can also be attached to a task instance with
61
+
62
+ {coderay:: ruby}
63
+ task = MyTask.new
64
+ task.poll do
65
+ # Code executed if +task+ is running
66
+ # In here, +self+ refers to the caller object (i.e. the object that added the
67
+ # poll block). Use +task+ to refer to the task instance
68
+ end
69
+ {coderay}
70
+
71
+ While there can be only one class-level polling block, there can be more than
72
+ one instance-level polling blocks.
73
+
74
+ State machines
75
+ --------------
76
+ Users can detail a Roby task using a state machine concept. The interface described in the following
77
+ embeds the [state_machine gem](http://github.com/pluginaweek/state_machine).
78
+ When defining a Roby task the user can inject substates to the 'running' state. The initial state is 'running' by default.
79
+
80
+ With each state a poll block can be associated. This block is repeatedly called, as long as the task remain in the corresponding state.
81
+ {coderay:: ruby}
82
+ class MyTask < Roby::Task
83
+ ..
84
+ refine_running_state do
85
+ state :running do
86
+ def poll(task)
87
+ # check for success condition and then
88
+ emit :success
89
+ end
90
+ end
91
+
92
+ event :pause do
93
+ transition [:running] => :paused
94
+ end
95
+
96
+ event :resume do
97
+ transition [:paused] => :running
98
+ end
99
+
100
+ # In this simple example, 'pause' causes the task to sleep 4 second
101
+ # and then resumes
102
+ def :paused do
103
+ def poll(task)
104
+ sleep 4
105
+ task.emit :resume
106
+ end
107
+ end
108
+ end
109
+
110
+ on :pause do |ev|
111
+ # stop running actions
112
+ end
113
+ ....
114
+ end
115
+ {coderay}
116
+
117
+
118
+ Events which are defined in the 'refine_running_state' are transparently converted to roby events. This allows you to apply the usual syntax to include event actions or to emit events.
119
+ {coderay:: ruby}
120
+ on(:yourevent) do |ev|
121
+ # The event context will be a instance of StateMachine::Event
122
+ end
123
+ {coderay}
124
+
125
+
126
+ Due to the current implementation you are required to call 'emit' on the task object within the poll block.
127
+ {: .warning}
128
+
129
+ In order to define your statemachine behaviour you have to specify when to transition from one state to another (as a reaction to an event). These transitions should be specified in the event definition (alternatively in the event handler). See [state_machine documentation](https://github.com/pluginaweek/state_machine) for an detailed example on the syntax which can be used. A simple example is given in the following:
130
+
131
+ {coderay:: ruby}
132
+ event :repair do
133
+ # First transition which matches the current state applies
134
+ transition [:exception, :fatal] => :running
135
+ transition [:running] => :halted
136
+ end
137
+
138
+ event :halt do
139
+ transition all => :halted
140
+ end
141
+ {coderay}
142
+
143
+ The current state of a task can be retrieved (as usual), however the list of states will be extended given the newly introduced substates of running:
144
+ {coderay:: ruby}
145
+ mytask = MyTask.new
146
+ if mytask.current_state? == :paused
147
+ ...
148
+ end
149
+ {coderay}
150
+
151
+ A statemachine transition will be only executed if it is a valid transition, otherwise an InvalidTransition error is raised.
152
+ {: .note}
153
+
154
+
155
+
156
+
157
+ Scripts
158
+ -------
159
+ Scripts offer a more script-like (i.e. step-by-step) representation of code
160
+ blocks, in ways that can interact with other. For instance:
161
+
162
+ {coderay:: ruby}
163
+ task = MyTask.new
164
+ task.script do
165
+ # Redirect log messages to the logger on Robot
166
+ setup_logger(Robot)
167
+ # Wait for the ready event of the task's localization child to
168
+ # be emitted. It returns immediately if the event has been
169
+ # emitted in the past
170
+ wait_any(localization_child.ready_event)
171
+ # Send a log message
172
+ info "localization ready, starting to move"
173
+ # Start the movement task
174
+ poll_until(movement_child.start_event) do
175
+ movement_child.start!
176
+ end
177
+ # Wait for the target position to be reached
178
+ poll do
179
+ if State.position.x > 10
180
+ transition! # exit from the poll loop
181
+ end
182
+ end
183
+ # Emit success
184
+ execute do
185
+ task.success!
186
+ end
187
+ end
188
+ {coderay}
189
+
190
+ The commands available in scripts are detailed [in the API
191
+ documentation](../../api/Roby/TaskScripting/Script)
192
+
@@ -1,11 +1,10 @@
1
1
  ---
2
2
  title: Events
3
- sort_info: 100
4
- --- name:content pipeline:tags,markdown,blocks
3
+ sort_info: 75
4
+ ---
5
5
 
6
6
  This page will present the basic tools that allow to define and manipulate
7
- events. In {link: {path: /basics/plan_objects.html, attr:
8
- {:link_text: the overview of plan objects}}}, we saw that
7
+ events. In , we saw that
9
8
  events are two sided objects: one the one hand, they represent the
10
9
  situations the system is in (event _emission_). On the other hand, they
11
10
  represent the commands that the system accepts (event _commands_).
@@ -0,0 +1,7 @@
1
+ ---
2
+ title: Plans
3
+ sort_info: 25
4
+ ---
5
+
6
+ This section deals with describing what a Roby plan is, how it can be built,
7
+ modified. The next section will deal with how it gets executed.
@@ -1,4 +1,7 @@
1
- = Plan representation and modifications to plans
1
+ ---
2
+ title: Plan representation and modifications to plans
3
+ sort_info: 200
4
+ ---
2
5
 
3
6
  Understanding the plan model, and how to modify it, is central to the use of
4
7
  Roby. In effect, the plan *is* the information on which the controller bases
@@ -45,12 +48,11 @@ Modifying the plan therefore boils down to two things:
45
48
  or between events).
46
49
 
47
50
  The first point is done by the following methods:
48
- * Roby::Plan#discover: simply add tasks and events
51
+ * Roby::Plan#add: simply add tasks and events
49
52
  * Roby::Plan#add_mission: adds special tasks, called missions. Missions are the
50
53
  tasks the robot is supposed to execute. They are not subject to the plan's
51
54
  garbage collection, and the tasks that are useful to them are not either.
52
55
 
53
-
54
56
  To ease the plan management process, some synthetic
55
57
  operations are defined on Roby::Plan:
56
58
  * the _replacement_ operation: Roby::Plan#replace_task and
@@ -1,7 +1,8 @@
1
1
  ---
2
2
  title: Overview of Plan Objects
3
3
  sort_info: 50
4
- --- pipeline:tags,rdoc
4
+ ---
5
+
5
6
  There are two basic objects in Roby plans, both objects being equally important.
6
7
  * *events*. They are both the basic command interface and the way to follow what
7
8
  happens in and outside of the robot.
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: Querying Plans
3
+ sort_info: 200
4
+ ---
5
+
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  title: Tasks
3
- sort_info: 200
4
- --- pipeline:tags,markdown,blocks
3
+ sort_info: 100
4
+ ---
5
5
  {include_file: {filename: src/basics_shell_header.txt, escape_html: false}}
6
6
 
7
7
  Definition of Tasks
@@ -57,15 +57,12 @@ instanciated_:
57
57
  => false
58
58
  {coderay}
59
59
 
60
- Of course, it is possible to set default arguments by defining a #initialize
61
- method (like with all Ruby classes)
60
+ Arguments can have default values. In this case, the argument's value is set
61
+ automatically when the task is started. The default argument can be nil.
62
+
62
63
  {coderay:: ruby}
63
64
  >> class MoveTo
64
- ?> argument :max_speed
65
- ?> def initialize(arguments)
66
- ?> arguments[:max_speed] ||= 1
67
- ?> super(arguments)
68
- ?> end
65
+ ?> argument :max_speed, :default => 1
69
66
  ?> end
70
67
  >> task = MoveTo.new(:x => 10, :y => 20)
71
68
  >> task.max_speed
@@ -100,26 +97,29 @@ my\_task.rb file.
100
97
  puts "start event called"
101
98
  emit :start
102
99
  end
103
- event :controlable do
100
+ event :controlable do |ev|
104
101
  puts "controlable event called"
105
102
  emit :controlable
106
103
  end
107
104
  event :contingent
108
105
 
109
- on(:start) { puts "start event emitted" }
110
- on(:controlable) { puts "controlable event emitted" }
111
- on(:contingent) { puts "contingent event emitted" }
112
- on(:failed) { puts "failed event emitted" }
113
- on(:stop) { puts "stop event emitted" }
114
-
115
- event :finished, :terminal => true
116
- on(:finished) { puts "finished event emitted" }
106
+ on(:start) { |ev| puts "start event emitted" }
107
+ on(:controlable) { |ev| puts "controlable event emitted" }
108
+ on(:contingent) { |ev| puts "contingent event emitted" }
109
+ on(:failed) { |ev| puts "failed event emitted" }
110
+ on(:stop) { |ev| puts "stop event emitted" }
111
+
112
+ event :finished
113
+ forward :finished => :success
114
+ on(:finished) { |ev| puts "finished event emitted" }
117
115
  end
118
116
  {coderay}
119
117
 
120
118
  Finally, an event can be *terminal*: its emission means the end of the task's
121
- execution. __failed__ and __success__ are examples of terminal events. To declare a
122
- terminal event, one does as for the "finished" event above.
119
+ execution. __failed__ and __success__ are examples of terminal events. Events
120
+ can be declared terminal explicitely by adding :terminal => true to the event
121
+ declaration (see below) or by forwarding the event to another terminal event (as
122
+ for :finished above).
123
123
 
124
124
  Now, read that code into the ruby shell with
125
125
  {coderay:: ruby}
@@ -15,13 +15,11 @@
15
15
  # The available configuration options can be listed using the `webgen config`
16
16
  # command, for example: `webgen config sourcehandler` will list all options starting
17
17
  # with sourcehandler.
18
- default_processing_pipeline:
19
- Page: rdoc,tags,blocks
20
-
21
-
22
18
  default_meta_info:
23
19
  Webgen::SourceHandler::Page:
24
20
  in_menu: true
21
+ link:
22
+ css: /style_screen.css
25
23
 
26
24
  tag.menu.nested: false
27
25
 
@@ -32,3 +30,8 @@ rdoclinks.base_module: Roby
32
30
 
33
31
  tag.coderay.line_numbers: false
34
32
  tag.coderay.lang: ruby
33
+
34
+ contentprocessor.kramdown.options:
35
+ :entity_output: :symbolic
36
+ :coderay_line_numbers: ~
37
+
@@ -0,0 +1,29 @@
1
+ module Webgen::Tag
2
+ class Menu
3
+ alias __specific_menu_tree_for__ specific_menu_tree_for
4
+
5
+ def specific_menu_tree_for(content_node)
6
+ tree = __specific_menu_tree_for__(content_node)
7
+ return if !tree
8
+
9
+ tree.children.delete_if do |menu_info|
10
+ si = menu_info.node['sort_info']
11
+ next if !si
12
+
13
+ if param('tag.menu.range_start') && si < param('tag.menu.range_start')
14
+ true
15
+ elsif param('tag.menu.range_end') && si > param('tag.menu.range_end')
16
+ true
17
+ else
18
+ false
19
+ end
20
+ end
21
+ tree
22
+ end
23
+ end
24
+ end
25
+
26
+ config = Webgen::WebsiteAccess.website.config
27
+ config.tag.menu.range_start nil, mandatory: false
28
+ config.tag.menu.range_end nil, mandatory: false
29
+
@@ -8,7 +8,13 @@
8
8
  # The +config+ variable below can be used to access the Webgen::Configuration object for the current
9
9
  # website.
10
10
  config = Webgen::WebsiteAccess.website.config
11
+ config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/autoproj_bootstrap'
12
+ config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/manifest.xml'
13
+ config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/*.svg'
14
+ config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/*.pdf'
15
+ config['sourcehandler.patterns']['Webgen::SourceHandler::Copy'] << '**/*.rb'
11
16
 
12
17
  $LOAD_PATH.unshift File.expand_path('..', File.dirname(__FILE__))
13
18
  require 'ext/rdoc_links'
14
19
  require 'ext/previous_next'
20
+ require 'ext/extended_menu'
@@ -19,15 +19,16 @@ def call(tag, body, context)
19
19
  path[-1] += ".html"
20
20
  url = "#{param('rdoclinks.base_url')}/#{path.join("/")}"
21
21
 
22
- "<a href=\"#{context.ref_node.route_to(url)}\">#{param('rdoclinks.name')}</a>"
22
+ "<a href=\"#{context.ref_node.route_to(url)}\">#{param('rdoclinks.text') || param('rdoclinks.name')}</a>"
23
23
  end
24
24
  end
25
25
 
26
26
  config = Webgen::WebsiteAccess.website.config
27
- config.rdoclinks.name "", :mandatory => 'default'
28
- config.rdoclinks.base_webgen "", :mandatory => false
29
- config.rdoclinks.base_url "", :mandatory => false
30
- config.rdoclinks.base_module nil, :mandatory => false
31
- config.rdoclinks.full_name false, :mandatory => false
27
+ config.rdoclinks.name "", mandatory: 'default'
28
+ config.rdoclinks.base_webgen "", mandatory: false
29
+ config.rdoclinks.base_url "", mandatory: false
30
+ config.rdoclinks.base_module nil, mandatory: false
31
+ config.rdoclinks.full_name false, mandatory: false
32
+ config.rdoclinks.text nil, mandatory: false
32
33
  config['contentprocessor.tags.map']['rdoc_class'] = 'RdocLinks'
33
34
 
@@ -0,0 +1,5 @@
1
+ ---
2
+ title: Tracking History
3
+ sort_info: 40
4
+ draft: true
5
+ ---
@@ -0,0 +1,11 @@
1
+ ---
2
+ title: Advanced Concepts
3
+ sort_info: 0
4
+ ---
5
+ This section will present some of the more advanced Roby concepts. It assumes
6
+ that you have a good understanding of the basics of Roby, namely that you have
7
+ read the [concepts](../concepts) section and followed the
8
+ [tutorial](../tutorial).
9
+
10
+ It is a bit a list of things, but some of them will refer to others for a better
11
+ understanding. Have a look on the left menu for the different topics.
@@ -0,0 +1,83 @@
1
+ ---
2
+ title: Recognizing patterns in plans
3
+ sort_info: 20
4
+ ---
5
+
6
+ Plan Queries and Task Matchers {#plan-queries}
7
+ -----------------------------
8
+ Roby plan structure is semantically very rich: it allows to very finely
9
+ represent the relationships that tasks and events have with each other. In
10
+ principle, one could use __plan patterns__ to recognize situations or specific
11
+ behaviours in a plan (and act upon it).
12
+
13
+ Defining a pattern in the plan and testing for it is done by task matchers
14
+ ({rdoc_class: TaskMatcher}). Task matchers are objects that allow to test
15
+ whether a certain task object match some criteria. The task matchers are
16
+ created by calling #match on the type of tasks that we want to match. For
17
+ instance, to create a match object for running Localization tasks, one would do
18
+
19
+ {coderay:: ruby}
20
+ matcher = Localization.match.running
21
+ {coderay}
22
+
23
+ One can also match the task's surroundings
24
+
25
+ {coderay:: ruby}
26
+ matcher = MoveTo.match.with_child(Localization.match.running).pending
27
+ {coderay}
28
+
29
+ An extension of task matchers are plan queries. Plan queries are ways to
30
+ enumerate all tasks, in a plan, that match a given task match object. The big
31
+ difference with simply enumerating all tasks is that, for some of the match
32
+ predicates, queries are O(1) instead of O(n), namely:
33
+
34
+ * task model
35
+ * task state (running, pending, finished)
36
+
37
+ For instance, to match all running tasks that fullfill the MoveTo model:
38
+
39
+ {coderay:: ruby}
40
+ set = plan.find_tasks(MoveTo).
41
+ running
42
+ set.each do |task|
43
+ pp task
44
+ end
45
+ {coderay}
46
+
47
+ To match all tasks that fullfill the MoveTo model and have a pending (not yet
48
+ running) child that fullfill the Localization model
49
+
50
+ {coderay:: ruby}
51
+ plan.find_tasks(MoveTo).
52
+ running.
53
+ with_child(Localization.match.pending)
54
+ {coderay}
55
+
56
+ Event Predicates {#event-predicates}
57
+ ----------------
58
+ Event predicates (or, in full, unbounded event predicates) are a tool that
59
+ allows to decide whether the history of a certain task matches a pattern or not.
60
+ The event predicate being the representation of that pattern.
61
+
62
+ They are created from symbols (which are the names of the events that should be
63
+ matched). For instance:
64
+
65
+ {coderay:: ruby}
66
+ :start.followed_by(:blocked)
67
+ {coderay}
68
+
69
+ will return an instance of {rdoc_class: EventConstraints::UnboundTaskPredicate}
70
+ or of one of its subclasses that can then be evaluated on a task. See
71
+ {rdoc_class: EventConstraints::UnboundPredicateSupport} for the list of methods
72
+ available on symbols and {rdoc_class: EventConstraints::UnboundTaskPredicate}
73
+ for the predicate interface, which allows to logically combine predicates with
74
+ each other.
75
+
76
+ One very important aspects of these predicates is the ability to say whether the
77
+ predicate may change its value in the future or not
78
+ (UnboundTaskPredicate#static?). This is done through the notion of event
79
+ unreachability. Moreover, the predicates can give an __explanation__ of why they
80
+ have the value they have and/or why they won't change value anymore. This
81
+ explanation is formed as a set of events, a set of non-emitted events (i.e.
82
+ generators that should have emitted an event and did not) and a set of
83
+ unreachable events.