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
@@ -1,11 +0,0 @@
1
- ---
2
- title: Introduction
3
- sort_info: 0
4
- --- name:content pipeline:tags,markdown,blocks
5
- This section will present the basics of plan management using Roby. You will
6
- learn the following things:
7
- * the two core objects used in Roby to represent the robot's actions
8
- * what is a Roby application and how create one
9
- * how it is possible to interact with a running Roby application
10
- * how to build complex actions from simple ones
11
-
@@ -1,203 +0,0 @@
1
- ---
2
- title: Using Plan Display
3
- sort_info: 600
4
- --- pipeline:tags,markdown
5
-
6
- What we will see in this page is how to trace the execution flow (the flow of
7
- events), and understand a bit more how the plans you will build are actually
8
- executed by the system. We will re-use the planned\_move planning action we just
9
- built.
10
-
11
- Getting a log file
12
- ------------------
13
-
14
- Plan execution logs are expensive from a CPU point of view, so they are disabled
15
- by default. Enable them back by editing config/app.yml and uncomment
16
- "events: true" around line 23.
17
-
18
- Now, run again the controller
19
-
20
- # scripts/run goForward
21
-
22
- and in the shell, do
23
-
24
- >> planned_move! :x => 10, :y => 10
25
- => MoveTo{goal => Vector3D(x=10.000000,y=10.000000,z=0.000000)}:0x4840c8d8[]
26
- >>
27
- !task MoveTo{goal => Vector3D(x=10.000000,y=10.000000,z=0.000000)}:0x4840c8d8[] finished successfully
28
-
29
- Finally, let's save the log files for further analysis (otherwise, one could
30
- destroy them by restarting the controller).
31
-
32
- # scripts/results planned_move
33
- moving /home/doudou/dev/first_app/log to /home/doudou/dev/roby-tutorials/results/20080502-planned_move
34
-
35
- "scripts/results" copies all files in "log/" into a subdirectory
36
- of the result dir (by default APP\_DIR/results, but can be changed in
37
- "config/app.yml"). The target directory name is generated following a pattern of
38
- "current\_date-name\_provided\_on\_command\_line".
39
-
40
- Displaying the log file
41
- -----------------------
42
- Go in the directory where the results are (see <tt>scripts/results</tt> output).
43
- On my machine, the command would look like this:
44
-
45
- $ cd /home/doudou/dev/roby-tutorials/results/20080502-planned_move
46
- $ ls
47
- goForward-events.log
48
- goForward-index.log
49
-
50
- If you look into it, two PathPlan files are present: <tt>PathPlan-events.log</tt> and
51
- "PathPlan-index.log". The first one includes a trace of everything that
52
- happens in the Roby controller which has been traced. The second one can
53
- actually be generated from data in the first one. It is simply used to speed up
54
- operations.
55
-
56
- The data in the event log can be used to display the plan operations in a GUI.
57
- For that, you need to have installed [Ruby/Qt4](http://korundum.rubyforge.org), as
58
- the GUI is written using Qt and Ruby.
59
-
60
- To start it, simply do the following in the directory of the log files:
61
-
62
- $ roby-log replay goForward
63
-
64
- The following window should appear:
65
-
66
- ![](log_replay/roby_log_main_window.png)
67
-
68
- This window is separated in three:
69
-
70
- * the toplevel part ("Data sources") is the list of data sources defined for
71
- this project. It is for instance possible to have a synchronized display of
72
- the logs of two different Roby controllers -- for multi-robot setup.
73
- * the second part ("Displays") is the set of displays defined. More about that later.
74
- * the third part ("Play") is the replay controls: play, fast forward, position, ...
75
-
76
- Right now, we will be looking at the plan structure and execution trace. The
77
- "Relations" display is designed for that. Let's add one by clicking on the
78
- "Add" button just next to the display type combo. The configuration options
79
- appear (including the data source associated with the display), and a new
80
- window:
81
-
82
- ![](log_replay/roby_log_relation_window.png)
83
-
84
- This display will show two things: the task structure (i.e. how tasks are
85
- related to each other) and the event propagation (i.e. how events call and/or
86
- emit each other). The set of task relations to display has to be selected on
87
- the configuration part of the relation display, including the colors for each
88
- displayed relation. For our purposes, we only need the "Hierarchy" and the
89
- "PlannedBy" relations, so check them in the display configuration, as it is done
90
- one the image above.
91
-
92
- Moreover,
93
- * go in the "View" menu of the relation display and uncheck "Hide
94
- finalized", that will be useful for later.
95
- * go in the "Task labels" and uncheck "Ownership". Ownership is only useful for
96
- multi-robot plans.
97
-
98
- **Very important note** your own display may not look exactly like the ones
99
- displayed here. Some of the features showed here (like threaded planning) are
100
- asynchronous and as such the exact displays depend on the execution timing. Note
101
- that, even though it is the case, the robot _behaviour_ remains unchanged.
102
- {.warning}
103
-
104
- Startup of the "planned\_move!" action
105
- ---------------------------------------
106
-
107
- Let's get to the first task-related events. Click on the 'Step' button until
108
- something appears on the display. It should look like the next image:
109
-
110
- ![](log_replay/goForward_1.png)
111
-
112
- The displays shows two plans (black boxes). The left one is the plan as it is
113
- being executed. The right one is called a _transaction_ and allows to build a
114
- new plan without interfering with the execution. You don't really need to know
115
- how it works, only that it does the job. The task description includes the task
116
- model and the task owners (which is only useful in multi-robot setup). The
117
- _Task labels_ menu allows to customize that.
118
-
119
- The left part is a representation of the plan built when the planned\_move!
120
- command is entered in the shell. It consists of a generic task (Roby::Task)
121
- which is planned\_by a Roby::PlanningTask. This is how Roby handles action
122
- requests from the shell: (i) it searches a planner defined for that robot with
123
- the specific action and (ii) generates the plan representing the planning
124
- process _in a separate thread_.
125
-
126
- Once that initial plan has been built, the Roby::PlanningTask task has been
127
- started. The various cases of event propagation are represented in different
128
- ways, based on whether or not the event is controlable or contingent, if it has been
129
- called and/or emitted. Finally, two different arrow representations are used for
130
- signalling (plain) and forwarding (dotted):
131
-
132
- ![](log_replay/roby_replay_event_representation.png)
133
-
134
- A note about propagation representation: it would be useless to represent all
135
- the event propagation from the beginning of the execution to the current point.
136
- The display therefore represents only the propagations that have taken place
137
- _since the last display point_. It means that, if you go forward 10
138
- seconds, it will display 10 seconds worth of propagation. In our case, we
139
- displayed only the first execution cycle and we see that, in this cycle, the
140
- planning task "start" event has been called and emitted.
141
-
142
- The MoveTo plan
143
- ---------------
144
-
145
- Advance again using 'Step' until the display looks like this:
146
-
147
- ![](log_replay/goForward_2.png)
148
-
149
- The MoveTo action has been planned and the executed plan is modified to reflect
150
- that. The MoveTo action itself is then started, and that is propagated to the
151
- ComputePath 'start' event through the signalling relation that was established
152
- in planned\_move.
153
-
154
- Next execution step gives us the following:
155
-
156
- ![](log_replay/goForward_3.png)
157
-
158
- ComputePath emitted its "success" event. We see here that the emission of the
159
- "success" event of that task does not mean 'the plan modification has just took
160
- place' but instead that 'it has taken place some time earlier'.
161
-
162
- The ComputePath task has also finished generating the path, which is why
163
- ExecutePath is started. Here, the dotted lines between the events
164
- represent a forwarding relation between them, while the plain lines
165
- represent signal relations.
166
-
167
- Finally, light grey here represents tasks that have finished with the "success"
168
- event. Tasks whose "failed" event has been emitted are represented in red.
169
-
170
- To finish: the garbage collection process
171
- -----------------------------------------
172
-
173
- Advance a few steps further, until something more happens. You should see
174
- something like this:
175
-
176
- ![](log_replay/goForward_5.png)
177
-
178
- Here, ExecutePath has finished its execution with success and MoveTo is therefore
179
- finished as well -- per the forwarding relation between those two events. Note
180
- that the tasks are now in a dark grey instead than a light one.
181
-
182
- The mission of the robot, MoveTo, is therefore finished. From the plan
183
- management point of view, it makes keeping a reference to it useless. In the
184
- same way, the tasks that were in the plan for the purpose of fullfilling that
185
- mission are rendered useless as well and can also be removed. The process which
186
- removes those tasks is called the <i>garbage collection process</i> and runs at
187
- the end of the execution cycle.
188
-
189
- The general idea is to kill and remove from the plan the tasks that are not
190
- useful for the achievement of the robot's missions. The "important" tasks for
191
- the robot is defined by the set of its missions. These are added by calling
192
- Plan#add\_mission instead of the Plan#add that we were using until now. Note
193
- that, by calling the action through the shell, #add\_mission has been called
194
- automatically by the framework.
195
-
196
- Then, the task relations are used to determine what are the tasks, in the plan,
197
- which are actually useful for those "important" tasks. This is based on the
198
- convention that if a <tt>a=>b</tt> relation exists, then "b" is useful for "a".
199
-
200
- The remaining tasks, i.e. the tasks that are not useful, are killed (if possible)
201
- and removed from the plan. When it is done, the task is said to be finalized and
202
- are displayed in dark grey (if they are not hidden in the View menu).
203
-
@@ -1,102 +0,0 @@
1
- ---
2
- title: Interactive Shell
3
- sort_info: 400
4
- --- pipeline:tags,markdown,blocks
5
-
6
- As we saw earlier, the execution of Roby applications is done by an _event
7
- loop_. The reactivity of the supervision system obviously depend on the
8
- non-interruption of that event loop. Therefore, in a Roby application, the user
9
- runs a remote shell that is used to send specific commands to the Roby
10
- application itself.
11
-
12
- {include_file: {filename: src/basics_shell_header.txt, escape_html: false}}
13
-
14
- Planners
15
- --------
16
- Right now, we saw two different places where code is stored:
17
- 1. the tasks/ files, where task models are defined
18
- 2. the controllers/ files, which is the startup code for the application
19
-
20
- What we will see in this section is a third component: the **planners**. These
21
- planners define the aggregate actions that the robot knows about. As we will see
22
- later, they also are the user interface of the robot.
23
-
24
- Exporting actions to the user's shell
25
- -------------------------------------
26
-
27
- Edit planners/goForward/main.rb and edit so that it looks like this:
28
-
29
- {coderay:: ruby}
30
- require 'planners/main'
31
- class MainPlanner
32
- method(:move) do
33
- GoForward.new :speed => arguments[:speed]
34
- end
35
- end
36
- {coderay}
37
-
38
- That exports a very simple action to the user's shell. Now, we can try out the
39
- Roby shell. First, remove the last three lines in controllers/goForward.rb so
40
- that it looks like this:
41
-
42
- {coderay:: ruby}
43
- # Define the original value of x
44
- State.pos.x = 0
45
-
46
- # Will display the value of x every 1 second
47
- Roby.every(1) do
48
- puts State.pos.x
49
- end
50
- {coderay}
51
-
52
- Now, start the roby application in one console:
53
-
54
- $ scripts/run goForward
55
- 44848:44:51.498 (Roby) GC.enable does not accept an argument. GC will not be controlled by Roby
56
- 344848:44:51.581 (goForward) loaded Roby 0.7.90 on ruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc-linux]
57
- 344848:44:51.603 (goForward) loading controller file /home/doudou/dev/roby-tutorials/controllers/goForward.rb
58
- 344848:44:51.605 (goForward) done initialization
59
- 0
60
- 0
61
-
62
- Finally, start the shell in another console:
63
-
64
- $ scripts/shell
65
- localhost:48902 >
66
-
67
- The new prompt you get is a Ruby prompt (i.e. you should type Ruby code in it).
68
- Some special commands are available to interact with the Roby controller. For
69
- instance:
70
-
71
- {coderay:: ruby}
72
- > actions
73
- => [move]
74
- {coderay}
75
-
76
- The 'action' command lists the available planning methods that are exported
77
- through the MainPlanner class. Let's try it (**notice the '!' at the end of
78
- move!**):
79
-
80
- {coderay:: ruby}
81
- > task = move! :speed => 1
82
- => GoForward{speed => 1}:0x48410aa8[]
83
- > task.running?
84
- => true
85
- > task.stop!
86
- => []
87
- !task GoForward{speed => 1}:0x4850ddb0[] failed
88
- !task GoForward{speed => 1}:0x4850ddb0[] stopped by user request
89
- > task.running?
90
- => false
91
- {coderay}
92
-
93
- The new task is running just after it has been added ! In Roby, a new task, when
94
- added in the main plan, becomes eligible for _scheduling_, i.e. a special
95
- component tries to find the best time to start it (which, in our case, is
96
- "now"). We'll see more about this later.
97
- {: .warning}
98
-
99
- You can see that the action method returns the task that the planning method has
100
- returned. Even though we are on a remote shell, the returned task object
101
- supports sending commands, checking its status, emitting events, ...
102
-
@@ -1,319 +0,0 @@
1
- /* andreas03 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use for any purpose as long as the proper credits are given to the original author.
2
-
3
- Version: 1.2
4
- (Nov 28, 2005)
5
-
6
- Screen layout: */
7
-
8
- body{
9
- margin:0;
10
- padding:30px 0;
11
- font:76% tahoma,verdana,sans-serif;
12
- background:#047 url(images/bodybg.png) repeat-x fixed;
13
- color:#222;
14
- }
15
-
16
- #thetop{
17
- margin:0;
18
- }
19
-
20
- #container{
21
- width:720px;
22
- margin:0 auto;
23
- padding:20px 20px 0 20px;
24
- background:#fff url(images/contbg.png) no-repeat;
25
- color:#222;
26
- }
27
-
28
- a{
29
- text-decoration:none;
30
- background-color:inherit;
31
- color:#26c;
32
- }
33
-
34
- a:hover {
35
- text-decoration:underline;
36
- }
37
-
38
- a img{
39
- border:0;
40
- }
41
-
42
- p{
43
- margin:0 0 15px 0;
44
- line-height:1.5em;
45
- }
46
-
47
- #main p,#sidebar p{
48
- padding:0 0 0 10px;
49
- }
50
-
51
- #logo{
52
- float:left;
53
- width:240px;
54
- margin:0 20px 0 0;
55
- padding:0 0 25px 0;
56
- background:#eee;
57
- border:4px solid #dde;
58
- text-align:center;
59
- color:#555;
60
- overflow:auto;
61
- }
62
-
63
- #logo h1{
64
- margin:50px 5px 1px 5px;
65
- letter-spacing:-3px;
66
- }
67
-
68
- #logo a{
69
- background-color:inherit;
70
- color:#26a;
71
- text-decoration:none;
72
- }
73
-
74
- #logo a:hover{
75
- background-color:inherit;
76
- color:#69e;
77
- }
78
-
79
- #tagline{
80
- text-align:center;
81
- font-size:1.2em;
82
- }
83
-
84
- #intro p{
85
- line-height:1.5em;
86
- }
87
-
88
- #main{
89
- float:left;
90
- width:530px;
91
- margin-right:20px;
92
- padding:0;
93
- }
94
-
95
- #main h2, .navbar {
96
- display:block;
97
- margin:30px 0 10px 0;
98
- padding:5px 0 5px 8px;
99
- background:#eee url(images/gradient2.png) repeat-x;
100
- color:#222;
101
- border-top:1px solid #ddd;
102
- border-right:1px solid #bbb;
103
- border-bottom:1px solid #bbb;
104
- border-left:1px solid #ddd;
105
- text-decoration:none;
106
- }
107
-
108
- #sidebar{
109
- width:155px;
110
- float:right;
111
- margin-top:20px;
112
- font-size:1em;
113
- line-height:1.3em;
114
- }
115
-
116
- #sidebar p, #sidebar .linklist {
117
- font-size:0.9em;
118
- }
119
-
120
- #sidebar ul.linklist {
121
- list-style-type: none;
122
- margin: 0px;
123
- padding: 5px 0px 5px 8px;
124
- }
125
-
126
- #sidebar #menu ul, #sidebar #submenu ul {
127
- list-style-type: none;
128
- margin: 0px;
129
- padding: 0px;
130
- }
131
-
132
- ul li ul li {
133
- margin-left: -2em;
134
- padding-left: 0;
135
- }
136
-
137
- #sidebar #menu li, .sidelink, #sidebar #submenu li, #sidebar #submenu li {
138
- display:block;
139
- width:140px;
140
- margin:3px 10px 2px 0;
141
- padding:5px 0 5px 8px;
142
- font-size:1.1em;
143
- font-weight:bold;
144
- text-align:left;
145
- background:#eee url(images/gradient1.png) repeat-x;
146
- color:#26c;
147
- border-top:1px solid #ddd;
148
- border-right:1px solid #bbb;
149
- border-bottom:1px solid #bbb;
150
- border-left:1px solid #ddd;
151
- }
152
-
153
- #sidebar #menu a:hover {
154
- text-decoration: none;
155
- }
156
-
157
- #sidebar #menu li.webgen-menu-submenu-inhierarchy, .menuheader {
158
- background:#fff url(images/gradient2.png) repeat-x;
159
- color:#222;
160
- border-top:1px solid #ddd;
161
- border-right:1px solid #888;
162
- border-bottom:1px solid #888;
163
- border-left:1px solid #ddd;
164
- text-decoration:none;
165
- }
166
-
167
- #sidebar #menu li.webgen-menu-item-selected {
168
- color: #222;
169
- }
170
- #sidebar #menu li.webgen-menu-item-selected:hover {
171
- color: #222;
172
- background: none;
173
- border: none;
174
- }
175
-
176
- .menuheader {
177
- font-size: 1.4em;
178
- text-align: center;
179
- margin-bottom: .4em;
180
- }
181
-
182
- #sidebar #submenu li.webgen-menu-item-selected, #sidebar #submenu li:hover {
183
- background: none;
184
- font-size: 1em:
185
- }
186
-
187
- #sidebar #menu li ul li, #sidebar #submenu li ul li, #sidebar #submenu li ul li.webgen-menu-item-selected {
188
- display:block;
189
- width:130px;
190
- margin:3px 10px 2px 0;
191
- padding:0px 0 0px 8px;
192
- font-size:0.8em;
193
- font-weight:bold;
194
- text-align:left;
195
- background: none;
196
- color:#26c;
197
- border: none;
198
- }
199
-
200
-
201
- #footer{
202
- margin:0 auto 20px auto;
203
- width:760px;
204
- background:#fff url(images/footerbg.png) bottom left no-repeat;
205
- padding:0 0 5px 0;
206
- font-size:0.9em;
207
- color:#888;
208
- text-align:center;
209
- }
210
-
211
- h1,h2,h3,h4{
212
- margin:0 0 10px 0;
213
- font-weight:normal;
214
- }
215
-
216
- h1{
217
- font-size:2.8em;
218
- margin-top: 5px;
219
- margin-bottom: 5px;
220
- }
221
-
222
- h2{
223
- margin:0 0 4px 0;
224
- font-size:1.8em;
225
- }
226
-
227
- h3{
228
- margin:20px 0 8px 0;
229
- font-size:1.4em;
230
- }
231
-
232
- h4{
233
- margin:10px 0 5px 0;
234
- font-size:1.2em;
235
- }
236
-
237
- .clear{
238
- clear:both;
239
- margin:0;
240
- }
241
-
242
- .right{
243
- text-align:right;
244
- }
245
-
246
- .internallink{
247
- font-size:0.9em;
248
- text-align:center;
249
- }
250
-
251
- .block{
252
- padding:20px;
253
- background:#eee;
254
- color:#222;
255
- border:2px solid #ddd;
256
- }
257
-
258
- .warning{
259
- padding:20px;
260
- background:#fbb;
261
- color:#222;
262
- border:2px solid #eaa;
263
- margin-top: 3em;
264
- margin-bottom: 3em;
265
- margin-left: 2em;
266
- margin-right: 2em;
267
-
268
- }
269
-
270
- .credit{
271
- color:#888;
272
- background-color:inherit;
273
- }
274
-
275
- .hide{
276
- display:none;
277
- }
278
-
279
- pre .code{
280
- margin-left: 2.5em;
281
- }
282
- pre {
283
- margin-left: 2.5em;
284
- }
285
-
286
- /* Original open source design by Andreas Viklund - http://andreasviklund.com
287
- Released through OSWD.org */
288
-
289
- .navbar {
290
- padding-left: 1em;
291
- padding-right: 1em;
292
- padding-bottom: 2em;
293
- }
294
- .previous .next {
295
- margin: 1em;
296
- display: inline;
297
- font-size: 1.2em;
298
- }
299
- .previous {
300
- float: left;
301
- }
302
- .next {
303
- float: right;
304
- }
305
-
306
- .fullfigure {
307
- text-align: center;
308
- }
309
- .figurecaption {
310
- text-align: center;
311
- margin-top: -1em;
312
- margin-bottom: 4em;
313
- margin-left: 10%;
314
- margin-right: 10%;
315
- background:#eee;
316
- color:#222;
317
- border:2px solid #ddd;
318
- }
319
-