Commit Graph

293 Commits

Author SHA1 Message Date
v4hn
d2bd0a0037 generalize Clearance cost
- can now be used to estimate cost for either interface state or the trajectory
- Introduced Interface::Direction NONE as a way of pointing to the trajectory in contrast to START or END
2020-09-21 22:26:25 +02:00
v4hn
7a00ac646e add missing license 2020-09-21 22:24:44 +02:00
v4hn
14c885621f remove Cost suffix for elements in mtc::cost:: 2020-09-21 22:24:44 +02:00
v4hn
9a96a7e4f6 implement LinkMotionCost 2020-09-21 22:24:44 +02:00
v4hn
6dbc742f20 implement correct PathLengthCost
The previous implementation depends on the dynamics limits of the robot,
which might be interesting in some cases, but shouldn't be a default anywhere.
2020-09-21 22:24:44 +02:00
v4hn
a92753dafc add cumulative distance to ClearanceCost 2020-09-21 22:24:44 +02:00
v4hn
18ed51d7f3 turn Clearance cost into parameterized struct
There is a lot of variations for how to compute clearance.
2020-09-21 22:24:44 +02:00
v4hn
cf0e4e3b01 establish struct cost pattern
for costs with multiple parameters, this option-style is more useful
than verbose getter/setter. There is nothing to hide here.
2020-09-21 22:24:07 +02:00
v4hn
f9ba302728 enable costs to (optionally) return a comment
With more complicated costs (such as the ClearanceCost), it's useful to get comments.
2020-09-21 22:22:37 +02:00
v4hn
a15204b40b allow wrappers to use CostTerm 2020-09-21 22:22:37 +02:00
v4hn
56268cb6cc first attempts on ClearanceCost 2020-09-21 22:22:37 +02:00
v4hn
9060404037 improve comments 2020-09-21 22:22:37 +02:00
v4hn
f3fec26f5a add CostTransform
CostTerms only apply to primitive solutions and generalizing them
to Containers would make them quite unintuitive (and adds overhead).

Instead CostTransform can be used in any container to scale, crop, square
the cost of the solutions.

I initially thought about adding scaling factors, but then again,
other transforms are of interest just as well.
2020-09-21 22:22:37 +02:00
v4hn
f79625d1bd fully restrict CostTerms to primitive solutions
simplify implementations.
2020-09-21 22:22:37 +02:00
v4hn
9eae554d89 provide Constant and PathLength cost terms 2020-09-21 22:22:37 +02:00
v4hn
9337743de2 add CostTerm interface
basic stages can now be configured with arbitrary cost terms.
2020-09-21 18:02:49 +02:00
v4hn
c510c6b5b6 WrappedSolution: expose child solution
SolutionSequence allows to access children already,
but WrappedSolution blocked access to the full hierarchy.
2020-08-21 14:41:22 +02:00
v4hn
4a6c389aee expose WrappedSolution together with other Solution types
Moved out of private header.

Users can access these objects, so they should know about the type.
2020-08-21 14:41:22 +02:00
v4hn
7609f0b1e2 Solution: export public creator
It's a public interface, returning private pointer is not neat.
2020-08-21 14:41:22 +02:00
v4hn
3aa0cfc1a2 InterfaceState: provide constructor with initial Priority
most useful to prepare a valid InterfaceState in tests
2020-08-21 14:41:22 +02:00
v4hn
6e0e323a58 PredicateFilter: actually use declared property 2020-08-20 15:29:45 +02:00
Michael Görner
ee6c50ad31
Apply clang-format-10 (#199) 2020-08-20 11:56:53 +02:00
v4hn
62813f33f7 fix c&p error in documentation 2020-08-11 20:43:34 +02:00
v4hn
62d894199f expose Stage API to get the matching introspection ID
This was implicitly requested in #192 .
2020-08-11 20:43:34 +02:00
v4hn
7ba73306ca introspection *can* be disabled
Otherwise a new task will always setup the publisher,
even if introspection is disabled afterwards.

It is a good idea to keep introspection on, but there should be a way to initialize the C++ classes without ROS communication.
2020-07-22 12:57:34 +02:00
v4hn
0aff5d56dd replace remaining typedefs by using declaration
I have no idea why these were not picked up by clang-tidy.
2020-07-22 12:57:34 +02:00
v4hn
15707673ed clang-tidy: performance-*
I NOLINTed the noexcept move constructor for Task for now because
the constructor *can* indeed throw exceptions.
2020-06-11 11:03:50 +02:00
v4hn
8faba159f9 clang-tidy: llvm-namespace-comment 2020-06-11 11:03:50 +02:00
v4hn
b762079478 clang-tidy: readability-named-parameters 2020-06-11 11:03:50 +02:00
v4hn
5da2df4c61 clang-tidy: modernize-use-nullptr 2020-06-11 11:03:50 +02:00
v4hn
3fe4436ad7 clang-tidy: modernize-use-override 2020-06-11 11:03:50 +02:00
v4hn
36166348bc clang-tidy: use using over typedef
$ run-clang-tidy.py -header-filter='.*' -checks='modernize-use-using' -fix

add .clang-tidy file
2020-06-11 11:03:50 +02:00
v4hn
c662311a78 grant access to subsolutions of a sequence
SubTrajectory allows to access the trajectory,
but for SolutionSequence is was not needed until now.
2020-06-11 11:03:50 +02:00
v4hn
98cac4fd7c add informative comment 2020-06-11 11:03:50 +02:00
v4hn
d224097f3f extend comment on unintuitive setter 2020-06-11 11:03:50 +02:00
Jafar Abdi
b3b215a4f7
Add ability to add/remove objects to/from planning scene (#165) 2020-05-05 18:28:54 +02:00
Aris Synodinos
2d99017c17
Fix for GCC5 (Ubuntu 16.04 / Kinetic) call to non-constexpr function (#163)
Co-authored-by: Aris Synodinos <aris.synodinos@unibap.com>
2020-04-22 11:48:08 +02:00
v4hn
72af8bc94b add convenience includes 2020-04-18 21:04:57 +02:00
v4hn
05ce4d796b expose group property 2020-04-17 18:48:18 +02:00
Robert Haschke
1f8dae86dd Merge #156: Rework interface resolution 2020-04-10 22:44:59 +02:00
Robert Haschke
499fcfb04b cleanup / renaming
* Rename pruneInterface() -> resolveInterface()
* Rename accepted (interface) -> expected
* Improve exception strings
2020-04-10 20:11:51 +02:00
Robert Haschke
aa732d8c66 simplify internal API 2020-04-10 19:59:27 +02:00
Robert Haschke
e56c772ecb Combine pruneInterface() + validateConnectivity()
Validate interfaces during resolution. No need to separately validate interfaces.
Thus, validateConnectivity() is removed from Task::init().
Functions are kept (but simplified) for unit testing.
2020-04-10 19:59:27 +02:00
Robert Haschke
10260b9dd7 Further simplify interface resolution
* Do not modify explicitly configured direction of Propagator
* Avoid code duplication in pruneInterface() and validateConnectivity()
  Only implement pruneInterface() for stages that actually need to adapt their interface.
2020-04-10 19:59:23 +02:00
Robert Haschke
9116e92d08 minor cleanup, fixing warnings, improving comments 2020-04-10 19:39:32 +02:00
Robert Haschke
a98d5ed8ae templated flowSymbol<input/output mask>(flags)
* Enforce at compile time that either input or output flags are considered.
* Use horizontal flow symbols (as in console output).
* Replace redundant direction(flags).
2020-04-10 19:39:32 +02:00
Jafar Abdi
b4fb8bb435
Allow constructing PipelinePlanner from PlanningPipelinePtr (#155) 2020-04-08 17:36:02 +02:00
v4hn
b6a5f89307 remove logical flow BOTH / simplify pruning
The PROPAGATE concept BOTH declared the stages *will* propagate solutions in
either direction. ANY, on the other hand, only means the propagation
direction is *not resolved yet* (but will be at planning time).

BOTH was originally described to support a more general control flow
than was eventually decided to support. The four exclusive Stage interfaces
CONNECT, PROPAGATE_FORWARDS, PROPAGATE_BACKWARDS, and GENERATOR
do not allow for BOTH as a valid setup anymore, unless you setup a very
convolved task like `Alternatives(GEN, PROP) - Alternatives(PROP, GEN)`
which would be very complex to inspect. The same functionality can still
be achieved more readable as `Alternatives(Seq(GEN, PROP), Seq(PROP, GEN))`.

The confusion between BOTH (propagator *will* send in both directions) and
ANY (propagator will send in *either* direction, decided during init) led
to a lot of confusion with users and was not fully accounted
throughout the pipeline.

Adjust tests.

Notice the difference between ANY (unresolved propagator) and UNKNOWN
(a container before introspecting its children). propagators still
report UNKNOWN as requiredInterface though to simplify control flow.

The simplification enables a much simpler linear inference of the connective
structure of a task, as the first interface direction is always given.

Additionally, unify the resource setup for static interfaces to run
in the constructor, and for dynamic initialization in `pruneInterface`,
getting rid of partial initializations in `init`.
2020-04-08 13:27:36 +02:00
v4hn
87d70a5da1 minor documentation improvements 2020-04-08 13:27:14 +02:00
Robert Haschke
f1acfa2f7e
Merge pull request #151: Various fixes 2020-04-03 11:58:19 +02:00