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
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
$LOAD_PATH.unshift File.expand_path( '..', File.dirname(__FILE__))
|
|
2
|
-
require 'test/unit'
|
|
3
|
-
require 'roby'
|
|
4
|
-
require 'roby/test/common'
|
|
5
|
-
require 'roby/test/tasks/simple_task'
|
|
6
|
-
require 'fault_injection'
|
|
7
|
-
|
|
8
|
-
class TC_FaultInjection < Test::Unit::TestCase
|
|
9
|
-
include Roby::Test
|
|
10
|
-
include Roby::Test::Assertions
|
|
11
|
-
|
|
12
|
-
def test_inject_fault
|
|
13
|
-
model = Class.new(Roby::Test::SimpleTask) do
|
|
14
|
-
event :specialized_fault
|
|
15
|
-
forward :specialized_fault => :failed
|
|
16
|
-
end
|
|
17
|
-
plan.add_permanent(task = model.new)
|
|
18
|
-
|
|
19
|
-
engine.run
|
|
20
|
-
|
|
21
|
-
assert_any_event(task.start_event) do
|
|
22
|
-
assert_raises(ArgumentError) { task.inject_fault(:start) }
|
|
23
|
-
task.start!
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
fake_task = nil
|
|
27
|
-
assert_any_event(task.stop_event) do
|
|
28
|
-
assert_raises(ArgumentError) { task.inject_fault(:updated_data) }
|
|
29
|
-
assert_nothing_raised { task.inject_fault(:specialized_fault) }
|
|
30
|
-
assert_equal(2, plan.known_tasks.size)
|
|
31
|
-
fake_task = plan.known_tasks.find { |t| t != task }
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
assert(fake_task.finished?)
|
|
35
|
-
assert(fake_task.event(:specialized_fault).happened?)
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
def test_apply
|
|
39
|
-
model = Class.new(Roby::Test::SimpleTask) do
|
|
40
|
-
event :specialized_fault
|
|
41
|
-
forward :specialized_fault => :failed
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
fault_models = Hash.new { |h, k| h[k] = Hash.new }
|
|
45
|
-
fault_models[model][:specialized_fault] = FaultInjection::Rate.new(0.01, 1.0)
|
|
46
|
-
fault_models[Roby::Test::SimpleTask][:stop] = FaultInjection::Rate.new(1_000_000, 1.0)
|
|
47
|
-
plan.add_permanent(simple = Roby::Test::SimpleTask.new)
|
|
48
|
-
plan.add_permanent(specialized = model.new)
|
|
49
|
-
both_started = simple.start_event & specialized.start_event
|
|
50
|
-
|
|
51
|
-
engine.run
|
|
52
|
-
|
|
53
|
-
assert_any_event(both_started) do
|
|
54
|
-
simple.start!
|
|
55
|
-
specialized.start!
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
fake_specialized = engine.execute do
|
|
59
|
-
result = Roby::FaultInjection.apply(fault_models, plan)
|
|
60
|
-
assert_equal(1, result.size)
|
|
61
|
-
result.first.last
|
|
62
|
-
end
|
|
63
|
-
engine.wait_one_cycle
|
|
64
|
-
|
|
65
|
-
assert(simple.running?)
|
|
66
|
-
assert(specialized.finished?)
|
|
67
|
-
assert(fake_specialized.finished?)
|
|
68
|
-
assert(fake_specialized.event(:specialized_fault).happened?)
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
def test_task_lifetime
|
|
72
|
-
plan.discover(task = Roby::Test::SimpleTask.new)
|
|
73
|
-
task.start!
|
|
74
|
-
sleep(0.5)
|
|
75
|
-
assert(task.lifetime > 0.5)
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
= Subsystems plugin for Roby
|
|
2
|
-
|
|
3
|
-
This is a plugin for the Roby robotic control framework. It allows to generate
|
|
4
|
-
an initial plan in which a set of common subsystems (sensors, localization,
|
|
5
|
-
...) are already initialized, easing later the writing and management of the
|
|
6
|
-
planning methods for other, more dynamical actions.
|
|
7
|
-
|
|
8
|
-
== Usage
|
|
9
|
-
|
|
10
|
-
A set of services can be defined on <tt>State.services</tt> like this:
|
|
11
|
-
|
|
12
|
-
State.services.localization = 'pom'
|
|
13
|
-
State.services.camera = 'cam'
|
|
14
|
-
|
|
15
|
-
Then, at controller initialization and before the controller file is actually
|
|
16
|
-
loaded, the corresponding planning methods are called to generate a plan in which those
|
|
17
|
-
subsystems are present:
|
|
18
|
-
|
|
19
|
-
planner.localization(:id => 'pom')
|
|
20
|
-
planner.camera(:id => 'cam')
|
|
21
|
-
|
|
22
|
-
The returned tasks are also started, in order. The controller file gets loaded
|
|
23
|
-
only when the subsystems are ready (i.e. their start events are emitted).
|
|
24
|
-
|
|
25
|
-
== Enabling the plugin
|
|
26
|
-
|
|
27
|
-
The plugin must be enabled in the configuration files (i.e. either in
|
|
28
|
-
<tt>config/init.rb</tt> or in one of the robot-specific files) through a call
|
|
29
|
-
to Roby.app.using:
|
|
30
|
-
|
|
31
|
-
Roby.app.using 'subsystems'
|
|
32
|
-
|
|
33
|
-
== License:
|
|
34
|
-
|
|
35
|
-
This work is licensed under the CeCiLL-B license, which is a free software
|
|
36
|
-
license similar to the BSD license. See License.txt for details.
|
|
37
|
-
|
data/plugins/subsystems/Rakefile
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
if ENV['ROBY_ROOT_DIR']
|
|
2
|
-
$LOAD_PATH << File.join(ENV['ROBY_ROOT_DIR'], 'lib')
|
|
3
|
-
end
|
|
4
|
-
require 'roby/app/plugins/rake'
|
|
5
|
-
|
|
6
|
-
Roby::Rake.plugin_doc("subsystems") do |rdoc|
|
|
7
|
-
rdoc.title = "Subsystems plugin for Roby"
|
|
8
|
-
rdoc.template = Roby::Rake.rdoc_template
|
|
9
|
-
rdoc.options << '--main' << 'README.txt'
|
|
10
|
-
rdoc.rdoc_files.include('README.txt')
|
|
11
|
-
rdoc.rdoc_files.include('app.rb')
|
|
12
|
-
end
|
|
13
|
-
|
data/plugins/subsystems/app.rb
DELETED
|
@@ -1,182 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
module Roby
|
|
3
|
-
# Subsystem plugin for Roby
|
|
4
|
-
#
|
|
5
|
-
# This plugin manages a set of services that should be available at all
|
|
6
|
-
# times (for instance: localization). For now, it makes Roby start them at
|
|
7
|
-
# initialization time, allowing to consider that they are always available
|
|
8
|
-
# during plan generation afterwards.
|
|
9
|
-
#
|
|
10
|
-
# == Subsystems at initialization
|
|
11
|
-
# The set of subsystems that should be considered is to be set through the State.services
|
|
12
|
-
# configuration object:
|
|
13
|
-
#
|
|
14
|
-
# State.services do |sys|
|
|
15
|
-
# sys.localization = 'pom'
|
|
16
|
-
# sys.laser_ranges = 'sick'
|
|
17
|
-
# end
|
|
18
|
-
#
|
|
19
|
-
# The subsystem plugin will then use <tt>MainPlanner#subsystem_name(:id =>
|
|
20
|
-
# 'subsystem_selected')</tt> to generate the subsystems' plans. In the
|
|
21
|
-
# example above, the initial plan will be made using
|
|
22
|
-
#
|
|
23
|
-
# planner.localization(:id => 'pom')
|
|
24
|
-
# planner.laser_ranges(:id => 'sick')
|
|
25
|
-
#
|
|
26
|
-
# The resulting plan is then started one subsystem after the other
|
|
27
|
-
# <b>before</b> the controller is loaded
|
|
28
|
-
#
|
|
29
|
-
# == Subsystems and state update
|
|
30
|
-
#
|
|
31
|
-
# If the main tasks representing the subsystem -- the one returned by the
|
|
32
|
-
# planning methods, respond to update_<sysname>(state), that method is
|
|
33
|
-
# called, provided that the task is running, at every cycle with the
|
|
34
|
-
# system's state representation as an argument.
|
|
35
|
-
#
|
|
36
|
-
# For instance, the Localization task which represents the localization
|
|
37
|
-
# subsystems can have a #update_localization method which takes an
|
|
38
|
-
# argument. This method would update at each cycle the system's position in
|
|
39
|
-
# the state representation.
|
|
40
|
-
module Subsystems
|
|
41
|
-
module Application
|
|
42
|
-
def self.setup_main_planner
|
|
43
|
-
MainPlanner.class_eval do
|
|
44
|
-
Roby::State.services.each_member do |name, value|
|
|
45
|
-
filter(name) do |options, method|
|
|
46
|
-
options[:id] || method.id.to_s == value.to_s
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# This method generates the initial plan built upon the set of
|
|
53
|
-
# required subsystems.
|
|
54
|
-
def self.initialize_plan(plan)
|
|
55
|
-
setup_main_planner
|
|
56
|
-
trsc = Transaction.new(plan)
|
|
57
|
-
|
|
58
|
-
# Event which is emitted when all subsystems are properly
|
|
59
|
-
# initialized
|
|
60
|
-
ready = AndGenerator.new
|
|
61
|
-
|
|
62
|
-
# Create the one task for each subsystem. +ready+ is an event
|
|
63
|
-
# which is fired when all subsystems are properly initialized
|
|
64
|
-
planner = MainPlanner.new(trsc)
|
|
65
|
-
|
|
66
|
-
tasks = Array.new
|
|
67
|
-
task_objects = ValueSet.new
|
|
68
|
-
State.services.each_member do |name, value|
|
|
69
|
-
next if name == 'tasks'
|
|
70
|
-
new_task = begin
|
|
71
|
-
planner.send(name)
|
|
72
|
-
rescue Planning::NotFound => e
|
|
73
|
-
raise RuntimeError, e.full_message
|
|
74
|
-
end
|
|
75
|
-
|
|
76
|
-
State.services.tasks.send("#{name}=", new_task)
|
|
77
|
-
|
|
78
|
-
trsc.add_permanent(new_task)
|
|
79
|
-
started_with = if new_task.has_event?(:ready) then :ready
|
|
80
|
-
else :start
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
ready << new_task.event(started_with)
|
|
84
|
-
|
|
85
|
-
new_task.on(started_with) do
|
|
86
|
-
Robot.info "#{name} subsystem started (#{value})"
|
|
87
|
-
end
|
|
88
|
-
new_task.on(:stop) do
|
|
89
|
-
Robot.info "#{name} subsystem stopped (#{value})"
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
tasks << [name, value, new_task]
|
|
93
|
-
task_objects << new_task
|
|
94
|
-
end
|
|
95
|
-
|
|
96
|
-
# We make sure each subsystem is started only when all the
|
|
97
|
-
# other subsystems it depends on are started and ready.
|
|
98
|
-
# +start_with+ is the event which should be called to start
|
|
99
|
-
# everything
|
|
100
|
-
starting_point = EventGenerator.new(true)
|
|
101
|
-
tasks.each do |name, type, task|
|
|
102
|
-
children = task.generated_subgraph(TaskStructure::Hierarchy) & task_objects
|
|
103
|
-
children.delete(task)
|
|
104
|
-
|
|
105
|
-
ev = if children.empty?
|
|
106
|
-
starting_point
|
|
107
|
-
elsif children.size == 1
|
|
108
|
-
child = children.first
|
|
109
|
-
if child.has_event?(:ready) then child.event(:ready)
|
|
110
|
-
else child.event(:start)
|
|
111
|
-
end
|
|
112
|
-
else
|
|
113
|
-
children.inject(AndGenerator.new) do |ev, child|
|
|
114
|
-
started_with = if child.has_event?(:ready) then :ready
|
|
115
|
-
else :start
|
|
116
|
-
end
|
|
117
|
-
ev << child.event(started_with)
|
|
118
|
-
end
|
|
119
|
-
end
|
|
120
|
-
|
|
121
|
-
ev.on { Robot.info "starting subsystem #{name} (#{type})" }
|
|
122
|
-
ev.signals task.event(:start)
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
plan.execute do
|
|
126
|
-
trsc.commit_transaction
|
|
127
|
-
end
|
|
128
|
-
[starting_point, ready]
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
# Hook to generate the initial plan and start subsystems when the
|
|
132
|
-
# application starts.
|
|
133
|
-
def self.run(app, &block)
|
|
134
|
-
unless Roby::State.services? && !Roby::State.services.empty?
|
|
135
|
-
Robot.info "No subsystems defined"
|
|
136
|
-
return yield
|
|
137
|
-
end
|
|
138
|
-
|
|
139
|
-
Robot.info "Starting subsystems ..."
|
|
140
|
-
|
|
141
|
-
starting_point, ready = initialize_plan(Roby.plan)
|
|
142
|
-
# Start the deepest tasks. The signalling order will do the rest.
|
|
143
|
-
# The 'ready' event is emitted when all the subsystem tasks are
|
|
144
|
-
begin
|
|
145
|
-
Roby.wait_until(ready) do
|
|
146
|
-
Roby.execute do
|
|
147
|
-
starting_point.call
|
|
148
|
-
end
|
|
149
|
-
end
|
|
150
|
-
rescue Exception => e
|
|
151
|
-
Robot.fatal "failed to start subsystems"
|
|
152
|
-
Roby.log_exception(e, Robot, :fatal)
|
|
153
|
-
raise
|
|
154
|
-
end
|
|
155
|
-
|
|
156
|
-
yield if block_given?
|
|
157
|
-
end
|
|
158
|
-
end
|
|
159
|
-
end
|
|
160
|
-
|
|
161
|
-
Application.register_plugin('subsystems', Roby::Subsystems::Application) do
|
|
162
|
-
# Call the #update_ methods for the subsystems tasks which define it.
|
|
163
|
-
Roby.each_cycle do
|
|
164
|
-
srv = Roby::State.services
|
|
165
|
-
srv.each_member do |name, value|
|
|
166
|
-
task = srv.tasks.send(name)
|
|
167
|
-
next unless task.running?
|
|
168
|
-
if task.has_event?(:ready)
|
|
169
|
-
next unless task.event(:ready).happened?
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
if task.respond_to?("update_#{name}")
|
|
173
|
-
begin
|
|
174
|
-
task.send("update_#{name}", State)
|
|
175
|
-
rescue Exception => e
|
|
176
|
-
Roby.warn "update_#{name} failed on #{task} with #{e}"
|
|
177
|
-
end
|
|
178
|
-
end
|
|
179
|
-
end
|
|
180
|
-
end
|
|
181
|
-
end
|
|
182
|
-
end
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
== Directories
|
|
2
|
-
A basic Roby application has the following directories:
|
|
3
|
-
config:: configuration files. config/init.rb is the main configuration file (loaded
|
|
4
|
-
by all robots). Robot-specific configuration is in config/ROBOTNAME.rb.
|
|
5
|
-
The main Roby configuration file is config/roby.yml. The default file
|
|
6
|
-
describes all available configuration options.
|
|
7
|
-
planners:: planner models. Global planners (shared by all robots) are in
|
|
8
|
-
planners/. Robot-specific planners are in planners/ROBOTNAME/
|
|
9
|
-
controllers:: robot controllers. These files are supposed to start the basic robot
|
|
10
|
-
services, to make the robot ready. A robot shall have a controllers/ROBOTNAME.rb
|
|
11
|
-
file which does that.
|
|
12
|
-
tasks:: task models
|
|
13
|
-
data:: where all data files are. See #find_data.
|
|
14
|
-
scripts:: various scripts needed to run and debug a Roby application
|
|
15
|
-
|
|
16
|
-
The basic directory structure, and the global files, are installed by <tt>roby init</tt>. Basic
|
|
17
|
-
robot files can be added by <tt>roby robot ROBOTNAME</tt>
|
|
18
|
-
|
|
19
|
-
== Genom/Pocosim integration
|
|
20
|
-
An application can use the Genom/Pocosim integration by calling <tt>roby init --module genom</tt>.
|
|
21
|
-
The following files and directories are added:
|
|
22
|
-
config/ROBOTNAME-genom.rb:: Genom-specific configuration for ROBOTNAME
|
|
23
|
-
tasks/genom/:: per-Genom module tasks
|
|
24
|
-
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
# dRoby neighbour discovery
|
|
2
|
-
discovery:
|
|
3
|
-
# The host:port at which we can connect to a discovery tuplespace
|
|
4
|
-
# (default: no discovery tuplespace)
|
|
5
|
-
# tuplespace: "localhost:29568"
|
|
6
|
-
# The port at which we do ring discovery (default: disabled)
|
|
7
|
-
# ring: 42865
|
|
8
|
-
|
|
9
|
-
# dRoby host configuration
|
|
10
|
-
droby:
|
|
11
|
-
# How many errors are allowed before disconnecting from a peer
|
|
12
|
-
# (default: 10)
|
|
13
|
-
# max_errors: 1
|
|
14
|
-
# The ring discovery period if we do ring discovery (default: 0.5)
|
|
15
|
-
# period: 0.5
|
|
16
|
-
|
|
17
|
-
# Pocosim configuration
|
|
18
|
-
pocosim:
|
|
19
|
-
# The host of the GDHE display
|
|
20
|
-
# display: localhost
|
|
21
|
-
|
|
22
|
-
# An initialization script to display the scene on GDHE. The file is searched
|
|
23
|
-
# in the data/ director
|
|
24
|
-
# gdhe: lousa.gdhe
|
|
25
|
-
|
|
26
|
-
# The Gazebo world file for pocosim/gazebo simulations. The file is searched
|
|
27
|
-
# in the data/ directory
|
|
28
|
-
# gazebo: lousa.world
|
|
29
|
-
|
|
30
|
-
# Logging configuration
|
|
31
|
-
log:
|
|
32
|
-
# Log system events (default: false)
|
|
33
|
-
# events: true
|
|
34
|
-
|
|
35
|
-
# Disables the log server (default: enabled)
|
|
36
|
-
# server: false
|
|
37
|
-
#
|
|
38
|
-
# ... or configure it
|
|
39
|
-
# server:
|
|
40
|
-
# # The port to listen on (for service discovery)
|
|
41
|
-
# port: 48933
|
|
42
|
-
# # The discovery period
|
|
43
|
-
# period: 10
|
|
44
|
-
|
|
45
|
-
# Logging levels. It is a hash of Component: level (where level
|
|
46
|
-
# is one of DEBUG, INFO, WARN and FATAL).
|
|
47
|
-
# levels:
|
|
48
|
-
# Roby: INFO
|
|
49
|
-
# Genom: INFO
|
|
50
|
-
|
|
51
|
-
# Control configuration
|
|
52
|
-
control:
|
|
53
|
-
# Abort if a task/event exception is not caught (default: false)
|
|
54
|
-
# abort_on_exception: true
|
|
55
|
-
# Abort if an application exception occurs (default: false)
|
|
56
|
-
# abort_on_application_exception: true
|
|
57
|
-
|
|
58
|
-
# If the GC should be run at each control loop (default: false)
|
|
59
|
-
# WARNING: for now, the performance hit for GCing at each control loop
|
|
60
|
-
# WARNING: is too high
|
|
61
|
-
# control_gc: false
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
# Per-robot configuration. In these, you can override global options, or set
|
|
65
|
-
# new options.
|
|
66
|
-
# dala:
|
|
67
|
-
# droby:
|
|
68
|
-
# # The host:port at which this robot listens
|
|
69
|
-
# host: "localhost:1287"
|
|
70
|
-
|
|
71
|
-
# vim: sw=2
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# This file is called to do application-global configuration. For configuration
|
|
2
|
-
# specific to a robot, edit config/NAME.rb, where NAME is the robot name.
|
|
3
|
-
|
|
4
|
-
# Require Roby components
|
|
5
|
-
#
|
|
6
|
-
# Roby.app.using 'planning'
|
|
7
|
-
# Roby.app.using 'distributed'
|
|
8
|
-
# Roby.app.using 'genom'
|
|
9
|
-
|
|
10
|
-
require 'roby/schedulers/basic'
|
|
11
|
-
Roby.scheduler = Roby::Schedulers::Basic.new
|
|
12
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# The main planner. A planner of this model is automatically added in the
|
|
2
|
-
# Interface planner list.
|
|
3
|
-
class MainPlanner < Roby::Planning::Planner
|
|
4
|
-
method(:navigation, :returns => Services::Navigation)
|
|
5
|
-
method(:localization, :returns => Services::Localization)
|
|
6
|
-
|
|
7
|
-
method(:localization, :id => 'test') do
|
|
8
|
-
Services::Localization.new(:id => 'localization')
|
|
9
|
-
end
|
|
10
|
-
method(:localization, :id => 'another') do
|
|
11
|
-
Services::Localization.new(:id => 'another_localization')
|
|
12
|
-
end
|
|
13
|
-
|
|
14
|
-
method(:navigation, :id => 'test') do
|
|
15
|
-
root = Services::Navigation.new
|
|
16
|
-
root.depends_on(loc = localization)
|
|
17
|
-
root
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
|