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,11 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Introduction
|
|
3
|
-
sort_info: 0
|
|
4
|
-
--- name:content pipeline:tags,markdown,blocks
|
|
5
|
-
This section will present the basics of plan management using Roby. You will
|
|
6
|
-
learn the following things:
|
|
7
|
-
* the two core objects used in Roby to represent the robot's actions
|
|
8
|
-
* what is a Roby application and how create one
|
|
9
|
-
* how it is possible to interact with a running Roby application
|
|
10
|
-
* how to build complex actions from simple ones
|
|
11
|
-
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Using Plan Display
|
|
3
|
-
sort_info: 600
|
|
4
|
-
--- pipeline:tags,markdown
|
|
5
|
-
|
|
6
|
-
What we will see in this page is how to trace the execution flow (the flow of
|
|
7
|
-
events), and understand a bit more how the plans you will build are actually
|
|
8
|
-
executed by the system. We will re-use the planned\_move planning action we just
|
|
9
|
-
built.
|
|
10
|
-
|
|
11
|
-
Getting a log file
|
|
12
|
-
------------------
|
|
13
|
-
|
|
14
|
-
Plan execution logs are expensive from a CPU point of view, so they are disabled
|
|
15
|
-
by default. Enable them back by editing config/app.yml and uncomment
|
|
16
|
-
"events: true" around line 23.
|
|
17
|
-
|
|
18
|
-
Now, run again the controller
|
|
19
|
-
|
|
20
|
-
# scripts/run goForward
|
|
21
|
-
|
|
22
|
-
and in the shell, do
|
|
23
|
-
|
|
24
|
-
>> planned_move! :x => 10, :y => 10
|
|
25
|
-
=> MoveTo{goal => Vector3D(x=10.000000,y=10.000000,z=0.000000)}:0x4840c8d8[]
|
|
26
|
-
>>
|
|
27
|
-
!task MoveTo{goal => Vector3D(x=10.000000,y=10.000000,z=0.000000)}:0x4840c8d8[] finished successfully
|
|
28
|
-
|
|
29
|
-
Finally, let's save the log files for further analysis (otherwise, one could
|
|
30
|
-
destroy them by restarting the controller).
|
|
31
|
-
|
|
32
|
-
# scripts/results planned_move
|
|
33
|
-
moving /home/doudou/dev/first_app/log to /home/doudou/dev/roby-tutorials/results/20080502-planned_move
|
|
34
|
-
|
|
35
|
-
"scripts/results" copies all files in "log/" into a subdirectory
|
|
36
|
-
of the result dir (by default APP\_DIR/results, but can be changed in
|
|
37
|
-
"config/app.yml"). The target directory name is generated following a pattern of
|
|
38
|
-
"current\_date-name\_provided\_on\_command\_line".
|
|
39
|
-
|
|
40
|
-
Displaying the log file
|
|
41
|
-
-----------------------
|
|
42
|
-
Go in the directory where the results are (see <tt>scripts/results</tt> output).
|
|
43
|
-
On my machine, the command would look like this:
|
|
44
|
-
|
|
45
|
-
$ cd /home/doudou/dev/roby-tutorials/results/20080502-planned_move
|
|
46
|
-
$ ls
|
|
47
|
-
goForward-events.log
|
|
48
|
-
goForward-index.log
|
|
49
|
-
|
|
50
|
-
If you look into it, two PathPlan files are present: <tt>PathPlan-events.log</tt> and
|
|
51
|
-
"PathPlan-index.log". The first one includes a trace of everything that
|
|
52
|
-
happens in the Roby controller which has been traced. The second one can
|
|
53
|
-
actually be generated from data in the first one. It is simply used to speed up
|
|
54
|
-
operations.
|
|
55
|
-
|
|
56
|
-
The data in the event log can be used to display the plan operations in a GUI.
|
|
57
|
-
For that, you need to have installed [Ruby/Qt4](http://korundum.rubyforge.org), as
|
|
58
|
-
the GUI is written using Qt and Ruby.
|
|
59
|
-
|
|
60
|
-
To start it, simply do the following in the directory of the log files:
|
|
61
|
-
|
|
62
|
-
$ roby-log replay goForward
|
|
63
|
-
|
|
64
|
-
The following window should appear:
|
|
65
|
-
|
|
66
|
-

|
|
67
|
-
|
|
68
|
-
This window is separated in three:
|
|
69
|
-
|
|
70
|
-
* the toplevel part ("Data sources") is the list of data sources defined for
|
|
71
|
-
this project. It is for instance possible to have a synchronized display of
|
|
72
|
-
the logs of two different Roby controllers -- for multi-robot setup.
|
|
73
|
-
* the second part ("Displays") is the set of displays defined. More about that later.
|
|
74
|
-
* the third part ("Play") is the replay controls: play, fast forward, position, ...
|
|
75
|
-
|
|
76
|
-
Right now, we will be looking at the plan structure and execution trace. The
|
|
77
|
-
"Relations" display is designed for that. Let's add one by clicking on the
|
|
78
|
-
"Add" button just next to the display type combo. The configuration options
|
|
79
|
-
appear (including the data source associated with the display), and a new
|
|
80
|
-
window:
|
|
81
|
-
|
|
82
|
-

|
|
83
|
-
|
|
84
|
-
This display will show two things: the task structure (i.e. how tasks are
|
|
85
|
-
related to each other) and the event propagation (i.e. how events call and/or
|
|
86
|
-
emit each other). The set of task relations to display has to be selected on
|
|
87
|
-
the configuration part of the relation display, including the colors for each
|
|
88
|
-
displayed relation. For our purposes, we only need the "Hierarchy" and the
|
|
89
|
-
"PlannedBy" relations, so check them in the display configuration, as it is done
|
|
90
|
-
one the image above.
|
|
91
|
-
|
|
92
|
-
Moreover,
|
|
93
|
-
* go in the "View" menu of the relation display and uncheck "Hide
|
|
94
|
-
finalized", that will be useful for later.
|
|
95
|
-
* go in the "Task labels" and uncheck "Ownership". Ownership is only useful for
|
|
96
|
-
multi-robot plans.
|
|
97
|
-
|
|
98
|
-
**Very important note** your own display may not look exactly like the ones
|
|
99
|
-
displayed here. Some of the features showed here (like threaded planning) are
|
|
100
|
-
asynchronous and as such the exact displays depend on the execution timing. Note
|
|
101
|
-
that, even though it is the case, the robot _behaviour_ remains unchanged.
|
|
102
|
-
{.warning}
|
|
103
|
-
|
|
104
|
-
Startup of the "planned\_move!" action
|
|
105
|
-
---------------------------------------
|
|
106
|
-
|
|
107
|
-
Let's get to the first task-related events. Click on the 'Step' button until
|
|
108
|
-
something appears on the display. It should look like the next image:
|
|
109
|
-
|
|
110
|
-

|
|
111
|
-
|
|
112
|
-
The displays shows two plans (black boxes). The left one is the plan as it is
|
|
113
|
-
being executed. The right one is called a _transaction_ and allows to build a
|
|
114
|
-
new plan without interfering with the execution. You don't really need to know
|
|
115
|
-
how it works, only that it does the job. The task description includes the task
|
|
116
|
-
model and the task owners (which is only useful in multi-robot setup). The
|
|
117
|
-
_Task labels_ menu allows to customize that.
|
|
118
|
-
|
|
119
|
-
The left part is a representation of the plan built when the planned\_move!
|
|
120
|
-
command is entered in the shell. It consists of a generic task (Roby::Task)
|
|
121
|
-
which is planned\_by a Roby::PlanningTask. This is how Roby handles action
|
|
122
|
-
requests from the shell: (i) it searches a planner defined for that robot with
|
|
123
|
-
the specific action and (ii) generates the plan representing the planning
|
|
124
|
-
process _in a separate thread_.
|
|
125
|
-
|
|
126
|
-
Once that initial plan has been built, the Roby::PlanningTask task has been
|
|
127
|
-
started. The various cases of event propagation are represented in different
|
|
128
|
-
ways, based on whether or not the event is controlable or contingent, if it has been
|
|
129
|
-
called and/or emitted. Finally, two different arrow representations are used for
|
|
130
|
-
signalling (plain) and forwarding (dotted):
|
|
131
|
-
|
|
132
|
-

|
|
133
|
-
|
|
134
|
-
A note about propagation representation: it would be useless to represent all
|
|
135
|
-
the event propagation from the beginning of the execution to the current point.
|
|
136
|
-
The display therefore represents only the propagations that have taken place
|
|
137
|
-
_since the last display point_. It means that, if you go forward 10
|
|
138
|
-
seconds, it will display 10 seconds worth of propagation. In our case, we
|
|
139
|
-
displayed only the first execution cycle and we see that, in this cycle, the
|
|
140
|
-
planning task "start" event has been called and emitted.
|
|
141
|
-
|
|
142
|
-
The MoveTo plan
|
|
143
|
-
---------------
|
|
144
|
-
|
|
145
|
-
Advance again using 'Step' until the display looks like this:
|
|
146
|
-
|
|
147
|
-

|
|
148
|
-
|
|
149
|
-
The MoveTo action has been planned and the executed plan is modified to reflect
|
|
150
|
-
that. The MoveTo action itself is then started, and that is propagated to the
|
|
151
|
-
ComputePath 'start' event through the signalling relation that was established
|
|
152
|
-
in planned\_move.
|
|
153
|
-
|
|
154
|
-
Next execution step gives us the following:
|
|
155
|
-
|
|
156
|
-

|
|
157
|
-
|
|
158
|
-
ComputePath emitted its "success" event. We see here that the emission of the
|
|
159
|
-
"success" event of that task does not mean 'the plan modification has just took
|
|
160
|
-
place' but instead that 'it has taken place some time earlier'.
|
|
161
|
-
|
|
162
|
-
The ComputePath task has also finished generating the path, which is why
|
|
163
|
-
ExecutePath is started. Here, the dotted lines between the events
|
|
164
|
-
represent a forwarding relation between them, while the plain lines
|
|
165
|
-
represent signal relations.
|
|
166
|
-
|
|
167
|
-
Finally, light grey here represents tasks that have finished with the "success"
|
|
168
|
-
event. Tasks whose "failed" event has been emitted are represented in red.
|
|
169
|
-
|
|
170
|
-
To finish: the garbage collection process
|
|
171
|
-
-----------------------------------------
|
|
172
|
-
|
|
173
|
-
Advance a few steps further, until something more happens. You should see
|
|
174
|
-
something like this:
|
|
175
|
-
|
|
176
|
-

|
|
177
|
-
|
|
178
|
-
Here, ExecutePath has finished its execution with success and MoveTo is therefore
|
|
179
|
-
finished as well -- per the forwarding relation between those two events. Note
|
|
180
|
-
that the tasks are now in a dark grey instead than a light one.
|
|
181
|
-
|
|
182
|
-
The mission of the robot, MoveTo, is therefore finished. From the plan
|
|
183
|
-
management point of view, it makes keeping a reference to it useless. In the
|
|
184
|
-
same way, the tasks that were in the plan for the purpose of fullfilling that
|
|
185
|
-
mission are rendered useless as well and can also be removed. The process which
|
|
186
|
-
removes those tasks is called the <i>garbage collection process</i> and runs at
|
|
187
|
-
the end of the execution cycle.
|
|
188
|
-
|
|
189
|
-
The general idea is to kill and remove from the plan the tasks that are not
|
|
190
|
-
useful for the achievement of the robot's missions. The "important" tasks for
|
|
191
|
-
the robot is defined by the set of its missions. These are added by calling
|
|
192
|
-
Plan#add\_mission instead of the Plan#add that we were using until now. Note
|
|
193
|
-
that, by calling the action through the shell, #add\_mission has been called
|
|
194
|
-
automatically by the framework.
|
|
195
|
-
|
|
196
|
-
Then, the task relations are used to determine what are the tasks, in the plan,
|
|
197
|
-
which are actually useful for those "important" tasks. This is based on the
|
|
198
|
-
convention that if a <tt>a=>b</tt> relation exists, then "b" is useful for "a".
|
|
199
|
-
|
|
200
|
-
The remaining tasks, i.e. the tasks that are not useful, are killed (if possible)
|
|
201
|
-
and removed from the plan. When it is done, the task is said to be finalized and
|
|
202
|
-
are displayed in dark grey (if they are not hidden in the View menu).
|
|
203
|
-
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Interactive Shell
|
|
3
|
-
sort_info: 400
|
|
4
|
-
--- pipeline:tags,markdown,blocks
|
|
5
|
-
|
|
6
|
-
As we saw earlier, the execution of Roby applications is done by an _event
|
|
7
|
-
loop_. The reactivity of the supervision system obviously depend on the
|
|
8
|
-
non-interruption of that event loop. Therefore, in a Roby application, the user
|
|
9
|
-
runs a remote shell that is used to send specific commands to the Roby
|
|
10
|
-
application itself.
|
|
11
|
-
|
|
12
|
-
{include_file: {filename: src/basics_shell_header.txt, escape_html: false}}
|
|
13
|
-
|
|
14
|
-
Planners
|
|
15
|
-
--------
|
|
16
|
-
Right now, we saw two different places where code is stored:
|
|
17
|
-
1. the tasks/ files, where task models are defined
|
|
18
|
-
2. the controllers/ files, which is the startup code for the application
|
|
19
|
-
|
|
20
|
-
What we will see in this section is a third component: the **planners**. These
|
|
21
|
-
planners define the aggregate actions that the robot knows about. As we will see
|
|
22
|
-
later, they also are the user interface of the robot.
|
|
23
|
-
|
|
24
|
-
Exporting actions to the user's shell
|
|
25
|
-
-------------------------------------
|
|
26
|
-
|
|
27
|
-
Edit planners/goForward/main.rb and edit so that it looks like this:
|
|
28
|
-
|
|
29
|
-
{coderay:: ruby}
|
|
30
|
-
require 'planners/main'
|
|
31
|
-
class MainPlanner
|
|
32
|
-
method(:move) do
|
|
33
|
-
GoForward.new :speed => arguments[:speed]
|
|
34
|
-
end
|
|
35
|
-
end
|
|
36
|
-
{coderay}
|
|
37
|
-
|
|
38
|
-
That exports a very simple action to the user's shell. Now, we can try out the
|
|
39
|
-
Roby shell. First, remove the last three lines in controllers/goForward.rb so
|
|
40
|
-
that it looks like this:
|
|
41
|
-
|
|
42
|
-
{coderay:: ruby}
|
|
43
|
-
# Define the original value of x
|
|
44
|
-
State.pos.x = 0
|
|
45
|
-
|
|
46
|
-
# Will display the value of x every 1 second
|
|
47
|
-
Roby.every(1) do
|
|
48
|
-
puts State.pos.x
|
|
49
|
-
end
|
|
50
|
-
{coderay}
|
|
51
|
-
|
|
52
|
-
Now, start the roby application in one console:
|
|
53
|
-
|
|
54
|
-
$ scripts/run goForward
|
|
55
|
-
44848:44:51.498 (Roby) GC.enable does not accept an argument. GC will not be controlled by Roby
|
|
56
|
-
344848:44:51.581 (goForward) loaded Roby 0.7.90 on ruby 1.8.7 (2008-08-11 patchlevel 72) [powerpc-linux]
|
|
57
|
-
344848:44:51.603 (goForward) loading controller file /home/doudou/dev/roby-tutorials/controllers/goForward.rb
|
|
58
|
-
344848:44:51.605 (goForward) done initialization
|
|
59
|
-
0
|
|
60
|
-
0
|
|
61
|
-
|
|
62
|
-
Finally, start the shell in another console:
|
|
63
|
-
|
|
64
|
-
$ scripts/shell
|
|
65
|
-
localhost:48902 >
|
|
66
|
-
|
|
67
|
-
The new prompt you get is a Ruby prompt (i.e. you should type Ruby code in it).
|
|
68
|
-
Some special commands are available to interact with the Roby controller. For
|
|
69
|
-
instance:
|
|
70
|
-
|
|
71
|
-
{coderay:: ruby}
|
|
72
|
-
> actions
|
|
73
|
-
=> [move]
|
|
74
|
-
{coderay}
|
|
75
|
-
|
|
76
|
-
The 'action' command lists the available planning methods that are exported
|
|
77
|
-
through the MainPlanner class. Let's try it (**notice the '!' at the end of
|
|
78
|
-
move!**):
|
|
79
|
-
|
|
80
|
-
{coderay:: ruby}
|
|
81
|
-
> task = move! :speed => 1
|
|
82
|
-
=> GoForward{speed => 1}:0x48410aa8[]
|
|
83
|
-
> task.running?
|
|
84
|
-
=> true
|
|
85
|
-
> task.stop!
|
|
86
|
-
=> []
|
|
87
|
-
!task GoForward{speed => 1}:0x4850ddb0[] failed
|
|
88
|
-
!task GoForward{speed => 1}:0x4850ddb0[] stopped by user request
|
|
89
|
-
> task.running?
|
|
90
|
-
=> false
|
|
91
|
-
{coderay}
|
|
92
|
-
|
|
93
|
-
The new task is running just after it has been added ! In Roby, a new task, when
|
|
94
|
-
added in the main plan, becomes eligible for _scheduling_, i.e. a special
|
|
95
|
-
component tries to find the best time to start it (which, in our case, is
|
|
96
|
-
"now"). We'll see more about this later.
|
|
97
|
-
{: .warning}
|
|
98
|
-
|
|
99
|
-
You can see that the action method returns the task that the planning method has
|
|
100
|
-
returned. Even though we are on a remote shell, the returned task object
|
|
101
|
-
supports sending commands, checking its status, emitting events, ...
|
|
102
|
-
|
data/doc/guide/src/default.css
DELETED
|
@@ -1,319 +0,0 @@
|
|
|
1
|
-
/* andreas03 - an open source xhtml/css website layout by Andreas Viklund - http://andreasviklund.com . Free to use for any purpose as long as the proper credits are given to the original author.
|
|
2
|
-
|
|
3
|
-
Version: 1.2
|
|
4
|
-
(Nov 28, 2005)
|
|
5
|
-
|
|
6
|
-
Screen layout: */
|
|
7
|
-
|
|
8
|
-
body{
|
|
9
|
-
margin:0;
|
|
10
|
-
padding:30px 0;
|
|
11
|
-
font:76% tahoma,verdana,sans-serif;
|
|
12
|
-
background:#047 url(images/bodybg.png) repeat-x fixed;
|
|
13
|
-
color:#222;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
#thetop{
|
|
17
|
-
margin:0;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
#container{
|
|
21
|
-
width:720px;
|
|
22
|
-
margin:0 auto;
|
|
23
|
-
padding:20px 20px 0 20px;
|
|
24
|
-
background:#fff url(images/contbg.png) no-repeat;
|
|
25
|
-
color:#222;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
a{
|
|
29
|
-
text-decoration:none;
|
|
30
|
-
background-color:inherit;
|
|
31
|
-
color:#26c;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
a:hover {
|
|
35
|
-
text-decoration:underline;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
a img{
|
|
39
|
-
border:0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
p{
|
|
43
|
-
margin:0 0 15px 0;
|
|
44
|
-
line-height:1.5em;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
#main p,#sidebar p{
|
|
48
|
-
padding:0 0 0 10px;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
#logo{
|
|
52
|
-
float:left;
|
|
53
|
-
width:240px;
|
|
54
|
-
margin:0 20px 0 0;
|
|
55
|
-
padding:0 0 25px 0;
|
|
56
|
-
background:#eee;
|
|
57
|
-
border:4px solid #dde;
|
|
58
|
-
text-align:center;
|
|
59
|
-
color:#555;
|
|
60
|
-
overflow:auto;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
#logo h1{
|
|
64
|
-
margin:50px 5px 1px 5px;
|
|
65
|
-
letter-spacing:-3px;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
#logo a{
|
|
69
|
-
background-color:inherit;
|
|
70
|
-
color:#26a;
|
|
71
|
-
text-decoration:none;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
#logo a:hover{
|
|
75
|
-
background-color:inherit;
|
|
76
|
-
color:#69e;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
#tagline{
|
|
80
|
-
text-align:center;
|
|
81
|
-
font-size:1.2em;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
#intro p{
|
|
85
|
-
line-height:1.5em;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
#main{
|
|
89
|
-
float:left;
|
|
90
|
-
width:530px;
|
|
91
|
-
margin-right:20px;
|
|
92
|
-
padding:0;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
#main h2, .navbar {
|
|
96
|
-
display:block;
|
|
97
|
-
margin:30px 0 10px 0;
|
|
98
|
-
padding:5px 0 5px 8px;
|
|
99
|
-
background:#eee url(images/gradient2.png) repeat-x;
|
|
100
|
-
color:#222;
|
|
101
|
-
border-top:1px solid #ddd;
|
|
102
|
-
border-right:1px solid #bbb;
|
|
103
|
-
border-bottom:1px solid #bbb;
|
|
104
|
-
border-left:1px solid #ddd;
|
|
105
|
-
text-decoration:none;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
#sidebar{
|
|
109
|
-
width:155px;
|
|
110
|
-
float:right;
|
|
111
|
-
margin-top:20px;
|
|
112
|
-
font-size:1em;
|
|
113
|
-
line-height:1.3em;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
#sidebar p, #sidebar .linklist {
|
|
117
|
-
font-size:0.9em;
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
#sidebar ul.linklist {
|
|
121
|
-
list-style-type: none;
|
|
122
|
-
margin: 0px;
|
|
123
|
-
padding: 5px 0px 5px 8px;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
#sidebar #menu ul, #sidebar #submenu ul {
|
|
127
|
-
list-style-type: none;
|
|
128
|
-
margin: 0px;
|
|
129
|
-
padding: 0px;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
ul li ul li {
|
|
133
|
-
margin-left: -2em;
|
|
134
|
-
padding-left: 0;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
#sidebar #menu li, .sidelink, #sidebar #submenu li, #sidebar #submenu li {
|
|
138
|
-
display:block;
|
|
139
|
-
width:140px;
|
|
140
|
-
margin:3px 10px 2px 0;
|
|
141
|
-
padding:5px 0 5px 8px;
|
|
142
|
-
font-size:1.1em;
|
|
143
|
-
font-weight:bold;
|
|
144
|
-
text-align:left;
|
|
145
|
-
background:#eee url(images/gradient1.png) repeat-x;
|
|
146
|
-
color:#26c;
|
|
147
|
-
border-top:1px solid #ddd;
|
|
148
|
-
border-right:1px solid #bbb;
|
|
149
|
-
border-bottom:1px solid #bbb;
|
|
150
|
-
border-left:1px solid #ddd;
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
#sidebar #menu a:hover {
|
|
154
|
-
text-decoration: none;
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
#sidebar #menu li.webgen-menu-submenu-inhierarchy, .menuheader {
|
|
158
|
-
background:#fff url(images/gradient2.png) repeat-x;
|
|
159
|
-
color:#222;
|
|
160
|
-
border-top:1px solid #ddd;
|
|
161
|
-
border-right:1px solid #888;
|
|
162
|
-
border-bottom:1px solid #888;
|
|
163
|
-
border-left:1px solid #ddd;
|
|
164
|
-
text-decoration:none;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
#sidebar #menu li.webgen-menu-item-selected {
|
|
168
|
-
color: #222;
|
|
169
|
-
}
|
|
170
|
-
#sidebar #menu li.webgen-menu-item-selected:hover {
|
|
171
|
-
color: #222;
|
|
172
|
-
background: none;
|
|
173
|
-
border: none;
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
.menuheader {
|
|
177
|
-
font-size: 1.4em;
|
|
178
|
-
text-align: center;
|
|
179
|
-
margin-bottom: .4em;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
#sidebar #submenu li.webgen-menu-item-selected, #sidebar #submenu li:hover {
|
|
183
|
-
background: none;
|
|
184
|
-
font-size: 1em:
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
#sidebar #menu li ul li, #sidebar #submenu li ul li, #sidebar #submenu li ul li.webgen-menu-item-selected {
|
|
188
|
-
display:block;
|
|
189
|
-
width:130px;
|
|
190
|
-
margin:3px 10px 2px 0;
|
|
191
|
-
padding:0px 0 0px 8px;
|
|
192
|
-
font-size:0.8em;
|
|
193
|
-
font-weight:bold;
|
|
194
|
-
text-align:left;
|
|
195
|
-
background: none;
|
|
196
|
-
color:#26c;
|
|
197
|
-
border: none;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
#footer{
|
|
202
|
-
margin:0 auto 20px auto;
|
|
203
|
-
width:760px;
|
|
204
|
-
background:#fff url(images/footerbg.png) bottom left no-repeat;
|
|
205
|
-
padding:0 0 5px 0;
|
|
206
|
-
font-size:0.9em;
|
|
207
|
-
color:#888;
|
|
208
|
-
text-align:center;
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
h1,h2,h3,h4{
|
|
212
|
-
margin:0 0 10px 0;
|
|
213
|
-
font-weight:normal;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
h1{
|
|
217
|
-
font-size:2.8em;
|
|
218
|
-
margin-top: 5px;
|
|
219
|
-
margin-bottom: 5px;
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
h2{
|
|
223
|
-
margin:0 0 4px 0;
|
|
224
|
-
font-size:1.8em;
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
h3{
|
|
228
|
-
margin:20px 0 8px 0;
|
|
229
|
-
font-size:1.4em;
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
h4{
|
|
233
|
-
margin:10px 0 5px 0;
|
|
234
|
-
font-size:1.2em;
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
.clear{
|
|
238
|
-
clear:both;
|
|
239
|
-
margin:0;
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
.right{
|
|
243
|
-
text-align:right;
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
.internallink{
|
|
247
|
-
font-size:0.9em;
|
|
248
|
-
text-align:center;
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
.block{
|
|
252
|
-
padding:20px;
|
|
253
|
-
background:#eee;
|
|
254
|
-
color:#222;
|
|
255
|
-
border:2px solid #ddd;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
.warning{
|
|
259
|
-
padding:20px;
|
|
260
|
-
background:#fbb;
|
|
261
|
-
color:#222;
|
|
262
|
-
border:2px solid #eaa;
|
|
263
|
-
margin-top: 3em;
|
|
264
|
-
margin-bottom: 3em;
|
|
265
|
-
margin-left: 2em;
|
|
266
|
-
margin-right: 2em;
|
|
267
|
-
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
.credit{
|
|
271
|
-
color:#888;
|
|
272
|
-
background-color:inherit;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
.hide{
|
|
276
|
-
display:none;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
pre .code{
|
|
280
|
-
margin-left: 2.5em;
|
|
281
|
-
}
|
|
282
|
-
pre {
|
|
283
|
-
margin-left: 2.5em;
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
/* Original open source design by Andreas Viklund - http://andreasviklund.com
|
|
287
|
-
Released through OSWD.org */
|
|
288
|
-
|
|
289
|
-
.navbar {
|
|
290
|
-
padding-left: 1em;
|
|
291
|
-
padding-right: 1em;
|
|
292
|
-
padding-bottom: 2em;
|
|
293
|
-
}
|
|
294
|
-
.previous .next {
|
|
295
|
-
margin: 1em;
|
|
296
|
-
display: inline;
|
|
297
|
-
font-size: 1.2em;
|
|
298
|
-
}
|
|
299
|
-
.previous {
|
|
300
|
-
float: left;
|
|
301
|
-
}
|
|
302
|
-
.next {
|
|
303
|
-
float: right;
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
.fullfigure {
|
|
307
|
-
text-align: center;
|
|
308
|
-
}
|
|
309
|
-
.figurecaption {
|
|
310
|
-
text-align: center;
|
|
311
|
-
margin-top: -1em;
|
|
312
|
-
margin-bottom: 4em;
|
|
313
|
-
margin-left: 10%;
|
|
314
|
-
margin-right: 10%;
|
|
315
|
-
background:#eee;
|
|
316
|
-
color:#222;
|
|
317
|
-
border:2px solid #ddd;
|
|
318
|
-
}
|
|
319
|
-
|