mirror of
https://github.com/moveit/moveit_task_constructor.git
synced 2025-09-27 00:29:13 +08:00

* Improve general description of stage and container types * Clarify purpose of `CurrentState` stage * Add troubleshooting section
32 lines
1.8 KiB
ReStructuredText
32 lines
1.8 KiB
ReStructuredText
.. _sec-troubleshooting:
|
|
|
|
Troubleshooting
|
|
===============
|
|
|
|
``Task::init()`` reports mismatching interfaces
|
|
-----------------------------------------------
|
|
|
|
Before planning, the planning pipeline is checked for consistency. Each stage type has a specific flow interface, e.g. generator-type stages write into both, their begin and end interface, propagator-type stages read from one and write to the opposite, and connector-type stages read from both sides. Obviously these interfaces need to match. If they don't, an ``InitStageException`` is thrown. Per default, this is not very verbose, but you can use the following code snippet to get some more info:
|
|
|
|
.. code-block:: c
|
|
|
|
try {
|
|
task.plan();
|
|
} catch (const InitStageException& e) {
|
|
std::cerr << e << std::endl;
|
|
throw;
|
|
}
|
|
|
|
For example, the following pipeline:
|
|
|
|
- ↕ current
|
|
- ⛓ connect
|
|
- ↑ moveTo
|
|
|
|
throws the error: ``task pipeline: end interface (←) of 'moveto' does not match mine (→)``.
|
|
|
|
The validation process runs sequentially through a ``SerialContainer``. Here, ``current``, as a generator stage is compatible to ``connect``, writing to the interface read by ``connect``.
|
|
``moveTo`` as a propagator can operate, in principle, forwards and backwards. By default, the operation direction is inferred automatically. Here, as ``connect`` requires a reading end-interface, moveTo should seemingly operate backwards. However, now the whole pipeline is incompatible to the enclosing container's interface: a task requires a generator-type interface as it generates solutions - there is no input interface to read from. Hence, the *reading* end interface (←) of ``moveto`` conflicts with a *writing* end interface of the task.
|
|
|
|
Obviously, in a ``ParallelContainer`` all (direct) children need to share a common interface.
|