Programming by demonstration: dual-arm manipulation tasks for humanoid robots | Synapse