diff --git a/ControllerDataFlow.svg b/ControllerDataFlow.svg new file mode 100644 index 0000000000000000000000000000000000000000..8aeeeec35b77a47e551d19034319f79ad251e011 --- /dev/null +++ b/ControllerDataFlow.svg @@ -0,0 +1,2 @@ +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> +<svg xmlns="http://www.w3.org/2000/svg" style="background-color: rgb(255, 255, 255);" xmlns:xlink="http://www.w3.org/1999/xlink" width="1519px" height="724px" version="1.1" content="<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" version="6.0.2.8" editor="www.draw.io" type="device"><diagram name="Page-1">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</diagram></mxfile>"><defs/><g transform="translate(0.5,0.5)"><path d="M 262 25 L 262 2 L 882 2 L 882 25 Z" fill="#dae8fc" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><path d="M 262 25 L 262 722 L 882 722 L 882 25" fill="none" stroke="#6c8ebf" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(563.5,5.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="15" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 16px; white-space: nowrap; overflow-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">RT</div></div></foreignObject><text x="8" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">RT</text></switch></g><path d="M 437.33 131.67 L 307.33 131.67 L 307.33 118.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 307.33 112.78 L 310.83 119.78 L 307.33 118.03 L 303.83 119.78 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(334.5,124.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="74" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Read Targets<br /></div></div></foreignObject><text x="37" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Read Targets<br></text></switch></g><path d="M 477.33 101.67 L 592.33 101.67 L 625.97 101.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 631.22 101.67 L 624.22 105.17 L 625.97 101.67 L 624.22 98.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(505.5,86.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="87" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Read & Decode<br />State<br /></div></div></foreignObject><text x="44" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Read &amp; Decode<br>State<br></text></switch></g><rect x="398" y="82" width="120" height="40" fill="#ffffff" stroke="#000000" transform="rotate(270,458,102)" pointer-events="none"/><g transform="translate(413.5,94.5)rotate(270,43,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="86" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 87px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">EtherCAT Buffer<br /></div></div></foreignObject><text x="43" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">EtherCAT Buffer<br></text></switch></g><path d="M 307.33 91.67 L 307.33 71.67 L 430.97 71.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 436.22 71.67 L 429.22 75.17 L 430.97 71.67 L 429.22 68.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(343.5,64.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="59" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write State<br /></div></div></foreignObject><text x="30" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write State<br></text></switch></g><path d="M 232 82 L 292 82 L 322 102 L 292 122 L 232 122 L 202 102 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(231.5,92.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="59" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 60px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">EtherCAT()</div></div></foreignObject><text x="30" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">EtherCAT()</text></switch></g><path d="M 457.33 286.67 L 457.33 168.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 457.33 162.78 L 460.83 169.78 L 457.33 168.03 L 453.83 169.78 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(415.5,246.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="84" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Encode & Write <br />Target i<br /></div></div></foreignObject><text x="42" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="403" y="287" width="110" height="30" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="405" y="289" width="106" height="26" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(411.5,292.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">LVL0 Controller i<br /></div></div></foreignObject><text x="45" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">LVL0 Controller i<br></text></switch></g><rect x="632" y="87" width="120" height="30" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="634" y="89" width="116" height="26" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(645.5,92.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Internal XYZ Unit</div></div></foreignObject><text x="45" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Internal XYZ Unit</text></switch></g><path d="M 402.33 496.67 L 282.33 496.67 L 282.33 201.67 L 457.33 201.67 L 457.56 168.37" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 457.59 163.12 L 461.04 170.14 L 457.56 168.37 L 454.04 170.09 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(305.5,481.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="84" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Encode & Write<br />Target j<br /></div></div></foreignObject><text x="42" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Encode &amp; Write<br>Target j<br></text></switch></g><rect x="403" y="482" width="110" height="30" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="405" y="484" width="106" height="26" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(411.5,487.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">LVL0 Controller j<br /></div></div></foreignObject><text x="45" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">LVL0 Controller j<br></text></switch></g><path d="M 402.33 541.67 L 282.33 541.67 L 282.33 201.67 L 457.33 201.67 L 457.33 168.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 457.33 162.78 L 460.83 169.78 L 457.33 168.03 L 453.83 169.78 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(304.5,525.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="84" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Encode & Write<br />Target k<br /></div></div></foreignObject><text x="42" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Encode &amp; Write<br>Target k<br></text></switch></g><rect x="403" y="527" width="110" height="30" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="405" y="529" width="106" height="26" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(410.5,532.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="93" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 94px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">LVL0 Controller k<br /></div></div></foreignObject><text x="47" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">LVL0 Controller k<br></text></switch></g><rect x="403" y="572" width="110" height="30" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="405" y="574" width="106" height="26" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(411.5,577.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="90" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 91px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">LVL0 Controller l<br /></div></div></foreignObject><text x="45" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">LVL0 Controller l<br></text></switch></g><path d="M 402.33 586.67 L 282.33 586.67 L 282.33 201.67 L 457.33 201.67 L 457.33 168.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 457.33 162.78 L 460.83 169.78 L 457.33 168.03 L 453.83 169.78 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(304.5,570.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="84" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Encode & Write<br />Target l<br /></div></div></foreignObject><text x="42" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Encode &amp; Write<br>Target l<br></text></switch></g><path d="M 942 25 L 942 2 L 1462 2 L 1462 25 Z" fill="#ffe6cc" stroke="#d79b00" stroke-miterlimit="10" pointer-events="none"/><path d="M 942 25 L 942 722 L 1462 722 L 1462 25" fill="none" stroke="#d79b00" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1180.5,5.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="40" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 41px; white-space: nowrap; overflow-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Non RT<br /></div></div></foreignObject><text x="20" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">Non RT<br></text></switch></g><path d="M 1282.33 78.33 L 1352.33 78.33 L 1352.33 56.67 L 1415.63 56.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1420.88 56.67 L 1413.88 60.17 L 1415.63 56.67 L 1413.88 53.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><rect x="1163" y="71" width="120" height="30" fill="#ffffff" stroke="#000000" pointer-events="none"/><rect x="1165" y="73" width="116" height="26" fill="#ffffff" stroke="#000000" pointer-events="none"/><g transform="translate(1170.5,76.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="102" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 103px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Publisher XYZ Unit</div></div></foreignObject><text x="51" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Publisher XYZ Unit</text></switch></g><path d="M 1412.33 101.67 L 1347.33 101.67 L 1347.33 93.33 L 1288.7 93.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1283.45 93.33 L 1290.45 89.83 L 1288.7 93.33 L 1290.45 96.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1412 102 L 1435.75 87 L 1492 87 Q 1507 87 1507 102 Q 1507 117 1492 117 L 1435.75 117 Z" fill-opacity="0.9" fill="#ffffff" stroke="#000000" stroke-opacity="0.9" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1424.5,92.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">SetTargets()<br /></div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">SetTargets()<br></text></switch></g><path d="M 1422 57 L 1445.75 42 L 1502 42 Q 1517 42 1517 57 Q 1517 72 1502 72 L 1445.75 72 Z" fill-opacity="0.9" fill="#ffffff" stroke="#000000" stroke-opacity="0.9" stroke-miterlimit="10" transform="translate(1469.5,0)scale(-1,1)translate(-1469.5,0)" pointer-events="none"/><g transform="translate(1429.5,47.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="78" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 79px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">PublishState()<br /></div></div></foreignObject><text x="39" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">PublishState()<br></text></switch></g><path d="M 80.67 126.67 L 160.67 126.67 L 217.33 126.67 L 217.33 118.03" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 217.33 112.78 L 220.83 119.78 L 217.33 118.03 L 213.83 119.78 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(115.5,119.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="75" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Receive State<br /></div></div></foreignObject><text x="38" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Receive State<br></text></switch></g><path d="M 12 76.98 C 12 74.23 14.24 72 17 72 L 85 72 C 87.76 72 90 74.23 90 76.98 L 90 116.79 C 77.54 111.54 63.46 111.54 51 116.79 C 38.54 122.05 24.46 122.05 12 116.79 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="none"/><path d="M 7 81.95 C 7 80.63 7.53 79.37 8.46 78.43 C 9.4 77.5 10.67 76.98 12 76.98 L 80 76.98 C 81.33 76.98 82.6 77.5 83.54 78.43 C 84.47 79.37 85 80.63 85 81.95 L 85 121.77 C 72.54 116.51 58.46 116.51 46 121.77 C 33.54 127.02 19.46 127.02 7 121.77 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="none"/><path d="M 2 86.93 C 2 84.18 4.24 81.95 7 81.95 L 75 81.95 C 77.76 81.95 80 84.18 80 86.93 L 80 126.74 C 67.54 121.49 53.46 121.49 41 126.74 C 28.54 132 14.46 132 2 126.74 Z" fill="#ffffff" stroke="#000000" stroke-width="2" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(4.5,86.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="83" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 83px; white-space: normal; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Joint Controllers<br /></div></div></foreignObject><text x="42" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Joint Controllers<br></text></switch></g><path d="M 217.33 91.67 L 217.33 78.33 L 160.67 78.33 L 92.03 78.33" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 86.78 78.33 L 93.78 74.83 L 92.03 78.33 L 93.78 81.83 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(104.5,69.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="73" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Send Targets<br /></div></div></foreignObject><text x="37" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Send Targets<br></text></switch></g><path d="M 822 57 L 822 34 L 1002 34 L 1002 57 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 822 57 L 822 164 L 1002 164 L 1002 57" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(834.5,37.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="153" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 154px; white-space: nowrap; overflow-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Tripple Buffer -> (EtherCAT)<br /></div></div></foreignObject><text x="77" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">Tripple Buffer -&gt; (EtherCAT)<br></text></switch></g><rect x="807" y="94" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,852,109)" pointer-events="none"/><g transform="translate(819.5,101.5)rotate(270,31.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="63" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 64px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Write Buffer<br /></div></div></foreignObject><text x="32" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write Buffer<br></text></switch></g><rect x="929" y="94" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,974,109)" pointer-events="none"/><g transform="translate(940.5,101.5)rotate(270,32.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="65" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 66px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Read Buffer<br /></div></div></foreignObject><text x="33" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Read Buffer<br></text></switch></g><rect x="868" y="94" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,913,109)" pointer-events="none"/><g transform="translate(874.5,101.5)rotate(270,37.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="75" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 76px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Hidden Buffer<br /></div></div></foreignObject><text x="38" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Hidden Buffer<br></text></switch></g><path d="M 477.33 71.67 L 542.33 71.67 L 542.33 51.67 L 802.33 51.67 L 802.33 86.67 L 830.97 86.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 836.22 86.67 L 829.22 90.17 L 830.97 86.67 L 829.22 83.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(628.5,43.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="74" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Memcopy State<br /></div></div></foreignObject><text x="37" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Memcopy State<br></text></switch></g><path d="M 989 86.67 L 1037.33 86.67 L 1155.97 86.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1161.22 86.67 L 1154.22 90.17 L 1155.97 86.67 L 1154.22 83.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1036.5,71.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="87" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Read & Decode<br />State<br /></div></div></foreignObject><text x="44" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Read &amp; Decode<br>State<br></text></switch></g><path d="M 709 215 L 709 192 L 1115 192 L 1115 215 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 709 215 L 709 392 L 1115 392 L 1115 215" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(833.5,195.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="155" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 156px; white-space: nowrap; overflow-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">LVL1 Ice enabled Controller<br /></div></div></foreignObject><text x="78" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">LVL1 Ice enabled Controller<br></text></switch></g><path d="M 822 250 L 822 227 L 1002 227 L 1002 250 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 822 250 L 822 357 L 1002 357 L 1002 250" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(827.5,230.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="166" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 167px; white-space: nowrap; overflow-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Tripple Buffer <- (Commands)<br /></div></div></foreignObject><text x="83" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">Tripple Buffer &lt;- (Commands)<br></text></switch></g><rect x="807" y="287" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,852,302)" pointer-events="none"/><g transform="translate(818.5,294.5)rotate(270,32.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="65" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 66px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Read Buffer<br /></div></div></foreignObject><text x="33" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Read Buffer<br></text></switch></g><rect x="929" y="287" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,974,302)" pointer-events="none"/><g transform="translate(941.5,294.5)rotate(270,31.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="63" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 64px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Write Buffer<br /></div></div></foreignObject><text x="32" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write Buffer<br></text></switch></g><rect x="868" y="287" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,913,302)" pointer-events="none"/><g transform="translate(874.5,294.5)rotate(270,37.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="75" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 76px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Hidden Buffer<br /></div></div></foreignObject><text x="38" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Hidden Buffer<br></text></switch></g><path d="M 1083 302 L 1106.75 287 L 1163 287 Q 1178 287 1178 302 Q 1178 317 1163 317 L 1106.75 317 Z" fill-opacity="0.9" fill="#ffffff" stroke="#000000" stroke-opacity="0.9" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1093.5,292.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="71" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 72px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">IceFunction()<br /></div></div></foreignObject><text x="36" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">IceFunction()<br></text></switch></g><path d="M 1082.33 301.67 L 1035.67 301.67 L 995.37 301.88" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 990.12 301.91 L 997.1 298.38 L 995.37 301.88 L 997.14 305.37 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1009.5,286.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write <br />Commands<br /></div></div></foreignObject><text x="33" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write <br>Commands<br></text></switch></g><path d="M 683.25 287 L 721.75 287 L 741 302 L 721.75 317 L 683.25 317 L 664 302 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(685.5,292.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 32px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Run()</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Run()</text></switch></g><path d="M 837.33 301.67 L 747.03 301.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 741.78 301.67 L 748.78 298.17 L 747.03 301.67 L 748.78 305.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(754.5,286.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="66" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Read<br />Commands<br /></div></div></foreignObject><text x="33" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Read<br>Commands<br></text></switch></g><path d="M 664 301.67 L 518.7 301.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 513.45 301.67 L 520.45 298.17 L 518.7 301.67 L 520.45 305.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(575.5,294.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="71" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write Target i<br /></div></div></foreignObject><text x="36" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write Target i<br></text></switch></g><path d="M 692.33 116.67 L 692.33 201.67 L 692.33 280.3" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 692.33 285.55 L 688.83 278.55 L 692.33 280.3 L 695.83 278.55 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(662.5,154.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="61" height="11" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 11px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Read Values<br /></div></div></foreignObject><text x="31" y="11" fill="#000000" text-anchor="middle" font-size="11px" font-family="Helvetica">Read Values<br></text></switch></g><path d="M 709 455 L 709 432 L 1115 432 L 1115 455 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 709 455 L 709 632 L 1115 632 L 1115 455" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(829.5,435.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="163" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 164px; white-space: nowrap; overflow-wrap: normal; font-weight: bold; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">LVL1 Passthrough Controller<br /></div></div></foreignObject><text x="82" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica" font-weight="bold">LVL1 Passthrough Controller<br></text></switch></g><path d="M 1083 542 L 1106.75 527 L 1163 527 Q 1178 527 1178 542 Q 1178 557 1163 557 L 1106.75 557 Z" fill-opacity="0.9" fill="#ffffff" stroke="#000000" stroke-opacity="0.9" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1095.5,532.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="67" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 68px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">SetTargets()<br /></div></div></foreignObject><text x="34" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">SetTargets()<br></text></switch></g><path d="M 1082.33 541.67 L 933.7 541.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 928.45 541.67 L 935.45 538.17 L 933.7 541.67 L 935.45 545.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(986.5,526.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write <br />Targets<br /></div></div></foreignObject><text x="21" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><path d="M 683.25 527 L 721.75 527 L 741 542 L 721.75 557 L 683.25 557 L 664 542 Z" fill="#ffffff" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(685.5,532.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="31" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 32px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Run()</div></div></foreignObject><text x="16" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Run()</text></switch></g><path d="M 897.33 541.67 L 747.03 541.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 741.78 541.67 L 748.78 538.17 L 747.03 541.67 L 748.78 545.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(792.5,526.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="41" height="27" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Read<br />Targets<br /></div></div></foreignObject><text x="21" y="20" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">[Not supported by viewer]</text></switch></g><rect x="867" y="527" width="90" height="30" fill="#ffffff" stroke="#000000" transform="rotate(270,912,542)" pointer-events="none"/><g transform="translate(871.5,534.5)rotate(270,39.5,8)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="79" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; width: 80px; white-space: nowrap; overflow-wrap: normal; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;">Atomics Buffer<br /></div></div></foreignObject><text x="40" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Atomics Buffer<br></text></switch></g><path d="M 664 541.67 L 518.7 541.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 513.45 541.67 L 520.45 538.17 L 518.7 541.67 L 520.45 545.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(532.5,534.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="74" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write Target k<br /></div></div></foreignObject><text x="37" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write Target k<br></text></switch></g><path d="M 664 541.67 L 622.33 541.67 L 622.33 496.67 L 518.7 496.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 513.45 496.67 L 520.45 493.17 L 518.7 496.67 L 520.45 500.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(533.5,489.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="71" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write Target j<br /></div></div></foreignObject><text x="36" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write Target j<br></text></switch></g><path d="M 664 541.67 L 622.33 541.67 L 622.33 586.67 L 518.7 586.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 513.45 586.67 L 520.45 583.17 L 518.7 586.67 L 520.45 590.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(532.5,579.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="71" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Write Target l<br /></div></div></foreignObject><text x="36" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Write Target l<br></text></switch></g><path d="M 1222.33 101.67 L 1222.33 541.67 L 1183.7 541.67" fill="none" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><path d="M 1178.45 541.67 L 1185.45 538.17 L 1183.7 541.67 L 1185.45 545.17 Z" fill="#000000" stroke="#000000" stroke-miterlimit="10" pointer-events="none"/><g transform="translate(1189.5,210.5)"><switch><foreignObject style="overflow:visible;" pointer-events="all" width="62" height="12" requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"><div xmlns="http://www.w3.org/1999/xhtml" style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; vertical-align: top; white-space: nowrap; text-align: center;"><div xmlns="http://www.w3.org/1999/xhtml" style="display:inline-block;text-align:inherit;text-decoration:inherit;background-color:#ffffff;">Set Targets<br /></div></div></foreignObject><text x="31" y="12" fill="#000000" text-anchor="middle" font-size="12px" font-family="Helvetica">Set Targets<br></text></switch></g></g></svg> \ No newline at end of file diff --git a/ControllerDataFlow.xml b/ControllerDataFlow.xml new file mode 100644 index 0000000000000000000000000000000000000000..d1c16e7190f150233b1f5e7817ef7269b31e5b2c --- /dev/null +++ b/ControllerDataFlow.xml @@ -0,0 +1 @@ +<mxfile userAgent="Mozilla/5.0 (Windows NT 10.0; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0" version="6.0.2.8" editor="www.draw.io" type="device"><diagram name="Page-1">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</diagram></mxfile> \ No newline at end of file diff --git a/etc/doxygen/pages/armarpose.dox b/etc/doxygen/pages/armarpose.dox index 1b2b13736d32f4e5478230f657248452e4bd13ea..c3c4b2494f9de2f04f007489180acdfb40b8ce70 100644 --- a/etc/doxygen/pages/armarpose.dox +++ b/etc/doxygen/pages/armarpose.dox @@ -17,7 +17,7 @@ function. \section FramedPose-Possible-Frames Frames of coordinates The frame of FramedX or LinkedX is technically just a string. The possible values are the names of the robot nodes (use \ref RobotAPI-HowTos-RobotViewer "RobotViewer" app of Simox to inspect them). -For global poses the exists the global constant string variable armarx::GlobalFrame located in the FramedPose.h. +For global poses exists the global constant string variable armarx::GlobalFrame located in the FramedPose.h. Use this variable if you specify global poses and an empty Agent-string. Empty frames should be avoided (though, an empty string is mostly considered as the global frame). \section FramedPose-FramedPositionCreation Creation of new FramedPositions diff --git a/source/RobotAPI/components/units/CMakeLists.txt b/source/RobotAPI/components/units/CMakeLists.txt index 94ed1485e1eabb750ad5ae80748008faea129bc6..90567cf96caddb0d174100b504237265888f06a2 100644 --- a/source/RobotAPI/components/units/CMakeLists.txt +++ b/source/RobotAPI/components/units/CMakeLists.txt @@ -74,3 +74,5 @@ set(LIB_FILES ) armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}") + +add_subdirectory(relays) diff --git a/source/RobotAPI/components/units/PlatformUnitSimulation.cpp b/source/RobotAPI/components/units/PlatformUnitSimulation.cpp index 6a978e80120f45608b2c54685653ee90bf3868a1..75fcbca37ad130dd9e19c9455ad10dbe6d166581 100644 --- a/source/RobotAPI/components/units/PlatformUnitSimulation.cpp +++ b/source/RobotAPI/components/units/PlatformUnitSimulation.cpp @@ -128,14 +128,14 @@ void PlatformUnitSimulation::simulationFunction() case eVelocityControl: { Eigen::Vector2f targetVel(linearVelocityX, linearVelocityY); + Eigen::Rotation2Df rot(currentRotation); + targetVel = rot * targetVel; velPID->update(timeDeltaInSeconds, currentTranslationVelocity, targetVel); currentTranslationVelocity += timeDeltaInSeconds * velPID->getControlValue(); currentPositionX += timeDeltaInSeconds * currentTranslationVelocity[0]; currentPositionY += timeDeltaInSeconds * currentTranslationVelocity[1]; - Eigen::Rotation2Df rot(currentRotation); - targetVel = rot * targetVel; currentRotation += angularVelocity * timeDeltaInSeconds; // stay between +/- M_2_PI diff --git a/source/RobotAPI/components/units/relays/CMakeLists.txt b/source/RobotAPI/components/units/relays/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..26d539f34c8e5624a614fa891b8f7a19a04f01fd --- /dev/null +++ b/source/RobotAPI/components/units/relays/CMakeLists.txt @@ -0,0 +1,16 @@ +set(LIB_NAME RobotAPIUnitListenerRelays) +armarx_set_target("RobotAPI Unit Listener Relays Library: ${LIB_NAME}") + +set(LIBS ArmarXCore RobotAPIInterfaces) + +set(LIB_HEADERS + KinematicUnitListenerRelay.h + InertialMeasurementUnitListenerRelay.h + ForceTorqueUnitListenerRelay.h + RobotStateListenerRelay.h +) + +set(LIB_FILES syntaxcheck.cpp) + +armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}") + diff --git a/source/RobotAPI/components/units/relays/ForceTorqueUnitListenerRelay.h b/source/RobotAPI/components/units/relays/ForceTorqueUnitListenerRelay.h new file mode 100644 index 0000000000000000000000000000000000000000..581a1d175f57226d5d93dfc76f18c4bed13cc9e1 --- /dev/null +++ b/source/RobotAPI/components/units/relays/ForceTorqueUnitListenerRelay.h @@ -0,0 +1,56 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package VisionX::ArmarXObjects::ForceTorqueUnitListenerRelay + * @author Raphael Grimm ( ufdrv at student dot kit dot edu ) + * @date 2016 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ +#include <ArmarXCore/core/ManagedIceObject.h> +#include <ArmarXCore/core/util/noop.h> +#include <RobotAPI/interface/units/ForceTorqueUnit.h> + +namespace armarx +{ + class ForceTorqueUnitListenerRelay : + virtual public ManagedIceObject, + virtual public ForceTorqueUnitListener + { + public: + using CallbackFunctionSensorValues = std::function<void(const std::string&, const FramedDirectionBasePtr&, const FramedDirectionBasePtr&)>; + + // ForceTorqueUnitListener interface + virtual void reportSensorValues(const std::string& sensorNodeName, const FramedDirectionBasePtr& forces, const FramedDirectionBasePtr& torques, const Ice::Current& = GlobalIceCurrent) + { + callbackReportSensorValues(sensorNodeName, forces, torques); + } + protected: + // ManagedIceObject interface + virtual void onInitComponent() + { + usingTopic(topicName); + } + virtual void onConnectComponent() {} + virtual std::string getDefaultName() const + { + return "ForceTorqueUnitListenerRelay"; + } + public: + std::string topicName; + CallbackFunctionSensorValues callbackReportSensorValues {noop<const std::string&, const FramedDirectionBasePtr&, const FramedDirectionBasePtr&>}; + }; + using ForceTorqueUnitListenerRelayPtr = IceInternal::Handle<ForceTorqueUnitListenerRelay>; +} diff --git a/source/RobotAPI/components/units/relays/InertialMeasurementUnitListenerRelay.h b/source/RobotAPI/components/units/relays/InertialMeasurementUnitListenerRelay.h new file mode 100644 index 0000000000000000000000000000000000000000..69e2b0c1bab1d394517684a60ab328d3a95ec55d --- /dev/null +++ b/source/RobotAPI/components/units/relays/InertialMeasurementUnitListenerRelay.h @@ -0,0 +1,56 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package VisionX::ArmarXObjects::InertialMeasurementUnitListenerRelay + * @author Raphael Grimm ( ufdrv at student dot kit dot edu ) + * @date 2016 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ +#include <ArmarXCore/core/ManagedIceObject.h> +#include <ArmarXCore/core/util/noop.h> +#include <RobotAPI/interface/units/InertialMeasurementUnit.h> + +namespace armarx +{ + class InertialMeasurementUnitListenerRelay : + virtual public ManagedIceObject, + virtual public InertialMeasurementUnitListener + { + public: + using CallbackFunctionSensorValues = std::function<void(const std::string&, const std::string&, const IMUData&, const TimestampBasePtr&)>; + + // InertialMeasurementUnitListener interface + virtual void reportSensorValues(const std::string& device, const std::string& name, const IMUData& values, const TimestampBasePtr& timestamp, const Ice::Current& = GlobalIceCurrent) + { + callbackReportSensorValues(device, name, values, timestamp); + } + protected: + // ManagedIceObject interface + virtual void onInitComponent() + { + usingTopic(topicName); + } + virtual void onConnectComponent() {} + virtual std::string getDefaultName() const + { + return "InertialMeasurementUnitListenerRelay"; + } + public: + std::string topicName; + CallbackFunctionSensorValues callbackReportSensorValues {noop<const std::string&, const std::string&, const IMUData&, const TimestampBasePtr&>}; + }; + using InertialMeasurementUnitListenerRelayPtr = IceInternal::Handle<InertialMeasurementUnitListenerRelay>; +} diff --git a/source/RobotAPI/components/units/relays/KinematicUnitListenerRelay.h b/source/RobotAPI/components/units/relays/KinematicUnitListenerRelay.h new file mode 100644 index 0000000000000000000000000000000000000000..cbf2d2e2bab5bdc57acadcbb9b78f4fbcca806cb --- /dev/null +++ b/source/RobotAPI/components/units/relays/KinematicUnitListenerRelay.h @@ -0,0 +1,94 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package VisionX::ArmarXObjects::KinematicUnitListenerRelay + * @author Raphael Grimm ( ufdrv at student dot kit dot edu ) + * @date 2016 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ +#include <ArmarXCore/core/ManagedIceObject.h> +#include <ArmarXCore/core/util/noop.h> +#include <RobotAPI/interface/units/KinematicUnitInterface.h> + +namespace armarx +{ + class KinematicUnitListenerRelay : + virtual public ManagedIceObject, + virtual public KinematicUnitListener + { + public: + using CallbackFunctionModes = std::function<void(const NameControlModeMap&, Ice::Long, bool)>; + using CallbackFunctionState = std::function<void(const NameStatusMap&, Ice::Long, bool)>; + using CallbackFunctionValue = std::function<void(const NameValueMap&, Ice::Long, bool)>; + + // KinematicUnitListener interface + virtual void reportControlModeChanged(const NameControlModeMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportControlModeChanged(map, time, changes); + } + virtual void reportJointAngles(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointAngles(map, time, changes); + } + virtual void reportJointVelocities(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointVelocities(map, time, changes); + } + virtual void reportJointTorques(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointTorques(map, time, changes); + } + virtual void reportJointAccelerations(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointAccelerations(map, time, changes); + } + virtual void reportJointCurrents(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointCurrents(map, time, changes); + } + virtual void reportJointMotorTemperatures(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointMotorTemperatures(map, time, changes); + } + virtual void reportJointStatuses(const NameStatusMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointStatuses(map, time, changes); + } + + protected: + // ManagedIceObject interface + virtual void onInitComponent() + { + usingTopic(topicName); + } + virtual void onConnectComponent() {} + virtual std::string getDefaultName() const + { + return "KinematicUnitListenerRelay"; + } + public: + std::string topicName; + CallbackFunctionModes callbackReportControlModeChanged {noop<const NameControlModeMap&, Ice::Long, bool>}; + CallbackFunctionValue callbackReportJointAngles {noop<const NameValueMap&, Ice::Long, bool>}; + CallbackFunctionValue callbackReportJointVelocities {noop<const NameValueMap&, Ice::Long, bool>}; + CallbackFunctionValue callbackReportJointTorques {noop<const NameValueMap&, Ice::Long, bool>}; + CallbackFunctionValue callbackReportJointAccelerations {noop<const NameValueMap&, Ice::Long, bool>}; + CallbackFunctionValue callbackReportJointCurrents {noop<const NameValueMap&, Ice::Long, bool>}; + CallbackFunctionValue callbackReportJointMotorTemperatures {noop<const NameValueMap&, Ice::Long, bool>}; + CallbackFunctionState callbackReportJointStatuses {noop<const NameStatusMap&, Ice::Long, bool>}; + }; + using KinematicUnitListenerRelayPtr = IceInternal::Handle<KinematicUnitListenerRelay>; +} diff --git a/source/RobotAPI/components/units/relays/RobotStateListenerRelay.h b/source/RobotAPI/components/units/relays/RobotStateListenerRelay.h new file mode 100644 index 0000000000000000000000000000000000000000..839160995c58304031c199884a0e7fbac3517661 --- /dev/null +++ b/source/RobotAPI/components/units/relays/RobotStateListenerRelay.h @@ -0,0 +1,61 @@ +/* + * This file is part of ArmarX. + * + * ArmarX is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * ArmarX is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + * @package VisionX::ArmarXObjects::KinematicUnitListenerRelay + * @author Raphael Grimm ( ufdrv at student dot kit dot edu ) + * @date 2016 + * @copyright http://www.gnu.org/licenses/gpl-2.0.txt + * GNU General Public License + */ +#include <ArmarXCore/core/ManagedIceObject.h> +#include <ArmarXCore/core/util/noop.h> +#include <RobotAPI/interface/core/RobotState.h> + +namespace armarx +{ + class RobotStateListenerRelay : + virtual public ManagedIceObject, + virtual public RobotStateListenerInterface + { + public: + using CallbackFunctionValue = std::function<void(const NameValueMap& , Ice::Long, bool)>; + using CallbackFunctionPose = std::function<void(const FramedPoseBasePtr &, Ice::Long, bool)>; + + virtual void reportJointValues(const NameValueMap& map, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportJointValues(map, time, changes); + } + void reportGlobalRobotRootPose(const FramedPoseBasePtr & pose, Ice::Long time, bool changes, const Ice::Current& = GlobalIceCurrent) + { + callbackReportGlobalRobotRootPose(pose, time, changes); + } + protected: + // ManagedIceObject interface + virtual void onInitComponent() + { + usingTopic(topicName); + } + virtual void onConnectComponent() {} + virtual std::string getDefaultName() const + { + return "RobotStateListener"; + } + public: + std::string topicName; + CallbackFunctionValue callbackReportJointValues {noop<const NameValueMap& , Ice::Long, bool>}; + CallbackFunctionPose callbackReportGlobalRobotRootPose {noop<const FramedPoseBasePtr &, Ice::Long, bool>}; + }; + using RobotStateListenerRelayPtr = IceInternal::Handle<RobotStateListenerRelay>; +} diff --git a/source/RobotAPI/components/units/relays/syntaxcheck.cpp b/source/RobotAPI/components/units/relays/syntaxcheck.cpp new file mode 100644 index 0000000000000000000000000000000000000000..82b6a31b758ca9668e4219e346f9ae3be5e4a477 --- /dev/null +++ b/source/RobotAPI/components/units/relays/syntaxcheck.cpp @@ -0,0 +1,3 @@ +#include "KinematicUnitListenerRelay.h" +#include "InertialMeasurementUnitListenerRelay.h" +#include "ForceTorqueUnitListenerRelay.h" diff --git a/source/RobotAPI/gui-plugins/DebugDrawerViewer/DebugDrawerViewerWidgetController.cpp b/source/RobotAPI/gui-plugins/DebugDrawerViewer/DebugDrawerViewerWidgetController.cpp index 62653b98433caa6fc0a7161015624b742b03b494..b9b89a1aa2a77401face43df6c20670fbb61dde9 100644 --- a/source/RobotAPI/gui-plugins/DebugDrawerViewer/DebugDrawerViewerWidgetController.cpp +++ b/source/RobotAPI/gui-plugins/DebugDrawerViewer/DebugDrawerViewerWidgetController.cpp @@ -67,7 +67,7 @@ void DebugDrawerViewerWidgetController::onConnectComponent() // create the debugdrawer component std::string debugDrawerComponentName = "GUIDebugDrawer_" + getName(); ARMARX_INFO << "Creating component " << debugDrawerComponentName; - debugDrawer = Component::create<DebugDrawerComponent>(properties, debugDrawerComponentName); + debugDrawer = Component::create<DebugDrawerComponent>(getIceProperties(), debugDrawerComponentName); if (mutex3D) { diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp index 53a516e7beeeb7119ed6bc04991e58ed9eaa23ff..b04f22369c2d16013d97c12dd9478614d5633e05 100644 --- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp +++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.cpp @@ -32,6 +32,8 @@ #include <ArmarXCore/core/ArmarXObjectScheduler.h> #include <ArmarXCore/core/ArmarXManager.h> +#include <ArmarXCore/util/json/JSONObject.h> + #include <VirtualRobot/XML/RobotIO.h> // Qt headers @@ -44,6 +46,7 @@ #include <QTableView> #include <QCheckBox> #include <QTableWidget> +#include <QClipboard> #include <Inventor/SoDB.h> #include <Inventor/Qt/SoQt.h> @@ -107,7 +110,7 @@ void KinematicUnitWidgetController::onInitComponent() // create the debugdrawer component std::string debugDrawerComponentName = "KinemticUnitGUIDebugDrawer_" + getName(); ARMARX_INFO << "Creating component " << debugDrawerComponentName; - debugDrawer = Component::create<DebugDrawerComponent>(properties, debugDrawerComponentName); + debugDrawer = Component::create<DebugDrawerComponent>(getIceProperties(), debugDrawerComponentName); showVisuLayers(false); if (mutex3D) @@ -160,7 +163,7 @@ void KinematicUnitWidgetController::onConnectComponent() packages.push_back(Application::GetProjectName()); ARMARX_VERBOSE << "ArmarX packages " << packages; - for (const std::string& projectName : packages) + for (const std::string & projectName : packages) { if (projectName.empty()) { @@ -336,6 +339,8 @@ void KinematicUnitWidgetController::saveSettings(QSettings* settings) } + + void KinematicUnitWidgetController::showVisuLayers(bool show) { if (debugDrawer) @@ -351,6 +356,34 @@ void KinematicUnitWidgetController::showVisuLayers(bool show) } } +void KinematicUnitWidgetController::copyToClipboard() +{ + NameValueMap values; + { + boost::recursive_mutex::scoped_lock lock(mutexNodeSet); + + if (selectedControlMode == ePositionControl) + { + values = reportedJointAngles; + } + else if (selectedControlMode == eVelocityControl) + { + values = reportedJointVelocities; + } + } + + JSONObjectPtr serializer = new JSONObject(); + for (auto & kv : values) + { + serializer->setFloat(kv.first, kv.second); + } + const QString json = QString::fromStdString(serializer->asString(true)); + QClipboard* clipboard = QApplication::clipboard(); + clipboard->setText(json); + QApplication::processEvents(); +} + + void KinematicUnitWidgetController::updateGuiElements() { // modelUpdateCB(); @@ -380,6 +413,7 @@ void KinematicUnitWidgetController::connectSlots() connect(ui.radioButtonVelocityControl, SIGNAL(clicked(bool)), this, SLOT(setControlModeVelocity())); connect(ui.radioButtonTorqueControl, SIGNAL(clicked(bool)), this, SLOT(setControlModeTorque())); + connect(ui.copyToClipboard, SIGNAL(clicked()), this, SLOT(copyToClipboard())); connect(ui.showDebugLayer, SIGNAL(toggled(bool)), this, SLOT(showVisuLayers(bool)), Qt::QueuedConnection); connect(this, SIGNAL(jointAnglesReported()), this, SLOT(updateJointAnglesTable()), Qt::QueuedConnection); @@ -858,14 +892,14 @@ void KinematicUnitWidgetController::updateControlModesTable() switch (currentMode) { - /*case eNoMode: - state = "None"; - break; - - case eUnknownMode: - state = "Unknown"; - break; - */ + /*case eNoMode: + state = "None"; + break; + + case eUnknownMode: + state = "Unknown"; + break; + */ case eDisabled: state = "Disabled"; break; @@ -1171,7 +1205,7 @@ void KinematicUnitWidgetController::reportControlModeChanged(const NameControlMo // return; boost::recursive_mutex::scoped_lock lock(mutexNodeSet); - for (auto& e : jointModes) + for (auto & e : jointModes) { // ARMARX_INFO << "Setting jointMode of joint " << e.first << " to " << e.second; diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h index 8ad61492751cd192b24fb7ceaec68dd7f901d1ea..7675b133b391f489aeb9f8d4a4d82067e2a653d9 100644 --- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h +++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/KinematicUnitGuiPlugin.h @@ -253,6 +253,7 @@ namespace armarx protected slots: void showVisuLayers(bool show); + void copyToClipboard(); private: boost::recursive_mutex mutexNodeSet; diff --git a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/kinematicunitguiplugin.ui b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/kinematicunitguiplugin.ui index 0df7579fe4607e0a75623700567cfc792e3ea7ac..333937df642d635cd235f3433a7637232601e0ac 100644 --- a/source/RobotAPI/gui-plugins/KinematicUnitPlugin/kinematicunitguiplugin.ui +++ b/source/RobotAPI/gui-plugins/KinematicUnitPlugin/kinematicunitguiplugin.ui @@ -46,7 +46,14 @@ </item> <item> <layout class="QGridLayout" name="gridLayout"> - <item row="2" column="2" colspan="2"> + <item row="2" column="0" colspan="2"> + <widget class="QLabel" name="label"> + <property name="text"> + <string>Select Joint</string> + </property> + </widget> + </item> + <item row="2" column="2" colspan="3"> <widget class="QComboBox" name="nodeListComboBox"> <property name="enabled"> <bool>true</bool> @@ -59,7 +66,7 @@ </property> </widget> </item> - <item row="3" column="2" colspan="2"> + <item row="3" column="2" colspan="3"> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <widget class="QRadioButton" name="radioButtonPositionControl"> @@ -157,10 +164,7 @@ </item> </layout> </item> - <item row="4" column="2"> - <layout class="QHBoxLayout" name="horizontalLayout_4"/> - </item> - <item row="5" column="3"> + <item row="6" column="4"> <widget class="QCheckBox" name="showDebugLayer"> <property name="text"> <string>debug layer</string> @@ -170,29 +174,24 @@ </property> </widget> </item> - <item row="5" column="2"> - <widget class="QSlider" name="horizontalSliderKinematicUnitPos"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="minimum"> - <number>-100</number> - </property> - <property name="maximum"> - <number>100</number> - </property> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="tickPosition"> - <enum>QSlider::TicksBelow</enum> + <item row="4" column="2"> + <layout class="QHBoxLayout" name="horizontalLayout_4"/> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QLabel" name="label_2"> + <property name="text"> + <string>Control Mode</string> </property> - <property name="tickInterval"> - <number>0</number> + </widget> + </item> + <item row="6" column="1"> + <widget class="QLabel" name="labelUnit"> + <property name="text"> + <string/> </property> </widget> </item> - <item row="5" column="0"> + <item row="6" column="0"> <widget class="QLCDNumber" name="lcdNumberKinematicUnitJointValue"> <property name="enabled"> <bool>true</bool> @@ -211,24 +210,32 @@ </property> </widget> </item> - <item row="5" column="1"> - <widget class="QLabel" name="labelUnit"> - <property name="text"> - <string/> + <item row="6" column="2"> + <widget class="QSlider" name="horizontalSliderKinematicUnitPos"> + <property name="enabled"> + <bool>true</bool> </property> - </widget> - </item> - <item row="3" column="0" colspan="2"> - <widget class="QLabel" name="label_2"> - <property name="text"> - <string>Control Mode</string> + <property name="minimum"> + <number>-100</number> + </property> + <property name="maximum"> + <number>100</number> + </property> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="tickPosition"> + <enum>QSlider::TicksBelow</enum> + </property> + <property name="tickInterval"> + <number>0</number> </property> </widget> </item> - <item row="2" column="0" colspan="2"> - <widget class="QLabel" name="label"> + <item row="6" column="3"> + <widget class="QPushButton" name="copyToClipboard"> <property name="text"> - <string>Select Joint</string> + <string>Copy Values</string> </property> </widget> </item> diff --git a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp index 764ff8214e825d22975f2a61274d4cbfa5c6e7f3..d7aa2b8c2c3b3955c0280b36d875cd3f891dee79 100644 --- a/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp +++ b/source/RobotAPI/gui-plugins/RobotViewerPlugin/RobotViewerGuiPlugin.cpp @@ -124,7 +124,7 @@ void RobotViewerWidgetController::onInitComponent() { std::string debugDrawerComponentName = "RobotViewerGUIDebugDrawer_" + getName(); ARMARX_INFO << "Creating component " << debugDrawerComponentName; - debugDrawer = Component::create<DebugDrawerComponent>(properties, debugDrawerComponentName); + debugDrawer = Component::create<DebugDrawerComponent>(getIceProperties(), debugDrawerComponentName); if (mutex3D) {