Commit Graph

51 Commits

Author SHA1 Message Date
v4hn
df8a783239 enforce one-parent policy in StagePrivate
So new containers cannot get this wrong by accident.
2020-04-01 15:05:20 +02:00
v4hn
8f56d4ae79 avoid copy from const id reference
This mustn't compile as users got confused about it:
```
Task t;
t.id() = "foobar";
```
2020-03-05 12:08:59 +01:00
Markus Vieth
534d520a04
Add return value to Task::execute (#136) 2020-02-20 11:31:51 +01:00
Robert Haschke
463486257b Merge #120: Add computation timing 2020-02-06 16:18:49 +01:00
Jafar Abdi
aa11b66824 use runCompute() 2020-02-06 16:17:55 +01:00
Robert Haschke
ba815cff34 Task: don't publish solutions by default
Having multiple solutions, automatic publishing of intermediate solutions is confusing.
One never knows, which one is the final one. If desired, the user should setup a hook for this.
2020-01-11 09:00:34 +01:00
Henning Kayser
c1f6ca8e84 Expose SolutionCallback API in Task (#121) 2020-01-11 08:33:57 +01:00
Michael Görner
f7b259259e Introduce clang-format (#102)
* fix catkin_lint issues
* introduce clang-format config and apply it
2019-07-18 11:04:35 +02:00
Robert Haschke
95455c2a26 fix Task::operator=(Task&&)
To move a task instance to another one, it's not sufficient to swap all task members,
but we also need to adapt all back pointers, i.e. me_ and parent_ pointers of children,
to point to the (swapped) task instances.
2019-06-04 14:20:47 +02:00
Robert Haschke
11fb15fd0c fix clang-tidy warnings
- virtual functions used in constructor / destructor
- captured variable in lambda expression not used
- unhandled enums in switch
2019-05-03 01:53:17 +02:00
Robert Haschke
905b6a3b0c move validateConnectivity() from ContainerBase to StagePrivate
... to allow specific stage types (PropagatingEitherWay) implementing their own validation
No need for a public interface.
2019-03-11 13:54:54 +01:00
Robert Haschke
71099c68d4 Task: fix RobotModelPtr leak
On Task::clear() also need to reset introspection's cache.
2019-02-09 01:00:29 +01:00
Robert Haschke
b9a86eb5be use task id as default name of top-level stage 2018-11-08 12:55:45 +01:00
v4hn
a05a76fd8c fixup! add properties for conditional debug output
in MoveIt planner.

These can be quite helpful.
I agree, we really don't need them enabled by default.
2018-10-22 16:59:24 +02:00
Robert Haschke
ba88c59201
Merge pull request #54 from ros-planning/pr-capability
ExecuteTaskSolution capability
2018-10-20 23:25:48 +02:00
Robert Haschke
e894d8bce2 fix caching of PlanningPipeline ptrs
Need to reset cache if corresponding RobotModel was destroyed.
To this end, we cannot simply use the RobotModel's name.
2018-10-20 21:50:05 +02:00
Robert Haschke
f548b7edcc PipelinePlanner: disable publishing of plan request + computed path 2018-10-20 12:21:18 +02:00
Robert Haschke
d648a4091e guard use of introspection_ pointer 2018-10-20 02:38:11 +02:00
Robert Haschke
e9b16ba7c0 fix destruction order 2018-10-20 02:38:11 +02:00
v4hn
1a4f6c0e57 keep RobotModelLoader around
Otherwise the robot_model_ does not remain valid
2018-10-17 01:55:28 +02:00
Robert Haschke
940543a063 fixup! allow preemption of Task::plan() 2018-10-16 23:14:58 +02:00
Robert Haschke
b5bc97b3eb Task::execute() 2018-09-25 22:17:42 +02:00
Robert Haschke
7bd9bcf972 allow preemption of Task::plan() 2018-09-25 22:16:45 +02:00
v4hn
bd1edcbde7 add max_solutions param to plan()
For big problems you just don't want *all* solutions
2018-06-01 11:13:44 +02:00
Robert Haschke
c2dd28abae rework storing of solutions
- solutions_, failures_ as SolutionBaseConstPtrs in StagePrivate
- replace processSolutions() / processFailures() by direct const-access to storage containers
- generic sendForward(), sendBackward(), spawn(), connect() methods in StagePrivate
- reuse StagePrivate's sendForward(), sendBackward(), spawn() in containers

- store created InterfaceStates in StagePrivate::states_
- Interface: ordered<InterfaceState*> (only store pointers)
  allows for common handling of states of valid and failure solutions

- remove additional state+solution storages
- containers: internal->external state mapping as InterfaceState* -> InterfaceState*
2018-05-30 21:02:50 +02:00
Robert Haschke
52fdf30433 simplify compute() API
- remove bool return value
- always create a solution trajectory, also in case of failures
- success/failure determined from solution.isFailure()

minor adjustments during cherry-pick
2018-05-30 21:01:34 +02:00
Robert Haschke
19fa7349d3 Task: only accept containers 2018-05-18 17:42:34 +02:00
Robert Haschke
556d9e1a5e Merge branches 'robot-model', 'task-move-constructor' and 'const-robot-trajectory' 2018-04-09 21:11:19 +02:00
Robert Haschke
7463621f56 move assignment operator 2018-04-09 21:10:08 +02:00
Robert Haschke
7ebc4b2c7e Task: move constructor 2018-04-09 21:10:08 +02:00
Robert Haschke
35b35cc17e enable introspection only if ROS was initialized 2018-04-09 21:09:49 +02:00
Robert Haschke
bd60e6f65d Task::setRobotModel() / Task::loadRobotModel() 2018-04-09 21:09:49 +02:00
Robert Haschke
9cd6efe46f Stage::init(PlanningScene) -> Stage::init(RobotModel) 2018-02-24 13:37:50 +01:00
Robert Haschke
35f1540369 recursive interface auto-detection
trigger auto-detection from top (task) level:
only there we now for sure the accepted interface
2018-02-19 01:05:56 +01:00
Robert Haschke
f45a4e3e2c improve validation
- postpone pruning / interface auto-detection to top task-level
  only the task state knows for sure, that it requires its wrapped child to push to both ends
- perform connectivity validation only after pruning
  only then, we the interfaces are completely determined
2018-02-19 01:05:56 +01:00
Robert Haschke
1a0b9b36ee fix connection creation
Establishing the interface connections, we face a chicken-egg-problem:
To establish a connection, a predecessors/successors pull interface is
assigned to the current's stage push interface.
However, propagating stages (in auto-detection mode) can only create
their pull interfaces if the corresponding, opposite-side push interface
is present already (because that's the mechanism to determine the supported
propagation directions).

Hence, we need to resolve this by performing two sweeps:
- initialization, assuming both propagation directions should be supported,
  thus generating both pull interfaces, i.e. providing the egg
- stripping down the interfaces to the actual context
  This context is provided by two stages pushing from both ends
  into a (potentially long) sequence of propagating stages (tbd).

Contributions of this PR:
- PropagatingEitherWay: explicitly distinguish AUTO from BOTHWAYS interface
  AUTO: auto-derive interface from provided push interfaces
  BOTHWAYS: explicitly require both directions
- SerialContainer: (better, but not yet perfect) validation of connectivity
- ParallelContainer: determine interface from what children offer
2018-02-18 21:23:12 +01:00
Robert Haschke
a4feb705d0 cleanup operator<<(ostream, *)
- basic implementation for StagePrivate
- implementation for Stage calls this
- implementation for ContainerBase recursively calls this
- implementation for Task added
2018-02-18 13:58:09 +01:00
Robert Haschke
2ea463fff4 replace std::cout with ros console 2018-02-16 16:01:05 +01:00
Robert Haschke
4be373592a Merge branches 'cleanup', 'wip-modular-planning', 'wip-containers', 'wip-gui' and 'wip-modify-ps' 2018-02-12 23:54:51 +01:00
Robert Haschke
381edf2d22 ModifyPlanningScene stage
- attach / detach objects to robot
- enable / disable collision pairs
- works in either direction (FORWARD +  BACKWARD)
2018-02-12 23:40:33 +01:00
Robert Haschke
032a4e23c1 derive WrapperBase from ParallelContainerBase 2018-02-12 23:39:46 +01:00
Robert Haschke
9bdfcc8c23 expose Task::initScene()
... to allow use of local scene
2018-02-12 23:37:19 +01:00
Robert Haschke
5c43d700a8 update state priorities in a container-specific fashion
Reorder interface list on priority updates.
This requires the InterfaceState to store a pointer to the owning Interface.
2018-02-12 22:44:18 +01:00
Robert Haschke
97bb6ef2c6 allow handling of failures
- store "failure" solutions to facilitate debugging
- Introspection assigns solution IDs as soon as they are created in a stage
  Thus, solution IDs represent their creation order.
  In contrast, the order of publishing (in StageStatistics) should
  represent the cost order.
- Storing failures is disabled if Introspection is not available.
2018-02-12 22:35:58 +01:00
Robert Haschke
b6959170db derive WrapperBase from ContainerBase
While ParallelContainers can directly promote their child solutions as
their own, a Wrapper needs to modify those solutions. Hence, Wrappers
should be derived directly from Container.
2018-02-04 09:01:45 +01:00
Robert Haschke
104e52eb48 promise to not modify solutions 2018-02-04 09:01:45 +01:00
Robert Haschke
e9363919e8 Merge branch 'wip-properties' 2018-02-04 08:59:35 +01:00
Robert Haschke
7d8f8dfc8d PropertyMap 2017-12-13 14:19:20 +01:00
v4hn
d7719e721f add full license information
so dull... but for the matter of completeness
2017-12-12 21:24:32 +01:00
Robert Haschke
df1bbc5d32 travis config + fixes 2017-11-13 01:33:33 +01:00