Commit Graph

515 Commits

Author SHA1 Message Date
Robert Haschke
7f33633e82 Simplify test_container.cpp
* Reset mock_id for each test to facilitate assignment
* Simplify creation of nested containers
* Moved some test cases around
* Output all exception messages (even expected ones)
2020-04-10 19:34:51 +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
a193fc2ec5 enumerate test stages
remove ambiguity when multiple stages of the same type are used
2020-04-08 13:27:28 +02:00
v4hn
5ae7e54732 treat empty container as init exception 2020-04-08 13:27:21 +02:00
v4hn
87d70a5da1 minor documentation improvements 2020-04-08 13:27:14 +02:00
v4hn
b0df621f66 bump cmake version
get rid of CMP0048 warning.
2020-04-03 12:14:57 +02:00
Robert Haschke
f1acfa2f7e
Merge pull request #151: Various fixes 2020-04-03 11:58:19 +02:00
v4hn
00331414a6 merge: update states only once per waypoint 2020-04-03 11:36:05 +02:00
Robert Haschke
8834ce18f7 simplify trajectory merging
avoid code duplication: reuse merge(std::vector<JointModelGroup*>)
2020-04-03 11:36:05 +02:00
Robert Haschke
8debe68f99 fix joint_interpolation
- return a trajectory in any case (even if there is no motion needed)
- check feasability of goal pose
2020-04-03 11:36:05 +02:00
v4hn
07f62aa72f add override in Task
I very much considered just removing the protected inheritance again,
but it would add unnecessary code duplication.

Take note, the overriding `insert` function bypasses the Wrapper and directly forwards to the wrapped container.
This is somewhat dirty and could be an issue for anyone inheriting from `Task`.
2020-04-01 15:05:20 +02:00
v4hn
7cd82d5c04 resolve clang warnings & suggestions 2020-04-01 15:05:20 +02:00
v4hn
8578a64ac0 correct sign for StageCallback type
backward compatible, the function type implicitly converts from previous int definitions.
2020-04-01 15:05:20 +02:00
v4hn
cc86dd8a74 rename Task::erase -> eraseTaskCallback
`erase` is too general for a container class,
when it's not actually about erasing children or the container itself.
2020-04-01 15:05:20 +02:00
v4hn
c046ec605d streamline add/insert interfaces for Task/Container
`add` falls back to `insert` for both structures,
but `add` throws exceptions and does not provide a return value.

`insert` provides standard STL container access.
2020-04-01 15:05:20 +02:00
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
Michael Görner
90f5d22e83
do not export inline functions (#147)
This makes sure that code using `pimpl()` will not compile out of the box unless the _p header is included.
2020-03-29 20:47:26 +02:00
Michael Görner
0eae0e652e
build tests using gmock via catkin_add_gmock (#148)
Otherwise these suddenly started to fail for me on Lunar Linux...
2020-03-20 20:33:33 +01: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
Robert Haschke
9ee653453d Container: abort traversal with false return value of processor
So far, returning false from the processor function, just skipped further traversing the current child (depth-wise).
Now, traversal is completely aborted, even not traversing the remaining siblings of the current child.
Having a single boolean return value, we cannot distinguish both cases.
We need the new behaviour for 8061945c15bea22e8f8899c987bc28e3542885aa.
2020-03-03 17:57:06 +01:00
Mark Moll
0d6f79050a don't install PIMPL header files (#119) 2020-03-03 17:21:54 +01:00
Markus Vieth
534d520a04
Add return value to Task::execute (#136) 2020-02-20 11:31:51 +01:00
Robert Haschke
d10565cabf fix memory access issue
Fixes #132.
2020-02-18 09:01:00 +01:00
Aris Synodinos
8ac9957b55
Added C++11 flags for MOVEIT_MASTER check (#129) 2020-02-12 21:59:33 +01:00
Robert Haschke
463486257b Merge #120: Add computation timing 2020-02-06 16:18:49 +01:00
Jafar Abdi
fa9b177575 transmit and display computation in rviz 2020-02-06 16:18:20 +01:00
Jafar Abdi
aa11b66824 use runCompute() 2020-02-06 16:17:55 +01:00
Jafar Abdi
89fea00b33 Stage::runCompute() to measure computation time 2020-02-06 16:17:04 +01:00
Robert Haschke
5a85343490 Merge branch master into wip-python-api 2020-01-11 09:17:32 +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
Robert Haschke
f88bd8f54d RosMsgConverter: ensure that python and C++ types match 2020-01-11 07:56:47 +01:00
Robert Haschke
5293d2ed27 simplify method overloads 2020-01-11 07:56:47 +01:00
Robert Haschke
7d0daa6cd4 boost::python: provide generic converter for std::map 2020-01-11 07:55:31 +01:00
v4hn
233d63aa7a avoid deprecation warnings of MoveIt master branch
Use new methods
- moveit::core::isEmpty
- moveit::core::CartesianInterpolator::computeCartesianPath
2019-12-13 11:29:02 +01:00
Robert Haschke
acddc268ed compatibility to MoveIt master branch 2019-11-27 17:43:57 +01:00
Robert Haschke
3887b32ba1 fix MoveRelative::getJointStateFromOffset
Fix for #114: Accessing variable indexes was screwed.
2019-11-26 21:08:31 +01:00
Aris Synodinos
145bec1ed3 Added cost calculation in move_relative (#108) 2019-11-05 17:38:25 +01:00
Robert Haschke
facdc8e278 update RobotState in getJointStateGoal() 2019-11-02 22:02:56 +08:00
Robert Haschke
1ba4bc4508
MoveTo/MoveRelative: report failure on invalid trajectories (#107) 2019-10-22 12:06:11 +02:00
Robert Haschke
fd9462c27f Merge branch master into wip-python-api 2019-07-26 11:11:41 +02:00
Robert Haschke
975491fba9 Fixup: adding cost calculations to connect and move_to 2019-07-26 11:05:52 +02:00
Robert Haschke
4225671ae4 PipelinePlanner: always forward trajectory
(also in case of failure)
2019-07-19 13:45:07 +02:00
Robert Haschke
6ff1a5162f Fixup: adding cost calculations to connect and move_to
Need to handle nullptr trajectories.
2019-07-19 13:45:07 +02: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
Tyler Weaver
7ca49bc29b adding cost calculations to connect and move_to 2019-07-12 20:29:08 +02:00
v4hn
0b47224ef1 micro-fix whitespace
Let's use clang-format...
2019-07-12 13:51:21 +02:00
Robert Haschke
874994bdb5 test packages are required 2019-07-12 09:35:48 +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
26f679bd8e relax assertion 2019-05-16 18:12:20 +02:00
Robert Haschke
6cf0cbb4c9 improve comments 2019-05-16 18:02:08 +02:00
Michael Görner
267c214288 Overload setGoal to accept map of joint values as argument (#87) 2019-05-10 14:41:46 +02:00
Robert Haschke
fee73bcd78 Merge branch 'fix-interface-deduction' into master 2019-05-03 01:53:57 +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
102c80dda1 ParallelContainer: fix interface error reporting
need to separately check for start/end interface
2019-05-03 01:06:56 +02:00
Robert Haschke
d9a38f46ab SerialContainer: fix nested interface resolution
We need to distinguish two cases for how the interface of a nested serial container is determined:
1. from its children
2. from its (outer) context

As long as the interface is not fully resolved, requiredInterface() returns UNKNOWN.
After pruning, the first/last child's interface is remembered and reported instead.
2019-05-03 01:06:56 +02:00
Robert Haschke
fd1aa38a39 fix unit test definitions 2019-05-03 01:06:56 +02:00
Robert Haschke
135951f690 replace assertion by exception 2019-05-03 01:06:56 +02:00
Robert Haschke
f402cdec5e rename [INPUT|OUTPUT]_IF_MASK -> [START|END]_IF_MASK 2019-05-03 01:06:56 +02:00
Robert Haschke
28703af384 improve comments 2019-05-03 01:06:56 +02:00
Robert Haschke
ea75070155 cherry-pick changes from boost-python branch
stages: default arguments for constructors
properties: make iterator public
2019-05-02 14:55:34 +02:00
Robert Haschke
d4dfcf962b FixedCartesianPoses 2019-05-02 14:55:34 +02:00
Robert Haschke
cef6eb64bb ContainerBase::remove(Stage* child) 2019-05-02 14:55:34 +02:00
Robert Haschke
c62938a1c4 SimpleGrasp: only use generator if it's defined
UnGrasp doesn't need a grasp generator
2019-05-02 14:55:34 +02:00
Robert Haschke
29ecec7403 vary place pose depending on object shape
- boxes, cylinders: flip up/down, rotate about world's z
- spheres: rotate about world's z
2019-05-02 14:55:34 +02:00
Robert Haschke
168ff6f3f4 use simple InterpolationPlanner to open/close gripper 2019-05-02 14:55:34 +02:00
Robert Haschke
4063a3ca29 fix SimpleUnGrasp
- ComputeIK needs to be first sub stage for both, grasping and ungrasping
- correctly re-enable object collision checking
2019-05-02 14:55:34 +02:00
Robert Haschke
0fe18799d9 GeneratePlacePose 2019-05-02 14:55:34 +02:00
Robert Haschke
6de1c8dbe5 ContainerBase::findChild() 2019-05-02 14:55:34 +02:00
Robert Haschke
39427f89bf Merge branches 'fix-interface-deduction' (#84), 'compute-ik-default-timeout' (#80),
'fix-visualization' (#76), and master-improvements (#81)
2019-03-11 14:09:03 +01:00
Robert Haschke
c56c7294e4 fix pruning
Never augment already derived interfaces, only prune!
2019-03-11 13:54:54 +01:00
Robert Haschke
48d93e803d improve SerialContainerPrivate::pruneInterface 2019-03-11 13:54:54 +01: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
10c7a9cfd7 prune UNKNOWN *and* PROPAGATE_BOTHWAYS
If PropagatingEitherWay's interface is not met in *both* directions (but only one),
in BOTHWAY mode, issue a warning. Otherwise handle both, AUTO and BOTHWAY mode,
in the same fashion when resolving interfaces.

TODO: move validateConnectivity() in StagePrivate.
default action = default action from ContainerBase.
PropagatingEitherWay: issue warning for case above
2019-03-11 13:54:54 +01:00
Robert Haschke
f831fe5483 fix comments + typos 2019-03-11 13:54:54 +01:00
Robert Haschke
7d25c55978 Container: more unit tests for interface detection / validation 2019-03-11 13:54:54 +01:00
Robert Haschke
d741f36ee3 fixup! improve error msg for mismatching container/child interfaces
We need to consider input and output interfaces separately.
Also, use console output symbols (<- / -> / <->)
2019-03-11 13:54:54 +01:00
Robert Haschke
1e953db649 non-const Property::value() 2019-03-10 17:55:46 +01:00
Robert Haschke
36df4f9975 MoveTo/MoveRelative: reduce default timeout to 1s 2019-03-10 17:55:15 +01:00
Robert Haschke
0304c22f7d ComputeIK: allow attached body as ik_frame 2019-03-10 17:50:45 +01:00
Robert Haschke
dd80c675fa cannot use cmake generator expressions in COMMENT 2019-02-21 01:03:03 +01:00
Robert Haschke
36b63f0e35 fixup wrapping of solvers
- wrap JointInterPolationPlanner
- remove properties: group, timeout
- add actual planner properties
2019-02-21 01:01:33 +01:00
Robert Haschke
95d05ea05c expose PropagatingEitherWay::restrictDirection()
fixup! expose PropagatingEitherWay::restrictDirectio()
2019-02-21 00:57:17 +01:00
Robert Haschke
c72a6cddac ComputeIK: auto-configure default timeout from JMG's default
TODO: actually set the default value but not the current value!
2019-02-21 00:53:26 +01:00
Robert Haschke
579c336558 Connecting: also check that attached objects match 2019-02-21 00:51:57 +01:00
Robert Haschke
e885c272fa Merger: skip empty sub trajectories for merging 2019-02-21 00:50:25 +01:00
Robert Haschke
1047ef08a4 ComputeIK: fix typo 2019-02-21 00:47:52 +01:00
Robert Haschke
2da9e0d722 rework solution msgs
- to allow solution wrappers (WrappedSolution, SolutionSequence)
  to transmit their comment and markers as well
- introduced new SolutionInfo.msg,
  which is the info common to solution wrappers and actual SubTrajectories
2019-02-12 13:57:12 +01:00
Robert Haschke
527ec8edaa correctly sort upstream_solutions_ in ComputeIK and GeneratePose
Reworked cost_queue to correctly sort pointer-like types.
Added unittests for new ValueOrPointeeLess<T> less operator, ordered<T>, and rviz cost ordering.
2019-02-12 03:05:36 +01:00
v4hn
8392ed5ad3 generate IK solutions incrementally
This is not a good approach.
The same can be achieved by generating targets incrementally.
The better approach, to generate IK solutions incrementally,
has to maintain previous solutions for each target.
2019-02-10 08:17:34 +01:00
Robert Haschke
1e0a9401e7 Merge PR #72: rviz property visualization 2019-02-10 06:25:25 +01:00
Robert Haschke
e71376743c yamp-cpp parsing 2019-02-10 06:21:51 +01:00
Robert Haschke
a1c81f1236 YAML property serialization
- switch from ROS serialization/deserialization to YAML
- no native C++ deserialization for ROS msg types available
- drop Propert::print()
2019-02-10 06:21:51 +01:00
Robert Haschke
4ca794cb86 unify property handling in LocalTaskModel and RemoteTaskModel 2019-02-10 06:21:51 +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
a1f7c5d1c6 improve error msg for mismatching container/child interfaces 2019-02-06 10:29:10 +01:00
Robert Haschke
81cc0aecc6 Property::type_index -> boost::typeindex::type_info
avoid decl expressions, explicit public typedef
2019-01-17 23:54:35 +01:00
Robert Haschke
062cfe0b60 PropertyTypeRegistry to store serialization/deserialization functions 2019-01-17 23:54:35 +01:00
Robert Haschke
ae75c3aa7f Eigen::Affine3 -> Eigen::Isometry3 2018-11-28 08:14:44 +01:00