From d2d9ba781bb8824222533339e38912eb43e62699 Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Mon, 10 Dec 2018 14:03:32 +0100 Subject: [PATCH 1/7] Prepared structure and text modules for system modes subpage. --- system_modes/goal.png | Bin 0 -> 57789 bytes system_modes/index.md | 115 ++++++++++++++++++ ...s_between_skill_and_deliberation_layer.png | Bin 0 -> 315436 bytes 3 files changed, 115 insertions(+) create mode 100644 system_modes/goal.png create mode 100644 system_modes/index.md create mode 100644 system_modes/interactions_between_skill_and_deliberation_layer.png diff --git a/system_modes/goal.png b/system_modes/goal.png new file mode 100644 index 0000000000000000000000000000000000000000..c885c23251a2320cb52ced0df2a99c4f8b271105 GIT binary patch literal 57789 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%0ANcz`>6Eb5cG;TV@Tov989-f?;U! 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 literal 0 HcmV?d00001 diff --git a/system_modes/index.md b/system_modes/index.md new file mode 100644 index 00000000..1fff9f7a --- /dev/null +++ b/system_modes/index.md @@ -0,0 +1,115 @@ +# Lifecycle and System Modes + +Table of Contents +* [Introduction and goal](#introductionandgoal) +* [Requirements](#requirements) +* [Background: ROS 2 Lifecycle](#backgroundros2lifecycle) +* [Main features](#mainfeatures) + * [Extended lifecycle](#extendedlifecycle) + * [System hierarchy and modes](#systemhierarchyandmodes) + * [Mode manager](#modemanager) +* [Roadmap](#roadmap) +* [Related Work](#relatedwork) +* [Acknowledgments](#acknowledgments) + +TODO CHECK FUNCTIONING OF THE LINKS ABOVE (AND THE GENERATED IDS FOR THE SECTION HEADERS). + +## Introduction and Goal + +Modern robotic software architectures follow a layered approach. The layer with the core algorithms for SLAM, vision-based object recognition, motion planning, etc. is often referred to as *skill layer* or *functional layer*. To perform a complex task, these skills are orchestrated by one or more upper layers named *executive layer and planning layer*. Other common names are *task layer and mission layer* or *deliberation layer(s)*. In the following, we used the last term. + +We observed three different but closely interwoven aspects to be handled on the deliberation layer: + +1. **Task Handling**: Orchestration of the actual task, the *straight-forward*, *error-free* flow +2. **Contingency Handling**: Handling of task-specific contingencies, e.g., expectable retries and failure attempts, obstacles, low battery. +3. **System Error Handling**: Handling of exceptions, e.g., sensor/actuator failures. + +The mechanisms being used to orchestrate the skills are service and action calls, re-parameterizations, set values, activating/deactivating of components, etc. We distinguish between *function-oriented calls* to a running skill component (e.g., set values, action queries) and *system-oriented calls* to individual or multiple components (e.g., switching between component modes, restart, shutdown). + +![Interaction between skill and deliberation layer](interactions_between_skill_and_deliberation_layer.png) + +Analogously, we distinguish between *function-oriented notifications* from the skill layer in form a feedback on long-running service calls, messages on relevant events in the environment, etc. and *system-oriented notifications* about component failures, hardware errors, etc. + +Our observation is that interweaving of task, contingency and system error handling generally leads to a high complexity of the control flow on the deliberation layer. Yet, we hypothesize that this complexity can be reduced by introducing abstractions for system-oriented calls and notifications. + +Therefore, our **goal** within this work is to provide suitable abstractions and framework functions for (1.) system runtime configuration and (2.) system error and contingency diagnosis, to reduce the effort for the application developer of designing and implementing the task, contingency and error handling. + +This goal is illustrated in the following high-level architecture: + +![High-level Architecture](goal.png) + +The envisioned key elements to achieve this goal are: + +1. Extensible concept to specify the runtime states of components (i.e ROS nodes). +2. Modeling approach for specifying system modes based on these component states. +3. Diagnosis module for deriving relevant information from the operating systems, the hardware and the functional components. +4. Mode manager module for system runtime configuration. + + +## Requirements + +The list of requirements is maintained in the doc folder of the micro-ROS system modes repository at **TODO INSERT LINK**. + + +## Background: ROS 2 Lifecycle + +Our approach is based on the ROS 2 Lifecycle. The primary goal of the ROS 2 lifecycle is TODO INSERT TEXT. + +The description of the concept can be found at [http://design.ros2.org/articles/node_lifecycle.html](http://design.ros2.org/articles/node_lifecycle.html). The implementation is described at [https://index.ros.org/doc/ros2/Managed-Nodes/](https://index.ros.org/doc/ros2/Managed-Nodes/). + + + +## Main Features + +### Extended Lifecycle + +In micro-ROS, we extended the ROS 2 lifecycle by allowing to specify specific modes (i.e. substates) for the ACTIVE state based on the standard parameters mechanism. We implemented this concept in rcl and rclcpp for ROS 2 and micro-ROS. + +The documentation and code can be found at TODO INSERT LINK. + + +### System Hierarchy and Modes + +We provide a modeling concept for specifying the hierarchical composition of systems recursively from nodes and for specifying the states and modes of systems and subsystems with the extended lifecycle, analogously to nodes. This system hierarchy and modes model also includes an application-specific the mapping of the states and modes along the system hierarchy down to nodes. + +The description of this model can be found at TODO INSERT LINK. + + +### Mode manager + +The mode manager allows for runtime system adaptation based on such a system hierarchy and modes model. It parses the model and provides all services and topics to request state and mode changes and to monitor these changes. + +The documentation and code can be found at TODO INSERT LINK. A small demo is provided at TODO INSERT LINK. + + +## Roadmap + +**2018** +* Designed extended lifecycle concept and implemented this concept in rcl and rclcpp for ROS 2 and micro-ROS. +* Designed modeling concept to specify system hierarchy as well as to model states and modes of system and subsystems and their mapping along the system hierarchy down to nodes. +* Implemented mode manager in C++ for ROS 2. + +**2019** +* Specific implementation of mode manager for micro-ROS as may be necessary. +* Diagnostics framework for micro-ROS, interoperating with ROS 2 diagnostics. +* MCU-specific diagnostics functions for resource usage on RTOS layer, latencies, statistics from middleware, ... +* Integration of mode manager with real-time executor. + +**2020** +* Lightweight concept for specifying error propagations between nodes and subsystems. + +_Note: The extension of the ACTIVE state by modes (substates) was originally planned for 2020 but brought forward in 2018._ + + +## Related Work + +In this section, we provide an overview to related approaches and link to the corresponding APIs. + +### AADL + +INSERT SOME WORDS ON AADL AND LINK DOCUMENTATION - OR REMOVE THIS SECTION. + + +## Acknowledgments + +This activity has received funding from the European Research Council (ERC) under the European Union's Horizon 2020 research and innovation programme (grant agreement n° 780785). diff --git a/system_modes/interactions_between_skill_and_deliberation_layer.png b/system_modes/interactions_between_skill_and_deliberation_layer.png new file mode 100644 index 0000000000000000000000000000000000000000..967c811c4b48d86a77f1f08431ce58a42168e86c GIT binary patch literal 315436 zcmeI*2fSs|^#}0LXLKV`MjO3GkKTqEW=I%@F@z9=zvv}VVswd;AQQcJq6`wEh6sYu z{Snbiv?yZ|UGV?1|Fd)4_U?PPoqOND=JV`x&Ms@Oz0Ys2z1G_695Z~w^`@J8z|?*E z^qFqh(7~JZ=`+bg(y#QL)ZZiS*!~v(n{wYxHXPCC%dh@hanu~6`}7&uXV~CDo9_Q~ zpT38GG?fy9BtfrfJ+L2biXoEk_RNE}EUm^`r{aiAOrUVE+FlXSmrI51#9+mPB2 zLN}bS*KHGh0UFXkPby8Y+Y_$!k}|Kq-e-mxdP!e9vzrqp^y%%eo11}6P@9{f$R!~& z&6G>B5>eH00Mw>mPB@VCwmBJyL`LF3;y@>JAVF;>k8bK);y~g+PB@UDHYWp-$VePW z9Oz^YB&hA=(M^3z9B3^EZocOFcXQ_p&{~#!)p~;6){jA=AaNjZpyN4^ptj?OICU^_ zAaS7e97s^x`Y}ipBn~7FbUX(V)OP$3rw%3#Bo4Hm0|{zdKL&|{#DT~7$l>rO*v;XfB$5&b5(hes0|{z7ZA4Rl5(g3oa>#)MwK*J=L{j2F z;y|ZyAVF=XjcDpm;y~g+4mpsZHiv`KHY7d!?BCa0Z~5?V*sv8wjvRd8fxG_s&o@`u zfz38s=i-aclKI+ef2VjT6>nBqNiEs3?bcFHC_8rSC0OzP`~R-Js#HVgaUjL9?YuE< zc8`Ae!~a=giKV~z;){3Refz%q?mYVFpWl7=ZTs(k)MS%QRwXG*Ew%ivyY63Q<{Gp8 z{`Z$Z{q&Rj?t7?u8r$yJxi7mt`2y59Tpe1x@8KVfPT1R_gWJSz%{%V`KrA%4&N}O_ zw%R&J9ku`b^DjJV)Q_s9V&K5}{i`x_%dWKNo(Ih^!;Bu4tLpjZ zpV@imEsi+iH)o!C;*?WPdGg5@fByOB7hQD5?YH0f_S^rQe)<_#UU|(OcG#m|zkWac z>5h**_K>R3Bij>CJQCae^wUqzJMWY`?zs8A_ulQ_|66OXJ#6c(cM7Pz`Q}5m*kb#4 z-g)chn}7ewC!Z|27_UI?b|mLzvi0D&OUpL zJJU`(-EFtsc=_e$z4FS7(rc_SWc%%R57|bH7=*Tm9=i8|2kyE2@>@Nv&~$o~6AmQh zZB7QFqsUlkr8Or^c<<$xU(l;F&N$(!t1bc!r=NcLh!I=4{No?5uH4(3Zn_q#9(B}j z_uA{=M<0FQq?3*g`O8%`#S~M>aPh@w0{4CPIaFGUS6+GHcH8ZC>ZzAe9*i4z*Lmli z?EayL9>2f>i>$TQx)6#m?oRw^<;EMYfyif^amBXV{siQmbIxzW)5#{AT!k~w{O$A4 z|HCP#T=L8_PiZR_tR_*8o^{vV@WT&3xcA<_#7geG^VU^XSqpmJdFP*wIp(16es|T= zPP-E=PwfW}TuDkB{-I;UFxu1RZDImE1`Wsj1+tgD}v+J(=$*|Bui;?LryX>5gKmPdh z&;L`ds!1pPN=v-N63Yx3^1V>)1{;i6YpwMN(JtqjYo66t9}I1!rzYoZ#@_^Xg!y6%rVz<&pmzp^;iDrN4o|bpMCZ@hYug+(SQMSuCT(Y)W5N8 zHHmWc%r@JAWtUy?w%h&){nhi%J8wVn#G}?2=_{_dfJ%J(?VSbFg@F>s95Z@{9d`fL zw`S2_U9cWh({##{6AmP(&B;J?6d9j=_No3%IptIUi+mb2xo$4GTyzq=Y z{^E--9UrNUDEiuKugo*gd~PBmKAL8l>E3_;U-7bVnVTvays9{pEkdHDld(q0biGi>mnP5bmY>7-+5 zA-G5^y6BQLxfHT?-}0CHg@&e^Zu*!Z)Ew@+X$gssdXT6@|Rl&58i;X z`@;`EguIttdd}~DcV4zRI^}SgB{iENrE|-H1iQH%nl>ivjyrCdd+vFu6#n_oH*{ma z{f;b9lFmBofC}CF;Dh($)8NAje2KT^s(S0KH)DPY$WBz;a?2f}WIcZTJJ}4yX-Wn+ z3DNOUNQe9JX3r9p>7lIP!U1Xr4I29R;}7q?`+-_v3ZwMcXrocXh7Hd)I^&F$kLwMyp))C-UWG3{q1j$@iYkcrQz&=0dr-u z^(@^bJ;R1=>}#pRq8yudhtcpCi;DU?ZeDfccUw#!r@mXj6#wOh*Ya7U>8F=owzw;;v z2DCs1^##X(%P&8F&N=7d9c-z%;fAX>+w6zI@v9uECGS7{@VKmp0E-rhz5+d(umf0Z zu_d*hJ>;SFBahsV0%6rv*QQJP-S5tQ{P9Q5K6~ucQ~&=GQnK}QGq)T_P@CJKX&b^g ziUwK%D_GfYzayYzq<+U8_kwQlj&s5cGt30__+!PV#R-anQKPm4%DeCWL#8&KPr)-m z&g!e$d+&pfKmPEYb{aX`Y;$b4-L8<1>UN)fb{I3}0=x3#jyw3k19zdx&9=VFEZ*gt@7$APS*Ea`{p<)nw%AKT=WB7? zac3l)jr?i5#3aR=skZAwBDg^uc<{kK0|z#!?o{o6Ip7`KbI%`9V(hu+&;NV39;p{! z?6cfgUJU8idJZJ1w)JDsVH8|_#N5=P6MX?XtaA|fy9Btfy9Aw97s@Gjx*_g;y~g+;y~Rvkf641tV|Up4kQjF4wU0S zg4%MNY18{F^u3!W z@&%|XQ&VM$1D(c!zK4G_I$>|8jcV#o;y~g+4mpsZHiv_fNJ<O2f0uBU0x_>MA~x8EeWv1SnygG!&JBW z2K9E>VTVw}ru*7!ubpO^X}VQI<;)bU^akbffc10FJy)J`87kku=9+6Z-gx6|p6`6; zJN^6jXFy|4v}iS-pIKs3x?UVeQf<9B+3V_ou%XYe0LacZ+id&nvrqGJ;q%WwKk~>U zBlqpQ>x;8$u51uv$Rgf?%btn1!-o&wW}9sy{SrqXeRKfs+i$X`Y`OD|n+;&1D%x2|K&v8qE3Ii#9bjzE3& z)mO(-)hEV}A5S?On!wdi5KHgB|NfAcuwAIW!jv+;$wZd75y>Mx z9A<+6OMB2N0k)VgPdxEN)Oa@3ItM+;s>K9Uz5_ieUMuG*cuE|u;77q>Imo#*<_@8; zp5}vRq*qf2n7meKv4sfdv*| z({Bx@O10{c0+nlJ+$>eD+I!?#S&h-`DfU6NJZpWvq(Er>803utvQjvNy6m#c#^YGI zBGL|;);NZ7Isg3g7hinw#!*N(ooS|-s;Qq-0RvZX+o~piEqSt`Cun#uBv;#xTDq3o zvSV*M)rp3Ar8OrV<9oNKBzgFEGI6`IJx0MdZmRpByolIN4Cl)m$|uGTH+i zqj+r&=AtSpZ7q|u>UJUgox=#Gzd7VUQYPeZP?}8=Naf1~yc|ym%E8=%EY>{p%rjSB zd1c@cZE_xB2*6@^x7uo}HGAZ~ZZEiq@PJ-up@mvPKx(ua4kW0phD#lu$F>yCl4NtG znJvfktYvKHop){y&9nqBz4THsNrHjV&!WMZ-Bv*@s-SIFnkM18ncNkM$E$^RlHRt3 z%x_uKu$A1(z(U`L2$z1**xfR+s%Thr@OY++Wy}#WQN61uS8EnPRuCS6#^B(C55D{E zyCVc2b<|NJG1l5r&E*XxM+Mao`E6FBo}uQ7Qw23~AVF}$uuP9Oc?2R}f$SFy(M zfKBfH2OoSuGaJ3B8f_WN_O1YG`S$WRpf|`yz?pgGnMJ@U86GTKRTI+CmUEbf!rvye zn40L41IaAbC5t*FLyX?N@WKl_Va0Mym&O7foOQ`CqUMpznd7BLVBS((>;)^d-G4<3_JI@w?uje&(rzA}%k=Ea0i=4>i z#Va*$ryw!AH@|`SV8caK*pPIz8Qnlww$nH0tCIF?nZ40 zv>-!@kz35Ay5C6(gu1h|*%bm=GOTm9^l?FYr7>uZr+*W=`j3D7LzG%ObZv305`u{*-aH-u2%1PwNa{fF|>{ zTysgnEytO*xlbn>VjDyuw_`BZ7_c}6%$44L`|Wd!xyS>uKl;&+!n^^#w6`Ih^S{Jf z?$-j8C*49rM=D9U4P|emDre?1zTF~=Mnt7u3Y#nXD!OI=II zrA!Ew`Dza(Lp>^PcpV&beby~VxWLzH-5HvwhBL0}1`^a(&8pmFq<0Hej*Bn8*kOg- z&{bzb+7z~IGWOkf-@uEuSRRUpjc$REYw_l>&`CR_;+{71POfEyW-=oGZAEP?3z!ex zdLKGl?rZ>gl5Gz7Jk zGpDE3b0A5z)$^(~IZb^&Is*7PXB&NHJ6_hvkGZM4P}`bWQgy3cLT#ui9DxZIS2lo$ z9(pJRD6g8wr86e8SZTiG=WaM>YeN@58Q$?Yi}`Fy!K^R6?Y7&t)~x@}fBw@)&U}1F zsF}JGO0znQq9#pqofL$D?7gz z$CWMl$ycm8=9SKslnJHz(%QRZ3cI=B4r#^%T=GR32c6bZ+K|@AjT>jN300HGqKUsD zja5;pGidMfOh1Lbt#qYZBUQbz0w=*q;QoO=Na;O%d)cyX-P~9Zv}G zN~Wl;XeZ?2=9LXEz}zHGcWXOFOFqjivn;X160IepRjpg>1yumGak1z9LVWIQvq9at zouIbvEUmS|@Odp_Z10@PTr6IF_0_<{?|%2Yg9Z(%m7%qj|LISE`s9;Os>Al5T4S@# zHWNbYoO8~xo1S#iNd;dNgC^=a2;)~=afRa;(@ZnX>Z`9#9uIMDtsl1Go{FTy)~8gK zDD~WY^UXH?xcNHF82B9U-I_oU4b4`hFfBV}YF9ZkoNQF#@DirK@zWL_c zZoBOkTWqmxozjmz_SoprqlG~bnX=$fcQ5I$Vh9^9V!@DL*A>3P+}+xGXa1zOZT-00 zol%5E(bWugp3-G6gjxr4V{F)hfCH@>Cj%jL?Ob!s#X1k{Sj+^(aY#%61S(e`C@Mk- zuXxv8cezRQJL#m8_S$Q&d+)vXx4->uARGSPbkj|aWBlefzk!Ki*Aja~J0V!EB8MM- zIBm7qW5JnO!c%(f1@WU&wyfR4^aKl;t za4I1MfArBuur+!bFuqwKh|fR#A>&$|f959z0{I~76SSrKesylCv#Lu{ZEMCe9IMqf zQ!g38YvV;~4Jo;4)lM0L1ah*$VOvY!8n^#sco|;+BBz~xTqEgoX%e1#>M7A|pL_1P ztd`(A-}#PSSXPOvY@W9Ku~P*HQUGzlTp8w{e|~?dBmAW=KK}UQMNX&3@O$>zXWeoC zg%@6+Oc0}1+Rv)Mw*gFtOO%jpF?09bcMo?O@i$^F{57$u*Mo;*BiibWI+KLk>~RFI zc7mL`#GJJ+(|kIUjtKyQxjzoZ-h1zzhcA0YdSc?k4?hH{9KzxqNJ>O?=1ms_+od;% zk0j_`gUn7+j`y=^H>aO|`uHgHns&mEZUJJN9=_5^wL*g&vY|m@s;Q=mrLqa0Y6RZ7 z=bjrqO*r2SbH%a=L}tlI=>iTUs4ZYf!!HRqaF!^P)LvO$Uw--JK7|nOkPYKkzOs4p zkoHj?8Uy?HEHVB1^#goxjR~uOa;kuUi8KJQNDxlrW%f}pkOExXaJ~b)(o2M#0Nv*$ zr2`xnR1#~Gf0tc$q3spyu{n|^i6N^=U_;Xj=7%)H}*KG?Ncey@6=OI4fHb2v!Umfc6)y-B{37Cg&);w|Ni}vZSU_8#KhZkSxtd2 zxZ$`)&+z>7&&N(t%f_?>m1{s)Y03eA=b2|7lBom`_t)=<{4;}2Q3mzHYdz-P0jbPqUS8_4t= zc8FdT)6tu`$RdmMjKfhy*aJ#>)?yDD>Oqma@4h>3$*DN)n(Iq#Eqp8J4&%OMk||H5 zT^Rb8zx;*K%=THp3a0;G{_>X;2&=5J3Z(%#oyQnu5xAt97vlDhfBYj?g!}KmKMT9i zlRkl$0+XOEKT#Ae%SO~C4$}s>Ph~+h0YiZ@*_L8g81*Z!yplHn#$zKu3` z@L&z0lP3e?o~CcT^;XUj1>LFFWgIWl8_x1bqfw!Qj`!=;P?PJajq8&pYqD9Q&h&+( z+`I_Xa9M@H$CmIbvxdU=-4R2H;jiL+5-2*X>s-?=xZna{%}$`WM|J;o>g=jz<`ghF zL2Us;a(!9Lz_;hiaLVGd`C#q9KEnnN+O$4H)BAW>f^R$Qumg|XT3At{(uud)bEZwC zzWo2|$gZTfEzjoqJ=uBZok>actFJXR5z4v6#M~((J*g4fxECdm_ zXnUZJ6u5!3hZk4BeP-d3QtV;<47+1t@^bxe;M(GiMD8)&DTR6ca* zQ2w2bXeHIzXbza_evNLWT>Z|_IgMQIX_N1_ikRLDwGgC*lds9stH;gZQY;(2=Hs2- zkf`H6GO&xbHlAhKdh4ylaqM_D=1QPx6)|O@wp_3a3VQl|mRRb0T7E7}Or{k5rVGC& z$GBNdo%ZGo!+7h1OwNdNL1B~MYOAe6Cr!1Yp!BF0rpuWUx~m-8Bi1AUR00C9|w-V1N^YOAg0ptZAjS<35}E~~ID7wm!_M&Fn~ zL5Ve)GarAIKoG!%6fhJj!CY?wD< zag_mc-g6?A8iI47QXrU5w}?yNn?HDJVFECSZ#N*h~)9mO~8Qcj^bqnseIO>_u2XFkS$qxbw{B437^J5|n4D zt#7)tR0}NNX>qU%uqdhqP=ki(5S0RRiGkZ}vrSkH^esGchz7H~s7o)sw4D3`!%_xZ zhP}{x)H6i&Tz=;@$<3 znX?TP)|R(7a7yeBbxJFuAgqM@!T%ZohAm{v{&n_plT9`uv%5*j0CugbiuhR=gO?=N znsTgQhcKvcJirrY9vunwLjmNOi$Rj*cuvN&0LY_Sj++>TljwxS=8^|5!XEj2GurgXq#(e=8H=McNt(=sBKB6aB~? zcpHk8{EN37c7wcQa+-djY{|?yxhduWm)VzIdI>#xXHu=b_S!k2t!HG2-S+6CkDCAC z-M6k-FN>@4b`WK3MC>v>C1iNnVYH=)18c1xU+OW|PfD``06PM-C z!)tC2VgC)CRN|$B00q*knZso{sK~s17J%$dG&WtYL}}P98SFxnxM@ueAQ&j%4(Oe6 zS_;wbgpNrBzhKZAvV{}j(b-wHfVr`V;2TRWxukZpp)yr213U^XhAQ_DF0gE0*Cm9b=;v=2nu|<8n;Oauce%QLP0&@L{ zImGZ10Uw(uJ8V)H=*U7usMgFODU+x$-wF}IDmGf*L}{ok7wjV3C+I~Y0*2aghdTx9 zM#1a}Z;qT1XQioc{B`8YG9^RcW2h~pW90?4g*@S@i5pj>& zuF=#}k%gd}d84yRdctcM=ebhZbgV>wX#?!%tgfQG@`|d~SB$O?fQEqyX zDVUV=wXEBVDuS!C;%9V$w0=z{jGPF)A4B}^(#Plpf1y(?i07kLq*k9C| z1T<6ekwn-`NkChA6%wD_llei@L}gho)F6uXEVfCO)R3;w_u|YY?_dJSu6TlZf9U({ zAEOKsRo*4*aZ^3u)z9Ke4TodiQkUiO=jT4Hv=zdtgCt~AgHV^{hrDi4;^mb;?v|wE zoX^%{aIG;hTu&U_fTY>CreyJKRnnCa!!)4%_p@WR^Cscisz$jxR3-MWAIPTe5JHED z6QIAKp}Jgtr7=+oYIF75ZK!Rc4W~rmT{rP1^z@L zy}I|^cV969v6KvSd|@l<)uL^u(h)5nX2^3w9Ecc}i>ct)V=2np^%o8&2a|?A7?JQf zp@ROHgjvanl3E7iOFF>~+JKn9q^dVQ4T%bfL8^#0I`1QYCz&I8p|}j;)EmgAL*PLX zu&AJwdR>;5YDw}XgI$0y=3^RtoV9D?Z9_iixuP50A_y8XM{)%-B(#Si_=Xzz60jbs zU(a#DBZ}9cu`O3Wpl1zZF88L%sT4m76|(Y|E8@PP_4BGjYQWK5`qfZ@6|8E&!hv|! zKQaq}CGJWr>G(!b!2F0v*lNGbp-solEoTQ*dT727W99{==Im%AI= z#7r>%fLGQ9twP_cCyzRlv6XTO8^Lmqy1cI}g%729uuPb} zC1o9B0Wl1>H-e-|L^E~_80NWGo~_%stB0^(B`eAy1|1Ybv==b=(FaGDf|=l5@Om;5 znA^b^Sf~18AOavox zTO7_Tf#rstTNSMq zwRj9*9oj0#hiWJZd4Qu$oN+fIURp9p_~r}3_;t})yJ;r~g}p-jG@{>6wh4*eB zabmMb5pFYKuWIRnyg?zDEt1j=;((cNB5{)S76U9;7Qims9N$o;FmH-HeBOCwxCAUP znn$TEof@Rg4X>(+SJGsXt*{(=P)5)t-Bg`0c1(fu-*HwxPJ+4281J+)CCsNe3O?lo6a zq1TUU4*{I-R z*^Sn&%&EOcji{j(39k0pg}3y9qzWoQDmXd>Dg~B?f}VO?X~4j-4L*fr!PB~5)-rPn zh$#)V1(`bL63#}KAiC7&z9Ef=WQp2 z@hGA!b|i_8FL*wc3)H|w0i){}4}^8Ma zBn)d!fZZDV*eetWUX0*+1zTC7cmgDxt#RH|Uz}}_sU+q<;D7_#2xkM??6+`=ry3Iq zNM-Heu<6|n(Hri)_uk+xB6GPw4Qk+NSFd;=Y<;kssi*khKRXXgV{x1i(A?P?bP|`;h2x_Rc*+t`=;mHeaMFj+NSt2+;xU3MUA>yoT!ScgAOVlNf zW$iE_9gh6TS@M8@n;x*M5P$c>eOCyOKO0Ul&}n~@qm9IBRGc=Fg@}s z4%Cphx+v(9*7nlPWkHC|2Gf*J0svx$v7eIH#G7_U_wj&20@BqO8n@S5Kv{K zovc8}vcPyaL2EoB_)@O>W%HzTBRBwk9K?tJ<+J&|9$>;tCG_SBMjW=M9a#(ahPUFJ4~2 zDyTvTf5Yn7Oacn#L&?kHX;~U-t-TlgU|^qNg9mNelm@^497CA3+G}aw zzv^%CAl01|mGmk2aQPf=?L*wQRXS4GJ=gab2oQ zY>)~E|I5V;`9>6u21MSdl0?8%u5)ul)E;y@F; z$~$#T8_l}9@Qpx91oO9E6Q+*!q{tg}WM-_Y#I)>t_(!8VP208DiifN$ z)Yce(!)Mq-AWC~iN9i12Z{2dD`O~5PaUl!KKQybI|^qN{?}YK zMap)@Eq;V7lx^JK?glUsSh;{Lfi`{NFYAm*3?FYy-4QJsH_8okwqNB2B3PKpMS3Ym zf41f}N}Dha_XmP`ZQ*ts5noJd$Zzk`lk0=zwnn840 z(Cf^3+J|54zSaOWkSl#BXOf&R)B z=Ju(u3Kp4`9Z*?wgOmls8H-! zWcZv2tRQ~5jNw2ES}!Z%Lcm($Z#W}kWut;{=0%feLJGgbAi|J_e6)hYwMcbXrvHu| z#3&`2RyGtYAUAtiF7Agsz|ImHYVe5-P^$?fWs7IiycM&Jl6;lrNaH2}*&-Hqc@P|1 zd}1cl<})tBZ!$6jl;Ky(ix*Opi{TN3_1!rU8ceky&TABchcvXZW^(++ge)-)O7|du zNda53gjoxT>eiSL6WD^`q>`nv!a!$>S4fwO^kT?^8v}*(6?Q*) zrnXDk%FQks5>RN%0;E)O|NZw9KW${o<@Z`;-^A;$zg{U~a&V?1!}@HN&8yeVeL|(T z4_1gUVfqnte4osH&d|P@2OlD&xEX#`wreJnTa8QDefr!Tz=Z=23}#_XceG*+2vV(m zt#t*;m;82MS*S%>LHrH!-9&=_8-K%_7UFLZYG4Pa!?10SIYR>b&_t9Ia4sxL?q@$} z9YSyvl&XALpZe(dqjr-Mq^b*6kI}B%#pBo=!gxt z-3O@U_U_AmUaJ26`Y0nzcD#>QH-OOHwH;W#UVJ6(S8Kt`@`4(ggN)t64SRtG`zvA_$AIqLR zkC}CfKLN42Uiq!7L--tDkwAEls?ysAXSusNo64nzW`4z|g zsIoRMcFCM@Br9xYqln;p!TCU!GtWG;dTb)>mFzO8XzgeWy!|!R0jV}8kp)2~6P6ze zssBlcY?YM*n3UvCxEXW^K$g;$6d$biJsapa5S3?IN&4&JEl{DGb$?`rINTemHHQQA z)V-DFS6Fg%?BR%|worsb8$K{ZA_=sW%b%s(~i*IP(o(!R7f-1#?OfnY2~b@ zT{;SMMz|}7SI7hRRHIn}%2~X#CbDe)Z=@B*tRBSQh_!(K@D_zTl$-HU$wZg39w=lk z46;4mZL-NG&@D;|CF^uEN}wS_JhC4yW21(|B5Z*Q_epIb;V-3%Wj5+Syf)MVLHl73 z&df@Zr7JL{;599T9TW9XoL;e><|ld(z$6eE*-}8Wz!K&eCkw#xbAl%u=z`q)Q?us{CV zq*BLqNl(mRB?i{vXZ!zkyBF=V)#Vd?0qzMojRHU?2u4hZG?>ys90@roLnPwU*bopP zF?{jG7m-wNM-akdo|vdg!j+rarMs~>yjoz$R+>)&_VLvqqSNhKJs9ll)1b z2-;w%g4pES3v|y}efVwB-J<3gJ32I$g)KTvm{wZ zsm@untUb}nSLHxg7>IH+tsMPXk{Xe&%c`)AFQx0(441!MNVfBeB+ck}W6*CN^wil!Zp--Ttr8q`jgf-%nR~|iF z(>#)22Q8(+hEYJ(WYPIF`v3y+7O)YBzGHTs+JiE}Kg2GLFz3JZG&B znxV^68=$17QH1ahvjCIVlBtg9XE7l^LM3_`ol#t9@38bKs56!k0<4G=WLP!R2^P4; zRA?8NqCai~c+A~##~oBZ^Z-x~cJn7kiM1#k!}V^fE!!v~rp!0re6t=I8|oYGw^aLz z6J1%5G{N(ZFpIzV5NRXr>aq$6xjMoHg2mZ9BMiEvl+b;PeAN7UYRLguT9=`rKTT*? zi@_%mi?|_&m>y;fncbA~h{Q_Eyvr`T1T9#WEs^X*olTF%8jO{*(qm9HoFLC z5Y{_L*aRJ3K-mgjb1x$~l$tfv@69!lvi6d0wF__vf*R#V0RtTl;0lHS(yMnl!kR~5 z0q8OQ156Sm^z#e72rb6HZ4irwUj-nxF^@!dUZM%oO1Gq^HsWxjS(humHM+As9{0*z zvhU&9Mr0v&^tg%kDp)*HRq1V8*vX(64MJiI$w*Bn4m5!SbacUkr3q~{rwQh3@}RQ- zc79RI)SRaC)=Ftzt?hG82t|pbAUPqXyJXN9&%~^Sg3P_@(%yvwUvO2XvZpep%*_c0Y>gQV7+uq4v{^W;3PUv19p;fMI7fT7axP=AaogQ;Q%86QxdB(1*P4nM%jppx1~AZQUMvP zHTXd9$K{cE;~P((A9~auC;9?><3TUF$h$J3lZJwYhqO!P?W9iCr7z5+z$jG3beRRR zy3}7|C1f=AL#ND7Ipq`v5SJ{C>f~|EK``3TB%Id_M?A_E3I66K<74n_QKvvE%1TrS z{ZV6g8d2QVjrR`QQK;O)!y3%#q7ZW%(RQ2EnV`0L17+r!e}teQ-kP1(e==|LD9CY3 zBS(&mQZ0u(yV0Bw3qYBnIdnUK#Mgox%Fhq-BG18pPBl(*1X3BztrN796^ewMv?UDX zU^m9ca6h0DkvVL-`9AWBF;!@vH0m5mZmq-+mdFokV=yyhCy)(e9see%jjU)!!u$*S zP>q3IF=%KQ?75oJcD~zio+^7Ll32uTE)OJg>!BGah#kS3knxA(qu6y2Hqglxi3=T1 zz6wP`&T8UggwP)(T#_huA!otASG~P^!0uGcmkriZ0myO^+P-y|& z2)?Weu-LB=&E>yNIOVtzH*%yp>kMTIPHMKK3)H6C74$Dg&<`hwLYN*hEbS_z5b>7B zJKtoPD-;O|1h%7WUy6?;d0H~`N48XJ(Z?&23-N$LpTrBJEv=vLm9Fq1wyyj)xgYDx8Z13Z`R&A zkr>g$wmrmYZXnaEsG5e`NSU4t@ykbXlaZjjyl8n(z~QUhED_j#KtRa4?jK$)ag0emdfk1)Fd)I2*(ub}W0z z*`T{@Ps)Vua;&lWfo#B8&3L`N!+ru=*vvMz;oQ_tvnlqVxDA0KR(OH;3lyDACRTt@ zLYyyR@waurpYbaD>1gC}2!oQ@Qwf!el%rp;6#-bOCRE7#O%RU*4?IvzDT)g#Pz?7` zu6X0_({4F-p?)i0ICR@wwO)3=R?$=W=zo)`YSsA$+FI+rQ3!`3o80TpXf8o*-p3K(Mlm87)uq#ASr(!C_*lIP@+LNNa6KWlz_8C9cgkT2CPQsorF_r1lCn;?6J_{nw z5@{JxsPBCA)6~y9-L=sNSbf zQtdbSk^3t)2{;?96kY@V3ywr|-)Ntw{b!$*4?JdWarLOM*zpm)*E@1QIbea=Vgyz|bB zA~~yOTZrUXYTE>A1?}QvmU9lbFL_C-ZQrr`f6A#8qKg6>nv?Xr#X81n>?3e|qBx%F ztthEJ#N!M^KF2ISX1yx;!wzP)gv@piMB0v-HdS(VPxA&Id$ER^&xtuyV)xK7GcG8%MJo2;&Ls3xPQ# zGLl4Hz}dh-4bCm`W=b@a14)6H?oD+-Y;Bo zHlWrp^wIqwW=o0Ya3JYzo5Sb4wBp?p*TxQ)c#9^N1l}O?=7q%abO`tAYqL?F^?}62 z7hl{Zgyq~C%kj)@nqbRb$ATA{o_Xe(uf6tK-f5ANRwan8;?ZLQl|8FztH?<0W;u`| zEM~dU`Dqev6ms=es1Y9Qkk{F>`~$8au~3z{FN~8Igo`Y)h`6#5e49LezJ`%i`U=ihPKv@rVlTNnD6Qg8v32IBSrMKLqykjTvS~m7=T>r;M^O~>YHv+yMA0M3M zmhj}0PeKzR!5ok+9=4ZWda3wkBkrIiw#99LpAefO_m<4Za^C;+MOFkdt`{I?Q+LB*W>}ES%WJkb;8*WI0 zEFat5<(FSx@Wrw&%GdR=g_HJxQr^II(!rLxGO5LtB@pn(s95;NGG1Sat7hF5) z-cW@Kd2xj^9oh5Q74oM?E$2W|Ahdi4@=E~KEzcot@DvLzp^`q73bOep6e@StCmAEo zF1FZW&Bs~f1y@-(+mZ2$EAziipC+lcO$V+UWM6Xrz_E4m1+Yt{6O8`3j-@#n(KItR zK{bYYslNY>lW@uVSYas&#MsU+xZr}-6IM%32NP)3$+n>qi(=D8p%$`J*}#D$;ij3; z1qWyYqYwvY{aE3vk$Jnd{Vzv^N*JT)M$2U=dA~~aZppHhZ;lx=CgLn(UDI&Z5P(|T zpso!RCY-H2Qh9rtpf+zKl52X%v%%gSwW4IJk`x1lL4yX>B`D&ad+w>8@J))6Z57{a z5Y#^N%rhK&Lvs!e?6%u(#Z5Qp&T`8w2iAqTNGEO^#Nmcl+xPH~M)#rgPrt;0ZgJpW z|N2+RF98M_jW{wC)DYlt#u;ZEKYo0{qaI(vx+-N{wyPeuQla41TW<~b!jETdg`BlN z5=YGH24F)~k>|D7oN8zZ2a;&p@D;7|8i?o4!j6^}5h7%}Nv;iAR)#L0%FRBiB|Uuj za5AeH30+oF`NTt)#Y<)o{J^ob@MwVr7Vy2ElG*BVlaidO##s|<7!|QPBhTwnf2ySU z97uMu=JUMMS_B92U<8bK=%I(;Y*wSY#~yo#eOSkCgYs>+-8P<*Ev~ul;b?@xfqfGu zObBg-FgV5S)_4c1Mo1;nI%=Cjd)LU)92IYgEZs{Q9dO%^M^5ww=p|jwb`w}EvBVO^ zbN$?N&&_75Jxxae&5IifcffA#O=N30_Sj=5Y7v$@_~3)HkLs1SP$8Q$MZGFa_2h~J zNtsaYZB6%k!U1leG0JPUywF{Bv6;m>X@p75fGK{)AwH5QNkcY6x6(8iS6p#LC^Gfb zQ|n8&idT~v&I*vr*@5t0P5zXp?KqI2w(W*2*97}WBfEVui9vx|cXcYy2nZhIFUEE$ zG-A5;gpi6~eDOu7$L=1=*Is9+Av$z$?&5L4i8i;PDeBebURzIs+Fm>K4e59V{Vdtg z;oC;E3Z5Q*_~A9ySR+<0^5U(x-Wo4!N!)P54UazhXsBVHdFB~4YE&(?#j-$Fgf+V0 zfVR}NA+~$WkP;onfn*}86|RyYD_4I$RJHJ(`

{@n<&;wr%wx!~0R!Uml;|`LB&hAQ5p7|ANSERn zR3_ko2fpm)QLxJOb&uQ(u%WP;reo(kzJIUPK>E$CV~kPW2NWq03#UZo}z2WsX(GLhBH z!c;-xK;l5+Kvx_{P}>!U((}ZD#DT~E^#1n zAaS5-4kW0pnpG)d;y~g+;y_P1kf64woJ-{r2NDMo2dd^kg4(KCl`lr+&-n3=H`{2V)rSvXW2c=qzvPm$|MQ>!gj$a{;%EEq zw{vj|@%{@hJiFd{%Rm13Bl5(X1^LI0y+oe(-~Z}k;pvw+&;$;o2#ZZ%a%!S`960Ep z-QRfQwXL?=asK%ig0K%iJnrI)&wTUE*Y?_LbcKr6Uw@O&KKrafhV&?LpoJVrP}@T0 zr>0AA;Kdi8d-BQ04m#+V)mL99JYHgnrKg%|s=M#L{o{{6?%TI-i85c`T5h?O%00@% zeQU;KlT9|sB$MQUm`M|>8GD@<(1dm zVTV2X_3O9KK08b~Fsh3=G)-AVO=W>==W*a_yi;Xtg zJY*X&V$jxG@AS|^_df8zJ(pj8>$KBO7mKGvui`+0+Fmu>ZP3}d=bm@=+2=U^_`~0O zZ~Q8&tToe2#F)}Q0`Fmm?KAuAbMCXxA$61-ue$1@E3drpr$0S>-gy^%>#a9VIN^xN zC!c)ho%bC&boj4-eb_tiyfyR8-$u|!AAR)TgZJ#T)85i&oN>ZUH(k5SF8eLE*iw%? zGVatKGvQ?9@M#vV;E#S}N*c+E;HtuboUc76NyE8UZHw-<2W8?r+$=x^#`-Z=o9 z4n6evIp&yq%$Q${8nrG%8RUBAnWqZq_ATAxjyw31Pd+~65V$r)!P8nUH`rjr*=LVk zV~xRc%{9-m%dWWk>VqGA@Lm;4Og;59q}@>YxN&!(VXd{+W6-<)`m08a*lOK%zdz@k zbARu9n+_TBJzyQOO*-jhV0YVXf3nzOOM>iL2uo$#ngeO<+j{sqllXxH=N~iX{Fh#O z-lqGJNAADjhO4i+=CVyT*)oWbq0eWZ{o5y>e00p13#OT7+WK+ ztf`C#4H|mut=Dh5>DF%Eb=RL(S!IycAA9T}3WTMWT0WAo1 z+|vPSA>gsco=(GX%rOU@c;dNr+?Yejd+z!3mRs%+rPT4`--(ngxZolSEU@q$cig=2 z!ixjYWtLgNqaarAx8ITT&bvU&DKYD;1G1MLmOg5^MVDz;Ux3yRMbg{0ehd-?Sq?Ba z{p2TG+Q?^bzWVCRF8lYNIoxEtT4mD(@y*K zcfY$TpWN)DD$@>4WIY7F^{rV*sS7T+=*>6(L0jC&&N}NiJR)4a^2&?c9*ELZw`ZPt z;+t>2e#RMBgjPtnPE|mB@JjM^1OrL4%rg67haF!f87W(D;6Q@f-Z0AT)W-n><~-qq zb6NApj=h-6>g1D8G3%_ev-N-f`r+0{|;M18H}TIp&IGcieF=&a-eC!86P- z6Lj8gyWQf`lt>)Ffl0EPqr{QKfkt!S!3X;c9N6ea8dyKi-)*+paF0EHzV_Nf>)XtW zFZNk(x%yU_YReG^l2n_c!APX!nFAcTUVr@`RLRVDYpyvY&!i^Wa>#*X7R%wFB$D#T zf!l7off|7+%xMcz4q8g$PaH@bXa^1?sBMQ)N;D=8 zBo4GW2NKk_`2Z&J69*Cp+JOU;oWAOgcO|@ShoMR|CJrPHv^fV7)VBEmCh`*p5(nCW z0|{!|VU!Y$fdj{`v-P&g7a+}sw&y^C-L@aX)Pcl-#DV;CAVpiu{}^=|g%c)pT8~nH z5(m2EK!VyXS(Gx=lLNEQUeDS(sjkGCP8!YPzN83?#XL!O5(g3o5(nzcfuyUgGec8# zi35oPi37zPNKjkMlXRyv2gd$j&T0DenSS7o{C2=5e vAaS5J4kW0pjen_h;y~g+;y@J~7&Fhz^Ug8%rB8j8b=Z&%2ajEQ+r$44CEK+t literal 0 HcmV?d00001 From 0f12460a06e06cf1d5a433bf80bdcaa1d2a6c30a Mon Sep 17 00:00:00 2001 From: Ralph Lange Date: Mon, 10 Dec 2018 14:06:30 +0100 Subject: [PATCH 2/7] Fixed links in table of contents. --- system_modes/index.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/system_modes/index.md b/system_modes/index.md index 1fff9f7a..ed7f4632 100644 --- a/system_modes/index.md +++ b/system_modes/index.md @@ -1,15 +1,15 @@ # Lifecycle and System Modes Table of Contents -* [Introduction and goal](#introductionandgoal) +* [Introduction and goal](#introduction-and-goal) * [Requirements](#requirements) -* [Background: ROS 2 Lifecycle](#backgroundros2lifecycle) -* [Main features](#mainfeatures) - * [Extended lifecycle](#extendedlifecycle) - * [System hierarchy and modes](#systemhierarchyandmodes) - * [Mode manager](#modemanager) +* [Background: ROS 2 Lifecycle](#background-ros-2-lifecycle) +* [Main features](#main-features) + * [Extended lifecycle](#extended-lifecycle) + * [System hierarchy and modes](#system-hierarchy-and-modes) + * [Mode manager](#mode-manager) * [Roadmap](#roadmap) -* [Related Work](#relatedwork) +* [Related Work](#related-work) * [Acknowledgments](#acknowledgments) TODO CHECK FUNCTIONING OF THE LINKS ABOVE (AND THE GENERATED IDS FOR THE SECTION HEADERS). From 72ab07a1d61cc3e131480ac3157474ef83ac8e88 Mon Sep 17 00:00:00 2001 From: Arne Nordmann Date: Mon, 10 Dec 2018 16:05:05 +0100 Subject: [PATCH 3/7] Minor updates --- system_modes/index.md | 60 +++++++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/system_modes/index.md b/system_modes/index.md index ed7f4632..a246f4c4 100644 --- a/system_modes/index.md +++ b/system_modes/index.md @@ -1,36 +1,38 @@ # Lifecycle and System Modes Table of Contents -* [Introduction and goal](#introduction-and-goal) -* [Requirements](#requirements) -* [Background: ROS 2 Lifecycle](#background-ros-2-lifecycle) -* [Main features](#main-features) - * [Extended lifecycle](#extended-lifecycle) - * [System hierarchy and modes](#system-hierarchy-and-modes) - * [Mode manager](#mode-manager) -* [Roadmap](#roadmap) -* [Related Work](#related-work) -* [Acknowledgments](#acknowledgments) +- [Lifecycle and System Modes](#lifecycle-and-system-modes) + - [Introduction and Goal](#introduction-and-goal) + - [Requirements](#requirements) + - [Background: ROS 2 Lifecycle](#background-ros-2-lifecycle) + - [Main Features](#main-features) + - [Extended Lifecycle](#extended-lifecycle) + - [System Hierarchy and Modes](#system-hierarchy-and-modes) + - [Mode manager](#mode-manager) + - [Roadmap](#roadmap) + - [Related Work](#related-work) + - [AADL](#aadl) + - [Acknowledgments](#acknowledgments) TODO CHECK FUNCTIONING OF THE LINKS ABOVE (AND THE GENERATED IDS FOR THE SECTION HEADERS). ## Introduction and Goal -Modern robotic software architectures follow a layered approach. The layer with the core algorithms for SLAM, vision-based object recognition, motion planning, etc. is often referred to as *skill layer* or *functional layer*. To perform a complex task, these skills are orchestrated by one or more upper layers named *executive layer and planning layer*. Other common names are *task layer and mission layer* or *deliberation layer(s)*. In the following, we used the last term. +Modern robotic software architectures often follow a layered approach. The layer with the core algorithms for SLAM, vision-based object recognition, motion planning, etc. is often referred to as *skill layer* or *functional layer*. To perform a complex task, these skills are orchestrated by one or more upper layers named *executive layer and planning layer*. Other common names are *task and mission layer* or *deliberation layer(s)*. In the following, we used the latter term. We observed three different but closely interwoven aspects to be handled on the deliberation layer: -1. **Task Handling**: Orchestration of the actual task, the *straight-forward*, *error-free* flow +1. **Task Handling**: Orchestration of the actual task, the *straight-forward*, *error-free* flow. 2. **Contingency Handling**: Handling of task-specific contingencies, e.g., expectable retries and failure attempts, obstacles, low battery. 3. **System Error Handling**: Handling of exceptions, e.g., sensor/actuator failures. -The mechanisms being used to orchestrate the skills are service and action calls, re-parameterizations, set values, activating/deactivating of components, etc. We distinguish between *function-oriented calls* to a running skill component (e.g., set values, action queries) and *system-oriented calls* to individual or multiple components (e.g., switching between component modes, restart, shutdown). +The mechanisms being used to orchestrate the skills are service and action calls, re-parameterizations, set values, activating/deactivating of components, etc. We distinguish between *function-oriented calls* to a running skill component (set values, action queries, etc.) and *system-oriented calls* to individual or multiple components (switching between component modes, restart, shutdown, etc.). ![Interaction between skill and deliberation layer](interactions_between_skill_and_deliberation_layer.png) Analogously, we distinguish between *function-oriented notifications* from the skill layer in form a feedback on long-running service calls, messages on relevant events in the environment, etc. and *system-oriented notifications* about component failures, hardware errors, etc. -Our observation is that interweaving of task, contingency and system error handling generally leads to a high complexity of the control flow on the deliberation layer. Yet, we hypothesize that this complexity can be reduced by introducing abstractions for system-oriented calls and notifications. +Our observation is that interweaving of task handling, contingency handling, and system error handling generally leads to a high complexity of the control flow on the deliberation layer. Yet, we hypothesize that this complexity can be reduced by introducing appropriate abstractions for system-oriented calls and notifications. Therefore, our **goal** within this work is to provide suitable abstractions and framework functions for (1.) system runtime configuration and (2.) system error and contingency diagnosis, to reduce the effort for the application developer of designing and implementing the task, contingency and error handling. @@ -40,12 +42,11 @@ This goal is illustrated in the following high-level architecture: The envisioned key elements to achieve this goal are: -1. Extensible concept to specify the runtime states of components (i.e ROS nodes). +1. Extensible concept to specify the runtime states of components, i.e ROS 2 nodes. 2. Modeling approach for specifying system modes based on these component states. 3. Diagnosis module for deriving relevant information from the operating systems, the hardware and the functional components. 4. Mode manager module for system runtime configuration. - ## Requirements The list of requirements is maintained in the doc folder of the micro-ROS system modes repository at **TODO INSERT LINK**. @@ -57,43 +58,46 @@ Our approach is based on the ROS 2 Lifecycle. The primary goal of the ROS 2 life The description of the concept can be found at [http://design.ros2.org/articles/node_lifecycle.html](http://design.ros2.org/articles/node_lifecycle.html). The implementation is described at [https://index.ros.org/doc/ros2/Managed-Nodes/](https://index.ros.org/doc/ros2/Managed-Nodes/). - - ## Main Features ### Extended Lifecycle -In micro-ROS, we extended the ROS 2 lifecycle by allowing to specify specific modes (i.e. substates) for the ACTIVE state based on the standard parameters mechanism. We implemented this concept in rcl and rclcpp for ROS 2 and micro-ROS. +In micro-ROS, we extended the ROS 2 lifecycle by allowing to specify modes, i.e. substates, specializing the *active* *state based on the standard ROS 2 parameters mechanism. We implemented this concept in rcl and rclcpp for ROS 2 and micro-ROS. -The documentation and code can be found at TODO INSERT LINK. +Documentation and code can be found at: +https://github.com/microROS/system_modes/system_modes/README.md#lifecycle ### System Hierarchy and Modes -We provide a modeling concept for specifying the hierarchical composition of systems recursively from nodes and for specifying the states and modes of systems and subsystems with the extended lifecycle, analogously to nodes. This system hierarchy and modes model also includes an application-specific the mapping of the states and modes along the system hierarchy down to nodes. +We provide a modeling concept for specifying the hierarchical composition of systems recursively from nodes and for specifying the states and modes of systems and subsystems with the extended lifecycle, analogously to nodes. This system modes and hierarchy (SMH) model also includes an application-specific the mapping of the states and modes along the system hierarchy down to nodes. -The description of this model can be found at TODO INSERT LINK. +The description of this model can be found at: +https://github.com/microROS/system_modes/system_modes/README.md#system-modes ### Mode manager The mode manager allows for runtime system adaptation based on such a system hierarchy and modes model. It parses the model and provides all services and topics to request state and mode changes and to monitor these changes. -The documentation and code can be found at TODO INSERT LINK. A small demo is provided at TODO INSERT LINK. +The documentation and code can be found at: +com/microROS/system_modes/system_modes/README.md#mode-manager +A simple example is provided at: +https://github.com/microROS/system_modes/system_modes_examples/ ## Roadmap **2018** -* Designed extended lifecycle concept and implemented this concept in rcl and rclcpp for ROS 2 and micro-ROS. -* Designed modeling concept to specify system hierarchy as well as to model states and modes of system and subsystems and their mapping along the system hierarchy down to nodes. -* Implemented mode manager in C++ for ROS 2. +* Extended lifecycle concept and implementation for ROS 2 and micro-ROS. +* Modeling concept to specify system hierarchy as well as system modes of systems, subsystems, and their mapping along the system hierarchy down to nodes. +* Mode inference and mode manager in C++ for ROS 2. **2019** * Specific implementation of mode manager for micro-ROS as may be necessary. * Diagnostics framework for micro-ROS, interoperating with ROS 2 diagnostics. -* MCU-specific diagnostics functions for resource usage on RTOS layer, latencies, statistics from middleware, ... -* Integration of mode manager with real-time executor. +* MCU-specific diagnostics functions for resource usage on RTOS layer, latencies, statistics from middleware, etc. +* Integration of mode manager with real-time executor and/or roslaunch. **2020** * Lightweight concept for specifying error propagations between nodes and subsystems. From d0dbfa52bea2cbc54a0bb3e3cbd3f7fad8a748d9 Mon Sep 17 00:00:00 2001 From: Arne Nordmann Date: Mon, 10 Dec 2018 16:09:11 +0100 Subject: [PATCH 4/7] Added system_modes to root index file --- index.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/index.md b/index.md index 21f8cf8b..8ef412ae 100644 --- a/index.md +++ b/index.md @@ -13,7 +13,9 @@ We'll update this README as we proceed. For now, you can check out our work on: - Micro-ROS-Agent package implementation: [micro-ROS-Agent](https://github.com/microROS/micro-ROS-Agent) - ROS Client Library for the C language: [rclc](https://github.com/microROS/rclc) - Sample code using rclc and rclcpp implementations: [micro-ROS-demos](https://github.com/microROS/micro-ROS-demos) - - Library to support the implementation of language-specific ROS Client Libraries: [rcl](https://github.com/microROS/rcl) + - System modes and system hierarchy: [micro-system-modes](https://github.com/microROS/system_modes) + - Real-Time Operating System: [https://github.com/microROS/NuttX](https://github.com/microROS/NuttX) + - Micro-ROS in RTOS example applications: [apps](https://github.com/microROS/apps) - Real-Time Operating System: [https://github.com/microROS/NuttX](https://github.com/microROS/NuttX) - Micro-ROS in RTOS example applications: [apps](https://github.com/microROS/apps) - Reference hardware: [https://github.com/microROS/hardware](https://github.com/microROS/hardware) From 0b119a35ac9171d7763ed7149255974905e21843 Mon Sep 17 00:00:00 2001 From: Arne Nordmann Date: Mon, 10 Dec 2018 16:11:02 +0100 Subject: [PATCH 5/7] Added system_modes to root index file --- index.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/index.md b/index.md index 8ef412ae..52fcf1f4 100644 --- a/index.md +++ b/index.md @@ -13,11 +13,10 @@ We'll update this README as we proceed. For now, you can check out our work on: - Micro-ROS-Agent package implementation: [micro-ROS-Agent](https://github.com/microROS/micro-ROS-Agent) - ROS Client Library for the C language: [rclc](https://github.com/microROS/rclc) - Sample code using rclc and rclcpp implementations: [micro-ROS-demos](https://github.com/microROS/micro-ROS-demos) - - System modes and system hierarchy: [micro-system-modes](https://github.com/microROS/system_modes) - - Real-Time Operating System: [https://github.com/microROS/NuttX](https://github.com/microROS/NuttX) - - Micro-ROS in RTOS example applications: [apps](https://github.com/microROS/apps) + - Library to support the implementation of language-specific ROS Client Libraries: [rcl](https://github.com/microROS/rcl) - Real-Time Operating System: [https://github.com/microROS/NuttX](https://github.com/microROS/NuttX) - Micro-ROS in RTOS example applications: [apps](https://github.com/microROS/apps) + - System modes and system hierarchy: [micro-system-modes](https://github.com/microROS/system_modes) - Reference hardware: [https://github.com/microROS/hardware](https://github.com/microROS/hardware) - Build infrastructure for embedded development using docker: [https://github.com/microROS/docker](https://github.com/microROS/docker) From 474ea85fe439f4e182ba37fe8efa241a3db9b782 Mon Sep 17 00:00:00 2001 From: Arne Nordmann Date: Tue, 11 Dec 2018 09:35:58 +0100 Subject: [PATCH 6/7] Link to requirements --- system_modes/index.md | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/system_modes/index.md b/system_modes/index.md index a246f4c4..1c94fdba 100644 --- a/system_modes/index.md +++ b/system_modes/index.md @@ -10,11 +10,8 @@ Table of Contents - [System Hierarchy and Modes](#system-hierarchy-and-modes) - [Mode manager](#mode-manager) - [Roadmap](#roadmap) - - [Related Work](#related-work) - - [AADL](#aadl) - [Acknowledgments](#acknowledgments) -TODO CHECK FUNCTIONING OF THE LINKS ABOVE (AND THE GENERATED IDS FOR THE SECTION HEADERS). ## Introduction and Goal @@ -49,7 +46,7 @@ The envisioned key elements to achieve this goal are: ## Requirements -The list of requirements is maintained in the doc folder of the micro-ROS system modes repository at **TODO INSERT LINK**. +The list of requirements is maintained in the doc folder of the micro-ROS system modes repository, at https://github.com/microROS/system_modes/system_modes/doc/requirements.md ## Background: ROS 2 Lifecycle @@ -105,15 +102,6 @@ https://github.com/microROS/system_modes/system_modes_examples/ _Note: The extension of the ACTIVE state by modes (substates) was originally planned for 2020 but brought forward in 2018._ -## Related Work - -In this section, we provide an overview to related approaches and link to the corresponding APIs. - -### AADL - -INSERT SOME WORDS ON AADL AND LINK DOCUMENTATION - OR REMOVE THIS SECTION. - - ## Acknowledgments This activity has received funding from the European Research Council (ERC) under the European Union's Horizon 2020 research and innovation programme (grant agreement n° 780785). From 652952bf45e8c11b7bc98f83a058568892d60142 Mon Sep 17 00:00:00 2001 From: Arne Nordmann Date: Wed, 12 Dec 2018 10:57:58 +0100 Subject: [PATCH 7/7] Extended documentation, fixed links to system_modes repository --- system_modes/index.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/system_modes/index.md b/system_modes/index.md index 1c94fdba..13568b8d 100644 --- a/system_modes/index.md +++ b/system_modes/index.md @@ -46,23 +46,25 @@ The envisioned key elements to achieve this goal are: ## Requirements -The list of requirements is maintained in the doc folder of the micro-ROS system modes repository, at https://github.com/microROS/system_modes/system_modes/doc/requirements.md +The list of requirements is maintained in the doc folder of the micro-ROS system modes repository, at: https://github.com/microROS/system_modes/blob/master/system_modes/doc/requirements.md ## Background: ROS 2 Lifecycle -Our approach is based on the ROS 2 Lifecycle. The primary goal of the ROS 2 lifecycle is TODO INSERT TEXT. +Our approach is based on the ROS 2 Lifecycle. The primary goal of the ROS 2 lifecycle is to allows greater control over the state of a ROS system. It allows consistent initialization, restart and/or replacing of system parts during runtime. It provides a default lifecycle for managed ROS 2 nodes and a matching set of tools for managing lifecycle nodes. -The description of the concept can be found at [http://design.ros2.org/articles/node_lifecycle.html](http://design.ros2.org/articles/node_lifecycle.html). The implementation is described at [https://index.ros.org/doc/ros2/Managed-Nodes/](https://index.ros.org/doc/ros2/Managed-Nodes/). +The description of the concept can be found at: [http://design.ros2.org/articles/node_lifecycle.html](http://design.ros2.org/articles/node_lifecycle.html) +The implementation of the Lifecycle Node is described at: +[https://index.ros.org/doc/ros2/Managed-Nodes/](https://index.ros.org/doc/ros2/Managed-Nodes/). ## Main Features ### Extended Lifecycle -In micro-ROS, we extended the ROS 2 lifecycle by allowing to specify modes, i.e. substates, specializing the *active* *state based on the standard ROS 2 parameters mechanism. We implemented this concept in rcl and rclcpp for ROS 2 and micro-ROS. +In micro-ROS, we extend the ROS 2 lifecycle by allowing to specify modes, i.e. substates, specializing the *active* *state based on the standard ROS 2 parameters mechanism. We implemented this concept based on rcl and rclcpp for ROS 2 and micro-ROS. Documentation and code can be found at: -https://github.com/microROS/system_modes/system_modes/README.md#lifecycle +[github.com:system_modes/README.md#lifecycle](https://github.com/microROS/system_modes/blob/master/system_modes/README.md#lifecycle) ### System Hierarchy and Modes @@ -70,7 +72,9 @@ https://github.com/microROS/system_modes/system_modes/README.md#lifecycle We provide a modeling concept for specifying the hierarchical composition of systems recursively from nodes and for specifying the states and modes of systems and subsystems with the extended lifecycle, analogously to nodes. This system modes and hierarchy (SMH) model also includes an application-specific the mapping of the states and modes along the system hierarchy down to nodes. The description of this model can be found at: -https://github.com/microROS/system_modes/system_modes/README.md#system-modes +[github.com:system_modes/README.md#system-modes](https://github.com/microROS/system_modes/blob/master/system_modes/README.md#system-modes) +A simple example is provided at: +[github.com:system_modes_examples/README.md#example-mode-file](https://github.com/microROS/system_modes/blob/master/system_modes_examples/README.md#example-mode-file) ### Mode manager @@ -78,9 +82,9 @@ https://github.com/microROS/system_modes/system_modes/README.md#system-modes The mode manager allows for runtime system adaptation based on such a system hierarchy and modes model. It parses the model and provides all services and topics to request state and mode changes and to monitor these changes. The documentation and code can be found at: -com/microROS/system_modes/system_modes/README.md#mode-manager -A simple example is provided at: -https://github.com/microROS/system_modes/system_modes_examples/ +[github.com:system_modes/README.md#mode-manager](https://github.com/microROS/system_modes/blob/master/system_modes/README.md#mode-manager) +A simple example is provided at: +[github.com:system_modes_examples/README.md#setup](https://github.com/microROS/system_modes/blob/master/system_modes_examples/README.md#setup) ## Roadmap