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
data/TODO.txt
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
= TODO
|
|
2
|
-
|
|
3
|
-
== Refactoring
|
|
4
|
-
=== Small stuff
|
|
5
|
-
* remote_id => network_id
|
|
6
|
-
* incremental_dump? => dump_reference?
|
|
7
|
-
|
|
8
|
-
=== Big stuff
|
|
9
|
-
* fix the Roby singleton methods/Roby::Control/Roby::Propagation mess. Maybe move
|
|
10
|
-
all the execution-related stuff in a subclass of Plan, MainPlan. That would allow
|
|
11
|
-
per-MainPlan execution management and in the end having multiple executable
|
|
12
|
-
plan in the same plan manager (I'm thinking bi-simulation)
|
|
13
|
-
* have separate relation graphs in each Plan object. That would be possible
|
|
14
|
-
if we don't allow anymore to change any event or task relations if the task
|
|
15
|
-
is not included in a plan, which would greatly simply logging-related stuff
|
|
16
|
-
(for instance, rebuilding a representation of plans from logged data).
|
|
17
|
-
Moreover, we would not have tasks hanging around anymore because they have
|
|
18
|
-
never been removed from any plan.
|
|
19
|
-
* in dRoby, separate the implementation of the RX/TX and
|
|
20
|
-
connection/disconnection protocol, including the management of the TX queue
|
|
21
|
-
(callbacks, synchronous/asynchronous).
|
|
22
|
-
* have a thread-safe handling of transactions. This requires a few things:
|
|
23
|
-
- separate relation graphs: have one relation graph per plan object: see previous
|
|
24
|
-
point.
|
|
25
|
-
- stop using method forwarding, which is not the good way to do that.
|
|
26
|
-
Instead, do as for distributed: update the task status in the transaction
|
|
27
|
-
thread. Need to define a notion of "transaction thread" and how messages
|
|
28
|
-
can get propagated there, though.
|
|
29
|
-
|
|
30
|
-
== Core
|
|
31
|
-
* dynamic parameters. State prediction in both plan and transaction context:
|
|
32
|
-
allow to predict the effect of changing the value of dynamic parameters in
|
|
33
|
-
transaction context.
|
|
34
|
-
|
|
35
|
-
* when predicates like happened? are called in a propagation context, and
|
|
36
|
-
we don't know the result yet (happened? = false), register a continuation and
|
|
37
|
-
its dependency on the event. Include this continuation in the event set and
|
|
38
|
-
sort it accordingly.
|
|
39
|
-
|
|
40
|
-
* in #replace, use Hierarchy#fullfilled_events to check that
|
|
41
|
-
all needed events are provided. If some are missing, use define_event to try
|
|
42
|
-
to add a new one dynamically
|
|
43
|
-
|
|
44
|
-
* when replacing an event generator, what to do with its handlers ?
|
|
45
|
-
- either we discard them, because some handlers are used in a specific way
|
|
46
|
-
- either we apply them on the new task
|
|
47
|
-
- unfortunately there is no good answer... Both are useful and it is
|
|
48
|
-
difficult (if not impossible) to know what to do. Having no solution for
|
|
49
|
-
this problem reduces the usefulness of event handlers greatly.
|
|
50
|
-
|
|
51
|
-
* Need to tag relations with a name so that we can find what is what (kind of
|
|
52
|
-
'roles'). For instance, in PlanningLoop, we would tag the seeds (i.e. the
|
|
53
|
-
planned tasks) with a certain name which would allow to add any child without
|
|
54
|
-
the loop code noticing
|
|
55
|
-
|
|
56
|
-
* add a multiplicity parameter for hierarchy relations which tells
|
|
57
|
-
how many child task of a given kind are expected by the parent task. Add a
|
|
58
|
-
'realized_by' transition for that. For instance, in case of
|
|
59
|
-
Pom::Localization, we can tell that the task expects at least one
|
|
60
|
-
Pom::Estimator. If the last estimator breaks, we can repair the plan online
|
|
61
|
-
by adding a transition.
|
|
62
|
-
|
|
63
|
-
* we NEED plan merging: if we reuse a task which is already running, it should
|
|
64
|
-
be transparent for the new process: this new task tree will call start!, but
|
|
65
|
-
the task is running. Moreover, if it is synchronizing on the start event, it
|
|
66
|
-
should appear "as if" the event has been emitted
|
|
67
|
-
|
|
68
|
-
* Check the capability we have to put every application block in transaction
|
|
69
|
-
context. This would allow for instance to discard **all** plan modification
|
|
70
|
-
done by an exception handler (or plan command, event handler, you get my
|
|
71
|
-
drift) if an exception is raised. I think it would be a worthy feature [This
|
|
72
|
-
can't be done because of the transaction creation cost]
|
|
73
|
-
|
|
74
|
-
* Kill local tasks that are in force_gc even if they have parents, if their
|
|
75
|
-
parents are remote tasks
|
|
76
|
-
|
|
77
|
-
* rename Roby::TaskModelTag::argument into 'arguments' (beware of name clash
|
|
78
|
-
with the accessor)
|
|
79
|
-
|
|
80
|
-
* Fix transaction proxying. Better use the same kind of model than in dRoby:
|
|
81
|
-
create slightly modified tasks of the same model than the proxied event, do
|
|
82
|
-
not proxy task events
|
|
83
|
-
|
|
84
|
-
* Find a way to remove the "return unless proxying?" in top of proxy_code. It sucks
|
|
85
|
-
|
|
86
|
-
* fix handling of execution agents: we should re-spawn the execution agents
|
|
87
|
-
only if there is an execution agent model on the task model. We currently use
|
|
88
|
-
respawn on the execution agent instance. The problem lies in, for instance,
|
|
89
|
-
ConnectionTask which are respawned for all pending remote tasks.
|
|
90
|
-
ConnectionTask should never be created because of the exected_by relation.
|
|
91
|
-
|
|
92
|
-
== Planning
|
|
93
|
-
* fix memory leak regarding planning loops: for now, make_loop creates a new
|
|
94
|
-
planning method each time make_loop is called. The problem is that the
|
|
95
|
-
created method should actually be local to the planner object, not the
|
|
96
|
-
planner model (we are doing the latter right now).
|
|
97
|
-
|
|
98
|
-
== Distributed
|
|
99
|
-
* extension of communication to really have a multi-robot system. It is for now
|
|
100
|
-
too much peer-to-peer
|
|
101
|
-
- a pDB should always send the messages about objects it owns. For now, we
|
|
102
|
-
check two things: that the involved objects are owned and that the message
|
|
103
|
-
comes from the inside (we never forward a message coming from outside).
|
|
104
|
-
There is a synchronization problem here:
|
|
105
|
-
|
|
106
|
-
A sends a message M about a joint ab object to B
|
|
107
|
-
B does not send the message to C
|
|
108
|
-
but B can send other messages to C, including the /consequences/ of the M message
|
|
109
|
-
|
|
110
|
-
Result: C knows about the consequences of M, but not about M itself.
|
|
111
|
-
|
|
112
|
-
The solution is to mark all messages with an UID, and forward new messages
|
|
113
|
-
when we decode them (in PeerServer#demux)
|
|
114
|
-
- make sure unknown models are properly handled in 3-peers scenario. In
|
|
115
|
-
particular, the following situation should work
|
|
116
|
-
|
|
117
|
-
peer 1 and 2 know about a SpecificModel task model
|
|
118
|
-
peer 3 does not
|
|
119
|
-
|
|
120
|
-
If 1 sees tasks of 2 *through* the plan of 3, and if these tasks are of the
|
|
121
|
-
SpecificModel model, then they should be instances of the SpecificModel
|
|
122
|
-
class
|
|
123
|
-
|
|
124
|
-
* There is a race condition when removing objects: if a peer A is building a
|
|
125
|
-
transaction involving tasks from a peer B, and if the peer B removes the
|
|
126
|
-
tasks, then there is a race condition between the time B sends the
|
|
127
|
-
transaction and the time it processes the remove_object update from A. The
|
|
128
|
-
net effect is that when the transaction sibling is created, some tasks it
|
|
129
|
-
includes do not exist anymore. It is more general, since the same problem
|
|
130
|
-
exists when wrapping tasks in a transaction for instance.
|
|
131
|
-
|
|
132
|
-
I don't think we should really fix the race condition per se. We should in
|
|
133
|
-
general check if the object has not been removed when A processes updates
|
|
134
|
-
from B and have some ways to feedback B from A.
|
|
135
|
-
|
|
136
|
-
* Better handling of errors during transactions, better management of new
|
|
137
|
-
peers, ... DecisionControl should really be the central component handling
|
|
138
|
-
all that. Moreover, defining management policies for distributed transactions
|
|
139
|
-
should also be defined.
|
|
140
|
-
|
|
141
|
-
== UI
|
|
142
|
-
* log snapshot: build a set of logging messages which represent the current
|
|
143
|
-
state of the plan. Useful for display (it would allow to seek a lot faster)
|
|
144
|
-
and for runtime display of the plan state (send the snapshot on connection)
|
|
145
|
-
|
|
146
|
-
vim: tw=100
|
data/app/README.txt
DELETED
|
@@ -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
|
-
|
data/app/Rakefile
DELETED
data/app/config/ROBOT.rb
DELETED
data/app/config/init.rb
DELETED
|
@@ -1,33 +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
|
-
# Enable some of the standard plugins
|
|
5
|
-
# Roby.app.using 'fault_injection'
|
|
6
|
-
# Roby.app.using 'subsystems'
|
|
7
|
-
|
|
8
|
-
##############################
|
|
9
|
-
# Sets some configuration options
|
|
10
|
-
#
|
|
11
|
-
# If true, the engine aborts if an uncaught task or event exception is
|
|
12
|
-
# received. Defaults to false, as Roby has meaningful ways to handle those
|
|
13
|
-
# Roby.app.abort_on_exception = false
|
|
14
|
-
#
|
|
15
|
-
# If true, the engine aborts if an exception is raised outside of the reach of
|
|
16
|
-
# the plan-based error management. Defaults to true, as there is no safe ways
|
|
17
|
-
# to handle those.
|
|
18
|
-
# Roby.app.abort_on_application_exception = true
|
|
19
|
-
|
|
20
|
-
##############################
|
|
21
|
-
# Set the decision control object to be used during execution (can also be
|
|
22
|
-
# done per-robot)
|
|
23
|
-
#
|
|
24
|
-
# Roby.control = Roby::DecisionControl.new
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
##############################
|
|
28
|
-
# Set the scheduler object to be used during execution (can also be done
|
|
29
|
-
# per-robot by setting it in config/#{ROBOT}.rb)
|
|
30
|
-
|
|
31
|
-
require 'roby/schedulers/basic'
|
|
32
|
-
Roby.scheduler = Roby::Schedulers::Basic.new
|
|
33
|
-
|
data/app/config/roby.yml
DELETED
data/app/controllers/ROBOT.rb
DELETED
data/app/planners/ROBOT/main.rb
DELETED
data/app/planners/main.rb
DELETED
data/app/scripts/distributed
DELETED
data/app/scripts/replay
DELETED
data/app/scripts/results
DELETED
data/app/scripts/run
DELETED
data/app/scripts/server
DELETED
data/app/scripts/shell
DELETED
data/app/scripts/test
DELETED
data/app/tasks/.gitattributes
DELETED
|
File without changes
|
|
File without changes
|
data/bin/roby-shell
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
#! /usr/bin/env ruby
|
|
2
|
-
|
|
3
|
-
require 'drb'
|
|
4
|
-
require 'roby'
|
|
5
|
-
require 'irb'
|
|
6
|
-
|
|
7
|
-
uri = ARGV.shift
|
|
8
|
-
|
|
9
|
-
DRb.start_service
|
|
10
|
-
control = DRbObject.new nil, uri
|
|
11
|
-
|
|
12
|
-
IRB.setup(nil)
|
|
13
|
-
|
|
14
|
-
ws = IRB::WorkSpace.new(binding)
|
|
15
|
-
irb = IRB::Irb.new(ws)
|
|
16
|
-
IRB.conf[:MAIN_CONTEXT] = irb.context
|
|
17
|
-
|
|
18
|
-
trap("SIGINT") do
|
|
19
|
-
irb.signal_handle
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
catch(:IRB_EXIT) do
|
|
23
|
-
irb.eval_input
|
|
24
|
-
end
|
|
25
|
-
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: A First Roby Application
|
|
3
|
-
sort_info: 300
|
|
4
|
-
--- pipeline:tags,markdown,blocks
|
|
5
|
-
|
|
6
|
-
This page will present another facet of Roby. What we saw until now is how,
|
|
7
|
-
in Roby, one can represent the task actions and build plans that describe the
|
|
8
|
-
task execution. What we will see here is how Roby tie the different models
|
|
9
|
-
together to offer an application environment.
|
|
10
|
-
|
|
11
|
-
{include_file: {filename: src/basics_shell_header.txt, escape_html: false}}
|
|
12
|
-
|
|
13
|
-
Creation
|
|
14
|
-
--------
|
|
15
|
-
|
|
16
|
-
Go into a *regular shell* (i.e. not the Ruby shell) and create a new directory.
|
|
17
|
-
That directory will become your first Roby application by running "roby init":
|
|
18
|
-
|
|
19
|
-
$ mkdir first_app
|
|
20
|
-
$ cd first_app
|
|
21
|
-
$ roby init
|
|
22
|
-
creating tasks/
|
|
23
|
-
creating tasks/.gitattributes
|
|
24
|
-
creating scripts/
|
|
25
|
-
creating scripts/test
|
|
26
|
-
creating scripts/shell
|
|
27
|
-
creating scripts/server
|
|
28
|
-
creating scripts/run
|
|
29
|
-
creating scripts/results
|
|
30
|
-
creating scripts/replay
|
|
31
|
-
creating scripts/generate/
|
|
32
|
-
creating scripts/generate/bookmarks
|
|
33
|
-
creating scripts/distributed
|
|
34
|
-
creating planners/
|
|
35
|
-
creating planners/main.rb
|
|
36
|
-
creating data/
|
|
37
|
-
creating data/.gitattributes
|
|
38
|
-
creating controllers/
|
|
39
|
-
creating controllers/.gitattributes
|
|
40
|
-
creating config/
|
|
41
|
-
creating config/roby.yml
|
|
42
|
-
creating config/init.rb
|
|
43
|
-
creating config/app.yml
|
|
44
|
-
creating Rakefile
|
|
45
|
-
creating README.txt
|
|
46
|
-
|
|
47
|
-
There's a lot of stuff created, but don't worry we'll learn what this is all
|
|
48
|
-
about later on. Right now, we're only interested in two small parts of it:
|
|
49
|
-
|
|
50
|
-
* the tasks/ directory, which is where task models (task classes) should be
|
|
51
|
-
defined
|
|
52
|
-
* the robot's controllers. These files contain the code that is run when the
|
|
53
|
-
application is started.
|
|
54
|
-
|
|
55
|
-
The goForward robot
|
|
56
|
-
-------------------
|
|
57
|
-
As an introduction, we will create a simulated robot controller which makes the
|
|
58
|
-
robot go forward at constant speed.
|
|
59
|
-
|
|
60
|
-
First, let's create the files specific to this robot
|
|
61
|
-
|
|
62
|
-
$ roby robot goForward
|
|
63
|
-
creating planners/goForward/
|
|
64
|
-
creating planners/goForward/main.rb
|
|
65
|
-
creating tasks/goForward/
|
|
66
|
-
creating tasks/goForward/.gitattributes
|
|
67
|
-
creating controllers/goForward.rb
|
|
68
|
-
creating config/goForward.rb
|
|
69
|
-
|
|
70
|
-
Let's define the task model. Edit tasks/go\_forward.rb and add
|
|
71
|
-
|
|
72
|
-
{coderay:: ruby}
|
|
73
|
-
class GoForward < Roby::Task
|
|
74
|
-
# The GoForward task needs the robot speed to be specified
|
|
75
|
-
arguments :speed
|
|
76
|
-
|
|
77
|
-
# Block called at every execution loop if the task is running. It simulates
|
|
78
|
-
# the robot moving at the specified speed.
|
|
79
|
-
poll do
|
|
80
|
-
State.pos.x += speed
|
|
81
|
-
end
|
|
82
|
-
|
|
83
|
-
# This task does not need any specific action to stop
|
|
84
|
-
terminates
|
|
85
|
-
end
|
|
86
|
-
{coderay}
|
|
87
|
-
|
|
88
|
-
In the controller file, controllers/goForward.rb, we add the code that
|
|
89
|
-
should run at startup:
|
|
90
|
-
|
|
91
|
-
{coderay:: ruby}
|
|
92
|
-
# Define the original value of x
|
|
93
|
-
State.pos.x = 0
|
|
94
|
-
|
|
95
|
-
# Will display the value of x every 1 second
|
|
96
|
-
Roby.every(1) do
|
|
97
|
-
puts State.pos.x
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
# Create the task and start moving !
|
|
101
|
-
Roby.plan.insert(go = GoForward.new(:speed => 0.1))
|
|
102
|
-
puts "Going forward at speed #{go.speed}"
|
|
103
|
-
go.start!
|
|
104
|
-
{coderay}
|
|
105
|
-
|
|
106
|
-
You can then start the robot controller with scripts/run and stop it with CTRL+C.
|
|
107
|
-
|
|
108
|
-
$ scripts/run goForward
|
|
109
|
-
335705:25:08.324 (goForward) loading controller file /home/doudou/dev/roby-tutorials/controllers/goForward.rb
|
|
110
|
-
Going forward at speed 0.1
|
|
111
|
-
335705:25:08.356 (goForward) done initialization
|
|
112
|
-
0
|
|
113
|
-
0.9
|
|
114
|
-
1.9
|
|
115
|
-
2.9
|
|
116
|
-
335705:25:16.449 (Roby) received interruption request
|
|
117
|
-
335705:25:16.524 (Roby) control quitting. Waiting for 1 tasks to finish (1 tasks still in plan)
|
|
118
|
-
|
|
119
|
-
Broken down explanation
|
|
120
|
-
-----------------------
|
|
121
|
-
* the Roby::State object holds all the configuration and state data that
|
|
122
|
-
represents the robot's state. In our case, we initialize the robot's position
|
|
123
|
-
in the controller file, and then update it when the robot moves.
|
|
124
|
-
|
|
125
|
-
* to understand the meaning of the __poll__ statement, you have to understand
|
|
126
|
-
the idea behind Roby's execution model. Roby relies on a _synchronous_
|
|
127
|
-
execution model, which is basically a two-steps loops (a more detailed
|
|
128
|
-
explanation will come later). This two-steps loops is basically:
|
|
129
|
-
1. gather all events that have occured since the last loop
|
|
130
|
-
2. propagate to those events through the signal and forward relations
|
|
131
|
-
|
|
132
|
-
In practice, this event loop runs with a fixed period which is by default
|
|
133
|
-
100ms. This period can be changed in the configuration file config/app.yml.
|
|
134
|
-
|
|
135
|
-
Now, what is the role of __poll__ here ? The block given to +poll+ is executed
|
|
136
|
-
at each execution cycle _while the task is running_. It can therefore be
|
|
137
|
-
used to _implement_ the actual task functionality (or to check the state of
|
|
138
|
-
external processes, ...)
|
|
139
|
-
|