[Tex/LaTex] Label distance and other issues in a TikZ diagramm

tikz-pgf

The following figure computed with tikz includes three imperfectnesses:

  1. The math operators plus "+" and minus "-" are defined as labels of the corresponding sum nodes. The signs are drawn too far away from the circles and the arrows. I tried to use the command label distance=<value> without any differences in the outcome. Does somebody know how to varie the distance of the labels to the corresponding nodes?
  2. The sum node on the right (reffered as sum3 in the mwe) is positioned with the option below = 18mm of branch2. This is a hardcoded value that provides the desired result. I am looking for a more general solution that places the node below the node branch2 and also on the same height as the node c. Is this possible through the tikz command intersections? Or is there another solution to solve this problem?
  3. Some arrows are combined with the path command. Is it also possible to include cornered arrows (-| or |-) in paths?

Minimal Working Example

\documentclass{standalone}
\usepackage{xcolor}
\definecolor{anti-flashwhite}{rgb}{0.95, 0.95, 0.96}

\usepackage{tikz}
\usetikzlibrary{positioning,circuits.ee.IEC}

\usepackage{bm}

\begin{document}

\begin{tikzpicture}[%
,auto
,>=latex'
,block/.style={text height=1.5ex,text depth=.25ex,draw, fill=anti-flashwhite, rectangle, minimum height=10mm, minimum width=10mm}
,bigblock/.style={text height=1.5ex,text depth=.25ex,draw, fill=anti-flashwhite, rectangle, minimum height=10mm, minimum width=30mm}
,sum/.style={draw, fill=anti-flashwhite, circle,inner sep=1mm, node distance=20mm}
,input/.style={coordinate}
,output/.style={coordinate}
,branch/.style={circle,inner sep=0pt,minimum size=1mm,fill=black,draw=black}
,frame/.style={dashed,thick,blue}
]
\draw
    % forward path
    node [input]                (input1)                                                        {}
    node [sum]                  (sum1)          [right = 15mm of input1]                        {}
    node [branch]               (branch1)       [right = 10mm of sum1,label ={above:$u(t)$}]    {}
    node                        (helpnode)      [right = 15mm of branch1]                       {}
    node [bigblock]             (strecke)       [right = 15mm of helpnode]                      {Strecke}
    node [branch]               (branch2)       [right = 30mm of strecke]                       {}
    node [output]               (output1)       [right = 15mm of branch2]                       {}

    % observer
    node [block]                (h)             [below = of strecke]                            {$\bm{h}$}
    node [block]                (int)           [below = of h]                                  {$\int$}
    node [sum]                  (sum2)          [left = 10mm of int,label={above left,:\tiny{$+$}},
                                                label={below left:\tiny{$+$}},
                                                label={below right:\tiny{$+$}}]                 {}
    node [block]                (b)             [left = of sum2]                                {$\bm{b}$}
    node [block]                (a)             [below = of int]                                {$\bm{A}$}
    node [branch]               (branch3)       [right = of int, label={above:$\hat{x}(t)$}]    {}
    node [block]                (c)             [right = of branch3]                            {$\bm{c}^T$}

    node [sum]                  (sum3)          [below = 18mm of branch2,
                                                label={above left:\tiny{$+$}},
                                                label={below left:\tiny{$-$}}]                  {}
    node [branch]               (branch4)       [below = 18mm of sum3]                          {}
    node [output]               (output2)       [right = 15mm of branch4]                       {}

    node [block]                (r)             [below = 25mm of b, dashed]                     {$\bm{r}^T$}
;

\path
(input1)    edge[->]    node {$w(t)$}           (sum1)
(sum1)      edge[->]                            (branch1)
(branch1)   edge[->]                            (strecke)
(strecke)   edge[->]                            (branch2)
(branch2)   edge[->]    node {$y(t)$}           (output1);

\draw[->]   (branch1)   |-                      (b);

\path
(b)         edge[->]                            (sum2)
(sum2)      edge[->] node {$\dot{\hat{x}}(t)$}  (int)
(int)       edge                                (branch3)
(branch3)   edge[->]                            (c)
(c)         edge                                (branch4)
(branch4)   edge[->]    node {$\hat{y}(t)$}     (output2)
;

\path
(branch2)   edge[->]                            (sum3)
(sum3)      edge[->]                            (h);

\draw[->]   (h)         -|                      (sum2);
\draw[->]   (branch3)   |-                      (a);
\draw[->]   (a)         -|                      (sum2);

\draw[->]   (branch4)   --                      (sum3);

\draw[->,dashed]    (branch3)       |-          (r);
\draw[->,dashed]    (r)             -|          (sum1);


% dashed frame
\draw [frame] ([yshift=28mm,xshift=-20mm]b) rectangle ([yshift=-48mm,xshift=3mm]sum3)   node[below left] {Beobachter}  ;

\end{tikzpicture}

\end{document}

Outcome

enter image description here

Best Answer

Regarding question 1, if you append [label distance=6pt] or [label distance=-6pt] to your first \draw, you should see a significant difference.

But this will also affect the labels u(t) and \hat x(t).