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.
- checksums.yaml +7 -0
- data/.deep-cover.rb +3 -0
- data/.gitattributes +1 -0
- data/.gitignore +24 -0
- data/.simplecov +10 -0
- data/.travis.yml +17 -0
- data/.yardopts +4 -0
- data/Gemfile +15 -0
- data/README.md +11 -0
- data/Rakefile +47 -177
- data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
- data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
- data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
- data/benchmark/{genom.rb → attic/genom.rb} +0 -0
- data/benchmark/attic/transactions.rb +62 -0
- data/benchmark/plan_basic_operations.rb +28 -0
- data/benchmark/relations/graph.rb +63 -0
- data/benchmark/ruby/identity.rb +18 -0
- data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
- data/benchmark/ruby/yield_vs_block.rb +35 -0
- data/benchmark/run +5 -0
- data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
- data/benchmark/transactions.rb +99 -51
- data/bin/roby +38 -197
- data/bin/roby-display +14 -0
- data/bin/roby-log +3 -176
- data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
- data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
- data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
- data/doc/guide/{src → attic}/abstraction/index.page +1 -1
- data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
- data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
- data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
- data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
- data/doc/guide/attic/cycle/error_handling.page +98 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
- data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
- data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
- data/doc/guide/{src → attic}/cycle/index.page +1 -1
- data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
- data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
- data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
- data/doc/guide/attic/plans/building_plans.page +89 -0
- data/doc/guide/attic/plans/code.page +192 -0
- data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
- data/doc/guide/attic/plans/index.page +7 -0
- data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
- data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
- data/doc/guide/attic/plans/querying_plans.page +5 -0
- data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
- data/doc/guide/config.yaml +7 -4
- data/doc/guide/ext/extended_menu.rb +29 -0
- data/doc/guide/ext/init.rb +6 -0
- data/doc/guide/ext/rdoc_links.rb +7 -6
- data/doc/guide/src/advanced_concepts/history.page +5 -0
- data/doc/guide/src/advanced_concepts/index.page +11 -0
- data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
- data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
- data/doc/guide/src/advanced_concepts/transactions.page +5 -0
- data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
- data/doc/guide/src/base.template +96 -0
- data/doc/guide/src/basics_shell_header.txt +5 -7
- data/doc/guide/src/building/action_coordination.page +96 -0
- data/doc/guide/src/building/actions.page +124 -0
- data/doc/guide/src/building/file_layout.page +71 -0
- data/doc/guide/src/building/index.page +50 -0
- data/doc/guide/src/building/patterns.page +86 -0
- data/doc/guide/src/building/patterns_forwarding.png +0 -0
- data/doc/guide/src/building/patterns_forwarding.svg +277 -0
- data/doc/guide/src/building/runtime.page +95 -0
- data/doc/guide/src/building/task_models.page +94 -0
- data/doc/guide/src/building/tasks.page +284 -0
- data/doc/guide/src/concepts/error_handling.page +100 -0
- data/doc/guide/src/concepts/exception_propagation.png +0 -0
- data/doc/guide/src/concepts/exception_propagation.svg +445 -0
- data/doc/guide/src/concepts/execution.page +85 -0
- data/doc/guide/src/concepts/execution.png +0 -0
- data/doc/guide/src/concepts/execution.svg +573 -0
- data/doc/guide/src/concepts/execution_cycle.png +0 -0
- data/doc/guide/src/concepts/garbage_collection.page +57 -0
- data/doc/guide/src/concepts/index.page +27 -0
- data/doc/guide/src/concepts/plans.page +101 -0
- data/doc/guide/src/concepts/policy.page +31 -0
- data/doc/guide/src/concepts/reactor.page +61 -0
- data/doc/guide/src/concepts/simple_plan_example.png +0 -0
- data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
- data/doc/guide/src/default.template +9 -74
- data/doc/guide/src/event_relations/forward.page +71 -0
- data/doc/guide/src/event_relations/index.page +12 -0
- data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
- data/doc/guide/src/event_relations/signal.page +55 -0
- data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
- data/doc/guide/src/htmldoc.metainfo +21 -8
- data/doc/guide/src/index.page +8 -3
- data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
- data/doc/guide/src/installation/publications.page +14 -0
- data/doc/guide/src/{introduction → installation}/videos.page +14 -7
- data/doc/guide/src/interacting/index.page +16 -0
- data/doc/guide/src/interacting/run.page +33 -0
- data/doc/guide/src/interacting/shell.page +95 -0
- data/doc/guide/src/plugins/creating_plugins.page +72 -0
- data/doc/guide/src/plugins/index.page +27 -5
- data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
- data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
- data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
- data/doc/guide/src/style_screen.css +687 -0
- data/doc/guide/src/task_relations/dependency.page +107 -0
- data/doc/guide/src/task_relations/executed_by.page +77 -0
- data/doc/guide/src/task_relations/index.page +12 -0
- data/doc/guide/src/task_relations/new_relations.page +119 -0
- data/doc/guide/src/task_relations/planned_by.page +46 -0
- data/doc/guide/src/tutorial/app.page +117 -0
- data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
- data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
- data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
- data/doc/guide/src/tutorial/events.page +195 -0
- data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
- data/doc/guide/src/tutorial/index.page +13 -0
- data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
- data/doc/guide/src/tutorial/relations_display.page +153 -0
- data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
- data/doc/guide/src/tutorial/shell.page +121 -0
- data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
- data/doc/guide/src/tutorial/tasks.page +374 -0
- data/lib/roby.rb +102 -47
- data/lib/roby/actions.rb +17 -0
- data/lib/roby/actions/action.rb +80 -0
- data/lib/roby/actions/interface.rb +45 -0
- data/lib/roby/actions/library.rb +23 -0
- data/lib/roby/actions/models/action.rb +224 -0
- data/lib/roby/actions/models/coordination_action.rb +58 -0
- data/lib/roby/actions/models/interface.rb +22 -0
- data/lib/roby/actions/models/interface_base.rb +294 -0
- data/lib/roby/actions/models/library.rb +12 -0
- data/lib/roby/actions/models/method_action.rb +90 -0
- data/lib/roby/actions/task.rb +114 -0
- data/lib/roby/and_generator.rb +125 -0
- data/lib/roby/app.rb +2795 -829
- data/lib/roby/app/autotest_console_reporter.rb +138 -0
- data/lib/roby/app/base.rb +21 -0
- data/lib/roby/app/cucumber.rb +2 -0
- data/lib/roby/app/cucumber/controller.rb +439 -0
- data/lib/roby/app/cucumber/helpers.rb +280 -0
- data/lib/roby/app/cucumber/world.rb +32 -0
- data/lib/roby/app/debug.rb +136 -0
- data/lib/roby/app/gen.rb +2 -0
- data/lib/roby/app/rake.rb +178 -38
- data/lib/roby/app/robot_config.rb +9 -0
- data/lib/roby/app/robot_names.rb +115 -0
- data/lib/roby/app/run.rb +3 -2
- data/lib/roby/app/scripts.rb +72 -0
- data/lib/roby/app/scripts/autotest.rb +173 -0
- data/lib/roby/app/scripts/display.rb +2 -0
- data/lib/roby/app/scripts/restart.rb +52 -0
- data/lib/roby/app/scripts/results.rb +17 -8
- data/lib/roby/app/scripts/run.rb +155 -24
- data/lib/roby/app/scripts/shell.rb +147 -62
- data/lib/roby/app/scripts/test.rb +107 -22
- data/lib/roby/app/test_reporter.rb +74 -0
- data/lib/roby/app/test_server.rb +159 -0
- data/lib/roby/app/vagrant.rb +47 -0
- data/lib/roby/backports.rb +16 -0
- data/lib/roby/cli/display.rb +190 -0
- data/lib/roby/cli/exceptions.rb +17 -0
- data/lib/roby/cli/gen/actions/class.rb +5 -0
- data/lib/roby/cli/gen/actions/test.rb +6 -0
- data/lib/roby/cli/gen/app/.yardopts +6 -0
- data/lib/roby/cli/gen/app/README.md +28 -0
- data/lib/roby/cli/gen/app/Rakefile +15 -0
- data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
- data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
- data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
- data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
- data/lib/roby/cli/gen/class/class.rb +6 -0
- data/lib/roby/cli/gen/class/test.rb +7 -0
- data/lib/roby/cli/gen/helpers.rb +203 -0
- data/lib/roby/cli/gen/module/module.rb +5 -0
- data/lib/roby/cli/gen/module/test.rb +6 -0
- data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
- data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
- data/lib/roby/cli/gen/task/class.rb +44 -0
- data/lib/roby/cli/gen/task/test.rb +6 -0
- data/lib/roby/cli/gen_main.rb +120 -0
- data/lib/roby/cli/log.rb +276 -0
- data/lib/roby/cli/log/flamegraph.html +499 -0
- data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
- data/lib/roby/cli/main.rb +153 -0
- data/lib/roby/coordination.rb +60 -0
- data/lib/roby/coordination/action_script.rb +25 -0
- data/lib/roby/coordination/action_state_machine.rb +125 -0
- data/lib/roby/coordination/actions.rb +106 -0
- data/lib/roby/coordination/base.rb +145 -0
- data/lib/roby/coordination/calculus.rb +40 -0
- data/lib/roby/coordination/child.rb +28 -0
- data/lib/roby/coordination/event.rb +29 -0
- data/lib/roby/coordination/fault_handler.rb +25 -0
- data/lib/roby/coordination/fault_handling_task.rb +13 -0
- data/lib/roby/coordination/fault_response_table.rb +110 -0
- data/lib/roby/coordination/models/action_script.rb +64 -0
- data/lib/roby/coordination/models/action_state_machine.rb +224 -0
- data/lib/roby/coordination/models/actions.rb +191 -0
- data/lib/roby/coordination/models/arguments.rb +55 -0
- data/lib/roby/coordination/models/base.rb +176 -0
- data/lib/roby/coordination/models/capture.rb +86 -0
- data/lib/roby/coordination/models/child.rb +35 -0
- data/lib/roby/coordination/models/event.rb +41 -0
- data/lib/roby/coordination/models/exceptions.rb +42 -0
- data/lib/roby/coordination/models/fault_handler.rb +219 -0
- data/lib/roby/coordination/models/fault_response_table.rb +77 -0
- data/lib/roby/coordination/models/root.rb +22 -0
- data/lib/roby/coordination/models/script.rb +283 -0
- data/lib/roby/coordination/models/task.rb +184 -0
- data/lib/roby/coordination/models/task_from_action.rb +50 -0
- data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
- data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
- data/lib/roby/coordination/models/task_from_variable.rb +27 -0
- data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
- data/lib/roby/coordination/models/variable.rb +32 -0
- data/lib/roby/coordination/script.rb +200 -0
- data/lib/roby/coordination/script_instruction.rb +12 -0
- data/lib/roby/coordination/task.rb +45 -0
- data/lib/roby/coordination/task_base.rb +69 -0
- data/lib/roby/coordination/task_script.rb +293 -0
- data/lib/roby/coordination/task_state_machine.rb +308 -0
- data/lib/roby/decision_control.rb +33 -21
- data/lib/roby/distributed_object.rb +76 -0
- data/lib/roby/droby.rb +17 -0
- data/lib/roby/droby/droby_id.rb +6 -0
- data/lib/roby/droby/enable.rb +153 -0
- data/lib/roby/droby/event_logger.rb +189 -0
- data/lib/roby/droby/event_logging.rb +57 -0
- data/lib/roby/droby/exceptions.rb +14 -0
- data/lib/roby/droby/identifiable.rb +22 -0
- data/lib/roby/droby/logfile.rb +141 -0
- data/lib/roby/droby/logfile/client.rb +176 -0
- data/lib/roby/droby/logfile/file_format.md +97 -0
- data/lib/roby/droby/logfile/index.rb +117 -0
- data/lib/roby/droby/logfile/reader.rb +139 -0
- data/lib/roby/droby/logfile/server.rb +199 -0
- data/lib/roby/droby/logfile/writer.rb +114 -0
- data/lib/roby/droby/marshal.rb +264 -0
- data/lib/roby/droby/marshallable.rb +12 -0
- data/lib/roby/droby/null_event_logger.rb +25 -0
- data/lib/roby/droby/object_manager.rb +205 -0
- data/lib/roby/droby/peer_id.rb +6 -0
- data/lib/roby/droby/plan_rebuilder.rb +373 -0
- data/lib/roby/droby/rebuilt_plan.rb +160 -0
- data/lib/roby/droby/remote_droby_id.rb +6 -0
- data/lib/roby/droby/timepoints.rb +205 -0
- data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
- data/lib/roby/droby/timepoints_ctf.rb +125 -0
- data/lib/roby/droby/v5.rb +14 -0
- data/lib/roby/droby/v5/builtin.rb +120 -0
- data/lib/roby/droby/v5/droby_class.rb +45 -0
- data/lib/roby/droby/v5/droby_constant.rb +81 -0
- data/lib/roby/droby/v5/droby_dump.rb +1026 -0
- data/lib/roby/droby/v5/droby_id.rb +44 -0
- data/lib/roby/droby/v5/droby_model.rb +82 -0
- data/lib/roby/droby/v5/peer_id.rb +10 -0
- data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
- data/lib/roby/event.rb +79 -957
- data/lib/roby/event_constraints.rb +835 -0
- data/lib/roby/event_generator.rb +1047 -0
- data/lib/roby/event_structure/causal_link.rb +6 -0
- data/lib/roby/event_structure/forwarding.rb +6 -0
- data/lib/roby/event_structure/precedence.rb +7 -0
- data/lib/roby/event_structure/signal.rb +8 -0
- data/lib/roby/event_structure/temporal_constraints.rb +640 -0
- data/lib/roby/exceptions.rb +446 -152
- data/lib/roby/executable_plan.rb +549 -0
- data/lib/roby/execution_engine.rb +1997 -950
- data/lib/roby/filter_generator.rb +26 -0
- data/lib/roby/gui/chronicle_view.rb +225 -0
- data/lib/roby/gui/chronicle_widget.rb +925 -0
- data/lib/roby/gui/dot_id.rb +11 -0
- data/lib/roby/gui/exception_view.rb +44 -0
- data/lib/roby/gui/log_display.rb +273 -0
- data/lib/roby/gui/model_views.rb +2 -0
- data/lib/roby/gui/model_views/action_interface.rb +53 -0
- data/lib/roby/gui/model_views/task.rb +47 -0
- data/lib/roby/gui/model_views/task.rhtml +41 -0
- data/lib/roby/gui/object_info_view.rb +89 -0
- data/lib/roby/gui/plan_dot_layout.rb +427 -0
- data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
- data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
- data/lib/roby/gui/relations_view.rb +278 -0
- data/lib/roby/gui/relations_view/relations.ui +139 -0
- data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
- data/lib/roby/gui/relations_view/relations_config.rb +292 -0
- data/lib/roby/gui/relations_view/relations_view.ui +53 -0
- data/lib/roby/gui/scheduler_view.css +24 -0
- data/lib/roby/gui/scheduler_view.rb +46 -0
- data/lib/roby/gui/scheduler_view.rhtml +53 -0
- data/lib/roby/gui/stepping.rb +93 -0
- data/lib/roby/gui/stepping.ui +181 -0
- data/lib/roby/gui/styles.rb +81 -0
- data/lib/roby/gui/task_display_configuration.rb +42 -0
- data/lib/roby/gui/task_state_at.rb +38 -0
- data/lib/roby/hooks.rb +26 -0
- data/lib/roby/interface.rb +136 -469
- data/lib/roby/interface/async.rb +20 -0
- data/lib/roby/interface/async/action_monitor.rb +188 -0
- data/lib/roby/interface/async/interface.rb +498 -0
- data/lib/roby/interface/async/job_monitor.rb +213 -0
- data/lib/roby/interface/async/log.rb +238 -0
- data/lib/roby/interface/async/new_job_listener.rb +79 -0
- data/lib/roby/interface/async/ui_connector.rb +183 -0
- data/lib/roby/interface/client.rb +553 -0
- data/lib/roby/interface/command.rb +24 -0
- data/lib/roby/interface/command_argument.rb +16 -0
- data/lib/roby/interface/command_library.rb +92 -0
- data/lib/roby/interface/droby_channel.rb +174 -0
- data/lib/roby/interface/exceptions.rb +22 -0
- data/lib/roby/interface/interface.rb +655 -0
- data/lib/roby/interface/job.rb +47 -0
- data/lib/roby/interface/rest.rb +10 -0
- data/lib/roby/interface/rest/api.rb +29 -0
- data/lib/roby/interface/rest/helpers.rb +24 -0
- data/lib/roby/interface/rest/server.rb +212 -0
- data/lib/roby/interface/server.rb +154 -0
- data/lib/roby/interface/shell_client.rb +468 -0
- data/lib/roby/interface/shell_subcommand.rb +24 -0
- data/lib/roby/interface/subcommand_client.rb +35 -0
- data/lib/roby/interface/tcp.rb +168 -0
- data/lib/roby/models/arguments.rb +112 -0
- data/lib/roby/models/plan_object.rb +83 -0
- data/lib/roby/models/task.rb +835 -0
- data/lib/roby/models/task_event.rb +62 -0
- data/lib/roby/models/task_service.rb +78 -0
- data/lib/roby/or_generator.rb +88 -0
- data/lib/roby/plan.rb +1751 -864
- data/lib/roby/plan_object.rb +611 -0
- data/lib/roby/plan_service.rb +200 -0
- data/lib/roby/promise.rb +332 -0
- data/lib/roby/queries.rb +23 -0
- data/lib/roby/queries/and_matcher.rb +32 -0
- data/lib/roby/queries/any.rb +27 -0
- data/lib/roby/queries/code_error_matcher.rb +58 -0
- data/lib/roby/queries/event_generator_matcher.rb +9 -0
- data/lib/roby/queries/execution_exception_matcher.rb +165 -0
- data/lib/roby/queries/index.rb +165 -0
- data/lib/roby/queries/localized_error_matcher.rb +149 -0
- data/lib/roby/queries/matcher_base.rb +107 -0
- data/lib/roby/queries/none.rb +27 -0
- data/lib/roby/queries/not_matcher.rb +30 -0
- data/lib/roby/queries/op_matcher.rb +8 -0
- data/lib/roby/queries/or_matcher.rb +30 -0
- data/lib/roby/queries/plan_object_matcher.rb +363 -0
- data/lib/roby/queries/query.rb +188 -0
- data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
- data/lib/roby/queries/task_matcher.rb +344 -0
- data/lib/roby/relations.rb +42 -678
- data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
- data/lib/roby/relations/directed_relation_support.rb +268 -0
- data/lib/roby/relations/event_relation_graph.rb +19 -0
- data/lib/roby/relations/fork_merge_visitor.rb +154 -0
- data/lib/roby/relations/graph.rb +533 -0
- data/lib/roby/relations/models/directed_relation_support.rb +11 -0
- data/lib/roby/relations/models/graph.rb +75 -0
- data/lib/roby/relations/models/task_relation_graph.rb +18 -0
- data/lib/roby/relations/space.rb +380 -0
- data/lib/roby/relations/task_relation_graph.rb +20 -0
- data/lib/roby/robot.rb +85 -38
- data/lib/roby/schedulers/basic.rb +155 -25
- data/lib/roby/schedulers/null.rb +20 -0
- data/lib/roby/schedulers/reporting.rb +31 -0
- data/lib/roby/schedulers/state.rb +129 -0
- data/lib/roby/schedulers/temporal.rb +91 -0
- data/lib/roby/singletons.rb +87 -0
- data/lib/roby/standalone.rb +4 -2
- data/lib/roby/standard_errors.rb +405 -82
- data/lib/roby/state.rb +6 -3
- data/lib/roby/state/conf_model.rb +5 -0
- data/lib/roby/state/events.rb +181 -95
- data/lib/roby/state/goal_model.rb +77 -0
- data/lib/roby/state/open_struct.rb +591 -0
- data/lib/roby/state/open_struct_model.rb +68 -0
- data/lib/roby/state/pos.rb +45 -45
- data/lib/roby/state/shapes.rb +11 -11
- data/lib/roby/state/state_model.rb +303 -0
- data/lib/roby/state/task.rb +43 -0
- data/lib/roby/support.rb +88 -148
- data/lib/roby/task.rb +1361 -1750
- data/lib/roby/task_arguments.rb +428 -0
- data/lib/roby/task_event.rb +127 -0
- data/lib/roby/task_event_generator.rb +337 -0
- data/lib/roby/task_service.rb +6 -0
- data/lib/roby/task_structure/conflicts.rb +104 -0
- data/lib/roby/task_structure/dependency.rb +932 -0
- data/lib/roby/task_structure/error_handling.rb +118 -0
- data/lib/roby/task_structure/executed_by.rb +234 -0
- data/lib/roby/task_structure/planned_by.rb +90 -0
- data/lib/roby/tasks/aggregator.rb +37 -0
- data/lib/roby/tasks/external_process.rb +275 -0
- data/lib/roby/tasks/group.rb +27 -0
- data/lib/roby/tasks/null.rb +19 -0
- data/lib/roby/tasks/parallel.rb +43 -0
- data/lib/roby/tasks/sequence.rb +88 -0
- data/lib/roby/tasks/simple.rb +21 -0
- data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
- data/lib/roby/tasks/timeout.rb +17 -0
- data/lib/roby/tasks/virtual.rb +55 -0
- data/lib/roby/template_plan.rb +7 -0
- data/lib/roby/test/aruba_minitest.rb +74 -0
- data/lib/roby/test/assertion.rb +16 -0
- data/lib/roby/test/assertions.rb +490 -0
- data/lib/roby/test/common.rb +368 -591
- data/lib/roby/test/dsl.rb +149 -0
- data/lib/roby/test/error.rb +18 -0
- data/lib/roby/test/event_reporter.rb +83 -0
- data/lib/roby/test/execution_expectations.rb +1134 -0
- data/lib/roby/test/expect_execution.rb +151 -0
- data/lib/roby/test/minitest_helpers.rb +166 -0
- data/lib/roby/test/roby_app_helpers.rb +200 -0
- data/lib/roby/test/run_planners.rb +155 -0
- data/lib/roby/test/self.rb +112 -0
- data/lib/roby/test/spec.rb +198 -0
- data/lib/roby/test/tasks/empty_task.rb +4 -4
- data/lib/roby/test/tasks/goto.rb +28 -27
- data/lib/roby/test/teardown_plans.rb +100 -0
- data/lib/roby/test/testcase.rb +239 -307
- data/lib/roby/test/tools.rb +159 -155
- data/lib/roby/test/validate_state_machine.rb +75 -0
- data/lib/roby/transaction.rb +1125 -0
- data/lib/roby/transaction/event_generator_proxy.rb +63 -0
- data/lib/roby/transaction/plan_object_proxy.rb +99 -0
- data/lib/roby/transaction/plan_service_proxy.rb +43 -0
- data/lib/roby/transaction/proxying.rb +120 -0
- data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
- data/lib/roby/transaction/task_proxy.rb +135 -0
- data/lib/roby/until_generator.rb +30 -0
- data/lib/roby/version.rb +5 -0
- data/lib/roby/yard.rb +169 -0
- data/lib/yard-roby.rb +1 -0
- data/manifest.xml +32 -6
- data/roby.gemspec +59 -0
- metadata +788 -587
- data/Manifest.txt +0 -321
- data/NOTES +0 -4
- data/README.txt +0 -166
- data/TODO.txt +0 -146
- data/app/README.txt +0 -24
- data/app/Rakefile +0 -8
- data/app/config/ROBOT.rb +0 -5
- data/app/config/init.rb +0 -33
- data/app/config/roby.yml +0 -3
- data/app/controllers/ROBOT.rb +0 -2
- data/app/planners/ROBOT/main.rb +0 -6
- data/app/planners/main.rb +0 -5
- data/app/scripts/distributed +0 -3
- data/app/scripts/generate/bookmarks +0 -3
- data/app/scripts/replay +0 -3
- data/app/scripts/results +0 -3
- data/app/scripts/run +0 -3
- data/app/scripts/server +0 -3
- data/app/scripts/shell +0 -3
- data/app/scripts/test +0 -3
- data/app/tasks/.gitattributes +0 -0
- data/app/tasks/ROBOT/.gitattributes +0 -0
- data/bin/roby-shell +0 -25
- data/doc/guide/src/basics/app.page +0 -139
- data/doc/guide/src/basics/index.page +0 -11
- data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/basics/relations_display.page +0 -203
- data/doc/guide/src/basics/shell.page +0 -102
- data/doc/guide/src/default.css +0 -319
- data/doc/guide/src/introduction/index.page +0 -29
- data/doc/guide/src/introduction/publications.page +0 -14
- data/doc/guide/src/relations/dependency.page +0 -89
- data/doc/guide/src/relations/index.page +0 -12
- data/ext/droby/dump.cc +0 -175
- data/ext/droby/extconf.rb +0 -3
- data/ext/graph/algorithm.cc +0 -746
- data/ext/graph/extconf.rb +0 -7
- data/ext/graph/graph.cc +0 -575
- data/ext/graph/graph.hh +0 -183
- data/ext/graph/iterator_sequence.hh +0 -102
- data/ext/graph/undirected_dfs.hh +0 -226
- data/ext/graph/undirected_graph.hh +0 -421
- data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
- data/lib/roby/app/scripts/replay.rb +0 -31
- data/lib/roby/app/scripts/server.rb +0 -18
- data/lib/roby/basic_object.rb +0 -151
- data/lib/roby/config.rb +0 -14
- data/lib/roby/distributed.rb +0 -36
- data/lib/roby/distributed/base.rb +0 -448
- data/lib/roby/distributed/communication.rb +0 -875
- data/lib/roby/distributed/connection_space.rb +0 -616
- data/lib/roby/distributed/distributed_object.rb +0 -206
- data/lib/roby/distributed/drb.rb +0 -62
- data/lib/roby/distributed/notifications.rb +0 -531
- data/lib/roby/distributed/peer.rb +0 -555
- data/lib/roby/distributed/protocol.rb +0 -529
- data/lib/roby/distributed/proxy.rb +0 -343
- data/lib/roby/distributed/subscription.rb +0 -311
- data/lib/roby/distributed/transaction.rb +0 -498
- data/lib/roby/external_process_task.rb +0 -225
- data/lib/roby/graph.rb +0 -160
- data/lib/roby/log.rb +0 -3
- data/lib/roby/log/chronicle.rb +0 -303
- data/lib/roby/log/console.rb +0 -74
- data/lib/roby/log/data_stream.rb +0 -275
- data/lib/roby/log/dot.rb +0 -279
- data/lib/roby/log/event_stream.rb +0 -161
- data/lib/roby/log/file.rb +0 -396
- data/lib/roby/log/gui/basic_display.ui +0 -83
- data/lib/roby/log/gui/basic_display_ui.rb +0 -89
- data/lib/roby/log/gui/chronicle.rb +0 -26
- data/lib/roby/log/gui/chronicle_view.rb +0 -40
- data/lib/roby/log/gui/chronicle_view.ui +0 -70
- data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
- data/lib/roby/log/gui/data_displays.rb +0 -171
- data/lib/roby/log/gui/data_displays.ui +0 -155
- data/lib/roby/log/gui/data_displays_ui.rb +0 -146
- data/lib/roby/log/gui/notifications.rb +0 -26
- data/lib/roby/log/gui/relations.rb +0 -269
- data/lib/roby/log/gui/relations.ui +0 -123
- data/lib/roby/log/gui/relations_ui.rb +0 -120
- data/lib/roby/log/gui/relations_view.rb +0 -185
- data/lib/roby/log/gui/relations_view.ui +0 -149
- data/lib/roby/log/gui/relations_view_ui.rb +0 -144
- data/lib/roby/log/gui/replay.rb +0 -366
- data/lib/roby/log/gui/replay_controls.rb +0 -206
- data/lib/roby/log/gui/replay_controls.ui +0 -282
- data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
- data/lib/roby/log/gui/runtime.rb +0 -130
- data/lib/roby/log/hooks.rb +0 -186
- data/lib/roby/log/logger.rb +0 -203
- data/lib/roby/log/notifications.rb +0 -244
- data/lib/roby/log/plan_rebuilder.rb +0 -468
- data/lib/roby/log/relations.rb +0 -1084
- data/lib/roby/log/server.rb +0 -547
- data/lib/roby/log/sqlite.rb +0 -47
- data/lib/roby/log/timings.rb +0 -233
- data/lib/roby/plan-object.rb +0 -371
- data/lib/roby/planning.rb +0 -13
- data/lib/roby/planning/loops.rb +0 -309
- data/lib/roby/planning/model.rb +0 -1012
- data/lib/roby/planning/task.rb +0 -180
- data/lib/roby/query.rb +0 -655
- data/lib/roby/relations/conflicts.rb +0 -67
- data/lib/roby/relations/dependency.rb +0 -358
- data/lib/roby/relations/ensured.rb +0 -19
- data/lib/roby/relations/error_handling.rb +0 -22
- data/lib/roby/relations/events.rb +0 -7
- data/lib/roby/relations/executed_by.rb +0 -208
- data/lib/roby/relations/influence.rb +0 -10
- data/lib/roby/relations/planned_by.rb +0 -63
- data/lib/roby/state/information.rb +0 -55
- data/lib/roby/state/state.rb +0 -367
- data/lib/roby/task-operations.rb +0 -186
- data/lib/roby/task_index.rb +0 -80
- data/lib/roby/test/distributed.rb +0 -230
- data/lib/roby/test/tasks/simple_task.rb +0 -23
- data/lib/roby/transactions.rb +0 -507
- data/lib/roby/transactions/proxy.rb +0 -325
- data/plugins/fault_injection/History.txt +0 -4
- data/plugins/fault_injection/README.txt +0 -34
- data/plugins/fault_injection/Rakefile +0 -12
- data/plugins/fault_injection/TODO.txt +0 -0
- data/plugins/fault_injection/app.rb +0 -52
- data/plugins/fault_injection/fault_injection.rb +0 -89
- data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
- data/plugins/subsystems/README.txt +0 -37
- data/plugins/subsystems/Rakefile +0 -13
- data/plugins/subsystems/app.rb +0 -182
- data/plugins/subsystems/test/app/README +0 -24
- data/plugins/subsystems/test/app/Rakefile +0 -8
- data/plugins/subsystems/test/app/config/app.yml +0 -71
- data/plugins/subsystems/test/app/config/init.rb +0 -12
- data/plugins/subsystems/test/app/config/roby.yml +0 -3
- data/plugins/subsystems/test/app/planners/main.rb +0 -20
- data/plugins/subsystems/test/app/scripts/distributed +0 -3
- data/plugins/subsystems/test/app/scripts/replay +0 -3
- data/plugins/subsystems/test/app/scripts/results +0 -3
- data/plugins/subsystems/test/app/scripts/run +0 -3
- data/plugins/subsystems/test/app/scripts/server +0 -3
- data/plugins/subsystems/test/app/scripts/shell +0 -3
- data/plugins/subsystems/test/app/scripts/test +0 -3
- data/plugins/subsystems/test/app/tasks/services.rb +0 -15
- data/plugins/subsystems/test/test_subsystems.rb +0 -78
- data/test/distributed/test_communication.rb +0 -195
- data/test/distributed/test_connection.rb +0 -284
- data/test/distributed/test_execution.rb +0 -378
- data/test/distributed/test_mixed_plan.rb +0 -341
- data/test/distributed/test_plan_notifications.rb +0 -238
- data/test/distributed/test_protocol.rb +0 -525
- data/test/distributed/test_query.rb +0 -106
- data/test/distributed/test_remote_plan.rb +0 -491
- data/test/distributed/test_transaction.rb +0 -466
- data/test/mockups/external_process +0 -28
- data/test/mockups/tasks.rb +0 -27
- data/test/planning/test_loops.rb +0 -432
- data/test/planning/test_model.rb +0 -427
- data/test/planning/test_task.rb +0 -126
- data/test/relations/test_conflicts.rb +0 -42
- data/test/relations/test_dependency.rb +0 -324
- data/test/relations/test_ensured.rb +0 -38
- data/test/relations/test_executed_by.rb +0 -224
- data/test/relations/test_planned_by.rb +0 -56
- data/test/suite_core.rb +0 -29
- data/test/suite_distributed.rb +0 -10
- data/test/suite_planning.rb +0 -4
- data/test/suite_relations.rb +0 -8
- data/test/tasks/test_external_process.rb +0 -126
- data/test/tasks/test_thread_task.rb +0 -70
- data/test/test_bgl.rb +0 -528
- data/test/test_event.rb +0 -969
- data/test/test_exceptions.rb +0 -591
- data/test/test_execution_engine.rb +0 -987
- data/test/test_gui.rb +0 -20
- data/test/test_interface.rb +0 -43
- data/test/test_log.rb +0 -125
- data/test/test_log_server.rb +0 -133
- data/test/test_plan.rb +0 -418
- data/test/test_query.rb +0 -424
- data/test/test_relations.rb +0 -260
- data/test/test_state.rb +0 -432
- data/test/test_support.rb +0 -16
- data/test/test_task.rb +0 -1181
- data/test/test_testcase.rb +0 -138
- data/test/test_transactions.rb +0 -610
- data/test/test_transactions_proxy.rb +0 -216
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Creating a Roby App - File Layout
|
|
3
|
+
sort_info: 5
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Creating a new application
|
|
7
|
+
--------------------------
|
|
8
|
+
New Roby applications are created by going into a new folder and running
|
|
9
|
+
|
|
10
|
+
~~~ ruby
|
|
11
|
+
roby init
|
|
12
|
+
~~~
|
|
13
|
+
|
|
14
|
+
Search paths: robot name and robot type
|
|
15
|
+
---------------------------------
|
|
16
|
+
The configuration of the Roby application can be parametrized by a robot name
|
|
17
|
+
and a robot type. If only a single name is given, it is used for both.
|
|
18
|
+
|
|
19
|
+
These names influence Roby's loading sequence by either adding folders in the
|
|
20
|
+
search path or parametrizing the file that Roby is looking for.
|
|
21
|
+
|
|
22
|
+
File layout
|
|
23
|
+
-----------
|
|
24
|
+
This section gives an overview of a Roby application's file layout. You will be
|
|
25
|
+
reminded in the rest of the documentation, when it applies, to where certain
|
|
26
|
+
parts of the application should be stored.
|
|
27
|
+
|
|
28
|
+
config/
|
|
29
|
+
: configuration files. The files that are relevant for Roby are: app.yml,
|
|
30
|
+
init.rb and files named like robots (e.g. ROBOT_NAME.rb and ROBOT_TYPE.rb)
|
|
31
|
+
|
|
32
|
+
models/
|
|
33
|
+
: contain definition of models. There are two standard subdirectories, 'tasks'
|
|
34
|
+
for the [task models](task_models.html) and actions/ for the [action interface
|
|
35
|
+
and action libraries](actions.html)
|
|
36
|
+
|
|
37
|
+
scripts/
|
|
38
|
+
: additional scripts useful to manage / maintain the app. The controllers/
|
|
39
|
+
subfolder has a special meaning for running roby controllers. More on that
|
|
40
|
+
[later](../interacting/run.html)
|
|
41
|
+
|
|
42
|
+
data/
|
|
43
|
+
: non-code and non-model files that are relevant for the application
|
|
44
|
+
|
|
45
|
+
lib/
|
|
46
|
+
: additional library files (i.e. generic, non-roby-specific files). It gets
|
|
47
|
+
added to the load path automatically
|
|
48
|
+
|
|
49
|
+
logs/
|
|
50
|
+
: where the log files are going. See [this
|
|
51
|
+
page](../tutorial/relations_display.html) for a description.
|
|
52
|
+
|
|
53
|
+
Loading sequence
|
|
54
|
+
----------------
|
|
55
|
+
This section will describe which files are loaded in which order. The ROBOT_NAME
|
|
56
|
+
and ROBOT_TYPE placeholders are used in place of robot name and robot type. Any
|
|
57
|
+
file or folder that is not found is simply ignored.
|
|
58
|
+
|
|
59
|
+
config/init.rb
|
|
60
|
+
: first file loaded
|
|
61
|
+
|
|
62
|
+
models/tasks,models/tasks/ROBOT_TYPE,models/tasks/ROBOT_NAME
|
|
63
|
+
: loading of task models. All three folders are searched for
|
|
64
|
+
|
|
65
|
+
models/actions/main.rb,models/actions/ROBOT_TYPE/main.rb,models/actions/ROBOT_NAME/main.rb
|
|
66
|
+
: loading of action models. Only the most specific file gets loaded.
|
|
67
|
+
|
|
68
|
+
config/ROBOT_TYPE.rb,config/ROBOT_NAME.rb
|
|
69
|
+
: loading of the robot's configuration file. Only the most specific file gets
|
|
70
|
+
loaded.
|
|
71
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Building a Roby app
|
|
3
|
+
sort_info: 0
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
This section will deal with the issue of how to create global behaviour(s) by
|
|
7
|
+
__coordinating__ single-purpose units using Roby.
|
|
8
|
+
|
|
9
|
+
This behaviour-building is done at two levels when using Roby:
|
|
10
|
+
|
|
11
|
+
* at the _local_ level by creating interfaces, where high-level behaviours --
|
|
12
|
+
built using smaller pieces -- are "hidden" behind high-level tasks.
|
|
13
|
+
* at the _global_ level by coordinating behaviours, as for instance by
|
|
14
|
+
switching between them.
|
|
15
|
+
|
|
16
|
+
For instance, a move-to-goal behaviour could be represented by a simple MoveTo
|
|
17
|
+
task that gets an argument (the target), read the position information while
|
|
18
|
+
executing the task and emit an event (reached_target) when the goal is reached.
|
|
19
|
+
Additionally, one would model that the reached_target event also means that the
|
|
20
|
+
task is successful.
|
|
21
|
+
|
|
22
|
+
However, having an actual robot realize this behaviour is a bit more
|
|
23
|
+
complicated. One would for instance want to run a planner first to plan the path
|
|
24
|
+
to the goal, then execute it. While executing it, one would also like to monitor
|
|
25
|
+
localization and abort if it gets too bad.
|
|
26
|
+
|
|
27
|
+
In Roby, the local interface-building code is done at the level of models by
|
|
28
|
+
defining events and arguments to Roby tasks, and at runtime by adding actual
|
|
29
|
+
code to tasks. There are various places where the code can be hooked. The main
|
|
30
|
+
goal of this code is to make sure that events are emitted whenever _what they
|
|
31
|
+
represent_ happened. Sometimes, achieving this is as easy as regularly executing
|
|
32
|
+
code blocks that check for conditions and emit events accordingly. Sometimes, it
|
|
33
|
+
requires more advanced concepts such as for instance a state machine.
|
|
34
|
+
|
|
35
|
+
The global-coordination code is created __outside__ the tasks. Roby allows you
|
|
36
|
+
to define __actions__, whose job it to bind tasks together to form more complex
|
|
37
|
+
behaviours. These actions also form the "public" interface for your robot: you
|
|
38
|
+
can start / stop them and track their progress remotely using the Roby shell. It
|
|
39
|
+
is also the basis for generic error recovery.
|
|
40
|
+
|
|
41
|
+
This section will first detail the programming interfaces for these two aspects.
|
|
42
|
+
Then, a few pages will try to explain the role that they all have to play into a
|
|
43
|
+
Roby controller.
|
|
44
|
+
|
|
45
|
+
In other words, this section will describe:
|
|
46
|
+
|
|
47
|
+
* how to add code into tasks
|
|
48
|
+
* how to create plans inside planning methods
|
|
49
|
+
* where to put what
|
|
50
|
+
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Patterns and Protocols
|
|
3
|
+
sort_info: 400
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
The art of building code in Roby is the art of putting __plan patterns and
|
|
7
|
+
protocols__ in tasks, and creating plans that conform to these patterns and
|
|
8
|
+
protocols in the planning methods. This page lists a few guidelines on how that
|
|
9
|
+
can be achieved
|
|
10
|
+
|
|
11
|
+
Keep Isolation
|
|
12
|
+
--------------
|
|
13
|
+
Moreover, a good guideline when building plans is to avoid having a given task
|
|
14
|
+
access other tasks that are at a distance of more than 1 in any given relation.
|
|
15
|
+
I.e. a task should only access other tasks that are in its direct neighborhood.
|
|
16
|
+
|
|
17
|
+
The most useful tool to achieve this is the forwarding relation: it allows to
|
|
18
|
+
"forward" an event between tasks, making the child event an equivalent of the
|
|
19
|
+
parent event. This is often used to declare that a high-level event is the
|
|
20
|
+
equivalent of a child event.
|
|
21
|
+
|
|
22
|
+

|
|
24
|
+
{: .align-center}
|
|
25
|
+
|
|
26
|
+
__Using forwarding to create high-level events from low-level ones__. This
|
|
27
|
+
allows the rest of the plan to only synchronize on the high-level "leak_found"
|
|
28
|
+
event instead of explicitely looking at the children. If the PipelineRepair is
|
|
29
|
+
implemented in a different way, the rest of the behaviour will stay unchanged.
|
|
30
|
+
{: .figurecaption}
|
|
31
|
+
|
|
32
|
+
This pattern is commonly used to forward failure and/or success up in the
|
|
33
|
+
dependency hierarchy: the success event of one child task is forwarded to the
|
|
34
|
+
success event of the parent task(s).
|
|
35
|
+
|
|
36
|
+
Don't put too much assumptions in
|
|
37
|
+
---------------------------------
|
|
38
|
+
Ideally, when writing tasks, one should seek to write it in a way that has as
|
|
39
|
+
as little assumptions as possible about the tasks that are around it. It can
|
|
40
|
+
obviously require some functionalities / interfaces from them. But it should
|
|
41
|
+
not assume, say, that "localization_child is a task of type X".
|
|
42
|
+
|
|
43
|
+
The trick to achieve this is to use events as much as possible as an interface
|
|
44
|
+
to other tasks. The general guidelines here are:
|
|
45
|
+
|
|
46
|
+
* use events for synchronization
|
|
47
|
+
* use attributes for data transfer
|
|
48
|
+
|
|
49
|
+
Embed protocols in task code, embed plan building in actions
|
|
50
|
+
------------------------------------------------------------
|
|
51
|
+
What tasks do with each other form __protocols__. I.e., any given task assumes
|
|
52
|
+
that other task will emit events A, B, C and have attributes filled in with data
|
|
53
|
+
when e.g. these events are emitted.
|
|
54
|
+
|
|
55
|
+
However, to be reusable, a task should not __by itself__ build the plan, i.e.
|
|
56
|
+
add the relevant tasks. This should be left to actions.
|
|
57
|
+
|
|
58
|
+
Embedding placeholders in the plan {#abstract-tasks}
|
|
59
|
+
----------------------------------
|
|
60
|
+
If, at any point in execution, one wants to represent that a task __will__ be
|
|
61
|
+
there and executed, but without explaining __how__, it is possible, in Roby, to
|
|
62
|
+
add a task that will act as a placeholder.
|
|
63
|
+
|
|
64
|
+
This is simply done by adding an instance of the right task model and marking it
|
|
65
|
+
as abstract:
|
|
66
|
+
|
|
67
|
+
{coderay:: ruby}
|
|
68
|
+
task = MoveTo.new
|
|
69
|
+
task.abstract = true
|
|
70
|
+
root.depends_on(task)
|
|
71
|
+
{coderay}
|
|
72
|
+
|
|
73
|
+
Moreover, if a certain task model is used as a base for other models, but
|
|
74
|
+
without being executable, the model itself can be marked as abstract:
|
|
75
|
+
|
|
76
|
+
{coderay:: ruby}
|
|
77
|
+
class AbstractMoveModel < Roby::Task
|
|
78
|
+
abstract
|
|
79
|
+
end
|
|
80
|
+
{coderay}
|
|
81
|
+
|
|
82
|
+
__Note__ This is different from having an abstract class, as one can define one
|
|
83
|
+
in C++ or Java. Here, it is possible to create instances of AbstractMoveModel
|
|
84
|
+
and add the task instance in the plan. What is impossible is to execute this
|
|
85
|
+
task
|
|
86
|
+
{: .warning}
|
|
Binary file
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
2
|
+
<svg
|
|
3
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
4
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
5
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
6
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
7
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
8
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
9
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
10
|
+
width="2416.17mm"
|
|
11
|
+
height="127.353mm"
|
|
12
|
+
version="1.2"
|
|
13
|
+
id="svg4167"
|
|
14
|
+
inkscape:version="0.47 r22583"
|
|
15
|
+
sodipodi:docname="02_leak_found.svg">
|
|
16
|
+
<metadata
|
|
17
|
+
id="metadata4599">
|
|
18
|
+
<rdf:RDF>
|
|
19
|
+
<cc:Work
|
|
20
|
+
rdf:about="">
|
|
21
|
+
<dc:format>image/svg+xml</dc:format>
|
|
22
|
+
<dc:type
|
|
23
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
24
|
+
<dc:title>Qt Svg Document</dc:title>
|
|
25
|
+
</cc:Work>
|
|
26
|
+
</rdf:RDF>
|
|
27
|
+
</metadata>
|
|
28
|
+
<sodipodi:namedview
|
|
29
|
+
pagecolor="#ffffff"
|
|
30
|
+
bordercolor="#666666"
|
|
31
|
+
borderopacity="1"
|
|
32
|
+
objecttolerance="10"
|
|
33
|
+
gridtolerance="10"
|
|
34
|
+
guidetolerance="10"
|
|
35
|
+
inkscape:pageopacity="0"
|
|
36
|
+
inkscape:pageshadow="2"
|
|
37
|
+
inkscape:window-width="1672"
|
|
38
|
+
inkscape:window-height="1023"
|
|
39
|
+
id="namedview4597"
|
|
40
|
+
showgrid="false"
|
|
41
|
+
inkscape:zoom="1.2021339"
|
|
42
|
+
inkscape:cx="826.15833"
|
|
43
|
+
inkscape:cy="209.536"
|
|
44
|
+
inkscape:window-x="0"
|
|
45
|
+
inkscape:window-y="0"
|
|
46
|
+
inkscape:window-maximized="1"
|
|
47
|
+
inkscape:current-layer="svg4167" />
|
|
48
|
+
<title
|
|
49
|
+
id="title4169">Qt Svg Document</title>
|
|
50
|
+
<desc
|
|
51
|
+
id="desc4171">Generated with Qt</desc>
|
|
52
|
+
<defs
|
|
53
|
+
id="defs4173">
|
|
54
|
+
<inkscape:perspective
|
|
55
|
+
sodipodi:type="inkscape:persp3d"
|
|
56
|
+
inkscape:vp_x="0 : 225.62538 : 1"
|
|
57
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
58
|
+
inkscape:vp_z="8561.2324 : 225.62538 : 1"
|
|
59
|
+
inkscape:persp3d-origin="4280.6162 : 150.41692 : 1"
|
|
60
|
+
id="perspective4601" />
|
|
61
|
+
<inkscape:perspective
|
|
62
|
+
id="perspective5356"
|
|
63
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
64
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
65
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
66
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
67
|
+
sodipodi:type="inkscape:persp3d" />
|
|
68
|
+
<inkscape:perspective
|
|
69
|
+
id="perspective5391"
|
|
70
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
71
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
72
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
73
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
74
|
+
sodipodi:type="inkscape:persp3d" />
|
|
75
|
+
<inkscape:perspective
|
|
76
|
+
id="perspective5422"
|
|
77
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
78
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
79
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
80
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
81
|
+
sodipodi:type="inkscape:persp3d" />
|
|
82
|
+
<inkscape:perspective
|
|
83
|
+
id="perspective6229"
|
|
84
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
85
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
86
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
87
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
88
|
+
sodipodi:type="inkscape:persp3d" />
|
|
89
|
+
<inkscape:perspective
|
|
90
|
+
id="perspective6251"
|
|
91
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
92
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
93
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
94
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
95
|
+
sodipodi:type="inkscape:persp3d" />
|
|
96
|
+
<inkscape:perspective
|
|
97
|
+
id="perspective6273"
|
|
98
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
99
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
100
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
101
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
102
|
+
sodipodi:type="inkscape:persp3d" />
|
|
103
|
+
<inkscape:perspective
|
|
104
|
+
id="perspective6295"
|
|
105
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
106
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
107
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
108
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
109
|
+
sodipodi:type="inkscape:persp3d" />
|
|
110
|
+
<inkscape:perspective
|
|
111
|
+
id="perspective9373"
|
|
112
|
+
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
|
|
113
|
+
inkscape:vp_z="1 : 0.5 : 1"
|
|
114
|
+
inkscape:vp_y="0 : 1000 : 0"
|
|
115
|
+
inkscape:vp_x="0 : 0.5 : 1"
|
|
116
|
+
sodipodi:type="inkscape:persp3d" />
|
|
117
|
+
</defs>
|
|
118
|
+
<path
|
|
119
|
+
d="m 305.82972,258.63923 -7.74932,-4.46037 6.66802,-4.41531 1.0813,8.87568"
|
|
120
|
+
id="path4189"
|
|
121
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79973406;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
|
|
122
|
+
<polyline
|
|
123
|
+
points="-82.7557,0 0,0 "
|
|
124
|
+
id="polyline4195"
|
|
125
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#808080;stroke-width:1.50321531;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
126
|
+
transform="matrix(0.28996405,0.44933638,-0.43790495,0.29753351,303.10297,255.91248)" />
|
|
127
|
+
<path
|
|
128
|
+
d="m 180.7602,259.51316 6.1442,-6.49583 2.73898,7.51369 -8.88318,-1.01786"
|
|
129
|
+
id="path4201"
|
|
130
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79973465;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
|
|
131
|
+
<polyline
|
|
132
|
+
points="-170.81,0 0,0 "
|
|
133
|
+
id="polyline4207"
|
|
134
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#808080;stroke-width:1.23056054;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
135
|
+
transform="matrix(-0.56977681,0.23852362,-0.20770184,-0.65432843,181.78376,259.4697)" />
|
|
136
|
+
<path
|
|
137
|
+
d="m 287.105,215.326 5.7945,-6.8096 3.12988,7.35944 -8.92438,-0.54984"
|
|
138
|
+
id="path4297"
|
|
139
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#808080;fill-opacity:1;fill-rule:evenodd;stroke:#808080;stroke-width:0.79973435;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
|
|
140
|
+
<polyline
|
|
141
|
+
points="-178.215,0 0,0 "
|
|
142
|
+
id="polyline4303"
|
|
143
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#808080;stroke-width:3.17111087;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
144
|
+
transform="matrix(-0.22491352,0.10184367,-0.09565297,-0.23947,287.105,215.326)" />
|
|
145
|
+
<text
|
|
146
|
+
xml:space="preserve"
|
|
147
|
+
x="117.76881"
|
|
148
|
+
y="287.1925"
|
|
149
|
+
font-size="9"
|
|
150
|
+
font-weight="400"
|
|
151
|
+
font-style="normal"
|
|
152
|
+
id="text4367"
|
|
153
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">PipelineDetector::Task</text>
|
|
154
|
+
<g
|
|
155
|
+
id="g5378"
|
|
156
|
+
transform="translate(41.173856,-10.906982)">
|
|
157
|
+
<path
|
|
158
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
159
|
+
id="path4357"
|
|
160
|
+
d="m 93.36057,270.96561 45.87246,0 0,19.33827 -45.87246,0 0,-19.33827" />
|
|
161
|
+
<path
|
|
162
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
163
|
+
id="path4381"
|
|
164
|
+
d="m 118.696,275.54505 c 0,1.32504 -1.07416,2.3992 -2.3992,2.3992 -1.32504,0 -2.3992,-1.07416 -2.3992,-2.3992 0,-1.32504 1.07416,-2.3992 2.3992,-2.3992 1.32504,0 2.3992,1.07416 2.3992,2.3992" />
|
|
165
|
+
<text
|
|
166
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"
|
|
167
|
+
id="text4391"
|
|
168
|
+
font-style="normal"
|
|
169
|
+
font-weight="400"
|
|
170
|
+
font-size="9"
|
|
171
|
+
y="285.0687"
|
|
172
|
+
x="96.659775"
|
|
173
|
+
xml:space="preserve">leak_found</text>
|
|
174
|
+
</g>
|
|
175
|
+
<path
|
|
176
|
+
d="m 300.48038,258.63956 15.99468,0 0,7.99734 -15.99468,0 0,-7.99734"
|
|
177
|
+
id="path4453"
|
|
178
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans" />
|
|
179
|
+
<text
|
|
180
|
+
xml:space="preserve"
|
|
181
|
+
x="272.05612"
|
|
182
|
+
y="275.25073"
|
|
183
|
+
font-size="9"
|
|
184
|
+
font-weight="400"
|
|
185
|
+
font-style="normal"
|
|
186
|
+
id="text4463"
|
|
187
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">Camera::CameraTask</text>
|
|
188
|
+
<text
|
|
189
|
+
xml:space="preserve"
|
|
190
|
+
x="313.95895"
|
|
191
|
+
y="212.44673"
|
|
192
|
+
font-size="9"
|
|
193
|
+
font-weight="400"
|
|
194
|
+
font-style="normal"
|
|
195
|
+
id="text4559"
|
|
196
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">PipelineRepair</text>
|
|
197
|
+
<g
|
|
198
|
+
id="g5378-1"
|
|
199
|
+
transform="translate(146.01611,-58.975948)">
|
|
200
|
+
<path
|
|
201
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
202
|
+
id="path4357-9"
|
|
203
|
+
d="m 93.36057,270.9656 45.87246,0 0,21.65199 -45.87246,0 0,-21.65199" />
|
|
204
|
+
<path
|
|
205
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
206
|
+
id="path4381-4"
|
|
207
|
+
d="m 118.696,275.54505 c 0,1.32504 -1.07416,2.3992 -2.3992,2.3992 -1.32504,0 -2.3992,-1.07416 -2.3992,-2.3992 0,-1.32504 1.07416,-2.3992 2.3992,-2.3992 1.32504,0 2.3992,1.07416 2.3992,2.3992" />
|
|
208
|
+
<text
|
|
209
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"
|
|
210
|
+
id="text4391-7"
|
|
211
|
+
font-style="normal"
|
|
212
|
+
font-weight="400"
|
|
213
|
+
font-size="9"
|
|
214
|
+
y="290.27457"
|
|
215
|
+
x="96.659775"
|
|
216
|
+
xml:space="preserve">leak_found</text>
|
|
217
|
+
</g>
|
|
218
|
+
<g
|
|
219
|
+
id="g5378-1-8"
|
|
220
|
+
transform="translate(223.45568,-87.334106)">
|
|
221
|
+
<path
|
|
222
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#b0ffa6;fill-opacity:1;fill-rule:evenodd;stroke:#b0ffa6;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
223
|
+
id="path4357-9-4"
|
|
224
|
+
d="m 93.36057,270.9656 45.87246,0 0,21.65199 -45.87246,0 0,-21.65199" />
|
|
225
|
+
<path
|
|
226
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:0.799734;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;font-family:DejaVu Sans"
|
|
227
|
+
id="path4381-4-5"
|
|
228
|
+
d="m 118.696,275.54505 c 0,1.32504 -1.07416,2.3992 -2.3992,2.3992 -1.32504,0 -2.3992,-1.07416 -2.3992,-2.3992 0,-1.32504 1.07416,-2.3992 2.3992,-2.3992 1.32504,0 2.3992,1.07416 2.3992,2.3992" />
|
|
229
|
+
<text
|
|
230
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"
|
|
231
|
+
id="text4391-7-0"
|
|
232
|
+
font-style="normal"
|
|
233
|
+
font-weight="400"
|
|
234
|
+
font-size="9"
|
|
235
|
+
y="290.66019"
|
|
236
|
+
x="96.659775"
|
|
237
|
+
xml:space="preserve">leak_found</text>
|
|
238
|
+
</g>
|
|
239
|
+
<polyline
|
|
240
|
+
points="-41,0 0,0 "
|
|
241
|
+
id="polyline870-3"
|
|
242
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#000000;stroke-width:0.23482139;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.23482139, 0.46964277;stroke-dashoffset:0;font-family:DejaVu Sans"
|
|
243
|
+
transform="matrix(2.4512254,-1.0558633,0.58150454,4.4507975,259.61204,219.1917)" />
|
|
244
|
+
<polyline
|
|
245
|
+
points="-41,0 0,0 "
|
|
246
|
+
id="polyline870-3-6"
|
|
247
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:none;stroke:#000000;stroke-width:0.36133578;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.3613358, 0.72267159;stroke-dashoffset:0;font-family:DejaVu Sans"
|
|
248
|
+
transform="matrix(1.7725875,-0.61664697,0.42051117,2.5993617,337.31448,190.07738)" />
|
|
249
|
+
<path
|
|
250
|
+
d="m 259.75338,218.7237 -5.30838,7.15899 -3.60384,-7.1103 8.91222,-0.0487"
|
|
251
|
+
id="path864"
|
|
252
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79714501;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.797145, 1.59429;stroke-dashoffset:0;font-family:DejaVu Sans" />
|
|
253
|
+
<path
|
|
254
|
+
d="m 337.0534,190.2699 -5.30838,7.15899 -3.60384,-7.1103 8.91222,-0.0487"
|
|
255
|
+
id="path864-1"
|
|
256
|
+
style="font-size:9px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.79714501;stroke-linecap:square;stroke-linejoin:bevel;stroke-opacity:1;stroke-dasharray:0.797145, 1.59429;stroke-dashoffset:0;font-family:DejaVu Sans" />
|
|
257
|
+
<text
|
|
258
|
+
xml:space="preserve"
|
|
259
|
+
x="204.50826"
|
|
260
|
+
y="240.30687"
|
|
261
|
+
font-size="9"
|
|
262
|
+
font-weight="400"
|
|
263
|
+
font-style="normal"
|
|
264
|
+
id="text7981"
|
|
265
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans">Compositions::FeatureDetection</text>
|
|
266
|
+
<text
|
|
267
|
+
xml:space="preserve"
|
|
268
|
+
x="204.58138"
|
|
269
|
+
y="247.42001"
|
|
270
|
+
font-size="9"
|
|
271
|
+
font-weight="400"
|
|
272
|
+
font-style="normal"
|
|
273
|
+
id="text8005-0-6"
|
|
274
|
+
style="font-size:7.19760609px;font-style:normal;font-weight:400;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans"><tspan
|
|
275
|
+
style="font-size:6px"
|
|
276
|
+
id="tspan8506-3">detector.is_a?(PipelineDetector::Task)</tspan></text>
|
|
277
|
+
</svg>
|