From af7919e5a073dc98df2b8dbd2c6837b6f43f9fac Mon Sep 17 00:00:00 2001 From: Abishalini Date: Mon, 4 Dec 2023 01:51:17 -0700 Subject: [PATCH 1/3] Add doc on C++ API --- README.md | 3 +- core/doc/_static/images/alternatives.png | Bin 0 -> 27403 bytes core/doc/_static/images/connecting_stage.png | Bin 0 -> 13082 bytes core/doc/_static/images/fallbacks.png | Bin 0 -> 10901 bytes core/doc/_static/images/generating_stage.png | Bin 0 -> 9833 bytes core/doc/_static/images/merger.png | Bin 0 -> 32799 bytes core/doc/_static/images/mtc_task.png | Bin 0 -> 48184 bytes core/doc/_static/images/propagating_stage.png | Bin 0 -> 13985 bytes core/doc/basics.rst | 101 ++++++--- core/doc/concepts.rst | 2 + core/doc/connecting_stages.rst | 45 ++++ core/doc/generating_stages.rst | 160 +++++++++++++++ core/doc/howtocpp.rst | 123 +++++++++++ core/doc/{howto.rst => howtopython.rst} | 0 core/doc/index.rst | 2 +- core/doc/parallel_containers.rst | 91 +++++++++ core/doc/propagating_stages.rst | 193 ++++++++++++++++++ core/doc/troubleshooting.rst | 7 + 18 files changed, 696 insertions(+), 31 deletions(-) create mode 100644 core/doc/_static/images/alternatives.png create mode 100644 core/doc/_static/images/connecting_stage.png create mode 100644 core/doc/_static/images/fallbacks.png create mode 100644 core/doc/_static/images/generating_stage.png create mode 100644 core/doc/_static/images/merger.png create mode 100644 core/doc/_static/images/mtc_task.png create mode 100644 core/doc/_static/images/propagating_stage.png create mode 100644 core/doc/connecting_stages.rst create mode 100644 core/doc/generating_stages.rst create mode 100644 core/doc/howtocpp.rst rename core/doc/{howto.rst => howtopython.rst} (100%) create mode 100644 core/doc/parallel_containers.rst create mode 100644 core/doc/propagating_stages.rst diff --git a/README.md b/README.md index 16847501b..a6b67d7fe 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,8 @@ The framework enables the hierarchical organization of basic stages using *conta ## Tutorial -We provide a tutorial for a pick-and-place pipeline without bells & whistles [as part of the MoveIt tutorials](https://ros-planning.github.io/moveit_tutorials/doc/moveit_task_constructor/moveit_task_constructor_tutorial.html). +Details on MTC concepts and API can be found [here](https://ros-planning.github.io/moveit_task_constructor/). +We also provide a tutorial for a pick-and-place pipeline without bells & whistles [as part of the MoveIt tutorials](https://ros-planning.github.io/moveit_tutorials/doc/moveit_task_constructor/moveit_task_constructor_tutorial.html). ## Roadmap diff --git a/core/doc/_static/images/alternatives.png b/core/doc/_static/images/alternatives.png new file mode 100644 index 0000000000000000000000000000000000000000..4296bbcdd4218a1336e92148dd513d1fba8e1113 GIT binary patch literal 27403 zcmc$Ghd9kMqe>l`D5?5u3kp+hHo#j%dP{ci8i zmh#IlSAe}3jE^Tt!l#oE)y%-!majkAlB)k_ZxcPlGr4_g<{-TR$lckWQ% zQILME?VGzbYvW;PlfH0v)3EW9dr?#(jQXFfB!Hl{XzYIAC`V5o9fW z9<%u;kN`fsgF-V)W9E1JQAb6nfY$Vub=LZXWz)A$t8{Vt-Hy*!6CY=Bc8-lHs8@du zd45KDJ?q2qyYp&Z7={alik(n^y9*+`>>BhZ?O$b&GNfC1`O8NoTfI$Hq$i7y3?vB& z&BK8zmPi&)d~e)V#ozeJg&V%JLn{mcdp2*6M)qf7?D43D+sZFnxzKe9hdASfmjt>xPm5aQLq2vH{{o?Y(aRMy^JEorlbN{-aPNw_u=DgT;MeNwNV zVdGUuGe{*LU+1iV#%`b+^=OTkY)rXE)L!X{T~idlPQFm#-tVZ9}7UNoIeezHQ5Ewwd9II2X6IqmyS8 z;zxg3245FL$zqGzCUr23!YzMV@-CXuo|*eF7&m%0_nDV=>31j;9$$HQm1zxY7-u>0 zZLVmMSBm9XZEw7YZRSm|2)`Hff>9vo?76Cuf6iQ?TVNMK~1Z9C4T}bE= zci+vcmd=dcT`+c?GQd+Tk?E??(#_7~;L4m;uyds#H=&lMn^2<5U#Y)2yQyo~hrp(& z>zjw#UBu`~1l)FT%Xu)b<-JpkeyQ;@gHHR)AlyYg*%c>U6(Atq=Z_bM`m>W%{pcEd0~?^9*;R zj6my@nwxW%k-5v{ku~fp>-#kv-%mG`azju)AI94x$G?-#NnokK8}%NUtQaNyi(ZuFt=ooj&nZ?IuI%l!PT-*=*^t*-r8M+X@?ez(+qtjXVsYO8i9L()5CwK-s9_B#9U zoN&}XUV^Fn`!w@d2U;w}#^l9}c$he;>=f_Y3c{$drp|gObP;{NvH9Hc{1~V~Pzcvh(Gox+-R@NK={|qK}>7P1DRDS!2PeZ`z>Bqa}zTQaU#E z$MbGUC7|xws$CPnTa`@jlk@p@j4tr=M6t%sysXs4sS*D^Fj$`(bQPqU8xTLYsBqb( zUKYjHn_rO@%QiB%hR%bf?mu%x7L~OY)NaHn8~LVy=Lx)C2pxY+vXrs+P!d-yuVkjY z{_vC?g_BsWGwfK!w)bx>!}ADl;Q*6Ux#n*Y0cQS#`u;a!?On^lCLX(}L_g01CG4!1 z6bPDMQ=>mu?8Z9J?k<;cd<3h968@Bi^Zqm6x8R!7`XC?VUdk3 zZXzP&Gk?dUCs?wi6ykl&{K0bV`lSsm5)Foyc026%J>c&x6hu1iPzqkh-B%5pu_&J@ z*BWp{FPz(moUZY#QT?SZn7czgA>2EC=%;EF7&lm7L#TAPgvPY=Qlxk!{3;dIz+KPZ zX}LOhADTuOTl7oZKN+3nJ=1JTmr#nTqoq&aRY5%JPs#1L#6u0M*-k=N;N&a6$l1o` zieNVHOnKS6Dh2lFGDT$#5rrDCoN2!lYG3rYh!YI=Dn z)8dc8C89~CMe!VDX^qbGn_LS&=Zn@vNoqoit;vUx45cv){y*cxjb6NoZZ~&ck5S9* zkmhQYY0&;;4Exf!7u}IW_n}h;q0Pa?*yaONE=ieEAffo+dA(u8! ztzEQWsXx8KT}1{flse7UrhJ|W`lZ_zmCc4K;~6hSyBd)o+{z&bA{{|#ljq#=`ouNj z^1D9;hIpUKV;~LQ z@EVUeZKk8y5^yyF)jhsMa3|=B3n6~Z<8e~0@secXak%sir;Twyf!^HJ3kx{OAHBtv zi46^$+I0|SnJR8Ke{50@-Wnok2oktEo)7G#E)XsWXy~Nvgg(KLRZIT&ynD~r?$xFx zpYHUVtg?@@{);VW$u?!e5lS=Rv(PE`&@@K;Z|K1r1bgz;-qU#dhj3I$$RVALNk{=g z{8apz5SJ7aKo29^V{hGw*%R;p(n`nv{QKz}|G+5!hWDl9(k(5|guU`@_4r#BlXlw$ zA|Y)Z)Il#&ZrdFsCcNmQk_%|_nTN*=3Xg32UekANJy~gCuSP9R^R1dEG(^b#z1pn# zd$C5OyGErBgCIk<1|F4iw2zL!cDZ@ovLys!o#pLA1+oqMX$s~nofe<020n#N^-|%2 z@=+9E3New;wdzBEX2OP+KG~)G6tYFP=zGry0iM#5PjAq%@>jWzt79u%ig+mi>~!yC zJARW?mA*A-)R>4G*JU{V+x%9!2JPPEqm+No&Ck<(1TKEKJS*s!?r4W9M!j%5+%oNz~KYaoNvGjo%(rsBM1 zg8_Vrjc#8V2zt<59X?f=qHna&)i8d#=5jN(pK`&w`AWGaLwcUT#`s39?YLE(%YRd( zLtUEiqAzKE`e{}?@$aXU+hXZkRA#PAyp$$)WT4*B7Grz9F}*~GxF4RxdKRKEjuf*F z&$&0^0i5wKi(=|MNj5#kax)@9HkPL;RgR4BkIrA`8R&_bd-zcz8$kj3kSo%^dU6xv zbF*<%7~tB*gqAGOpy_bmKfYmKcYe61{aCZOf z!yb_Ei&Kd?U$1 ziiLg|*)Ik5ly@eMgS6&MRSv_O zm5^j5mj$71vh4d7T5V@hA#0aNDuNhBVNpXGV-|#0t^U)B2CLZS!=2^Xs~4cc@*25Y zMNAjk33W(BOOI10Ra3fGsBG!R1={Bw{=ha0k~+P&sEV%@Z6lvNP19H})vEFG;IK=j zI_Ofo8T4uZ=MDS2sA4&}4zOLW7sWl+8cwj@)8aNfK(KH{~~RM)0hNPCTe&jTfVq zr6`SWau0tHdcz{bNv$`#$pIue8EHGGoUr78ZvB4R{}CndmCVaM2bPK>cn2awKfy04 zkpA&con&AXbi?xqmq6)w3FrNQb5+W?V-ixoSd+!m-&axuES}Vmmk~>e2u#hU`C!V# z&-V&@W0qouNh*aWH{ifW*(fljdag?qUoSer)~Cw>tUfb|2QT?6ZI%Az1ELMZC7cHu z#Lchidz&h6ldcMd^QiF^x=*ji)J ztyf@5H#J`)yuC|q%c1VYQ|RZX(H0|K&p}03{$HR;UOTB!#!s`zSP`#A#!CLM^=3;wQ;WrVCQ#&b*?=9f)X5`FlQmFX8z z?{b;2p*P1cH=AgtI7s8xCI~pk#3$_m^M-5yaTe`rMs`NGsXh{p)2uwqaT%^J^;+{QsU& z_V4-9eOzJL>?RN;9WSM9A&_e85xFF?`7ClCnkBb$BWys!fB3i*U1j z)tScw`;@~_=z9;4Zn|vZCCszS*OC(gq3RGFxa}*Hwvyja1ly?fbA*?Ws5H%;N7ndl z-nE-ADGgh@t2nO10UFh0x14y4AD&Vsc<|#QH)z@C5La#C2vc3>ECsu^`1#0hW=pL% zqq4#_zxN2#zIqJNrxPzlZA8Y1lhQzxzP1K$SB|Z5ZwofGS7=77rVOm#@o>yhtQfcq zCl_f$3o0eXvYIGq?#X)m$GhL=3+@0Ld|xI@e;gQkqlFscZdH}Sep_=_x|*} zA7c&HC>Cn&AGAF+;|fth*u6r5zO!Eu@4cBofcfr0J!UGZWfDf*sGIK&_MmQWfg$3M zfr(&ybFsG>A>f66iNRQk#_TE2W@xR8I0e1k%`wNiIC6O!L=)8Bx2A_=D_sf#08`WrU^ss}kC}ZsugPadL7x*!^5rMusd2ron&%M+hUTT#*lV(CMN=)b zYC<%g9+BR9|r!OaBX;fv^<#>T0~DZjlrb7l-n-q!4lvC;@BB&=b6ut26_ zzs>*KIaX|7QroDc-A$ZCC| zerr0a`5}38h3I2wG6PIe@{+gds?%kvM;r1`1+K26v*U<`CW7e9&OP`&Wt?|(2DaV5 zL|Lr;b(QAkAwk4P(?+-ah!4?v=^`O78JoOecGp*KdLnvv40G{x$XAEl#JlS~_>3=t3i9uqq=j|1i;(&3TjUKo@{o#1E>RB-X?e?CfeHESbjpe@O4d>!)q~7MdAt zz)Mu4@F5)Wjz+ccqFw>)__t-BB%N}$L<9C|14C45`Ibfk{m8d1*e;g3x8}I&Y`O7Z z(&ty;djj$5AUsWUR8eos1)x3eK#0%1VQ6S%I#BRTeNg{=p@rQWFzWigrLE`re=i~> z{fT5W_Aq;Hdtq_e*pmeM&kr&PI>U;X%3~v)Gq;Z$s^gY-JRj5xi;B?TrAaVJwzVeO z>Ir8${dQR4L&&>S4g?ZDr|)va{8p{hu4`uDmme@6DCr**0jkEv5h%H9Qvh26ie=lv z4y%*AWC2-j;eTVCGgIqCHpQLrlF@|5_`NtOL;eT`bx9dylyz-A?^gU_{`H#?YeCKJBjUeDq){wXrwxnlwPFMfn zjap0j58Ej>0l$mVWcz>vmg7pCZO>Vmi zkm$Tg_TgRd7boyz7`=kEGKUdBX1mbZ}sP7dG zVNeflLP7WP(S-f00q5%d(=nY2duk!su$hbjFC)j{qK`9{XJ}E~g0UqbycV-x{O)0B zc!vDp<0cph7<@E%qx7$`p8jlf(txFYd5QDLD#DkGvYJw-lS)0(>v_cTSH)+AME7Wilm$O_;MAvTMe8>~x2(2Utkk^3l&Vn3l zY+Y|=Pp|?ws@6$x0~=i=VoX)LBL;Z!qxVJMB$_|kI4yEzjp}UH39$-EfM>Q{_a0f= za{7f*5=e+Q^N&6`WQP)P$WM7*c45VI zm?dBJoQ9jR0b%K*)%DyfcLPli-L^o&kq){9C#{;)8AHFJU(2m4@EqH0RZa?v&F-8- zJe5y5loiI*y_A36W*uQl*=8ri#ZB24_&UMp?Jy+UsDY|4LRl0;iNUB!q;d>s;*@m}O=Zs!Im@*;zv!~-b+$lXBjJnCa)6YWs4_Gp0j zK>9yOt8s*a-pL}vrlDLeji^@5mzPg49HTVGo-;CK55iwjFf^H)nH!(dIgvT z_}nms6P0m^%&FpQM88nbAXbJe3H*sL%LMrho1xCp2Vip;gOeusAy6{_%PrPg$Ldch zhyF3n3vx}#DY%KSXHK+0g4j9Edr;5ux&b5s=jlhLVwY3%`Rd^`p`w`c0NC53TXyZ|n z_ze!23#hYLx>CF?B)(7zn+ci}(+~o%1{6l1AWK}>^G)ze*M&TQFQ?tEQHr-6JASA< zE*vGLq2maXY5oXgq_3=G@|>)_97WLWzcWClQw10VsO6-k8SXU0pcd`~9WVp^twLw0 zPLlOFZEoW(g%{YTp%Rc;fWX`%z>@h#Nm?8ru{nfYTkxl(*|Y7Mx|mFM9~Hyz*{J^Y-P@b}^3MKPo-NDtCt{qcC{^jc`bbGd zTHLpoIlM&8=pH3dQ&jrNvADUt(k1z1N;21hHpiRe1(cei9ENHfn|IZ7uLG|Mpbx&9 z<128sCW7^6Z&0-l%5tZPDSsA5;INqytDe+TH^zCqKCDktBg!PV6icpKCVn`ZfV3g&2= z8e|&`rFn2^Yn}Zu`T;Jv#p?+VBaUPE{-yz8Xjd#>$pu`@s;q$^K$>6qTvqj`Jzu%r z@ZVZ}pb0Ur*N@D1CP3}JC4`r5&|S!Z3DK`^qpe4etWRQ4LSM5Vv-D8_br>*2CPGG1 zhxOs}4lhk&$*mVMuctiCV~p=DPVe-bO=6^(tLj=uOiO_pFYZs+bGY#4DSowy8Bmt| zOGdWhIlNh;L0XM3ke151+xFEkc5R8(8oab$B}_BV2Q!?ou>SS=j;UuqI7e=?(ZX!~ zsjWad9YO57qIW331S%lzU-chT^d}M1(ga7ij6Vli0`fOw{zhC~n;79GU-fdL5&?8L zd=(zsSLD-G44@!i7Gh;r4_^{>W+lDv(e*yr>>+0^$Io(nF5L$?b)QY*dFt zU?RjV9K4e3E55@q`788>Cx>Ki1#vJ#dtYqyFY=MQ26OOTLH}JM*py=#Y3jkWF3x{l zXjij`>z46Z{*(EDUf}m5CC3n#L2MEO)DXX+UPB=+?h({#dNZ_BH(N zEC>WZn@fVK2%djp!tRpK1!73^q|hCp>j(OW>!P$2CU;hL1g_KQaku_7&`mlS~e z;NKk?otWMfz?w5VeICC9gC3wn0d!i!!PHLle%d0o$kexu?jq86Is7J0o~>)P=K2R< z1dxMgiV?W=O&tJHew;Bh+q?t~G7*eme6&L7z7UJcfcghOT$Od6JB?IHYL9cn&&Na| zOp;9LA9?T72uWyY(;9)A`(Z~+SKcLA-^j7-xd2}^YmWN+X$L5D3H|UNRThA;pn8S6 zrZx-Ds}DFQskvwZ(ZP~$(5Z^&Y6uB1xRl;5b#|!|jv+dQE^`*M8uiohcLf9o%tR4EDy?(zy|HS0_Lq!)JlTS| z|DPPSuq5BID8}B}&p?Th{{RNf9j4Lx&0q77`SkS-ifl7c8|W~ow|}`Lg&jKoF3>rE z+8lT^(dm9LWb(!&@WYhjN2LDpn$1nz8^8t1n;g`K0M_K!RpWTd=mD*;ESvwyS? zzU$dl2rY%u{@yw9+Kyp~;lS;L{0$Ik%2SZ~>)kHb-v=r@dI{U}C>sSn-L7WiRMC{Z zDe~nVUKKeWWnQCdwupapG8*Wp?hkn#^8OZCiWL%7n&wv5G(z z0JX#wx91Q@i!oj&`zt%I_|n%veRkyC)E;`svU(4cb>;l#k%eAnTzDL(K3EjRgw|>L zi77ExM;wp~(|F&VIbja_Za5PPAo6hDKg$zB&V8t`16m%ymZ05DvRd6M#A;#j(RlCs zOj}2WOSyaEfw9R)SKilb6T?6+UR*pHuSmsCjT3xIHBX;0W9ej;K7YA;!w(*uD1q^3 z)2^?gdO(|kX9KVxIuHFaqB+!=K4N%JY z?aF{cb1Ex55h|r?`GZ+)u{`}W!QwtU6k1e424&cec>nKnUP@_^Ev{O=+0GchBioop z4VdW!OWHdn6%N9|7)C=!MK|ERZ;ZG7M7A-NMlogxr}9@=)SIFV+oB9cpH7;FM)?Lq zQ!riaGmHfW3;E>FBy*o#4(YBXNL4bNgZpEE$1B=mkSca!ibtMpMy@2azYer#-D!P4 zMbI;?o8-utuqMp1oe2`?IYo`bk_3Rx7+?}I0$PrOOQkw%#v6an4B0A0n)*Iaqj|(U zVt`m^<}V}~h)%vme@Y7icvZS_?#;?2nq75lpW5#|!Fqu8;GS>0@mDH&88;)JlULsP z7Z%z&eY`53%$O(Porm3N|DW4G}0HT41d1K()yRc#hU_6uoCLEP!^;R3E1FTTM zj)m~jfILj>m*OPt1!k?A@0+t@f%R-S$VNAcb-8&Z9UV_#wE23x6L>bZ6_Yov0e=jn zQqYCbXK3FmFcVnYH33xY3GjA|ruhLh+2Ee#U)2r9%XH_Fd*|WE4V-;`!J!r9CVY@9 zQ=Zy74?9ovbK0dyI^#k4a!HL5~mJ2~F}QCTyk_fOy~g>EAx~`}fldZTph~|MrAsfpTc<{4QgX z{6}R5a4AnOuf>y#f-G`i)MC$g`}VDwgF~Eu`*rbdy9b&S>%qUxO?@?=K}j7+3Scq>W$^nd zmqk%>6541Kt2A3}Z0dr@yAouzU$O=CX1I8)Q zdD2L#{E8rIPhAonY{@ICi03M5NHfVcspe~cf5aBi{ZB&T` z$ZnwYgjG?KtBn%*WtFNA@;&FpEqo(T9`EmzVUSnQ`2|N&4Oa53-{TLT6%x}BnXwbV~bgj zLZJe$ju4lKn{$(p-=rW%T3d6nvYxp&Q|z{%P=eKJtzrJYj6<+XX==OAJ5%+FtbrR0 z<-lAyGqYK`5{3z1c5+#Q0ExIo8}=$+ENCc-DtJJSDyVmBi!DnTW4JCq%Okev6O`rZ z>S|o?EOb5#Mwc?&1L;gBvY&;9pU0+g;v|uG4f4% z-%Pztj5O`L731Akw=?*?2VlO23#TJZ;10RLs5qhrwH64FnlK1Js^EL)2Ofnbefw)C zShP~pq6UF9a?o{oHQ|@;sEH_1JZyAI8c&m7e|m-pxzZE6x%7BSLSo04b9i|8b84!g zRZ<@|HL&X5%KU&TQwUy#L%9bAJ%fKADl zXgWGO|FY#R*M&*bK3PHoHYn$A*Tftv$w_DtxCX{OBA>wA5ma;iprJoY7A=^v=+pa| zlqO|SEWsav&SvAa_$1^CWpd_nv)#!hF0NLk`+^kr*X*ncC#f{T%Mn?s&61>8;vGJf zC*qCp%F52BrA%xx@w(Un?#$0KjzuUTu(Z;&Nj5vqfRTXj&QsN@(EjGLOWEkOd~k*p z)srjYM>xB@I~nC+38KN7^ns)qu+ad+i##>ODta5XeL3SFUp4j6arhnt6svF|IIyF6 z8tD!vk_i@X-?wTltt|Rl^TP5(`H%G#1Uz~dPWs=_yh)nkw$i{tkAi1 zoH2lq0n2Hc&CqO^5E1dvdA?&b920+fdU|0fjTP8m`9d3 zgzIB@z-ig&lrm^}dI(o*4me@2(2lil7+M|9$jZv1p-fcbym;ARnhAR0VPZZV=*89^ z5t7z%5tvPY%lDCB5h?jg@Fh_Quy4Qfu;3ZCDG2%j;>l)bt{r5nrKe}A$NHGtV)w)I ziwm@Wd#jJYZ4uchsRLZ?1!! z|9(QzZ7UqO}Q}s0c^D~MdcF4ZpQyVJxqx$j8f&w`> zF9QREFG#;rc)@k=>8Ze=C1DRID1U4(UvdHGC<3**oG5M`6qM(Hs7{in%goKCOOh8k z;iF890(H$e=biZ8|RZmD1DGefJjbf}s5H;RC0DfIJh#e=P_i(}g;6 zKijtozPXqeKkz^{DwM&27dCm&5;QnqVZN;$KYsk!F?w1X0%p*JyFZql)+g+yg>olrUu}bBl;v{#6Ihb(>F!8WS5ozbsvtOoM(7D6M-}h-qHf54vkn}B^&{mOxduli2>8(!lHCmY=38g8l*ndJ112*u_O?-pv2me}B zLDz)C;kkkyYnTN{Byt#(?w+2W%9b4`h`!20&K+Y9@gQpeFd# z)RYk#8oJJBAC!YY(I?4+SpQ~l^hv)8#573P2jN{d!SjtyENR%}C{y`1~S~oEh>fyae(pzP7>n& ziS)ZwOrZeE(_l&SW)063_DPtVo7=5AXsK63&d-m7o<3m z#FTy7xcE)3r_j|11$4^Z(a~}5-^2@0xj>5tkdED?W2CqDL2#$z^(N4wUrY$U2VU^j zZ!^c<5;^9;0 zeEfql@v9g;W4{PXZss)HU}+|@G8fwOxOLn22-! z-S+!6J*qO>%z0U{V*pMSNKk)ib#Kw?-nrm&+~&1B-MzW$4B2%6;)59}IHiGsfpOb> zcRMcFL55KiVEs&%`pBvWb6=ezQDqedx0TC+3>~Ath=GdeQ{I=iWK{TB=f+ zyXztuW1&UQtXqkuy-m&EzO1yqk6_f>l$#x+aa%uLQ9JU!+1U+l8o2PN>C8K6g5%FM zZqJJC-zl}@e)X!)CHR1RF8IO;EVZ(aPgCX4H7=llMC-;@M;lUrQ1&Uug8tq&g9J*T z3%~xq-9yg4#$5xA3qcR(^==QF>g~2M{D-{4KKi^W$ab7x_6@ESHcc%9B}y5$z4Ke( z8Tai=QQ$RsSU<1enqvkI!tG77r4cLpG+^kAIK$*Ghv0ze3?rDSb9*IN-b8;Ur!c?W zNEP^=Z(t@R)vJc+(=#@6b=?avkrNre zbtaNq2cFXcOCUJ4aAY4bRaQSTdlo6*mg6cCL(^Q3DIt8y``E+BVp&yD0ygz$_VP5y z8yc`x*_&M&GroQ?N1>;q^9UpSauGko)Z9EwziQTL3s%$dN98~R5-~BMaeEr4x3`x^ z2lClWb^U7&YbH?c!2s{pMcJgwOyUlPPr(1^c9Wy#cXeU}Y#IMs27bU)eS?A(vm-6Q zEJFtzI!Q>i7fgl#CpM-F_4|HQkJs!h?KVL9$i|Q_$?uj0KpXx2`?q(v2Amgw_V+!D z>zeli#i%SSEN&leAsk=K)XOW4qvJFzy!yc)&zesy~!sY_N1arA8|3MG0T- zL1mErjYmc6|pJICZAJIK|1f|HiX^{>VC!;b9`bguovePC_X-IH`o8q@={g z&aTM>@iwpu)@wJm0qptg%nwlaM&M|C;LS=9c#^&`CYu2u*7xssf`WoR#K$il`Gc8p`30s21{%6mh)05&VN?h>#i&VIohAhKL2A!*um8!rnaz@|45-3Oj zz$XVuB?}|XpwNYb3sO>wg^glPP-PWMx^KB`c6L!ylh4UT$AOP~6Ecp2gQFfC2V>8W z(tyw=VTp>0&Kr0Ed$zU?Jp_9KfsmskyoJQTAB;c+0@z_$|Mt57=9KDRO9!%@<7u1% zbK8Bu$+$!Wdq!4I-~(*%LNZAQU9;V_;TYKBJ7BN zySp}~rV9aj)}26w0grmiIc`=vFG&bv9zdaWb#>kSR3RfICV^dl{`}!N;_6G((n$-g zWoEE8E(G>rC{%-a?N;~!!3377J6V?Ld5Ikv7=(b1lRQWVNFCeLv%Mbt=HM%#3hm8i zoUXjd0?@GC4%SqDBM`uRElu0??;jIbBJqo>`JfY{Iq>zPzaQ-@GTk@|*7hv%<`kb& zERgA7``v`+^AM))g%#!>Y9`ckv-8zNh67vy%Q#@B2izs65nn^jGQdw&d~-RtJM$|? zcbz!>VZlkkgHeB{*7!LJVArii5rR`jKDN2QOiWqucSyh=>`E6bG>Sp7-e{zK%6`I@ z7od%8MNDLlmbapSWsAEuH(7jk{w|K? z36HOg0MPC4vuaxw*7fVxFK2^M>w1ND<1zqj^7Hd&CHJRFr8?|2Dv^^`tw$cI`0#GFU^zhyNgtnUdFe6&=e`Iz{w%`fEa??G-c`TI~caE9Sa zXSfk;DS({@u7C?Hz9!;*WjCisZ88YF+<$6vfEfS5Eo z0UZED_9RNfpaT?ykPz_-ZETsTisrjfI*FRI{ldfiO+3|pMhKYIerpbeV~xz!e9ybW zn78M03|ybRj}11Uk}iKtIgx(r4?mAAq}sNqvgOlR)2qLFjHs=3(6LXe`@k=D!6N;8PL|U3JTV{!Z88cGeh!$(%E+O+u-&K zkR>snw-O#c-pEIOM68e0N|R4i0Dl^;5$~Ja0i_1)V8%L*S?|48FdHwa2xqx9VHo3y1ZuB&#zvo zSb#?}xm+S)V`JN!u_>r+YU*EFqP;;=-E{5kaRS6{sCL5~!q|Hd-SYk4=lWUP_;FCo z$IiR&v-G`CjJWU3uRE~olq5fVvHbRh*>P%lHdx5-Uzf@^>+hR3*elpuj|;LoPh^l= z6e-=7(D}Z?2gqm@GDJO_xs;k-O{MMfX&L%7@3^q)IJ;U$t-xHv!^;=j4&4Z(~ zK#9TX0SanQg9GApl_O;ER{R1>kzFe4lNkXH4Bi%ushZ%vuCBXjiV=ZgEM?fw&{^Mg{hO>9?y+rL;`^G=T5Yi28G{*= z))SG<_`J6jS)%ixbmu8@@d^yrgj_lJ`}?1sfS$W-l;hrf*$~nx=g?)9~v57 z9UmWepoz0fxx~cA$X(jHZpFgZ-HzeY(^DlCl%`HvSJ&%Xp^{S6zjtg552#BN6cl@a zEVv(S>S#7Q*IijKqN!L_!-`Dl;b1)aQ&eDRGv(qmzkhM==~>>9ca3V>gGcpc(&9VT zA5YKkei?cay4w)ox1`Ms+z_;8w+Bi~?Eu8~09rCA>C8{#fE9t@0cqrGp}f+Xn%!@5 ztA~fYv$M0k=Hm>%fCdSu0MNN6+*+%FGz!>fr`N-lY7fw$f`M+wBPON_W)PgX08=DL z)h#LItsemO8y?HU$=A0sr8l_iq%pF)Jnhwpc=|RtFtPfYhJk(F@kEn@O-AF3`BT89 zFSl&OZ^=EvBqZ;4flf}CGm7`wjS#oGyN?f#kkAlNQ$0L9KnWmB>`(MT05PDmv*2Vt zqyQZ72D}Q8%Ha%-kYaqN`uYJ7UN?toH@7NpYip}-zMP54yjx88KirD&1o!{*0*sza zW~NcYr{o%8`0u`-Fj4Mk37oD)QB9oDjpP#oE@RO|cMlj-WK?H|L6s zjP$+OZpzBf7u$J_oWB{>Z(GYb0w~9&{pcx>Li)>~;NUHQJQL+=f(J*2*_g7wnki+$ z5!%@|w~;<}PAi8gTsab=Fus6wRjj2E-jG5=;+V`E#;3x z4Hq}JB-qLW5!@aDc9h#^Xjw6-^#|?JIBjKa-{fZymn$~e_MP!JCrX?F-e)>83l!Ug$R^5wgpW^edC8VmgV8tn3>YO6#`Tesl76bG!S8ni`Ui+<(#U?T zBf^+ov~=4p8A+ZpLso9CrK97PZ}PN{%7lY)Vt9D?;qh^>6J0~8-M7#%tqirqJm9HW z8sv?!^z`Myy}#w3=HKvZEiER4#%?o}Db_s@Yb2Ht_|~ZR+_uQ36rUh!OGFV5_nW%F z>$V>vI&B|sp9II#njQPSy00dL7#)}-#`EES>lc`Kx%0H|lHEaV_u$`HzlH(Tqx$EC zGteC?N;JQZosLe>4zuxS%~_+{w@~s=)Mkw-z-i~4`7eYgU1(1DF61vtvjFG%`&& zN!}`6x+@86lE8l;p_^NMZD#HA zx5&j7gdNxfnA%SL`3ftZH(!EJAl)SPgr7)%slHf|Cd-}i{Lep9xJP%{k~srn6NYh< z?LJs%y*3)ceJ_CGRe6!G%q8TJHZcS9JbL^D<1X+G^kEj%AMW8$w91kW6;ja%C20YV z;jWwK7o2yc8*obX&${1d(*T$Yj-x&A8Nj_(EPi=OQ^&)sEU zpEdPdV*vxv3rd4wwKu_m8JA-i9qU70?9!NzdOlKPfy0s%J5CiG zF&Rg`pV9hUPFCxi?8_bhERHCWrrM}XU#z=Y2kV|)JYDbGNyna4Wt(St%|k1HVU_{s zfZ!J21{Kv8*Be!fzy`)p-Dtcgvr$fsSbX_cEq9 z+{my$os(4>6ZG@%Ct&amu3uN*@?9gCgG@Ys=qKoVdIeh}`7+=JSw+y^N&&QG_8XDA z@79HY*Tz20Jx7o6{b{YaZrF7av$5aBeZmdgSg0lo#h23s55A0b;K_OLE7~Z!(Lwd> zkFkL%x@&#QsfrLojEl8v;S^VDnFnmZpLS(5At=yAYsK;}tYysjo~T^98%61tNVjX+ zA7BF;b7T?Izn0gHWd(!H2-2KpS?;`^6T_j1`;>pLU$l}BPdZH1#0wBhe$~}xG_ZED zi0Jnbw*rRdg#CaC>ePo>=&P@N!;3WD~f8MKHCw7u<1lw(` zB0G{;?Uyj`k5#>S1_Xa}5tD#-{8>OjZS7&E=Hi0G=u8Ab)r832>ZAjJ%JruUc=+J| zNogO|5kb&r4RVS2Mcjf?6uIMxd!JG=C-R;(n=EbC5Bt<--x8!63{z_}By)*?T%%Un ze7$yot7goQF25K+iG<-)igfhP{otEkRIkO+iUjDyQU-F@|2lwH)d zfe45=5>gU_w9;K7F?2{ONI23hFodL15>hJC;UFMLh=7!YFo2W@sFX-c3@s)3?s?w# z`zO9%xvt@!xz9O!ueJ7G`_QfiZQjcY@=Eus(vnTGz3-gnRQ=n^{=q9>;qg_Dm}GYJ z$8+R^EgEkkP2j{Eirjl+oCtjckG{z+OG%2if+j;pm#O$el;o`OpC;?=&O3(P9A`*B zC{}9GMfjGsP92L|2JOonZ`PkAcVq`EPWsbDsIN_OCtC)_WCyJWC#cztHJEK&Q*&3l zKo=WF+(+?v1pb4g4UY(7S{AzM5*AFGwz|@1eSU)Mtu=YD>{jxj_Asoqf$w?hRofm# zJ?rCoL_vu$PkBRK^LYG;1Yy&aBo#<{Gog$YnV4rrOM)kV_}pa6>dGmCh<7~*Fb*HY z!D8k88rz>Q(oB$FIgAGBuBO`_Zfg4xtBj19=2?_{sIF}p9Xt;w{I$<6w#c?VnHL8Q zuZ;E8ZTl_PvI73mG9S)eT6Vo*HFQ1Y6{@e9TjKX2E3ZJxr?7l=YH9o|*YKGL`X4>* zR6Mt-W&3iCdB8cn9(c*+Q zLk4Y$*)-Z|A~7ZB5;N;yr&un__Poes{tZ6Gd~zONL2yr%f5^Q9~)U#v4B`yN}O) z?_>l!xLB@MH^?XS_iG`o>-_Z!iWxbqBmitG)_=Gh@3Wi`Uc}W^H}nv1n8K|aS=RQ` zlTpW}@aw(%dK^f3|iQ5CwsweKl_QH|<)B3okDZ9bN%1Lkeh)Perfb!e5Rs4&F5 zB3q`7wPW0q4f?AEI(c_<%w(+>r)amxRnX#zU6qh!GA_VYy&>P&F_2qdEFgQ|&Lyg= z9~oz$Y9v;7z5^^&2K-I?R}Ai0UK{)onu$`2o##~d(>37 zt+oqak6$a_**Xnh1YkBLQwChl7=fipEUMd$*9QY`Kthh#S%d%cj{OgSoZvkBr_Yi2J(a5ja-|u70B>%`md&$Hy0QYB;3dpaz zO?{+El(zubE{B$B@&5cjJQ6qcvc|V*v=b5eCIbDrlTDW^4Phb(K*wo@W_M9j`{rvg{rPM0}1i@n|^v7}9s6_T&NBI=z3= zj@%9CX>U>b`18u}*xlEL!vz*4kpEz8f{184;GlMXbGyTVi^M9NjB~OMqUOn$p3P?v zo_#UYS6G`ZQ^{qu=V#H&cnTXk<48|1XHaWf`A$>9FEzLVb8z$pK60gy<_^!R;B*K-V)BN$0fCz|@TR1OM{+PV zx>aWEBmvV=q9a*1024%T@(Xz$U4(^PWTxZH#D5m#Gc-y%<^M!2#U=5rt++Z{lER=@ z2y1ic9d4$%jlg(8^0^kO>8sHN!dvlLg2HkgpLdAcS_zp7JYvYE1G2?ZW~rBK{271v zo#}{tvouTevG1#U_Xn;S&o_Z39(ExI+4*|k(pc=8hcJ4*(TzaCiq z6RO8|zl`66zD#>FiILSHzo+eVX(=|Cecn*23TqEJ_5l;E>p^DNYr5k6;_AA5Sb}F0 zZR%dEOg1h^+WK}}Ee{jsG?X|01~G5gqw#HALV03cQUx`^>Qw<@(1kx>@yg`}5$MNgbiW$V?g764{F;})T@{`~sak~?Pacvp0e!Kf&Lw;wwkADaF$aC_I!vbCsdiryqc&>Qc(VZWX{`O?`WK}l z3Q7ef#kHXZUGA&Dgl_Wzv@^i1xB*4uVwJPdCRMELpruFT}V+eU;=XLw0a87wArBc zi^jxGds^|#Txdn(x$Xk=OoK01oGuyQPwKHly!mAp5#3xD-kW zTT4uPP|e0;iy|&@WreG$TD`=Ky{Wzp0B_!g32DXjugFnd;}O$GEr;W}sZ9qwkW=*d znJFWXQJ7b&$LMz3G7+g=-fITQi!7<^Nh>N6TBPr%!wGAer)PVgLmvo+? z8X}sGo*~$a;k7hQk$Mj$L#s3FAfWiz_wpUh!-g{xNsP6U=`Din&O{@zd8)romM;Zt zkF0^=GSa;4L5fh_!BhIIPdxzqd(47E6Fa-#c*re8^smmv0AX^zP`Ff)-v@`drC30w zLeY%9LCI?CV(g2a+2IM(yt~6(O%)0o4=p1KB1Htqm9Ez708VK-K0cZ0mOsf_sX7-h zp){lovXP0mitm4<$Q^T=cl!W%>>NN7DUzG^PPO1>eNZHfX$MvE%- zNm%`Sd0@mSO&M%Sm|s$-jG>GU;LH zTe68*H|yu=Zh_5J62Gl{mxMbp#{2JLsE}pYE74u#J?%Kkzaw9rtDenE6Lur^9MA^L z$ER98EXHgoh;snLZc69q-?+bp`}XEsqNEbGzY>{+e_vnTliPG0RiAzM>gfOQHq2Q` zz4QAxp}VZ1cYT(FvhYR`r#Ts}GXb`L^ysftZDsT;AT;k8k6>owe0EV0`*Vj6a!2gK zQpGQ2-^%+$EQEI(}KM}F%@;sg6l;WDsTx_vsC zSXgCgucXx1xu)|n;Lr_X7ue_qKVXBNqa)W2zB9^H^cUPi;vU&?49@zUSD*L0EtUz5 zv3fztt)VU<&2GD!VZKN--L$m$z3aOFHv5|97L$WdV+#_2{`~SgY1*hb*$f_(m*!J2 z&L9K)n+HAqX=v<{iXrXLg8gJI{}TZTAtZkYBveRph0YSt$~{y>{rBMN%39aKV@c0| zzB~-3x!`0+-X!(pIqSNfSmx@J%R&2}PdeYN9bYRfwMd=h(24!@!BkD}rM-`_h@kd6 zp%^)Kk~3!Yad=P(l#$98a4&cu`S&9Q%{$8RFJqok|MmARRYDK}zeM!4?aDzE_;`nw zkPO>eq49|$@$2Tk{NWwgQdeplKQDX}8SvK0pdhVq$#GuzR$sA+;DSuZWs5s9J^W>IeikM3`=N|?$LT!PPhq%MmcP`UX zSWuj!q#9TFLU4>Y8jD?$1~YQz>DW4kFBi2UV-$?UK+UUdJUvkB3M|NzsViLe>A{$! zcgeUW_4Ii$|E^Wn()INn7HI2+sfM7l0S!1G(Qc>qM)+-!-=VdBD@M3siC{cj=K~PAhn0Yg@c(V&Gq@>>NUUz&)PQRk~KCW za}Sy0_*k4#^PcAE(^EJ9HSjqmQF14AdH2f;cQ!AuN6^1uGU=zJv>jt5tKcmfb*5wL z{XjAI?J0sbA|LF?!+}8d;350KlQ&y)EHmn2&j62DXv}2 zsfZkfC_x^axDdWZzP$e-Wysp2y~d&6;iO1Yl|c+J_9$z}Nu&WR0LP5^yAU+)oWOls z8?-lN7*7H3UYn!~Y@M->T|K8*8M55-@kx=xLVlF1GOhnG-Pr|cZ_p0I>|yNN`(kTR zWz-;P=qXr3yx5}H^{+%jrJk7gn&{y3;Nu^HB$;0j{AOH}iuPI9i1_W7Z*jK_#IWAP z$R}&vu%Z`~^^BgSgkO%yU6NLyo0Ou^X^2>>6~25MQ~X}2VW89qLJ`<4xF5Tk!a?iY z*{b%BnhpV)!5>X|^yqMRK+7~T=8e?v(MXeph$!q^q9;%1NBbv=^L>?=+Zz%t>r@ylK{vyxyh_ozM{u3FkKh%ob!H)b1Ior}7l*5b?< zrmz+H$9FoJl8IPP%)yEchq9sr`WNSlBZ+D$Hh9AnSfw-On*JA%QhOoL%9y)MYJi+wdBDOzX4udw7-ao})hQR~f7I zBG{D+08nMVF)vZpMKBof&2);Ycxu%n_&}4mh}Es)&zcwO3x17ncb_mp;@Vy>62s6f zSK+ls%%xT{{vM~aF!{C;p{7;kBJUm-Edob+mJ(*t?*|*cc{k9kAZ|!@@->KD9PxHx zHIHAmXDepVKnV3`cFpDTs4(PzrG~|OB$!lYZG||#79`I-O`7#|Ub?T2{w-OA!-JGf zPF5UhM&kFSw3%WtZPlTRqS{&CBXwvfBW`BRU*3!LkP>qgDs=py%4w==;l+1Flx*I7 zto`q=nahuR+ZPohW7__jnGMBx*SzHJNfWxD-4&<&l&rPAp~sWt%q8k`C_N!^Dx)Mh zVZs-_x3EWKU-itqjB<~;sOWM9C9XIOfCxY9gy;HIuKkCaR(3xl)h{+In4xp=Dh(0y zb=)vC_pY&`MKzWWXv%E_v1Htl1nMtHiwQm6nr=6d{M-|NAx<>!KC$Obaiz0QTYeZt zK^t*vc#rX%p;7yXn2&@+2fJ`o%yI64Xm_2E7)R>Y2e{ewWCU&Eyfo-5eO|XCO}*NR z!>*Fh*xlOOZc1XkKB^3m;v5vCjbEGf%zS^x?I_wVp0wEVtP_|KZQ@#eY}Di5?!Cq6 z_BXaL#5n5(5IM4dY|}g(1ePjCdX!#&FWt!R)2ViRxN|hV%vtl4qVUFxqVw_g!pbQ4 zM9lwvqE>6;A#nX?*rF7nn5<(oWuX>9&$d51RPMg?!~QuXSsMDjsXHe14SN`(5A}av z%M_ae<;4={t5@lPL1|&W`UE(lj@TRCX3%N4l0Y9_a6cBUOY`%E!QpIqM{+Hn%l`5fw(;@OgSSfPA6|)0h zG?(D$iH^(5$tj8*b=Bq~S85TAY!^JBv_;_w1iqu32c(v!2AvX9Hgct6-w*&Romv!1 zejpj5!_be--@y#emzl9Pz!vLV6S`*Md1%vt&RZD4ybWpviQ9~Pvn_(p9GgOOdSj?) z6XEr^FBy>?j4itqPmX$FT3N?`bbs5skx!$lH>Zlkp+FMMYd!mlWt`9ts8RSB-462f zfV{A}Y@*{XC1HAw$FJDyhx?Xc_B@MS<80m~8bLlWncEy!>m$&(FWXxp!g5b}j@ZL% z1Oq0l>;j`yeQu(USF?Hk_>hJ?R+jFb#F4ieBu5o|Sh2`QOsG4o_N4upSneUN(aF5! zXp3Tm6n1*3oQH+U<9&q!I+(G~D~c=Ebma90J-JlX4O}fP@#(Dj4;3H395(d%V&<)2 zQjdO_@%!gI;5SLBA&kaS(4xn(NoN!}(nUlSIfR9UDGa|&-5zTYg~*cP^2D#I2Xx2t zV_->F&3TJ^;ouP%3NsDVJTb_xQWJmQJJAs8t~Ezo%)uL^*W;VsU~1y?@qp)r-T!ey zkslWIw%DT3b?Ic70a6t0n$kZ!CpenAeRaOZ@&lrTP_qa}8_F2U{<8CNAqcbq6W0>I zg2z+iWPy6akO7tG2P`4|&o&FuO(4Ah$!boLzvs@~m$HPP!cKU3n6&US!?gVX8 zgwBZAM__~znf$yWdwx!(2$)?eakl>oL2&GhsLcTdyKlG~P{ng!{F4sl1!N{ZQOR<;=Qe{4aRj}R(`pZ~Udnc0 z^>{ZGZ2}ZR5D~~MD}&()^u`ozvFyL-+)yU1?r3kT(xb5BexAh#tT?HMW{mg)Amr(q z@g_AVcL=K2bf}D>hU#9HYESeFJmZ6%c0OCT-w!ssu7im3z;t7#P6_#y2&FKHAs=)M z8?iqNdXG&;iTwpAn6r|f<;^>Tzi`PUXzSe5`t-dm{x;eSS0<6$Z{1x-ecPDOc>pDOBtY_X|f@rS)eWJnWYS2(4S$L#p7xj6UD;n1$ zWr7c3W=_!O<3D8HCD9ITi>oZ?>CKD$86P%6^?ljmeN$CC$N~gOcIvk{n(jHCiBO&*oRF?r?C$`@ND;nuIcV*M-(Gvr z*|Y&W{OYRf)Fb{V>xkoib=%UW&pomC`fr6DqXFXZB8@Z9(Tbv{i-kl_V-K?Nl7wf4 zvlmfOMgU|WlyrnoXmp!C_3n(al^Sqm;?egpX`R>01SN0A(!Vf=GxfnX6KaIz^^G_X z4qgZxZTcemq}GeQDRkZ(Yhq{&?bse4Xav`l)MIa-mOc(McW+I;Y3@ zk%toKcO;->m$dA+C>b+P*!Wn{pSqrC{ij{`(RQY#$5HQYCuSP}Pc-&RmB80aDAeG^ zp1VM?NuoH%N2m=l6r=<}28ECEoS#`dz%OhrK1sDw7Q3WeVf*??Jfk0)sFm!=Iq2JRvpl_vSHyuF| z$TC(sRjY%6KC3^cG4;leqKY>HFh*!(;a{6k->EWa+=g~xf?JBbbzxa>Z1&*hXU$)y z%sV=&Tx5qndz#6fylipyH0_J8eak420Y$%-f~KS3l#^+BAXcY9)Ql+LhpF04(*xJt z9&i}!WySRUl@F4NWexTitHogo3>d>Q#2QQ+b-8Nw|1%Gqe}&J-8#C-%ClR# zkK7nurZ(5uE-Mow&t<(=_R4+5Z|vt@AV}(7&KZ6e`>O8kr;&%8n(%^_GkUu8c0sG* zD&CRRn^02$g*`IlF5)&Ht^10p>hDwOGR{>Vh5am*6{UDVa(DCd1r{+DPlI<)>*+Or zGaPsoQCd~->>A0LrETeO#nWptqx#`UB6K9}^~;du!num})A<%hrzx_2tz>5Z(Aq zsB2Ib; zq7;YKbEb|K-I;qLS7?>CK7Vg>&saPBwriE4k<#EfPZ7M=%5vAzGWd1bZs@`vQ=hZ4 zC+yb)vK%bFXU!kJjgj$FHY)&FW;GP=W8NZ|W5H8iUEb3F*%h-s!x0n+T~&`f)?$}2yK6nh?~Dk}W_UJS zd%^XuJDc>$ngI{9J`eLpe;$~PhfB?Q3mvgoZYJs5%7i;FP>a7T`lE|f&Zb&;P^~;# zDB9HLkc(0daTbqpNGsSplIa(GCmJ*yfzH7Xa4STz3>3OWcQD{(8mik_)T55ES5HoK zzW;NnmG%$Rn7K4}FSwm7r)VWGT)ZiGVmFXH{$zkz<1gD{GfP#`5?y{2C;;>-9p_9@ zr%`%QTn2RcG#8^61fl09MQFN^JT2dYLEc{5=u5koM-*+J54b^OWqY8#Z4tAN8}gox zG8po@(cL0waafs-pp8P)SyzmFj1|8arQv_bI=iN6o14GDV0#04gP5d(O!UNHE?Q*U zH^v4tnZzVDcm#DGmD^*oI@brLq@vm~$Lj+^)VGZ;wjS;b!R%Ldt)x!o3*Gj8UQp91 zzx&Kucx1Tt;LolgNiM!;J6Gv`iR=VpcwnruY@EYQM)@&yYE+cBEu&0!=9QZC?tW1@ zvJaWwncw!9d3n=Hvq$}37v18`PmF8YJA!d_H@exjl;xS8Dfqr!1+kU#6Grswl`3CMM+{&VE-N4tRnj53$&&^Zn&gs_n& zA+Ifw%lh+mPYTUNodw()dd4Bm6^G4sKX1_uMjbryQuQYaF(V|^P>pno{XHkR5G78+ zy>U(2!COSK#DC03K+sQKwD+!Px#r5JY@u(yD?FKdl!uI66-=uXUIFqq!#Q{#7rw)7 z(FO}RQN&5bJ|TTbW<%U*{T!U-)Tk-2p9^el2O*~SkX{l?)(;u7EsRi6oXIIa3xh)b zm4p76Pp`DtEWvDK)Gs=-$2sn>b`!*?jCdbU)4Q8k-ULCTI!a=5`E~C6N9bzJAEeyh zWi`CAA!{u{ z73E+Z;mCL`A5<4P^fB9EhS_Ma<}yZuw`KM?-xir}dAhnEC6)4~)P?+`%(l4K`8T&C ztCXd3tGocgr4n_}%J(iozQJYh1vcY}nD=^lj#|1m zJ}p~bI*^v#c}rns-Jwb`psd29ffT9J7Zvfp*B&8F3oEii|GNu`WJ3h)2#>{2l$A zoxT0t5CJPEN#G`72<*0&S#Z|U#7Gi9C3|_B($j5S7h?Cctu6elQeuIQ{P%9Sh%QpV zK}c7bpU5+%Y#7}9jnr68q!Lz^-h@+>r+vCrWYq<)$G7y%cZb>8nK=hppqmJ_Qg%Q0U%Dyw5rkQX%#9ilN0U>YS^kC)$XC8om~hZzwbRUI z5J=loO$LZP+yCXQaK_dN$j-xF6&}aUz`Zw4)$(mw&50*E&Xj0=>!<)<(jk&Z$Q9Dj1m3 zuB{EcyA*W)?%liA_wK>Z(CeXY`}_NYTfrM9CZxgq!ygl(_?T6R^U=qs#kQ;^N}F3$HkNyVgo}-z|QeF4z6rp5-`|!?oc8TD`7%s zcnXZF1BSlii2Sbnnqa}o$_jeN^2}b8J5HA6nWi!4Y&96{*wPO)*`lmyc6L_xC>%oM zq2rQBOwvi{Rk@aFplw_j(omsbAf#Fy@*s#df>z)1rKLw;9779%J-xm02jP&m=(f|E zFFA`taD>?DdkwZmsCDvNJQ2WOWGEOROh(8ZC7}`;JIsl<4TxlqL7`T~z8~ zrOY4CTAMM8p#*Dlf_2X@o{n1v6Bc!@Q!1cr2M1f<6G$An&8ubdh6<)4LtVV*?Iz@C_&>$8LV|=CbYg(onjOr2)d^x9O4t#KGCm8xcz zV0UDGvQH%yu|{@NAa1$LLImT$+P86|JqXyLA@jhxi5KLYh;--;Vx$L|Qa$8RYEd?O z*R`_uE`+E;TeR;r16~V+%kTuHeD zlNz%7Wbl*pRjH$T?(SA&ur17sOn7$pAxI|Lo>_CBP%t1gG~kw&mR?{Y5^_)8uMQ4k z&lWb$*-tV_lcl9)ye^6bhGi;&)}i5oG;N%EarlQa-h5U^A3|xJunYWh{oxuPH{;4#V+DZVjE1 zr{aP`L2q`lAq@a^z1Z{V)579N zRYqoJ7oRdDO-=RE3Bk@$rmc{M`gTOs2+c5IhoqJmq9ldkCpZM`q>?^j!bf0?X=-#_ zkf*X=|6=``|7lD(>#P)1Aj|0lu&tnHzhBjo4dyWJSTHN1FtbuK@WuK3Pg7ze=b4hH zFDe_os>epZeECc!zXr$s9g$c8jwl^h8XX~%*?&b0V8K*UuS1$$1Ftb zMS*CeW3LKW8>4-bb0=tH3BK$(bB6u|Ftd^(@DmX3lfQZey87!a7;^G|Lzd8^!@L5s zab7#|{Q2_%%i}6wii1~s#B`-87vHM0$M<8*FSRaJRGPwN9~82oc*>rtyk zwAU1)KG^7xMsA;GhSf8C$dj`zu=6x;B5C*gwei+SvNuX}9vl?L=^+nuV@}ywR{ay8 z2?^G2!(#MUH3ID6yJcl%)^>K{@F>YY!EACVag!deuU`5)aT}AI?zGW z+cI{Iw_4fTI5;?lmV$u$xpw_}nO;#dZ=B^Kl0W2x7p1)sL zKcf}7@k1UgE&oW`*|UJB(ArZ{RD1_cdP)jc_Vvex^78WZQcwnZsjvCde8|YXxnjRw z_rSow89zwUE#q@vWhq(x3g-OndIQPi=tj=7B~RPG*z-$p{C+UM)Yqu#IR4lvA*%W9 zDyFZS;B%%*;meE<667g{0Lo+bIf%@`ySxZy0$_c>#`SMeS zKlS1nwHleZl$}8@qAs%yC=B85R}U@)anVNs)9{W&lJUfWHv!Xa?2ix#$}oO-K{a%% z9Bk_-mMl52-86jzLiV>FO*DjBPIz0oX8+EFmjTc9`t|EU55hW>Kt6|UlzceC_VpA6 z`1iri&RAgevix`V2EGSW$m%$7V~0H4A3ZVvt3@dhm!R4^!igo zh1$z))@3eL>D$yEZ=*cAV%jGD$9(a;ZYhWYD#_{r0x)oR2X;3ox;Inb|J68m5$r6^ zV*hC2&+F@zF0QUdUO(YwL+|SA%VT0<5^>|)`M(>1^Em8?5K@A+kBn5g5M*+H4Lphx#+csnQdEJ?}7UgB~3zJ*?8?89(A0*uP#aa z8q$!{uaGh`?4Q`sr$XUu_a!o9AS#a+23ucU*to1>P$ZP^V&s&8+4~yJ zv56Ksyrbkj4$r_8A0@~ejwGdHNr4ICRCTyK*?QuG?=6kJzJ$%m(3M#c z5g}*3o2g-bU;Ul=toIMN3)`n_zD!IEwY5D5>?ucAcDbCq6pIpkhy=6O zceuY@94-;OnATKRV_BoB{6#q)SfUpQ?zSm2KSS~~hoVGobo5CO8p4t!&u@sqv;BdS z2VVo~oNBMLTpjk_H1R#3NWbc_l*x4*S|$QuSt3$mU-hd#S|rPH7M;Oy)$gJ<|ln8GLD-K`t>+ zvYe1f{yJ|1WB(`{RN+xNI(zs1G_1(P+^qCYn-ddslH^8LP*UJQkSmF$=4I4>uo@&M5^xN(@CkZP8HY(cCC6$1jk+$dGGNe=?X z8eJ+8TYoRd{2+W+==jC4ZR9@b7=bEmo#i?-I{to4_Lm`+i^B8{xruDKpNeY_G-gv7 z<{yak*X&|F67k3Lv+%vM9$Rf^p6B;wUoZBj^cw8`-H9lBM5vjvlp)9!uf9*t^|-w4 z`c?)vlPjsqd6EDkoMVmp&--*`1?|(u$rGz~D#s0y$1ghNq{H*}$gM8c>xuP&z*>W} z<3^EY>n5_>jZ<|)xh7F__FA-zE|6g z@A$P8letBvkq^FIYnC`^NAB2fbv%f;{<3{$rQq6Ejx>3lxVG+9gNJX#f+GY={*a65srE7QmXEL>T6t))&cJ8M687MJh~je7OeM2_BtmOm2+Hayr317 zDK{fa^POJy?VzP?!B+xLA$Gupr6N73&poJZd1pTAEwx0~cV1|mq5XP1kHZ)D+Gu;r z@mMjGNl+X-;*vPJyeK14*03_f>wfzQbr8A8q&Gd}p*+t#WP3k{EV+%aPST7!P!S!}RMdRk>cK<7v?^ z4By@oESXw(smXwe1~)1EoR(&2yDtx8Y5^wMK)&Lww>3^ zz7u?+Tfv>@{bk(Y17nIl1Lhf+CMRSw)a=Z2UN42^WX#L*K)>!CI#ZCdsQVeFc$lZ? zne#3y4lHar4J3uixuae_cY@eDiCQYR}POw3_z-0a@E{Xk% zMLH45I6(3pxAZXOA%oVz7zE|~cohYb2Uhv9l{Rj`PY!^f%hnIw<*FU2s}RPR^icP7bi7`%=nI0uwXtEs z_hov9@H1@Uc}NgEd1Z83-TjBI_+Mq+-R9}Wnx@K^gQ|}N#74(g%5tsW zZvUMdi|&{@{2_4Ia=h`lcD)I~6y0}Iq>wMycF1+OqEn^V1BamysaOk(;be@vEd&4d z{@%34ael;((2=}N$UKiuNe6Jv^g903I}01;L(*DDw$JeKXQkjbcPS6VwT;cI5f6qF zj(esemmlplkH2&DrbRHZ2|8Tv8$xv!>?o zEA%V56gvO;bnQ=&^mSr=<7D-+2WrG~2D|X2UGrs4l$oc(=0x=*d2jcXADQc_7(B{X zgm!83po&N;M)mPGlx+kx4)4c=Djca%X;{;ZEFe@-bTA?5Tfg<7pKkOj$`lo)>XPD| zCt9vD4@@}2Ypk1fs!CmRB4G=ZtEDEmAAjm;o$~>?MBcygn24fTc~|Ph%3(T|&~{5E$1z3r#27(E2*|Xl6+$!hwM2xoTo#Z98-q-;kf4 zPQG&sq@BtFAmxAf5lRhD0PE|ZzcrZphx4)=3$CzNj7XXve-=*W$ z0J_B6@8?p5nH8$v6sFpS+OWR5n;Tk3AXJ4=sVmq%ug=rD#Xuh$09nB$%d9P&5^u<1 zk49hTX!=2A;=*YX9*18@L6AzVaq8UPa(rxln1B_}4Y&Q&u(J+zWsl>3dWx19@)IrwfKb>- z?Jz4RY)>UdOZnXEg@p^7gYus|9o)4|8qH*&TELP;eNV>ooEL1^>8z$MR@(}uuZPbO zlmh1FT%8}OszrAGhzi9q<;esi^L-z%BOeYb26?)jKhyWyBuMp7@6&_DLF zG#JEyaaS|u&sPNj$;V=9H>*skx|jBc`dW;5&J!KhyIqxvJ)sc!n+#$!ACeg3t{8WH zAY;JvlUlKOZiodT#AfQKcl%w$azQgRxiFDXj5LWF0Olq~SqjP?sS28w4jQb)Hf*3aX#8H`hYXMxGxFw;sPN%$Hq zW$%xEIC@)QyQ^ubK`bb<#Lu_6=DLFn5=a>!;`DUw{h98XJM>DXzJx-e#^!{4bMC=q zS>D4@&}Q!36fXA!T}J27rm*$?|a;Ir$L z0(O;-3m->P&6VrTu0q_NjTB@yp5(%@}E z*rt`Jz6Uq@_rlDndW~#tN+4qf3gFK^cHIQ`bDorC_J-pwp@o&BA<`f|^3Zc>c`@u; z_>C_keHus88b2o+uJ0LzyqyfYYfW4&FYvH2+(js>#aAs(US0sy(;b>Tn5|T?(N^-85tf{8=tot*bkQvw*xkQ^dQ2f_^Q3Ua=cUS5+Sb^eDs<2$;#KILcGgLGP z0C~8U`AXVy?S!}IH2Dg(&gP?)%0(`2K5z+7F&aA-v=8s!A-~+(Kh!FEbJtnn-U}9c zH86!vj1!^PO120wicyYVvrIEE(M2k49kQAXZO?%$?D{54TPyEJH`45j#6f0k!5tuU zX>qe}-39LbzqYlC5QND=u+htQcX!`1%z34+HG+NRi2$&H2GcrCxx%1KdrBMzV>L7DKg*EF7%LZYNZJH z!ENI4>(|3%bHsZmedresuEu+x`Gq7Bn=n%-B&Uw~kZUS+?=cCV&BPG^qN*;tH%#;B z%a| zzPGW5a9hC$=?u6B!PbaF?UE|jVXDmW*74wMS1O^Z3Jo++P!nP4mxwjP4-snLV}uS? zH9qGa?T&@a@1~mP+I`&CxG^dfzclvLR~WeVkI_9fO@`2xT%{kc127hr{z1lZ={ys) zzPC~}_TZKk5BeH<>OxlSb%9uQPCLV$@QxT^h;P_>)UY*L9XMC&`Y!03WY6Ua$#U}Z z$19v~-YP>aKwlND(oXA^8JckG$i-P*$-ym9W1Mf0s?ij?2m`)c8`HW5nao10nN+1> zihjv%%q5$Uy(hSAQi-*{p;l3aaBQK&pC-PsY2X|HO%kry3hlu-<5G~u+(Vq*W?VzA zgK0LO|M=8UF7Z$83#L7#<2?iwH*7mR@QG9i#Y&Y77QMmdnV8y(dg72eCzF9z|3XD5 z5BXfnQmx$`naHW-_V5#4NaG@tzNRK(#D1CGPy0xtT$?)V{`Rs2*34NS zdLRc1bCF2>s5KBV3$cAF^H8qs)=h77+irS4xjT|Dr2b`?kf71ObU#-z_M(cXt_~Wh z_bbp)?~saM9e59NasS|w%-nEnnWef}hFC3ioVvw8 zFFX2S6Mpb*U-ipWs;GeA;zDl^-)McPD|aDi6h_l_Iayy}3AKve4~FYVJEbVm*P=!4 z*iY(p7*8R)ME@4@Gskfwu0}M-9L2}qZWP1Dhp9#yeJLDMrWvBq(mZIs;fncA-4#!G zSAf~y^t8z3sd(&NTV$f5cLc2sa?_-3gn;-QInF3>X*wZUbZvEyQ}jd$qI2Br+h3V)*^WRb zP7FU!MLe1uTG6N}k02>kp66<$N!1*jnez8C=O-t|YJ;eir%wmz>g0?ZKbjyFcdZ=j z_#)1f(4sb44%eZJi84MXzPE$k4m=zkO6-aa67-r&>RKrqUXo%4RW31FZtG))mafTO-nb&-GgWg*G%^;~?SDa7J_MOe>{h?$RtGA$xSiNMKeg?&XID zzbW31+>d`>twdT4YVZb=cx*d1ww>aXo%}D5rLTaa@=&++j?Pkac=$md)943Z8(;i( zO?8(}erPDi=DxI$2ZEw?B>(y|q!FDsd*cQK0gb>=^4_V31U6{?k8N{p8ww&w$KcBLw-q)G1wEnF2|RFk?^BqrgWSC@H+mN>2 z9<3c8k~p{bJrpwcmJ{8cy@f!|<UyfeK$~Ugw3?M1PYr63bMuZpncbs6jVH z^Ri*am_~YWs4+NB=x=5|piZ#DoqrG>3u$k!RZ*C)=83_0s
  • b{8FIW+YY_Fo2$@S8yA*&*E8DcU%|ZQ@V%l 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 literal 0 HcmV?d00001 diff --git a/core/doc/_static/images/fallbacks.png b/core/doc/_static/images/fallbacks.png new file mode 100644 index 0000000000000000000000000000000000000000..cf48c3f63735a6dfc92f5798d5d4a249d7a99f1b GIT binary patch literal 10901 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 z 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 literal 0 HcmV?d00001 diff --git a/core/doc/_static/images/merger.png b/core/doc/_static/images/merger.png new file mode 100644 index 0000000000000000000000000000000000000000..9aeb9bab4ee2651edab9ca08691e769526856efb GIT binary patch literal 32799 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 literal 0 HcmV?d00001 diff --git a/core/doc/_static/images/mtc_task.png b/core/doc/_static/images/mtc_task.png new file mode 100644 index 0000000000000000000000000000000000000000..3eeb4e6124fea4c93b551e6abeb52c2fab838a12 GIT binary patch literal 48184 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 literal 0 HcmV?d00001 diff --git a/core/doc/basics.rst b/core/doc/basics.rst index cd1e87297..26a411cec 100644 --- a/core/doc/basics.rst +++ b/core/doc/basics.rst @@ -1,47 +1,90 @@ Basic Concepts ============== -The fundamental idea of MTC is that complex motion planning problems can be composed into a set of simpler subproblems. The top-level planning problem is specified as a Task while all subproblems are specified by Stages. Stages can be arranged in any arbitrary order and hierarchy only limited by the individual stages types. The order in which stages can be arranged is restricted by the direction in which results are passed. There are three possible stage types w.r.t. their data flow: generators, propagators, and connector stages: +What is MoveIt Task Constructor? +-------------------------------- -.. glossary:: +| The MoveIt Task Constructor framework helps break down complex planning tasks to multiple interdependent subtasks. +| The top-level planning problem is specified as a Task while all subproblems are specified by Stages. +| The MTC framework uses MoveIt to solve the subtasks. Information from the subtasks are passes through the InterfaceState object. - Generators - compute their results independently of their neighboring stages and pass them in both directions, backwards and forwards. Examples include pose generators, e.g. for grasping or placing, as well as ``ComputeIK``, which computes IK solutions for Cartesian targets. neighboring stages can continue processing from the generated states. The most important generator stage, however, is ``CurrentState``, which provides the current robot state as the starting point for a planning pipeline. +.. image:: ./_static/images/mtc_task.png - Propagators - receive the result of *one* neighboring stage as input, plan towards a goal state, and then propagate their result to the opposite interface site. Propagating stages can receive their input on either interface, begin or end. The flow of information (forwards or backwards) is determined by the input interface of the stage. An example is a stage that computes a Cartesian path based on either a start or a goal state. +MTC Stages +----------- +| A MTC stage refers to a component or step in the task execution pipeline. +| Stages can be arranged in any arbitrary order and their hierarchy is only limited by the individual stage types. +| The order in which stages can be arranged is restricted by the direction in which results are passed. +| Stages not only support solving motion planning problems. They can also be used for all kinds of state transitions, as for instance modifying the planning scene. Combined with the possibility of using class inheritance it is possible to construct very complex behavior while only relying on a well-structured set of primitive stages. - Connectors - do not propagate any results, but rather attempt to bridge the gap between the resulting states of both its neighboring stages. It receives input states from both, the begin and end interface and attempts to connect them via a suitable motion plan. Obviously, any pair of input states needs to be *compatible*, i.e. their states (including collision and attached objects as well as joint poses) need to match except for those joints that are part of the given planning group. +There are three possible stages types relating to the result flow: -Processing starts from generator stages, expands via propagators, and finally connects partial solution sequences via connector stages. -Obviously, there exist limitations on how stages can be connected to each other. For example, two generator stages cannot occur in sequence as they would both attempt to *write* into their interfaces, but non of them is actually *reading*. Same applies for two connectors in a row: they would both attempt to read, while no stage is actually writing. -The compatibility of stages is automatically checked once before planning by ``Task::init()``. +* Generators -To compose a planning pipeline from multiple seemingly independent parts, for example grasping an object and placing it at a new location, one needs to break the typical linear pipeline structure: the place pose is another generator stage (additionally to the ``CurrentState`` stage we are starting from) serving as a seed for the placing sub solution. However, this stage is not completely independent from the grasping sub solution: it should continue where grasping left off, namely with the grasped object attached to the gripper. To convey this state information, the place pose generator should inherit from ``MonitoringGenerator``, which monitors the solutions of another stage in the pipeline in fast-forwards them for further processing in the dependent stage. +* Propagators -In order to hierarchically organize planning pipelines and to allow for reuse of sub pipelines, e.g. for grasping or placing, one can encapsulate stages within various containers. -Stages without children are called primitive stages. We provide three types of containers: +* Connectors -.. glossary:: +Generator Stage +^^^^^^^^^^^^^^^ +.. image:: ./_static/images/generating_stage.png - Wrappers - encapsulate a single subordinate stage and modify or filter its results. For example, a filter stage that only accepts solutions of its child stage that satisfy a certain constraint can be realized as a wrapper. Another standard use of this type includes the IK wrapper stage, which generates inverse kinematics solutions based on planning scenes annotated with a pose target property. +| Generator stages get no input from adjacent stages. They compute results and pass them in both directions - forward and backward. +| Execution of a MTC task starts with the Generator stages. +| The most important generator stage is ``CurrentState``, which gets the current robot state as the starting point for a planning pipeline. - Serial containers - hold a sequence of subordinate stages and only consider end-to-end solutions as results. An example is a picking motion that consists of a sequence of coherent steps. +| Monitoring Generator is a stage that monitors the solution of another stage (not adjacent) to use the solutions for planning. +| Example of Monitoring Generator - ``GeneratePose``. It usually monitors a ``CurrentState`` or ``ModifyPlanning Scene`` stage. By monitoring the solutions of ``CurrentState``, the ``GeneratePose`` stage can find the object or frame around which it should generate poses. - Parallel containers - consider the solutions of all their children as feasible. Different sub types are available, namely: +| List of generator stages provided by MTC :ref:`Generating Stages`. - ``Alternative`` container - processes all children simultaneously (currently in a round-robin fashion). For example, one could plan a grasping sequence for a left and right arm in parallel if the actual choice of the arm doesn't matter for the task. +Propagating Stage +^^^^^^^^^^^^^^^^^ +.. image:: ./_static/images/propagating_stage.png - ``Fallback`` container - processes their children sequentially: only if the current child has exhausted all its solution candidates (and didn't produce any feasible solution), the next child is considered. - Use this container, e.g. if you prefer grasping with the right arm, but allow falling back to the left if really needed. +| Propagators receive solutions from one neighbor state, solve a problem and then propagate the result to the neighbor on the opposite side. +| Depending on the implementation, this stage can pass solutions forward or backward. +| Example of propagating stage - Move Relative to a pose. This stage is commonly use to approach close to an object to pick. + +| List of propagating stages provided by MTC :ref:`Propagating Stages`. + +Connecting Stage +^^^^^^^^^^^^^^^^ +.. image:: ./_static/images/connecting_stage.png + +| Connectors do not propagate any results but attempt to connect the start and goal inputs provided by adjacent stages. +| A connect stage often solves for a feasible trajectory between the start and goal states. + +| List of connecting stages provided by MTC :ref:`Connecting Stages`. + +Wrapper +^^^^^^^ +| Wrappers encapsulate another stage to modify or filter the results. +| Example of wrapper - Compute IK for Generate Grasp Pose stage. A Generate Grasp Pose stage will produce cartesian pose solutions. By wrapping an Compute IK stage around Generate Pose stage, the cartesian pose solutions from Generate Pose stage can be used to produce IK solutions (i.e) produce joint state configuration of robot to reach the poses. + +| List of wrappers provided by MTC :ref:`Wrappers`. + +MTC Containers +--------------- +| The MTC framework enables the hierarchical organization of stages using containers, allowing for sequential as well as parallel compositions. +| A MTC container helps organize the order of execution of the stages. +| Programmatically, it is possible to add a container within another container. + +Currently available containers: + +* Serial + +* Parallel + +Serial Container +^^^^^^^^^^^^^^^^ +| Serial containers organizes stages linearly and only consider end-to-end solutions as results. +| A MTC Task by default is stored as a serial container. + +Parallel Container +^^^^^^^^^^^^^^^^^^ +Parallel containers combine a set of stages to allow planning alternate solutions. + +| More information on parallel containers :ref:`Parallel Containers`. - ``Merger`` container - processes their children simultaneously and combine their solutions into an joint solution. It is assumed that children operate on disjoint joint model groups, e.g. the arm and the hand, such that their solution trajectories can be executed in parallel after being merged. -Stages not only support solving motion planning problems. They can also be used for all kinds of state transitions, as for instance modifying the planning scene. Combined with the possibility of using class inheritance it is possible to construct very complex behavior while only relying on a well-structured set of primitive stages. diff --git a/core/doc/concepts.rst b/core/doc/concepts.rst index 7465e47aa..3a589040b 100644 --- a/core/doc/concepts.rst +++ b/core/doc/concepts.rst @@ -7,3 +7,5 @@ Concepts :maxdepth: 2 basics + howtocpp + diff --git a/core/doc/connecting_stages.rst b/core/doc/connecting_stages.rst new file mode 100644 index 000000000..959961d17 --- /dev/null +++ b/core/doc/connecting_stages.rst @@ -0,0 +1,45 @@ +.. _Connecting Stages: + +################# +Connecting Stages +################# + +| MTC provides only one connecting stage called Connect. +| A connect stage solves for a feasible trajectory between the start and goal states. + +Connect +------- + +| The Connect stage connects two stages by finding a motion plan between the start and end goal given by the adjacent stages. +| The default cost term depends on path length. +| The default planning time for this stage is 1.0s. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - merge_mode + - + - Define the merge strategy to use when performing planning operations. Can be SEQUENTIAL(Store sequential trajectories) or WAYPOINTS(Join trajectories by their waypoints). Default is WAYPOINTS. + * - path_constaints + - void setPathConstraints(moveit_msgs/Constraints path_constraints) + - Constraints to maintain during trajectory + * - merge_time_parameterization + - + - Default is TOTG (Time-Optimal Trajectory Generation) + +`API doc for Connect `_. + +Code Example + +.. code-block:: c++ + + auto node = rclcpp::Node::make_shared("ur5"); + // planner used for connect + auto pipeline = std::make_shared(node, "ompl", "RRTConnectkConfigDefault"); + // connect to pick + stages::Connect::GroupPlannerVector planners = { { "arm", pipeline }, { "gripper", pipeline } }; + auto connect = std::make_unique("connect", planners); diff --git a/core/doc/generating_stages.rst b/core/doc/generating_stages.rst new file mode 100644 index 000000000..005753746 --- /dev/null +++ b/core/doc/generating_stages.rst @@ -0,0 +1,160 @@ +.. _Generating Stages: + +################# +Generating Stages +################# + +Generator stages get no input from adjacent stages. They compute results and pass them to adjacent stages. + +MTC provides the following generator stages: + +* CurrentState + +* FixedState + +* Monitoring Generators - GeneratePose, GenerateGraspPose, GeneratePlacePose and GenerateRandomPose. + +CurrentState +------------- +| The CurrentState stage fetches the current PlanningScene via the ``get_planning_scene`` service. +| This stage is often used at the beginning of the MTC task pipeline to set the start state from the current robot state. + +Example code + +.. code-block:: c++ + + auto current_state = std::make_unique("current_state"); + +`API doc for CurrentState `_. + +FixedState +---------- + +| The FixedState stage spawns a pre-defined PlanningScene State. + +.. code-block:: c++ + + moveit::task_constructor::Task t; + auto node = rclcpp::Node::make_shared("node_name"); + t.loadRobotModel(node); + + auto scene = std::make_shared(t.getRobotModel()); + auto& state = scene->getCurrentStateNonConst(); + state.setToDefaultValues(); // initialize state + state.setToDefaultValues(state.getJointModelGroup("left_arm"), "home"); + state.setToDefaultValues(state.getJointModelGroup("right_arm"), "home"); + state.update(); + spawnObject(scene); // Add a CollisionObject to planning scene + + auto initial = std::make_unique(); + initial->setState(scene); + +`API doc for FixedState `_. + +Monitoring Generators +--------------------- +Monitoring Generators help monitor and use solutions of another stage. + +GeneratePose +^^^^^^^^^^^^ +GeneratePose is a monitoring generator stage which can be used to generate poses based on solutions provided by the monitored stage. + +GenerateGraspPose +^^^^^^^^^^^^^^^^^ +| GenerateGraspPose stage is derived from GeneratePose, which is a monitoring generator. +| This stage usually monitors the ``CurrentState`` stage since the stage requires the latest PlanningScene to find the location of object around which grasp poses will be generated. +| This stage can by used to generate poses for grasping by setting the desired attributes. +| There can be multiple ways to set the same property. For example, there are two functions to set the pre grasp pose as seen in the table below. The user can set this property by either using a string group state or by explicitly defining a RobotState. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - eef + - void setEndEffector(std::string eef) + - Name of end effector + * - object + - void setObject(std::string object) + - Object to grasp. This object should exist in the planning scene. + * - angle_delta + - void setAngleDelta(double delta) + - Angular steps (rad). The target grasp pose is sampled around the object's z axis + * - pregrasp + - void setPreGraspPose(std::string pregrasp) + - Pregrasp pose. For example, the gripper has to be in an open state before grasp. The pregrasp string here corresponds to the group state in SRDF. + * - pregrasp + - void setPreGraspPose(moveit_msgs/RobotState pregrasp) + - Pregrasp pose + * - grasp + - void setGraspPose(std::string grasp) + - Grasp pose + * - grasp + - void setGraspPose(moveit_msgs/RobotState grasp) + - Grasp pose + +Refer the API docs for the latest state of code. +`API doc for GenerateGraspPose `_. + +Example code + +.. code-block:: c++ + + auto initial_stage = std::make_unique("current state"); + task->add(initial_stage); + + auto gengrasp = std::make_unique("generate grasp pose"); + gengrasp->setPreGraspPose("open"); + gengrasp->setObject("object"); + gengrasp->setAngleDelta(M_PI / 10.); + gengrasp->setMonitoredStage(initial_stage); + task->add(gengrasp); + +GeneratePlacePose +^^^^^^^^^^^^^^^^^ +| The GeneratePlacePose stage derives from GeneratePose, which is a monitoring generator. +| This stage generates poses for the place pipeline. +| Notice that while GenerateGraspPose spawns poses with an ``angle_delta`` interval, GeneratePlacePose samples a fixed amount, which is dependent on the object's shape. + +Example code + +.. code-block:: c++ + + // Generate Place Pose + auto stage = std::make_unique("generate place pose"); + stage->properties().configureInitFrom(Stage::PARENT, { "ik_frame" }); + stage->properties().set("marker_ns", "place_pose"); + stage->setObject(params.object_name); + + // Set target pose + geometry_msgs::msg::PoseStamped p; + p.header.frame_id = params.object_reference_frame; + p.pose = vectorToPose(params.place_pose); + p.pose.position.z += 0.5 * params.object_dimensions[0] + params.place_surface_offset; + stage->setPose(p); + stage->setMonitoredStage(pick_stage_ptr); // hook into successful pick solutions + +`API doc for GeneratePlacePose `_. + + +GenerateRandomPose +^^^^^^^^^^^^^^^^^^ +| The GenerateRandomPose stage derives from GeneratePose, which is a monitoring generator. +| This stage configures a RandomNumberDistribution (see https://en.cppreference.com/w/cpp/numeric/random) sampler for a PoseDimension (X/Y/Z/ROLL/PITCH/YAW) for randomizing the pose. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - max_solution + - void setMaxSolution(size_t max_solution) + - Limit of the number of spawned solutions in case randomized sampling is enabled. + +FixedCartesianPose +------------------ +The FixedCartesianPose spawns a fixed Cartesian pose. diff --git a/core/doc/howtocpp.rst b/core/doc/howtocpp.rst new file mode 100644 index 000000000..0c53ae28c --- /dev/null +++ b/core/doc/howtocpp.rst @@ -0,0 +1,123 @@ +How To Use MTC (C++) +==================== + +Initializing a MTC Task +----------------------- + +The top-level planning problem is specified as a MTC Task and the subproblems which are specified by Stages are added to the MTC task object. + +.. code-block:: c++ + + auto node = std::make_shared(); + auto task = std::make_unique(); + task->loadRobotModel(node); + // Set controllers used to execute robot motion + task->setProperty("trajectory_execution_info", "joint_trajectory_controller gripper_controller"); + + +Adding containers and stages to a MTC Task +------------------------------------------- + +Adding a stage to MTC task - + +.. code-block:: c++ + + auto current_state = std::make_unique("current_state"); + task->add(std::move(current_state)); + +Containers derive from Stage and hence containers can be added to MTC task similarly + +.. code-block:: c++ + + auto container = std::make_unique("Pick Object"); + // TODO: Add stages to the container before adding the container to MTC task + task->add(std::move(container)); + +Remember, processing starts from generator stages, expands via propagators, and finally connects partial solution sequences via connector stages. +Therefore, there exist limitations on how stages can be added to the task. For example, two generator stages cannot occur in sequence as they would both attempt to *write* into their interfaces, but none of them is actually *reading*. Same applies for two connectors in a row: they would both attempt to read, while no stage is actually writing. +The compatibility of stages is automatically checked once before planning by ``Task::init()``. + +Setting planning solvers +------------------------ + +Stages that does motion planning need solver information. + +Solvers available in MTC + +* PipelinePlanner - Uses MoveIt's planning pipeline + +* JointInterpolation - Interpolates between the start and goal joint states. It does not support complex motions. + +* CartesianPath - Moves the end effector in a straight line in Cartesian space. + +Code Example on how to initialize the solver + +.. code-block:: c++ + + const auto mtc_pipeline_planner = std::make_shared( + node, "ompl", "RRTConnectkConfigDefault"); + const auto mtc_joint_interpolation_planner = + std::make_shared(); + const auto mtc_cartesian_planner = std::make_shared(); + +These solvers will be passed into stages like MoveTo, MoveRelative and Connect. + +Setting Properties +------------------ + +| Each MTC stage has configurable properties. Example - planning group, timeout, goal state, etc. +| Properties of different types can be set using the function below. + +.. code-block:: c++ + + void setProperty(const std::string& name, const boost::any& value); + +| Children stages can easily inherit properties from their parents, thus reducing the configuration overhead. + +Cost calculator for Stages +--------------------------- + +CostTerm is the basic interface to compute costs for solutions for MTC stages. + +CostTerm implementations available in MTC + +* Constant - Adds a constant cost to each solution + +* PathLength - Cost depends on trajectory length with optional weight for different joints + +* TrajectoryDuration - Cost depends on execution duration of the whole trajectory + +* TrajectoryCostTerm - Cost terms that only work on SubTrajectory solutions + +* LambdaCostTerm - Pass in a lambda expression to calculate cost + +* DistanceToReference - Cost depends on weighted joint space distance to a reference point + +* LinkMotion - Cost depends on length of Cartesian trajectory of a link + +* Clearance - Cost is inverse of distance to collision + +Example code on how to set CostTerm using LamdaCostTerm + +.. code-block:: c++ + + stage->setCostTerm(moveit::task_constructor::LambdaCostTerm( + [](const moveit::task_constructor::SubTrajectory& traj) { return 100 * traj.cost(); })); + +All stages provided by MTC have default cost terms. Stages which produce trajectories as solutions usually use path length to calculate cost. + +Planning and Executing a MTC Task +--------------------------------- + +Planning MTC task will return a MoveItErrorCode. + +.. code-block:: c++ + + auto error_code = task.plan() + +After planning, extract the first successful solution and pass it to the execute function. This will create an ``execute_task_solution`` action client and the action server resides in ``execute_task_solution_capability`` plugin provided by MTC. +The plugin extends MoveGroupCapability. It constructs a MotionPlanRequest from the MTC solution and uses MoveIt's PlanExecution to actuate the robot. + +.. code-block:: c++ + + auto result = task.execute(*task.solutions().front()); diff --git a/core/doc/howto.rst b/core/doc/howtopython.rst similarity index 100% rename from core/doc/howto.rst rename to core/doc/howtopython.rst diff --git a/core/doc/index.rst b/core/doc/index.rst index 75f0c94af..00f9bec24 100644 --- a/core/doc/index.rst +++ b/core/doc/index.rst @@ -26,6 +26,6 @@ Organization of the documentation tutorials/index concepts - howto + howtopython api troubleshooting diff --git a/core/doc/parallel_containers.rst b/core/doc/parallel_containers.rst new file mode 100644 index 000000000..cd00b52db --- /dev/null +++ b/core/doc/parallel_containers.rst @@ -0,0 +1,91 @@ +.. _Parallel Containers: + +################### +Parallel Containers +################### + +Parallel containers combine a set of stages to allow planning alternate solutions. + +Three stages provided by MTC to use within a parallel container: + +* Alternatives + +* Fallback + +* Merger + +Alternatives +^^^^^^^^^^^^ +.. image:: ./_static/images/alternatives.png + +| Alternatives container allow adding stages to be executed parallelly. +| All the solutions of the children stages are collected at the end and ordered by cost. +| Example - Plan a trajectory with multiple cost terms. + +.. code-block:: c++ + + auto pipeline{ std::make_shared(node) }; + + auto alternatives{ std::make_unique("connect") }; + { + auto connect{ std::make_unique( + "path length", stages::Connect::GroupPlannerVector{ { "panda_arm", pipeline } }) }; + connect->setCostTerm(std::make_unique()); + alternatives->add(std::move(connect)); + } + { + auto connect{ std::make_unique( + "trajectory duration", stages::Connect::GroupPlannerVector{ { "panda_arm", pipeline } }) }; + connect->setCostTerm(std::make_unique()); + alternatives->add(std::move(connect)); + } + t.add(std::move(alternatives)); + +Fallbacks +^^^^^^^^^ +.. image:: ./_static/images/fallbacks.png + +| A fallback container executes children stages in order until one of them returns success or all stages return failure. +| Example - Plan with different solvers until we get successful solutions. + +.. code-block:: c++ + + auto cartesian = std::make_shared(); + auto ptp = std::make_shared(node, "pilz_industrial_motion_planner", "PTP") + auto rrtconnect = std::make_shared(node, "ompl", "RRTConnectkConfigDefault") + + // fallbacks to reach target_state + auto fallbacks = std::make_unique("move to other side"); + + auto add_to_fallbacks{ [&](auto& solver, auto& name) { + auto move_to = std::make_unique(name, solver); + move_to->setGroup("panda_arm"); + move_to->setGoal(target_state); + fallbacks->add(std::move(move_to)); + } }; + add_to_fallbacks(cartesian, "Cartesian path"); + add_to_fallbacks(ptp, "PTP path"); + add_to_fallbacks(rrtconnect, "RRT path"); + +Merger +^^^^^^ +.. image:: ./_static/images/merger.png + +| Stages in a Merger container combine multiple distinct problems (i.e) plan for different planning groups in parallel. +| Solutions of all children are merged into a single solution for parallel execution. +| Example - Open gripper while moving the arm to a location + +.. code-block:: c++ + + auto cartesian_planner = std::make_shared(); + const auto joint_interpolation_planner = std::make_shared(); + + auto merger = std::make_unique("move arm and close gripper"); + + auto move_relative = std::make_unique("Approach", cartesian_planner); + merger->add(std::move(move_relative)); + + auto move_to = + std::make_unique("close gripper", joint_interpolation_planner); + + merger->add(std::move(move_to)); diff --git a/core/doc/propagating_stages.rst b/core/doc/propagating_stages.rst new file mode 100644 index 000000000..85d7b18ec --- /dev/null +++ b/core/doc/propagating_stages.rst @@ -0,0 +1,193 @@ +.. _Propagating Stages: + +################## +Propagating Stages +################## + +| Propagators receive solutions from one neighbor state, solve a problem and then propagate the result to the neighbor on the opposite side. +| Depending on the implementation, this stage can pass solutions forward, backward or in both directions. + + +MTC provides the following propagating stages: + +* ModifyPlanning + +* MoveRelative + +* MoveTo + +* FixCollisionObjects + +ModifyPlanningScene +------------------- + +| The ModifyPlanningScene stage applies modifications to the PlanningScene without moving the robot. +| By default, this stage propagates results in both direction. +| The default cost term is a constant of 0. + +The stage contains function to +* Enable and disable collision checking between links +* Attach and detach objects to robot links +* Spawn and remove objects from scene + +Example code to attach object + +.. code-block:: c++ + + auto stage = std::make_unique("attach object"); + stage->attachObject("object_name", "gripper_frame_name"); + +Example code to enable collision + +.. code-block:: c++ + + auto stage = std::make_unique("Allow collision between object and gripper"); + stage->allowCollisions("object_name", "gripper_frame_name", true); + +`API doc for ModifyPlanningScene `_. + +MoveRelative +------------ + +| The MoveRelative stage is used to perform a cartesian motion. +| By default, this stage propagates results in both directions. +| The default planning time for this stage is 1.0s. +| The default cost term depends on path length. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - group + - void setGroup(std::string group) + - Name of planning group. + * - ik_frame + - void setIKFrame(std::string group) + - Frame to be moved in Cartesian direction. + * - min_distance + - void setMinDistance(double distance) + - Minimum distance to move. Default is -1.0. + * - max_distance + - void setMaxDistance(double distance) + - Maximum distance to move. Default is 0.0. + * - path_constaints + - void setPathConstraints(moveit_msgs/Constraints path_constaints) + - Constraints to maintain during trajectory + * - direction + - void setDirection(geometry_msgs/TwistStamped twist) + - Perform twist motion on specified link. + * - direction + - void setDirection(geometry_msgs/Vector3Stamped direction) + - Translate link along given direction. + * - direction + - void setDirection(std::map direction) + - Move specified joint variables by given amount + +`API doc for MoveRelative `_. + +Example code + +.. code-block:: c++ + + const auto cartesian_planner = std::make_shared(); + auto approach_pose = + std::make_unique("Approach", cartesian_planner); + // Propagate the solution backward only + stage_approach_grasp->restrictDirection(moveit::task_constructor::stages::MoveRelative::BACKWARD); + stage_approach_grasp->setGroup("manipulator"); + stage_approach_grasp->setIKFrame("tool_frame"); + + // Move the end effector by 0.15m in the z direction. + const Eigen::Vector3d approach{ 0.0, 0.0, 0.15 }; + geometry_msgs::msg::Vector3Stamped approach_vector; + tf2::toMsg(approach, approach_vector.vector); + approach_vector.header.frame_id = "tool_frame"; + stage_approach_grasp->setDirection(approach_vector); + +MoveTo +------ + +| The MoveTo stage is used to move to a joint state or cartesian goal pose. +| By default, this stage propagates results in both direction. +| The default planning time for this stage is 1.0s. +| The default cost term depends on path length. + +| The properties needed to be set for this stage are listed in the table below. +| The goal can be specified in different formats. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - group + - void setGroup(std::string group) + - Name of planning group. + * - ik_frame + - void setIKFrame(geometry_msgs/PoseStamped pose) + - Frame to be moved towards goal pose. + * - goal + - void setGoal(geometry_msgs/PoseStamped pose) + - Move link to given pose + * - goal + - void setGoal(geometry_msgs/PointStamped point) + - Move link to given point, keeping current orientation + * - goal + - void setGoal(std::string named_joint_pose) + - Move joint model group to given named pose. The named pose should be described in the SRDF file. + * - goal + - void setGoal(moveit_msgs/RobotState robot_state) + - Move joints specified in msg to their target values. + * - goal + - void setGoal(std::map joints) + - Move joints by name to their mapped target values. + * - path_constaints + - void setPathConstraints(moveit_msgs:::Constraints path_constaints) + - Constraints to maintain during trajectory + +`API doc for MoveTo `_. + +Example code + +.. code-block:: c++ + + const auto joint_interpolation_planner = + std::make_shared(); + auto stage = + std::make_unique("close gripper", joint_interpolation_planner); + stage->setGroup("gripper")); + stage->setGoal("closed"); // Group state named in SRDF + stage->setTimeout(2.0); + +FixCollisionObjects +------------------- + +| The FixCollisionObjects stage checks for collisions and resolve them if applicable. +| By default, this stage propagates results in both direction. +| The default cost term is a constant of 0. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - direction + - void setDirection(geometry_msgs/Vector3 direction) + - Direction vector to use for corrections. + * - penetration + - void setMaxPenetration(double penetration) + - Cutoff length up to which collision objects get fixed. + +Example code + +.. code-block:: c++ + + auto stage = std::make_unique(); + stage->setMaxPenetration(0.04); diff --git a/core/doc/troubleshooting.rst b/core/doc/troubleshooting.rst index 8ee9f0b90..74d6cd271 100644 --- a/core/doc/troubleshooting.rst +++ b/core/doc/troubleshooting.rst @@ -29,3 +29,10 @@ The validation process runs sequentially through a ``SerialContainer``. Here, `` ``moveTo`` as a propagator can operate, in principle, forwards and backwards. By default, the operation direction is inferred automatically. Here, as ``connect`` requires a reading end-interface, moveTo should seemingly operate backwards. However, now the whole pipeline is incompatible to the enclosing container's interface: a task requires a generator-type interface as it generates solutions - there is no input interface to read from. Hence, the *reading* end interface (←) of ``moveto`` conflicts with a *writing* end interface of the task. Obviously, in a ``ParallelContainer`` all (direct) children need to share a common interface. + +Debugging using RViz +-------------------- + +The Motion Planning Tasks panel in RViz lists all the stages in the MTC task being executed. +Solutions for each stage can be examined by clicking on the stage name. +The failed solutions will contain descriptive reasons for failure. From ad58a14876a22da100e42d2a607d999bdaaf07d9 Mon Sep 17 00:00:00 2001 From: Abishalini Date: Mon, 4 Dec 2023 01:59:18 -0700 Subject: [PATCH 2/3] Run pre-commit --- core/doc/basics.rst | 2 -- core/doc/concepts.rst | 1 - core/doc/howtocpp.rst | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/core/doc/basics.rst b/core/doc/basics.rst index 26a411cec..9804d4487 100644 --- a/core/doc/basics.rst +++ b/core/doc/basics.rst @@ -86,5 +86,3 @@ Parallel Container Parallel containers combine a set of stages to allow planning alternate solutions. | More information on parallel containers :ref:`Parallel Containers`. - - diff --git a/core/doc/concepts.rst b/core/doc/concepts.rst index 3a589040b..9da96a64c 100644 --- a/core/doc/concepts.rst +++ b/core/doc/concepts.rst @@ -8,4 +8,3 @@ Concepts basics howtocpp - diff --git a/core/doc/howtocpp.rst b/core/doc/howtocpp.rst index 0c53ae28c..fada7893d 100644 --- a/core/doc/howtocpp.rst +++ b/core/doc/howtocpp.rst @@ -87,7 +87,7 @@ CostTerm implementations available in MTC * TrajectoryDuration - Cost depends on execution duration of the whole trajectory -* TrajectoryCostTerm - Cost terms that only work on SubTrajectory solutions +* TrajectoryCostTerm - Cost terms that only work on SubTrajectory solutions * LambdaCostTerm - Pass in a lambda expression to calculate cost From 3247989c5260921783d4cdc26ff89092f3009a6a Mon Sep 17 00:00:00 2001 From: Abishalini Date: Fri, 29 Dec 2023 06:19:45 -0700 Subject: [PATCH 3/3] Add a section on wrappers --- core/doc/api.rst | 10 ---- core/doc/wrappers.rst | 110 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 110 insertions(+), 10 deletions(-) create mode 100644 core/doc/wrappers.rst diff --git a/core/doc/api.rst b/core/doc/api.rst index 4a0800b42..01c31fdb2 100644 --- a/core/doc/api.rst +++ b/core/doc/api.rst @@ -8,13 +8,3 @@ API reference Python ^^^^^^ - -.. autosummary:: - :toctree: _autosummary - :caption: API - :recursive: - :template: custom-module-template.rst - - moveit.task_constructor - pymoveit_mtc.core - pymoveit_mtc.stages diff --git a/core/doc/wrappers.rst b/core/doc/wrappers.rst new file mode 100644 index 000000000..42394c882 --- /dev/null +++ b/core/doc/wrappers.rst @@ -0,0 +1,110 @@ +.. _Wrappers: + +######## +Wrappers +######## + +| Wrappers encapsulate another stage to modify or filter the results. +MTC provides the following wrapper stages: + +* ComputeIK + +* PredicateFilter + +* PassThrough + +ComputeIK +--------- + +The ComputeIK is a wrapper for any pose generator stage to compute the inverse kinematics for the poses in Cartesian space generated by the Pose Generate stage. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - eef + - void setEndEffector(std::string eef) + - Name of end effector group + * - group + - void setGroup(std::string group) + - Name of active group. Derived from eef if not provided. + * - max_ik_solutions + - void setMaxIKSolutions(uint32_t n) + - Default is 1 + * - ignore_collisions + - void setIgnoreCollisions(bool flag) + - Default is false. + * - min_solution_distance + - void setMinSolutionDistance(double distance) + - Minimum distance between separate IK solutions for the same target. Default is 0.1. + +`API doc for ComputeIK `_. + +Code Example + +.. code-block:: c++ + + auto stage = std::make_unique("generate pose"); + auto wrapper = std::make_unique("pose IK", std::move(stage)); + wrapper->setTimeout(0.05); + wrapper->setIKFrame("tool_frame"); + wrapper->properties().configureInitFrom(moveit::task_constructor::Stage::PARENT, { "eef", "group" }); + wrapper->properties().configureInitFrom(moveit::task_constructor::Stage::INTERFACE, { "target_pose" }); + + // Add callback to publish grasp solutions so they can be displayed within the UI + wrapper->addSolutionCallback( + [this](const moveit::task_constructor::SolutionBase& solution) { return onGraspSolution(solution); }); + +PredicateFilter +--------------- +PredicateFilter is a stage wrapper to filter generated solutions by custom criteria. + +.. list-table:: Properties to be set by user + :widths: 25 100 80 + :header-rows: 1 + + * - Property Name + - Function to set property + - Description + * - predicate + - void setPredicate(std::function predicate) + - Predicate to filter solutions + * - ignore_filter + - void setIgnoreFilter(bool ignore) + - Ignore predicate and forward all solutions + +`API doc for PredicateFilter `_. + +Code Example + +.. code-block:: c++ + + auto current_state = std::make_unique(kStageNameCurrentState); + + // Use Predicate filter to fail the MTC task if any links are in collision in planning scene + auto applicability_filter = + std::make_unique("current state", std::move(current_state)); + + applicability_filter->setPredicate([this](const moveit::task_constructor::SolutionBase& s, std::string& comment) { + if (s.start()->scene()->isStateColliding()) + { + // Get links that are in collision + std::vector colliding_links; + s.start()->scene()->getCollidingLinks(colliding_links); + + // Publish the results + publishLinkCollisions(colliding_links); + + comment = "Links are in collision"; + return false; + } + return true; + }); + +PassThrough +----------- +PassThrough is a generic wrapper that passes on a solution. +This is useful to set a custom CostTransform via Stage::setCostTerm to change a solutions's cost without losing the original value.