roby 0.8.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.deep-cover.rb +3 -0
- data/.gitattributes +1 -0
- data/.gitignore +24 -0
- data/.simplecov +10 -0
- data/.travis.yml +17 -0
- data/.yardopts +4 -0
- data/Gemfile +15 -0
- data/README.md +11 -0
- data/Rakefile +47 -177
- data/benchmark/{alloc_misc.rb → attic/alloc_misc.rb} +2 -2
- data/benchmark/{discovery_latency.rb → attic/discovery_latency.rb} +19 -19
- data/benchmark/{garbage_collection.rb → attic/garbage_collection.rb} +9 -9
- data/benchmark/{genom.rb → attic/genom.rb} +0 -0
- data/benchmark/attic/transactions.rb +62 -0
- data/benchmark/plan_basic_operations.rb +28 -0
- data/benchmark/relations/graph.rb +63 -0
- data/benchmark/ruby/identity.rb +18 -0
- data/benchmark/ruby/set_intersect_vs_hash_merge.rb +39 -0
- data/benchmark/ruby/yield_vs_block.rb +35 -0
- data/benchmark/run +5 -0
- data/benchmark/synthetic_plan_modifications_with_transactions.rb +79 -0
- data/benchmark/transactions.rb +99 -51
- data/bin/roby +38 -197
- data/bin/roby-display +14 -0
- data/bin/roby-log +3 -176
- data/doc/guide/{src → attic}/abstraction/achieve_with.page +1 -1
- data/doc/guide/{src → attic}/abstraction/forwarding.page +1 -1
- data/doc/guide/{src → attic}/abstraction/hierarchy.page +1 -1
- data/doc/guide/{src → attic}/abstraction/index.page +1 -1
- data/doc/guide/{src → attic}/abstraction/task_models.page +1 -1
- data/doc/guide/{overview.rdoc → attic/cycle/api_overview.rdoc} +6 -1
- data/doc/guide/{src → attic}/cycle/cycle-overview.png +0 -0
- data/doc/guide/{src → attic}/cycle/cycle-overview.svg +0 -0
- data/doc/guide/attic/cycle/error_handling.page +98 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.png +0 -0
- data/doc/guide/{src → attic}/cycle/error_instantaneous_repair.svg +0 -0
- data/doc/guide/{src/cycle/error_handling.page → attic/cycle/error_sources.page} +46 -89
- data/doc/guide/{src → attic}/cycle/garbage_collection.page +1 -1
- data/doc/guide/{src → attic}/cycle/index.page +1 -1
- data/doc/guide/{src → attic}/cycle/propagation.page +11 -1
- data/doc/guide/{src → attic}/cycle/propagation_diamond.png +0 -0
- data/doc/guide/{src → attic}/cycle/propagation_diamond.svg +0 -0
- data/doc/guide/attic/plans/building_plans.page +89 -0
- data/doc/guide/attic/plans/code.page +192 -0
- data/doc/guide/{src/basics → attic/plans}/events.page +3 -4
- data/doc/guide/attic/plans/index.page +7 -0
- data/doc/guide/{plan_modifications.rdoc → attic/plans/plan_modifications.rdoc} +5 -3
- data/doc/guide/{src/basics → attic/plans}/plan_objects.page +2 -1
- data/doc/guide/attic/plans/querying_plans.page +5 -0
- data/doc/guide/{src/basics → attic/plans}/tasks.page +20 -20
- data/doc/guide/config.yaml +7 -4
- data/doc/guide/ext/extended_menu.rb +29 -0
- data/doc/guide/ext/init.rb +6 -0
- data/doc/guide/ext/rdoc_links.rb +7 -6
- data/doc/guide/src/advanced_concepts/history.page +5 -0
- data/doc/guide/src/advanced_concepts/index.page +11 -0
- data/doc/guide/src/advanced_concepts/recognizing_patterns.page +83 -0
- data/doc/guide/src/advanced_concepts/scheduling.page +87 -0
- data/doc/guide/src/advanced_concepts/transactions.page +5 -0
- data/doc/guide/src/advanced_concepts/unreachability.page +42 -0
- data/doc/guide/src/base.template +96 -0
- data/doc/guide/src/basics_shell_header.txt +5 -7
- data/doc/guide/src/building/action_coordination.page +96 -0
- data/doc/guide/src/building/actions.page +124 -0
- data/doc/guide/src/building/file_layout.page +71 -0
- data/doc/guide/src/building/index.page +50 -0
- data/doc/guide/src/building/patterns.page +86 -0
- data/doc/guide/src/building/patterns_forwarding.png +0 -0
- data/doc/guide/src/building/patterns_forwarding.svg +277 -0
- data/doc/guide/src/building/runtime.page +95 -0
- data/doc/guide/src/building/task_models.page +94 -0
- data/doc/guide/src/building/tasks.page +284 -0
- data/doc/guide/src/concepts/error_handling.page +100 -0
- data/doc/guide/src/concepts/exception_propagation.png +0 -0
- data/doc/guide/src/concepts/exception_propagation.svg +445 -0
- data/doc/guide/src/concepts/execution.page +85 -0
- data/doc/guide/src/concepts/execution.png +0 -0
- data/doc/guide/src/concepts/execution.svg +573 -0
- data/doc/guide/src/concepts/execution_cycle.png +0 -0
- data/doc/guide/src/concepts/garbage_collection.page +57 -0
- data/doc/guide/src/concepts/index.page +27 -0
- data/doc/guide/src/concepts/plans.page +101 -0
- data/doc/guide/src/concepts/policy.page +31 -0
- data/doc/guide/src/concepts/reactor.page +61 -0
- data/doc/guide/src/concepts/simple_plan_example.png +0 -0
- data/doc/guide/src/concepts/simple_plan_example.svg +376 -0
- data/doc/guide/src/default.template +9 -74
- data/doc/guide/src/event_relations/forward.page +71 -0
- data/doc/guide/src/event_relations/index.page +12 -0
- data/doc/guide/src/event_relations/scheduling_constraints.page +43 -0
- data/doc/guide/src/event_relations/signal.page +55 -0
- data/doc/guide/src/event_relations/temporal_constraints.page +77 -0
- data/doc/guide/src/htmldoc.metainfo +21 -8
- data/doc/guide/src/index.page +8 -3
- data/doc/guide/src/{introduction/install.page → installation/index.page} +37 -25
- data/doc/guide/src/installation/publications.page +14 -0
- data/doc/guide/src/{introduction → installation}/videos.page +14 -7
- data/doc/guide/src/interacting/index.page +16 -0
- data/doc/guide/src/interacting/run.page +33 -0
- data/doc/guide/src/interacting/shell.page +95 -0
- data/doc/guide/src/plugins/creating_plugins.page +72 -0
- data/doc/guide/src/plugins/index.page +27 -5
- data/doc/guide/src/plugins/{fault_tolerance.page → standard_plugins/fault_tolerance.page} +2 -2
- data/doc/guide/src/plugins/standard_plugins/index.page +11 -0
- data/doc/guide/src/plugins/{subsystems.page → standard_plugins/subsystems.page} +2 -2
- data/doc/guide/src/style_screen.css +687 -0
- data/doc/guide/src/task_relations/dependency.page +107 -0
- data/doc/guide/src/task_relations/executed_by.page +77 -0
- data/doc/guide/src/task_relations/index.page +12 -0
- data/doc/guide/src/task_relations/new_relations.page +119 -0
- data/doc/guide/src/task_relations/planned_by.page +46 -0
- data/doc/guide/src/tutorial/app.page +117 -0
- data/doc/guide/src/{basics → tutorial}/code_examples.page +6 -5
- data/doc/guide/src/{basics → tutorial}/dry.page +15 -15
- data/doc/guide/src/{basics → tutorial}/errors.page +43 -68
- data/doc/guide/src/tutorial/events.page +195 -0
- data/doc/guide/src/{basics → tutorial}/hierarchy.page +53 -52
- data/doc/guide/src/tutorial/index.page +13 -0
- data/doc/guide/src/tutorial/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/goForward_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/hierarchy_error_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/moveto_code_error.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_1.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_2.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/plan_repair_3.png +0 -0
- data/doc/guide/src/tutorial/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/tutorial/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_log_relation_window.png +0 -0
- data/doc/guide/src/{basics → tutorial}/log_replay/roby_replay_event_representation.png +0 -0
- data/doc/guide/src/tutorial/relations_display.page +153 -0
- data/doc/guide/src/{basics → tutorial}/roby_cycle_overview.png +0 -0
- data/doc/guide/src/tutorial/shell.page +121 -0
- data/doc/guide/src/{basics → tutorial}/summary.page +1 -1
- data/doc/guide/src/tutorial/tasks.page +374 -0
- data/lib/roby.rb +102 -47
- data/lib/roby/actions.rb +17 -0
- data/lib/roby/actions/action.rb +80 -0
- data/lib/roby/actions/interface.rb +45 -0
- data/lib/roby/actions/library.rb +23 -0
- data/lib/roby/actions/models/action.rb +224 -0
- data/lib/roby/actions/models/coordination_action.rb +58 -0
- data/lib/roby/actions/models/interface.rb +22 -0
- data/lib/roby/actions/models/interface_base.rb +294 -0
- data/lib/roby/actions/models/library.rb +12 -0
- data/lib/roby/actions/models/method_action.rb +90 -0
- data/lib/roby/actions/task.rb +114 -0
- data/lib/roby/and_generator.rb +125 -0
- data/lib/roby/app.rb +2795 -829
- data/lib/roby/app/autotest_console_reporter.rb +138 -0
- data/lib/roby/app/base.rb +21 -0
- data/lib/roby/app/cucumber.rb +2 -0
- data/lib/roby/app/cucumber/controller.rb +439 -0
- data/lib/roby/app/cucumber/helpers.rb +280 -0
- data/lib/roby/app/cucumber/world.rb +32 -0
- data/lib/roby/app/debug.rb +136 -0
- data/lib/roby/app/gen.rb +2 -0
- data/lib/roby/app/rake.rb +178 -38
- data/lib/roby/app/robot_config.rb +9 -0
- data/lib/roby/app/robot_names.rb +115 -0
- data/lib/roby/app/run.rb +3 -2
- data/lib/roby/app/scripts.rb +72 -0
- data/lib/roby/app/scripts/autotest.rb +173 -0
- data/lib/roby/app/scripts/display.rb +2 -0
- data/lib/roby/app/scripts/restart.rb +52 -0
- data/lib/roby/app/scripts/results.rb +17 -8
- data/lib/roby/app/scripts/run.rb +155 -24
- data/lib/roby/app/scripts/shell.rb +147 -62
- data/lib/roby/app/scripts/test.rb +107 -22
- data/lib/roby/app/test_reporter.rb +74 -0
- data/lib/roby/app/test_server.rb +159 -0
- data/lib/roby/app/vagrant.rb +47 -0
- data/lib/roby/backports.rb +16 -0
- data/lib/roby/cli/display.rb +190 -0
- data/lib/roby/cli/exceptions.rb +17 -0
- data/lib/roby/cli/gen/actions/class.rb +5 -0
- data/lib/roby/cli/gen/actions/test.rb +6 -0
- data/lib/roby/cli/gen/app/.yardopts +6 -0
- data/lib/roby/cli/gen/app/README.md +28 -0
- data/lib/roby/cli/gen/app/Rakefile +15 -0
- data/{app → lib/roby/cli/gen/app}/config/app.yml +29 -39
- data/lib/roby/cli/gen/app/models/.gitattributes +1 -0
- data/{app → lib/roby/cli/gen/app/scripts}/controllers/.gitattributes +0 -0
- data/{app/data/.gitattributes → lib/roby/cli/gen/app/test/.gitignore} +0 -0
- data/lib/roby/cli/gen/class/class.rb +6 -0
- data/lib/roby/cli/gen/class/test.rb +7 -0
- data/lib/roby/cli/gen/helpers.rb +203 -0
- data/lib/roby/cli/gen/module/module.rb +5 -0
- data/lib/roby/cli/gen/module/test.rb +6 -0
- data/lib/roby/cli/gen/roby_app/config/init.rb +17 -0
- data/lib/roby/cli/gen/roby_app/config/robots/robot.rb +40 -0
- data/lib/roby/cli/gen/task/class.rb +44 -0
- data/lib/roby/cli/gen/task/test.rb +6 -0
- data/lib/roby/cli/gen_main.rb +120 -0
- data/lib/roby/cli/log.rb +276 -0
- data/lib/roby/cli/log/flamegraph.html +499 -0
- data/lib/roby/cli/log/flamegraph_renderer.rb +88 -0
- data/lib/roby/cli/main.rb +153 -0
- data/lib/roby/coordination.rb +60 -0
- data/lib/roby/coordination/action_script.rb +25 -0
- data/lib/roby/coordination/action_state_machine.rb +125 -0
- data/lib/roby/coordination/actions.rb +106 -0
- data/lib/roby/coordination/base.rb +145 -0
- data/lib/roby/coordination/calculus.rb +40 -0
- data/lib/roby/coordination/child.rb +28 -0
- data/lib/roby/coordination/event.rb +29 -0
- data/lib/roby/coordination/fault_handler.rb +25 -0
- data/lib/roby/coordination/fault_handling_task.rb +13 -0
- data/lib/roby/coordination/fault_response_table.rb +110 -0
- data/lib/roby/coordination/models/action_script.rb +64 -0
- data/lib/roby/coordination/models/action_state_machine.rb +224 -0
- data/lib/roby/coordination/models/actions.rb +191 -0
- data/lib/roby/coordination/models/arguments.rb +55 -0
- data/lib/roby/coordination/models/base.rb +176 -0
- data/lib/roby/coordination/models/capture.rb +86 -0
- data/lib/roby/coordination/models/child.rb +35 -0
- data/lib/roby/coordination/models/event.rb +41 -0
- data/lib/roby/coordination/models/exceptions.rb +42 -0
- data/lib/roby/coordination/models/fault_handler.rb +219 -0
- data/lib/roby/coordination/models/fault_response_table.rb +77 -0
- data/lib/roby/coordination/models/root.rb +22 -0
- data/lib/roby/coordination/models/script.rb +283 -0
- data/lib/roby/coordination/models/task.rb +184 -0
- data/lib/roby/coordination/models/task_from_action.rb +50 -0
- data/lib/roby/coordination/models/task_from_as_plan.rb +33 -0
- data/lib/roby/coordination/models/task_from_instanciation_object.rb +31 -0
- data/lib/roby/coordination/models/task_from_variable.rb +27 -0
- data/lib/roby/coordination/models/task_with_dependencies.rb +48 -0
- data/lib/roby/coordination/models/variable.rb +32 -0
- data/lib/roby/coordination/script.rb +200 -0
- data/lib/roby/coordination/script_instruction.rb +12 -0
- data/lib/roby/coordination/task.rb +45 -0
- data/lib/roby/coordination/task_base.rb +69 -0
- data/lib/roby/coordination/task_script.rb +293 -0
- data/lib/roby/coordination/task_state_machine.rb +308 -0
- data/lib/roby/decision_control.rb +33 -21
- data/lib/roby/distributed_object.rb +76 -0
- data/lib/roby/droby.rb +17 -0
- data/lib/roby/droby/droby_id.rb +6 -0
- data/lib/roby/droby/enable.rb +153 -0
- data/lib/roby/droby/event_logger.rb +189 -0
- data/lib/roby/droby/event_logging.rb +57 -0
- data/lib/roby/droby/exceptions.rb +14 -0
- data/lib/roby/droby/identifiable.rb +22 -0
- data/lib/roby/droby/logfile.rb +141 -0
- data/lib/roby/droby/logfile/client.rb +176 -0
- data/lib/roby/droby/logfile/file_format.md +97 -0
- data/lib/roby/droby/logfile/index.rb +117 -0
- data/lib/roby/droby/logfile/reader.rb +139 -0
- data/lib/roby/droby/logfile/server.rb +199 -0
- data/lib/roby/droby/logfile/writer.rb +114 -0
- data/lib/roby/droby/marshal.rb +264 -0
- data/lib/roby/droby/marshallable.rb +12 -0
- data/lib/roby/droby/null_event_logger.rb +25 -0
- data/lib/roby/droby/object_manager.rb +205 -0
- data/lib/roby/droby/peer_id.rb +6 -0
- data/lib/roby/droby/plan_rebuilder.rb +373 -0
- data/lib/roby/droby/rebuilt_plan.rb +160 -0
- data/lib/roby/droby/remote_droby_id.rb +6 -0
- data/lib/roby/droby/timepoints.rb +205 -0
- data/lib/roby/droby/timepoints_ctf.metadata.erb +101 -0
- data/lib/roby/droby/timepoints_ctf.rb +125 -0
- data/lib/roby/droby/v5.rb +14 -0
- data/lib/roby/droby/v5/builtin.rb +120 -0
- data/lib/roby/droby/v5/droby_class.rb +45 -0
- data/lib/roby/droby/v5/droby_constant.rb +81 -0
- data/lib/roby/droby/v5/droby_dump.rb +1026 -0
- data/lib/roby/droby/v5/droby_id.rb +44 -0
- data/lib/roby/droby/v5/droby_model.rb +82 -0
- data/lib/roby/droby/v5/peer_id.rb +10 -0
- data/lib/roby/droby/v5/remote_droby_id.rb +42 -0
- data/lib/roby/event.rb +79 -957
- data/lib/roby/event_constraints.rb +835 -0
- data/lib/roby/event_generator.rb +1047 -0
- data/lib/roby/event_structure/causal_link.rb +6 -0
- data/lib/roby/event_structure/forwarding.rb +6 -0
- data/lib/roby/event_structure/precedence.rb +7 -0
- data/lib/roby/event_structure/signal.rb +8 -0
- data/lib/roby/event_structure/temporal_constraints.rb +640 -0
- data/lib/roby/exceptions.rb +446 -152
- data/lib/roby/executable_plan.rb +549 -0
- data/lib/roby/execution_engine.rb +1997 -950
- data/lib/roby/filter_generator.rb +26 -0
- data/lib/roby/gui/chronicle_view.rb +225 -0
- data/lib/roby/gui/chronicle_widget.rb +925 -0
- data/lib/roby/gui/dot_id.rb +11 -0
- data/lib/roby/gui/exception_view.rb +44 -0
- data/lib/roby/gui/log_display.rb +273 -0
- data/lib/roby/gui/model_views.rb +2 -0
- data/lib/roby/gui/model_views/action_interface.rb +53 -0
- data/lib/roby/gui/model_views/task.rb +47 -0
- data/lib/roby/gui/model_views/task.rhtml +41 -0
- data/lib/roby/gui/object_info_view.rb +89 -0
- data/lib/roby/gui/plan_dot_layout.rb +427 -0
- data/lib/roby/gui/plan_rebuilder_widget.rb +357 -0
- data/lib/roby/gui/qt4_toMSecsSinceEpoch.rb +8 -0
- data/lib/roby/gui/relations_view.rb +278 -0
- data/lib/roby/gui/relations_view/relations.ui +139 -0
- data/lib/roby/gui/relations_view/relations_canvas.rb +1088 -0
- data/lib/roby/gui/relations_view/relations_config.rb +292 -0
- data/lib/roby/gui/relations_view/relations_view.ui +53 -0
- data/lib/roby/gui/scheduler_view.css +24 -0
- data/lib/roby/gui/scheduler_view.rb +46 -0
- data/lib/roby/gui/scheduler_view.rhtml +53 -0
- data/lib/roby/gui/stepping.rb +93 -0
- data/lib/roby/gui/stepping.ui +181 -0
- data/lib/roby/gui/styles.rb +81 -0
- data/lib/roby/gui/task_display_configuration.rb +42 -0
- data/lib/roby/gui/task_state_at.rb +38 -0
- data/lib/roby/hooks.rb +26 -0
- data/lib/roby/interface.rb +136 -469
- data/lib/roby/interface/async.rb +20 -0
- data/lib/roby/interface/async/action_monitor.rb +188 -0
- data/lib/roby/interface/async/interface.rb +498 -0
- data/lib/roby/interface/async/job_monitor.rb +213 -0
- data/lib/roby/interface/async/log.rb +238 -0
- data/lib/roby/interface/async/new_job_listener.rb +79 -0
- data/lib/roby/interface/async/ui_connector.rb +183 -0
- data/lib/roby/interface/client.rb +553 -0
- data/lib/roby/interface/command.rb +24 -0
- data/lib/roby/interface/command_argument.rb +16 -0
- data/lib/roby/interface/command_library.rb +92 -0
- data/lib/roby/interface/droby_channel.rb +174 -0
- data/lib/roby/interface/exceptions.rb +22 -0
- data/lib/roby/interface/interface.rb +655 -0
- data/lib/roby/interface/job.rb +47 -0
- data/lib/roby/interface/rest.rb +10 -0
- data/lib/roby/interface/rest/api.rb +29 -0
- data/lib/roby/interface/rest/helpers.rb +24 -0
- data/lib/roby/interface/rest/server.rb +212 -0
- data/lib/roby/interface/server.rb +154 -0
- data/lib/roby/interface/shell_client.rb +468 -0
- data/lib/roby/interface/shell_subcommand.rb +24 -0
- data/lib/roby/interface/subcommand_client.rb +35 -0
- data/lib/roby/interface/tcp.rb +168 -0
- data/lib/roby/models/arguments.rb +112 -0
- data/lib/roby/models/plan_object.rb +83 -0
- data/lib/roby/models/task.rb +835 -0
- data/lib/roby/models/task_event.rb +62 -0
- data/lib/roby/models/task_service.rb +78 -0
- data/lib/roby/or_generator.rb +88 -0
- data/lib/roby/plan.rb +1751 -864
- data/lib/roby/plan_object.rb +611 -0
- data/lib/roby/plan_service.rb +200 -0
- data/lib/roby/promise.rb +332 -0
- data/lib/roby/queries.rb +23 -0
- data/lib/roby/queries/and_matcher.rb +32 -0
- data/lib/roby/queries/any.rb +27 -0
- data/lib/roby/queries/code_error_matcher.rb +58 -0
- data/lib/roby/queries/event_generator_matcher.rb +9 -0
- data/lib/roby/queries/execution_exception_matcher.rb +165 -0
- data/lib/roby/queries/index.rb +165 -0
- data/lib/roby/queries/localized_error_matcher.rb +149 -0
- data/lib/roby/queries/matcher_base.rb +107 -0
- data/lib/roby/queries/none.rb +27 -0
- data/lib/roby/queries/not_matcher.rb +30 -0
- data/lib/roby/queries/op_matcher.rb +8 -0
- data/lib/roby/queries/or_matcher.rb +30 -0
- data/lib/roby/queries/plan_object_matcher.rb +363 -0
- data/lib/roby/queries/query.rb +188 -0
- data/lib/roby/queries/task_event_generator_matcher.rb +86 -0
- data/lib/roby/queries/task_matcher.rb +344 -0
- data/lib/roby/relations.rb +42 -678
- data/lib/roby/relations/bidirectional_directed_adjacency_graph.rb +492 -0
- data/lib/roby/relations/directed_relation_support.rb +268 -0
- data/lib/roby/relations/event_relation_graph.rb +19 -0
- data/lib/roby/relations/fork_merge_visitor.rb +154 -0
- data/lib/roby/relations/graph.rb +533 -0
- data/lib/roby/relations/models/directed_relation_support.rb +11 -0
- data/lib/roby/relations/models/graph.rb +75 -0
- data/lib/roby/relations/models/task_relation_graph.rb +18 -0
- data/lib/roby/relations/space.rb +380 -0
- data/lib/roby/relations/task_relation_graph.rb +20 -0
- data/lib/roby/robot.rb +85 -38
- data/lib/roby/schedulers/basic.rb +155 -25
- data/lib/roby/schedulers/null.rb +20 -0
- data/lib/roby/schedulers/reporting.rb +31 -0
- data/lib/roby/schedulers/state.rb +129 -0
- data/lib/roby/schedulers/temporal.rb +91 -0
- data/lib/roby/singletons.rb +87 -0
- data/lib/roby/standalone.rb +4 -2
- data/lib/roby/standard_errors.rb +405 -82
- data/lib/roby/state.rb +6 -3
- data/lib/roby/state/conf_model.rb +5 -0
- data/lib/roby/state/events.rb +181 -95
- data/lib/roby/state/goal_model.rb +77 -0
- data/lib/roby/state/open_struct.rb +591 -0
- data/lib/roby/state/open_struct_model.rb +68 -0
- data/lib/roby/state/pos.rb +45 -45
- data/lib/roby/state/shapes.rb +11 -11
- data/lib/roby/state/state_model.rb +303 -0
- data/lib/roby/state/task.rb +43 -0
- data/lib/roby/support.rb +88 -148
- data/lib/roby/task.rb +1361 -1750
- data/lib/roby/task_arguments.rb +428 -0
- data/lib/roby/task_event.rb +127 -0
- data/lib/roby/task_event_generator.rb +337 -0
- data/lib/roby/task_service.rb +6 -0
- data/lib/roby/task_structure/conflicts.rb +104 -0
- data/lib/roby/task_structure/dependency.rb +932 -0
- data/lib/roby/task_structure/error_handling.rb +118 -0
- data/lib/roby/task_structure/executed_by.rb +234 -0
- data/lib/roby/task_structure/planned_by.rb +90 -0
- data/lib/roby/tasks/aggregator.rb +37 -0
- data/lib/roby/tasks/external_process.rb +275 -0
- data/lib/roby/tasks/group.rb +27 -0
- data/lib/roby/tasks/null.rb +19 -0
- data/lib/roby/tasks/parallel.rb +43 -0
- data/lib/roby/tasks/sequence.rb +88 -0
- data/lib/roby/tasks/simple.rb +21 -0
- data/lib/roby/{thread_task.rb → tasks/thread.rb} +50 -24
- data/lib/roby/tasks/timeout.rb +17 -0
- data/lib/roby/tasks/virtual.rb +55 -0
- data/lib/roby/template_plan.rb +7 -0
- data/lib/roby/test/aruba_minitest.rb +74 -0
- data/lib/roby/test/assertion.rb +16 -0
- data/lib/roby/test/assertions.rb +490 -0
- data/lib/roby/test/common.rb +368 -591
- data/lib/roby/test/dsl.rb +149 -0
- data/lib/roby/test/error.rb +18 -0
- data/lib/roby/test/event_reporter.rb +83 -0
- data/lib/roby/test/execution_expectations.rb +1134 -0
- data/lib/roby/test/expect_execution.rb +151 -0
- data/lib/roby/test/minitest_helpers.rb +166 -0
- data/lib/roby/test/roby_app_helpers.rb +200 -0
- data/lib/roby/test/run_planners.rb +155 -0
- data/lib/roby/test/self.rb +112 -0
- data/lib/roby/test/spec.rb +198 -0
- data/lib/roby/test/tasks/empty_task.rb +4 -4
- data/lib/roby/test/tasks/goto.rb +28 -27
- data/lib/roby/test/teardown_plans.rb +100 -0
- data/lib/roby/test/testcase.rb +239 -307
- data/lib/roby/test/tools.rb +159 -155
- data/lib/roby/test/validate_state_machine.rb +75 -0
- data/lib/roby/transaction.rb +1125 -0
- data/lib/roby/transaction/event_generator_proxy.rb +63 -0
- data/lib/roby/transaction/plan_object_proxy.rb +99 -0
- data/lib/roby/transaction/plan_service_proxy.rb +43 -0
- data/lib/roby/transaction/proxying.rb +120 -0
- data/lib/roby/transaction/task_event_generator_proxy.rb +19 -0
- data/lib/roby/transaction/task_proxy.rb +135 -0
- data/lib/roby/until_generator.rb +30 -0
- data/lib/roby/version.rb +5 -0
- data/lib/roby/yard.rb +169 -0
- data/lib/yard-roby.rb +1 -0
- data/manifest.xml +32 -6
- data/roby.gemspec +59 -0
- metadata +788 -587
- data/Manifest.txt +0 -321
- data/NOTES +0 -4
- data/README.txt +0 -166
- data/TODO.txt +0 -146
- data/app/README.txt +0 -24
- data/app/Rakefile +0 -8
- data/app/config/ROBOT.rb +0 -5
- data/app/config/init.rb +0 -33
- data/app/config/roby.yml +0 -3
- data/app/controllers/ROBOT.rb +0 -2
- data/app/planners/ROBOT/main.rb +0 -6
- data/app/planners/main.rb +0 -5
- data/app/scripts/distributed +0 -3
- data/app/scripts/generate/bookmarks +0 -3
- data/app/scripts/replay +0 -3
- data/app/scripts/results +0 -3
- data/app/scripts/run +0 -3
- data/app/scripts/server +0 -3
- data/app/scripts/shell +0 -3
- data/app/scripts/test +0 -3
- data/app/tasks/.gitattributes +0 -0
- data/app/tasks/ROBOT/.gitattributes +0 -0
- data/bin/roby-shell +0 -25
- data/doc/guide/src/basics/app.page +0 -139
- data/doc/guide/src/basics/index.page +0 -11
- data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
- data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
- data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
- data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
- data/doc/guide/src/basics/relations_display.page +0 -203
- data/doc/guide/src/basics/shell.page +0 -102
- data/doc/guide/src/default.css +0 -319
- data/doc/guide/src/introduction/index.page +0 -29
- data/doc/guide/src/introduction/publications.page +0 -14
- data/doc/guide/src/relations/dependency.page +0 -89
- data/doc/guide/src/relations/index.page +0 -12
- data/ext/droby/dump.cc +0 -175
- data/ext/droby/extconf.rb +0 -3
- data/ext/graph/algorithm.cc +0 -746
- data/ext/graph/extconf.rb +0 -7
- data/ext/graph/graph.cc +0 -575
- data/ext/graph/graph.hh +0 -183
- data/ext/graph/iterator_sequence.hh +0 -102
- data/ext/graph/undirected_dfs.hh +0 -226
- data/ext/graph/undirected_graph.hh +0 -421
- data/lib/roby/app/scripts/generate/bookmarks.rb +0 -162
- data/lib/roby/app/scripts/replay.rb +0 -31
- data/lib/roby/app/scripts/server.rb +0 -18
- data/lib/roby/basic_object.rb +0 -151
- data/lib/roby/config.rb +0 -14
- data/lib/roby/distributed.rb +0 -36
- data/lib/roby/distributed/base.rb +0 -448
- data/lib/roby/distributed/communication.rb +0 -875
- data/lib/roby/distributed/connection_space.rb +0 -616
- data/lib/roby/distributed/distributed_object.rb +0 -206
- data/lib/roby/distributed/drb.rb +0 -62
- data/lib/roby/distributed/notifications.rb +0 -531
- data/lib/roby/distributed/peer.rb +0 -555
- data/lib/roby/distributed/protocol.rb +0 -529
- data/lib/roby/distributed/proxy.rb +0 -343
- data/lib/roby/distributed/subscription.rb +0 -311
- data/lib/roby/distributed/transaction.rb +0 -498
- data/lib/roby/external_process_task.rb +0 -225
- data/lib/roby/graph.rb +0 -160
- data/lib/roby/log.rb +0 -3
- data/lib/roby/log/chronicle.rb +0 -303
- data/lib/roby/log/console.rb +0 -74
- data/lib/roby/log/data_stream.rb +0 -275
- data/lib/roby/log/dot.rb +0 -279
- data/lib/roby/log/event_stream.rb +0 -161
- data/lib/roby/log/file.rb +0 -396
- data/lib/roby/log/gui/basic_display.ui +0 -83
- data/lib/roby/log/gui/basic_display_ui.rb +0 -89
- data/lib/roby/log/gui/chronicle.rb +0 -26
- data/lib/roby/log/gui/chronicle_view.rb +0 -40
- data/lib/roby/log/gui/chronicle_view.ui +0 -70
- data/lib/roby/log/gui/chronicle_view_ui.rb +0 -90
- data/lib/roby/log/gui/data_displays.rb +0 -171
- data/lib/roby/log/gui/data_displays.ui +0 -155
- data/lib/roby/log/gui/data_displays_ui.rb +0 -146
- data/lib/roby/log/gui/notifications.rb +0 -26
- data/lib/roby/log/gui/relations.rb +0 -269
- data/lib/roby/log/gui/relations.ui +0 -123
- data/lib/roby/log/gui/relations_ui.rb +0 -120
- data/lib/roby/log/gui/relations_view.rb +0 -185
- data/lib/roby/log/gui/relations_view.ui +0 -149
- data/lib/roby/log/gui/relations_view_ui.rb +0 -144
- data/lib/roby/log/gui/replay.rb +0 -366
- data/lib/roby/log/gui/replay_controls.rb +0 -206
- data/lib/roby/log/gui/replay_controls.ui +0 -282
- data/lib/roby/log/gui/replay_controls_ui.rb +0 -249
- data/lib/roby/log/gui/runtime.rb +0 -130
- data/lib/roby/log/hooks.rb +0 -186
- data/lib/roby/log/logger.rb +0 -203
- data/lib/roby/log/notifications.rb +0 -244
- data/lib/roby/log/plan_rebuilder.rb +0 -468
- data/lib/roby/log/relations.rb +0 -1084
- data/lib/roby/log/server.rb +0 -547
- data/lib/roby/log/sqlite.rb +0 -47
- data/lib/roby/log/timings.rb +0 -233
- data/lib/roby/plan-object.rb +0 -371
- data/lib/roby/planning.rb +0 -13
- data/lib/roby/planning/loops.rb +0 -309
- data/lib/roby/planning/model.rb +0 -1012
- data/lib/roby/planning/task.rb +0 -180
- data/lib/roby/query.rb +0 -655
- data/lib/roby/relations/conflicts.rb +0 -67
- data/lib/roby/relations/dependency.rb +0 -358
- data/lib/roby/relations/ensured.rb +0 -19
- data/lib/roby/relations/error_handling.rb +0 -22
- data/lib/roby/relations/events.rb +0 -7
- data/lib/roby/relations/executed_by.rb +0 -208
- data/lib/roby/relations/influence.rb +0 -10
- data/lib/roby/relations/planned_by.rb +0 -63
- data/lib/roby/state/information.rb +0 -55
- data/lib/roby/state/state.rb +0 -367
- data/lib/roby/task-operations.rb +0 -186
- data/lib/roby/task_index.rb +0 -80
- data/lib/roby/test/distributed.rb +0 -230
- data/lib/roby/test/tasks/simple_task.rb +0 -23
- data/lib/roby/transactions.rb +0 -507
- data/lib/roby/transactions/proxy.rb +0 -325
- data/plugins/fault_injection/History.txt +0 -4
- data/plugins/fault_injection/README.txt +0 -34
- data/plugins/fault_injection/Rakefile +0 -12
- data/plugins/fault_injection/TODO.txt +0 -0
- data/plugins/fault_injection/app.rb +0 -52
- data/plugins/fault_injection/fault_injection.rb +0 -89
- data/plugins/fault_injection/test/test_fault_injection.rb +0 -78
- data/plugins/subsystems/README.txt +0 -37
- data/plugins/subsystems/Rakefile +0 -13
- data/plugins/subsystems/app.rb +0 -182
- data/plugins/subsystems/test/app/README +0 -24
- data/plugins/subsystems/test/app/Rakefile +0 -8
- data/plugins/subsystems/test/app/config/app.yml +0 -71
- data/plugins/subsystems/test/app/config/init.rb +0 -12
- data/plugins/subsystems/test/app/config/roby.yml +0 -3
- data/plugins/subsystems/test/app/planners/main.rb +0 -20
- data/plugins/subsystems/test/app/scripts/distributed +0 -3
- data/plugins/subsystems/test/app/scripts/replay +0 -3
- data/plugins/subsystems/test/app/scripts/results +0 -3
- data/plugins/subsystems/test/app/scripts/run +0 -3
- data/plugins/subsystems/test/app/scripts/server +0 -3
- data/plugins/subsystems/test/app/scripts/shell +0 -3
- data/plugins/subsystems/test/app/scripts/test +0 -3
- data/plugins/subsystems/test/app/tasks/services.rb +0 -15
- data/plugins/subsystems/test/test_subsystems.rb +0 -78
- data/test/distributed/test_communication.rb +0 -195
- data/test/distributed/test_connection.rb +0 -284
- data/test/distributed/test_execution.rb +0 -378
- data/test/distributed/test_mixed_plan.rb +0 -341
- data/test/distributed/test_plan_notifications.rb +0 -238
- data/test/distributed/test_protocol.rb +0 -525
- data/test/distributed/test_query.rb +0 -106
- data/test/distributed/test_remote_plan.rb +0 -491
- data/test/distributed/test_transaction.rb +0 -466
- data/test/mockups/external_process +0 -28
- data/test/mockups/tasks.rb +0 -27
- data/test/planning/test_loops.rb +0 -432
- data/test/planning/test_model.rb +0 -427
- data/test/planning/test_task.rb +0 -126
- data/test/relations/test_conflicts.rb +0 -42
- data/test/relations/test_dependency.rb +0 -324
- data/test/relations/test_ensured.rb +0 -38
- data/test/relations/test_executed_by.rb +0 -224
- data/test/relations/test_planned_by.rb +0 -56
- data/test/suite_core.rb +0 -29
- data/test/suite_distributed.rb +0 -10
- data/test/suite_planning.rb +0 -4
- data/test/suite_relations.rb +0 -8
- data/test/tasks/test_external_process.rb +0 -126
- data/test/tasks/test_thread_task.rb +0 -70
- data/test/test_bgl.rb +0 -528
- data/test/test_event.rb +0 -969
- data/test/test_exceptions.rb +0 -591
- data/test/test_execution_engine.rb +0 -987
- data/test/test_gui.rb +0 -20
- data/test/test_interface.rb +0 -43
- data/test/test_log.rb +0 -125
- data/test/test_log_server.rb +0 -133
- data/test/test_plan.rb +0 -418
- data/test/test_query.rb +0 -424
- data/test/test_relations.rb +0 -260
- data/test/test_state.rb +0 -432
- data/test/test_support.rb +0 -16
- data/test/test_task.rb +0 -1181
- data/test/test_testcase.rb +0 -138
- data/test/test_transactions.rb +0 -610
- data/test/test_transactions_proxy.rb +0 -216
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
module Roby
|
|
2
|
+
module CLI
|
|
3
|
+
# Base class for all exceptions that are considered the user's fault by
|
|
4
|
+
# the CLI
|
|
5
|
+
class CLIException < RuntimeError
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
# The user passed wrong arguments to a command
|
|
9
|
+
class CLIInvalidArguments < CLIException
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# The CLI command failed
|
|
13
|
+
class CLICommandFailed < CLIException
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# App Folder Structure
|
|
2
|
+
|
|
3
|
+
An app configuration can be split in so-called `robot` configurations. Robot
|
|
4
|
+
configuration files are stored in `config/robots/`, and the list of files in that
|
|
5
|
+
directory defines which robots are available in a given app. New robots can be generated with
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
roby gen myrobot
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
A basic Roby application has the following directories:
|
|
12
|
+
|
|
13
|
+
config:: configuration files. config/init.rb is the main configuration file (loaded
|
|
14
|
+
by all robots). Robot-specific configuration is in config/robots/ROBOTNAME.rb.
|
|
15
|
+
The main Roby configuration file is config/roby.yml. The default file
|
|
16
|
+
describes all available configuration options.
|
|
17
|
+
lib:: helper, non-Roby, code
|
|
18
|
+
models:: where the models are defined. Models are segregated per type (tasks,
|
|
19
|
+
…) and robot (e.g. models/tasks/myrobot/* contains the task models for the
|
|
20
|
+
myrobot robot)
|
|
21
|
+
scripts:: helper scripts
|
|
22
|
+
test:: test files
|
|
23
|
+
|
|
24
|
+
Use `roby gen` to create new models or robot configuration files. Running the
|
|
25
|
+
command without further arguments shows which generators are available, and
|
|
26
|
+
then adding `--help` provides detailed help for a given generator, e.g. `roby
|
|
27
|
+
gen robot --help`
|
|
28
|
+
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'yard'
|
|
2
|
+
require 'yard/rake/yardoc_task'
|
|
3
|
+
require 'roby/app/rake'
|
|
4
|
+
|
|
5
|
+
task :default
|
|
6
|
+
|
|
7
|
+
Roby.app.load_base_config
|
|
8
|
+
Roby::App::Rake::TestTask.new
|
|
9
|
+
|
|
10
|
+
YARD::Rake::YardocTask.new do |yard|
|
|
11
|
+
yard.files = ['models/**/*.rb', 'lib/**/*.rb']
|
|
12
|
+
end
|
|
13
|
+
desc "Generate YARD documentation (alias for 'yard')"
|
|
14
|
+
task :doc => :yard
|
|
15
|
+
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
# Control configuration
|
|
2
|
-
engine:
|
|
3
|
-
# The length of a cycle (in seconds). It defaults to 100ms.
|
|
4
|
-
# cycle: 0.1
|
|
5
|
-
|
|
6
1
|
# Logging configuration
|
|
7
2
|
log:
|
|
8
|
-
# Where log files go
|
|
9
|
-
#
|
|
3
|
+
# Where log files go. If relative, it is relative to the app's root dir,
|
|
4
|
+
# unless the environment variable ROBY_BASE_LOG_DIR is set in which case it is
|
|
5
|
+
# relative to this directory.
|
|
6
|
+
# dir: logs/
|
|
7
|
+
|
|
8
|
+
# Whether backtraces should be filtered (i.e. call sites from the framework
|
|
9
|
+
# are hidden)
|
|
10
|
+
# The default is true
|
|
11
|
+
#
|
|
12
|
+
# filter_backtraces: false
|
|
10
13
|
|
|
11
14
|
# Log system events. It can be either true, false or stats. If true, all
|
|
12
15
|
# plan-level events are logged, allowing to use the roby-log GUI to replay
|
|
@@ -20,21 +23,7 @@ log:
|
|
|
20
23
|
#
|
|
21
24
|
# The default is stats
|
|
22
25
|
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# Set to false to disables the log server and true to enable it (it is enabled by
|
|
26
|
-
# default). The log server allows to display the controller state remotely by using the
|
|
27
|
-
# <tt>roby-log</tt> tool. Note that it is completely separated from the Roby remote
|
|
28
|
-
# shell, which is always enabled.
|
|
29
|
-
#
|
|
30
|
-
# server: false
|
|
31
|
-
#
|
|
32
|
-
# ... or configure it
|
|
33
|
-
# server:
|
|
34
|
-
# # The port to listen on (for service discovery)
|
|
35
|
-
# port: 48933
|
|
36
|
-
# # The discovery period
|
|
37
|
-
# period: 10
|
|
26
|
+
events: true
|
|
38
27
|
|
|
39
28
|
# Logging levels.
|
|
40
29
|
#
|
|
@@ -62,24 +51,25 @@ log:
|
|
|
62
51
|
#
|
|
63
52
|
# Log files are saved in the log directory (controlled by the 'dir' option above, it is
|
|
64
53
|
# 'log' by default).
|
|
54
|
+
|
|
55
|
+
# Set to false to disables the log server and true to enable it (it is enabled by
|
|
56
|
+
# default). The log server allows to display the controller state remotely by using the
|
|
57
|
+
# <tt>roby-log</tt> tool. Note that it is completely separated from the Roby remote
|
|
58
|
+
# shell, which is always enabled.
|
|
59
|
+
#
|
|
60
|
+
# server: false
|
|
61
|
+
#
|
|
62
|
+
# ... or configure it
|
|
63
|
+
# server:
|
|
64
|
+
# # The port to listen on (for service discovery)
|
|
65
|
+
# port: 48933
|
|
66
|
+
# # The discovery period
|
|
67
|
+
# period: 10
|
|
65
68
|
|
|
66
|
-
#
|
|
67
|
-
|
|
68
|
-
# The
|
|
69
|
-
#
|
|
70
|
-
# tuplespace: "localhost:29568"
|
|
71
|
-
# The port at which we do ring discovery (default: disabled)
|
|
72
|
-
# ring: 42865
|
|
73
|
-
|
|
74
|
-
# dRoby host configuration
|
|
75
|
-
droby:
|
|
76
|
-
# How many errors are allowed before disconnecting from a peer
|
|
77
|
-
# max_errors: 1
|
|
78
|
-
# The ring discovery period if we do ring discovery
|
|
79
|
-
# period: 0.5
|
|
80
|
-
# The hostname at the dRoby server must listen to. It is either
|
|
81
|
-
# 'host:port', or just ':port'
|
|
82
|
-
# host: ":48902"
|
|
69
|
+
# Control configuration
|
|
70
|
+
engine:
|
|
71
|
+
# The length of a cycle (in seconds). It defaults to 100ms.
|
|
72
|
+
# cycle: 0.1
|
|
83
73
|
|
|
84
74
|
# Per-robot configuration. In these, you can override global options, or set
|
|
85
75
|
# new options.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Only to keep this directory in the git repository
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
require 'roby/cli/exceptions'
|
|
2
|
+
|
|
3
|
+
module Roby
|
|
4
|
+
module CLI
|
|
5
|
+
module Gen
|
|
6
|
+
# Helper methods for generator actions and templates
|
|
7
|
+
#
|
|
8
|
+
# The module is used to extend {Gen}. Its methods are usually
|
|
9
|
+
# accessed as singletong methods on {Gen}, e.g. {Gen.resolve_name}.
|
|
10
|
+
module Helpers
|
|
11
|
+
# Resolve a user-given model name into the corresponding file path
|
|
12
|
+
# and namespace path
|
|
13
|
+
#
|
|
14
|
+
# Both paths are returned relative to the given roots
|
|
15
|
+
#
|
|
16
|
+
# @raise InconsistenName if parts of the given name are inconsistent with the given
|
|
17
|
+
# roots
|
|
18
|
+
#
|
|
19
|
+
# @example
|
|
20
|
+
# resolve_names('models/actions/navigation.rb',
|
|
21
|
+
# ['models', 'actions'],
|
|
22
|
+
# ['Actions']) # => [['navigation.rb'], ['Navigation']]
|
|
23
|
+
# resolve_names('models/tasks/navigation/goto.rb',
|
|
24
|
+
# ['models', 'tasks'],
|
|
25
|
+
# ['Tasks']) # => [['navigation/goto.rb'], ['Navigation', 'Goto']]
|
|
26
|
+
# resolve_names('models/tasks/navigation/goto.rb',
|
|
27
|
+
# ['models', 'actions'],
|
|
28
|
+
# ['Actions']) # => raise, as models/actions must be the path root
|
|
29
|
+
def resolve_name(gen_type, given_name, robot_name, file_root, namespace_root)
|
|
30
|
+
if given_name =~ /\// || given_name[0, 1] !~ /[A-Z]/
|
|
31
|
+
resolve_name_as_path(gen_type, given_name, robot_name, file_root, namespace_root)
|
|
32
|
+
else
|
|
33
|
+
resolve_name_as_constant(gen_type, given_name, robot_name, file_root, namespace_root)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# @api private
|
|
38
|
+
#
|
|
39
|
+
# Helper for {#resolve_name}
|
|
40
|
+
def resolve_name_as_path(gen_type, given_name, robot_name, file_root, namespace_root)
|
|
41
|
+
robot_module =
|
|
42
|
+
if robot_name
|
|
43
|
+
[robot_name.camelcase(:upper)]
|
|
44
|
+
else
|
|
45
|
+
[]
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
file_name = given_name.split('/')
|
|
49
|
+
non_matching_prefix = file_root.each_with_index.find do |p, i|
|
|
50
|
+
file_name[i] != p
|
|
51
|
+
end
|
|
52
|
+
if non_matching_prefix
|
|
53
|
+
if non_matching_prefix[1] != 0
|
|
54
|
+
raise CLIInvalidArguments, "attempted to create a #{gen_type} model outside of #{file_root.join("/")}"
|
|
55
|
+
else
|
|
56
|
+
file_name = file_root + file_name
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
if robot_name && file_name[-2] != robot_name
|
|
61
|
+
raise CLIInvalidArguments, "attempted to create a model for robot #{robot_name} outside a #{robot_name}/ subfolder"
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
file_name[-1] = File.basename(file_name[-1], '.rb')
|
|
65
|
+
file_name_without_root = file_name[file_root.size..-1]
|
|
66
|
+
|
|
67
|
+
app_module_name = Roby.app.module_name.split("::")
|
|
68
|
+
class_without_app =
|
|
69
|
+
namespace_root +
|
|
70
|
+
file_name_without_root.map { |n| n.camelcase(:upper) }
|
|
71
|
+
class_name = app_module_name + class_without_app
|
|
72
|
+
return file_name_without_root, class_name
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# @api private
|
|
76
|
+
#
|
|
77
|
+
# Helper for {#resolve_name}
|
|
78
|
+
def resolve_name_as_constant(gen_type, given_name, robot_name, file_root, namespace_root)
|
|
79
|
+
robot_module =
|
|
80
|
+
if robot_name
|
|
81
|
+
[robot_name.camelcase(:upper)]
|
|
82
|
+
else
|
|
83
|
+
[]
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
given_class_name = given_name.split("::")
|
|
87
|
+
app_module_name = Roby.app.module_name.split("::")
|
|
88
|
+
full_namespace_root = app_module_name + namespace_root
|
|
89
|
+
|
|
90
|
+
non_matching_full_prefix = full_namespace_root.each_with_index.find do |p, i|
|
|
91
|
+
given_class_name[i] != p
|
|
92
|
+
end
|
|
93
|
+
if non_matching_full_prefix
|
|
94
|
+
if non_matching_full_prefix[1] != 0
|
|
95
|
+
raise CLIInvalidArguments, "attempted to create a #{gen_type} model outside of its expected namespace #{full_namespace_root.join("::")}"
|
|
96
|
+
else
|
|
97
|
+
non_matching_app_prefix = namespace_root.each_with_index.find do |p, i|
|
|
98
|
+
given_class_name[i] != p
|
|
99
|
+
end
|
|
100
|
+
if non_matching_app_prefix
|
|
101
|
+
if non_matching_app_prefix[1] != 0
|
|
102
|
+
raise CLIInvalidArguments, "attempted to create a #{gen_type} model outside of its expected namespace #{full_namespace_root.join("::")}"
|
|
103
|
+
else
|
|
104
|
+
given_class_name = full_namespace_root + given_class_name
|
|
105
|
+
end
|
|
106
|
+
else
|
|
107
|
+
given_class_name = app_module_name + given_class_name
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
if robot_name && given_class_name[-2, 1] != robot_module
|
|
114
|
+
raise CLIInvalidArguments, "attempted to create a model for robot #{robot_name} outside the expected namespace #{robot_module.join("::")} (e.g. #{given_class_name[0..-2].join("::")}::#{robot_module.join("::")}::#{given_class_name[-1]})"
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
file_name = *given_class_name[full_namespace_root.size..-1].map do |camel|
|
|
118
|
+
pathize(camel)
|
|
119
|
+
end
|
|
120
|
+
return file_name, given_class_name
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
# @api private
|
|
124
|
+
#
|
|
125
|
+
# Helper class to render a template in a controlled context
|
|
126
|
+
class Context
|
|
127
|
+
def initialize(vars)
|
|
128
|
+
@vars = vars
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def method_missing(m)
|
|
132
|
+
@vars.fetch(m.to_s)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def context
|
|
136
|
+
binding
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# @api private
|
|
141
|
+
#
|
|
142
|
+
# Generate a context that be given to the context: argument to
|
|
143
|
+
# Thor's template action
|
|
144
|
+
def make_context(vars)
|
|
145
|
+
Context.new(vars).context
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
# Helper to handle opening and closing modules
|
|
149
|
+
#
|
|
150
|
+
# @return [(String,String,String)] the indentation string for the
|
|
151
|
+
# module's content, the code necessary to open the module and the
|
|
152
|
+
# code to close it
|
|
153
|
+
#
|
|
154
|
+
# @example usually used in e.g. ERB with
|
|
155
|
+
# <% indent, open, close = Roby::App::GenBase.in_module("A", "Module") %>
|
|
156
|
+
# <%= open %>
|
|
157
|
+
# <%= indent %>class MyClass
|
|
158
|
+
# <%= indent %> it_does_something
|
|
159
|
+
# <%= indent %>end
|
|
160
|
+
# <%= close %>
|
|
161
|
+
#
|
|
162
|
+
def in_module(*module_path)
|
|
163
|
+
indent = ""
|
|
164
|
+
open_code = []
|
|
165
|
+
close_code = []
|
|
166
|
+
module_path.each do |m|
|
|
167
|
+
open_code.push "#{indent}module #{m}"
|
|
168
|
+
close_code.unshift "#{indent}end"
|
|
169
|
+
indent = indent + " "
|
|
170
|
+
end
|
|
171
|
+
return indent, open_code.join("\n"), close_code.join("\n")
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
# Converts an input string that is in camelcase into a path string
|
|
175
|
+
#
|
|
176
|
+
# NOTE: Facets' String#pathize and String#snakecase have corner
|
|
177
|
+
# cases that really don't work for us:
|
|
178
|
+
# '2D'.snakecase => '2_d'
|
|
179
|
+
# 'GPS'.pathize => 'gp_s'
|
|
180
|
+
#
|
|
181
|
+
def pathize(string)
|
|
182
|
+
string.
|
|
183
|
+
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
|
184
|
+
gsub(/([a-z])([A-Z][a-z])/,'\1_\2').
|
|
185
|
+
gsub('__','/').
|
|
186
|
+
gsub('::','/').
|
|
187
|
+
gsub(/\s+/, ''). # spaces are bad form
|
|
188
|
+
gsub(/[?%*:|"<>.]+/, ''). # reserved characters
|
|
189
|
+
downcase
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
class Base
|
|
193
|
+
def initialize(robot_name)
|
|
194
|
+
@robot_name = robot_name
|
|
195
|
+
end
|
|
196
|
+
end
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
extend Helpers
|
|
200
|
+
end
|
|
201
|
+
end
|
|
202
|
+
end
|
|
203
|
+
|
|
@@ -0,0 +1,17 @@
|
|
|
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
|
+
# Here are some of the most useful configuration options
|
|
5
|
+
|
|
6
|
+
# Use backward-compatible naming and behaviour, when applicable
|
|
7
|
+
#
|
|
8
|
+
# For instance, a Syskit app will get the task context models defined at
|
|
9
|
+
# toplevel as well as within the OroGen namespace
|
|
10
|
+
Roby.app.backward_compatible_naming = false
|
|
11
|
+
|
|
12
|
+
# Set the module's name. It is normally inferred from the app name, and the app
|
|
13
|
+
# name is inferred from the base directory name (e.g. an app located in
|
|
14
|
+
# bundles/flat_fish would have an app name of flat_fish and a module name of
|
|
15
|
+
# FlatFish
|
|
16
|
+
#
|
|
17
|
+
# Roby.app.module_name = 'Override'
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<% if robot_name != 'default' %>## A common pattern is to load the 'default' robot configuration
|
|
2
|
+
require_relative './default'<% end %>
|
|
3
|
+
|
|
4
|
+
## One can require the configuration from another robot, for instance if one has
|
|
5
|
+
## a common robot class with minor modifications
|
|
6
|
+
#
|
|
7
|
+
# require 'config/robots/robot_class'
|
|
8
|
+
|
|
9
|
+
# Block evaluated at the very beginning of the Roby app initialization
|
|
10
|
+
Robot.init do
|
|
11
|
+
## You could also change the Roby search path
|
|
12
|
+
# Roby.app.search_path << "separate path"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Block evaluated to load the models this robot requires
|
|
16
|
+
Robot.requires do
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# Block evaluated to configure the system, that is set up values in Roby's Conf
|
|
20
|
+
# and State
|
|
21
|
+
Robot.config do
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Setup of the robot's main action interface
|
|
25
|
+
#
|
|
26
|
+
# Add use statements here, as e.g.
|
|
27
|
+
#
|
|
28
|
+
# use <%= Roby.app.module_name %>::Actions::MyActionInterface
|
|
29
|
+
#
|
|
30
|
+
# or, if you're using syskit
|
|
31
|
+
#
|
|
32
|
+
# use_profile <%= Roby.app.module_name %>::Profiles::BaseProfile
|
|
33
|
+
#
|
|
34
|
+
Robot.actions do
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Block evaluated when the Roby app is fully setup, and the robot ready to
|
|
38
|
+
# start. This is where one usually adds permanent tasks and/or status lines
|
|
39
|
+
Robot.controller do
|
|
40
|
+
end
|