From 1a8ccab6da0c4f6baff0fe278fe9942e3fa1bbbf Mon Sep 17 00:00:00 2001 From: caroline Date: Wed, 27 Apr 2022 16:45:01 +0200 Subject: [PATCH] in progress: differently colored batches --- pcl_methods.odt | Bin 15164 -> 22686 bytes src/initial_processing.cpp | 81 +++++++++++++++++++++++++++++-------- 2 files changed, 65 insertions(+), 16 deletions(-) diff --git a/pcl_methods.odt b/pcl_methods.odt index b00a98573729585054bdc03f7fe84e0586144eef..951ea2645042be5ccfc646fda1adb7c0797035e3 100644 GIT binary patch delta 20777 zcmb4qV{jl{*KIhlF>xlC*qK-p+nU&z*iJgOZQHhO+qUi8=Xt+-zxr;~{d4#Ju~)Ct z)pe@+RG-zmd$l`d)_@|&NrFS5gMdJTfSCBC#vn+5|68JoV%$;x3o-v6;^;p_+%_mt z96l)ezieFLKUkI>5$=Cn;XmV1|2@w3pYygsS^iV8z&QV{b;@Aepuj&s3FLpoKQjQa zG;+|RbFs9Dh#QMcV?Yml@(c~0#Psk%u7)OYly_uQre;ZK4a0kbzk#obVHA9QJm3{4 z3%k4qI=|K}YKQJhG&_7M5@s}_AeJ?JFh!`eEIPK@s=Ri24zrl<-pe5v{tDTHUA&{Q zcb)>}t;PWfwd-!8M^u4wYmNN4-v%**_3?7S#4nq_3bQ}Xr6V`nA8^W2b{a}k4#|sC z(8iUrk5JDuj083IUNosb+^TTI=g<*muoLumN(U3ce?t1AzP_^%gYq+*hpTOOhS_eq zhC@dj1rW%5arM@>=>?y>>F>;s9bG)u9j*WjHPzi(qR$(TKZ=qS2t|3duAq%kjP+3a zDMMxv$k+v)@lw#wS8=YydZG0U@yiAAETK;-m|0aIOEjHtIxWtlslQsnx+<2o{@$9G z-ug7NhIZxpbIMvDixaGX{c z{sMhFx*AjvG}7E2jTynTLS9xJ2mH&cjb)o13$Hhu2h^`nB7Ur>*i!+M2+L?qkZ*j)zLtb@?$V@OQ-m--l1-`PvSkTtbpcasKz0>+A1E;u3r?QDMOXpH<8(zz6&A&pmSeytyrXPaVCCUt@5> z70*J?d;4L)wjuT$Uam$d@=iTG;&9hE@=7@Mn8%yETaLuog8i#dK(@Qm7K?}qxz%A$ z>f76m=}Bu(N&wNgb2U*xe09mD`DX#Aslh*MlER0Z`I>jtVcTC#*fh=jRP^)QPbBUop2MecrD zXatr0!w#7Zfd{(!AvMx83K>c7vNc|O2$u35ASYHo@3H9XOR{OaxcVtzrTrVm^$9(b zZ#djW3He=|?h3`YHIqLrwh_E|W$p?*iK-fL87hzOhaSdzL|#Qp4Fy!-awc@F2hT^& zk8@bzcAx#gVu2Wwj(OpGcE;qB3Rb$|{l(xE=M#qgvrq`r*i2tnIcakTUT!vB+Zv%* zz#Vz#PgK4)WhvI;%`>vThm1l~Gd|1D;^(sPo=1O_pr)aUdOY}zn`Hd5AeGwL=31_H zF+Yoa_=BoK^<`y&;ujtMb&xsMgd0C4A<{`*31jzq>A&TBLqSW1w9*T{5x*FTGo1X1 zkk~?O1lz}AQIZ)r@fE1+h4$MkOXmEBfYb+u9v#2tL+IU}-dVyN-{m?}-B_w*Bw`Z9 zC$gfCibL#$a&%7aG*-~rukOOKh26|sfMU(YH;%J!+-s4s=loGheIC?TJlil;U_CBo zOe*?<4FmQFOYMpQ#h6&<0XJydu1XYdH**5kK;ZfX);D$?Rs5{Gp{@F|!e1#LP?i(g zB3Gkg#1#?ybif{|;!T3$9WH+~x_0}*Ht z5rq(J$NRLxM36B$a-VDmzhJES=Q{;0B`g9QN-?>4=*!00%G9Nsnj$lR$iOTQ8X8|< z-pGit&g`w`2#*w)h;xebUQPvJ)^yIsu=+iqLrO7X8+Qa5A?C+&CTgV_K-5RdVa4BV z)AagVOC0B$DrG9))Cie+F{?7HH3Q|e)%dtg6% zAy8e_CbG~EEa_bb?yeUa9W+*Lpe#Ic364EVS!R^>d810~SJXKTss3y_pI|$n%cDze zZ7-CZ6DA@yxddHajdOBnS7SZ$xBeA9mMWGLJkg0%dFykc!2HxCi@xbtebw!mS~Q!) zmb8*?JmNRSx_*>a0-U+YGWpdhuO_(*OHbH?z+!{7a*34UOXM_T+j{!8!jKx%h7s}7{u^5tW#SA@SQZmw_6rr zAiwGV*$*W#|A&fFDnj7FFQWwkDWi?+gy#pqLFA;Agh@$$GEB+VG);A7nRqM zRnb(H7t=Izv(r;DF*GzZHnTJ_vM@5Uw6Zj|aMZVOwX||HvvYGWGqAC;bF{T^vo-f{ zbw|UF`9YT{&YhyJR-vg=XXY4a@8;*>;bU&reTDv(c|P33it)O`-Xc4CwKvV zeUTm({?7Kk?)JVO?jfFb{+_8WYK zzMX-I1qp#&$?3V7Ia%qsMQKGfxrsn%UV2h?W=>IdVt#f;X-+~}URp(QW_50SbwPS< zX=X=ha^62tP+Cx2m|s#}Qjk|%_-`pIE6Xda$uFzTt86K&s4cE+si>(at7)n&FRH1k zuCFevuc>ISDQK%JZ)|J~2^olp9gRqxjSufnN*qm2pN`C3%E+Ed%U=L;(?)YLr;BnY zic97T>UzuSdn;S|%UegwYgg-vCTh#)>Kc3M+j{FdM!IUJT0450yCz#&*2|iA8{2m} zy4x#zMk{+48hiTcd&W9?`rG?PJ4Z%a2N&D=4mziId+Q2%8_EV+DkhrqMp`R+8fyF6 z>U%p{N84&gx?1MC%4dL%`tGjo{_PL&_g~8^X$+rFJ z&c43B-ht8n;lY8C@sWYv;i2L2k^X-a%h1T;*v#1A%tGJH`ozrq_}uEm^6Kow(A?na z;_Ud`+}!NK%EI!({L1=2$IDC0>nrnXYimOz`=j&6qboOa6Tt4=%)#9J$^6>x{Mz~I z+`;PN@#@Cz`r7%z`t{oO#?;Q~U0iiM$7vfiPS-tQ?aKIh%G^y%{+BB)Uc<^xU zAbn{0>yh*;X)ykQG_3JKCLC<)aq zHr$a}Y4A<4@3-)PiUNKb1PH=hakcCVUqU3}{Q(ugS`Qh{ueaT~?uU_NJ4n$Q=CT39p%C$)Hp zpOn3LS>FRn|Dfjg_NwAk)cCaeyv_;YC(O`YRm~#_?QA?#LX#-^{)zIWcdYHynVA3C zW^?ikuF=`4GY%ximq^O*s&gEjDwM=mi1#M^)WJWEE1J1XN!)?@6O>{;vrW+G7rv99 zHvrm%-L29T=wj3q!iHQO53YzD-F?)(JkiJdrowfiPvB#y1YW<4jHnq-Up^`+)auSi#IYF48A3gGpa$~Uu3FyJX1&py7-g*aob9{_O1*3$yaL@#B*JCbS~U8U|zDXD&# zVa;GcCO42#64!>kW6U-vsqqD4-iEeoM@EU-VQG_PRV{CFb(Tla5T9fqm#Rj!8Va;A z8gm^kz5c=erEPm2k&^*!LvH^C~t3BsBadG+OPOdZtK-1``z>gC7Pvv z6mSp30zct{{O(v-w8dRDV4L)9$%gY-*f$EF6*Y{j9n?S+k%?40!VJu9Fo#Wvgx|gB z)qSfYdI`j4=TzPrF7LBqasR@wz8n*s#9OzWETTBRmCM=j_hY6`yDQ(DA%a2jC0R5r zE_X&o&5p`?&KWwZ>c%&yaE8mIz)LEDDxhTH4|i3cjVN{Dm?e!HJ^|Lun2II2G>5^85} z{gr$|W1*x5s0B(w|Iv>M81kz8kG}a7c5*Sg`d|ekwpH+|IZH$f{pmC$10+>qW57u) z&Cjvps70mtT+xXjrUYuZIwxWO7phST+Mu|f;@TK_DKxLj!XG?jsFm8_r$u=A;#&|{ zLmerrJQ~+;zXM1|5c&$*YWkcBolF_~{DQ`DA}DA59j#Y4J?kBo$WW1VA5&$lN!d=W zR|1A)t)7WTctfx!IHeS|&^MlX0)RIVV;eRUjr!ElWl0=;=b#?#wOq>w0#X*7zLvIs z+6ew>F3pXWb0pF|l|xma4|7`L$hAj>f$eo->hzrKSP&dR^~0%-##$oR&wiSwp+|mX zbWEhxb<_UzB0~n;hC_KFInb)KYr<{h-|b=KyI*4H@*&Xw5QA$kf!(1IP62&QUYt91 z?&J{1JAR;ndpb&JyhwKRaY%w}!w4^Ry)4<2UsOAaREbu_J!eUL;`Dz0^~A!+js+6Z z_W@fzp}|;`Ze`jv-||d!#YK)(e~Qbag&x?7>lLaT)I!+TLSvL<;@kexp)A2R*B5`x z1yLH~H=<9cib|5ZSW}f>lLJUObVhWP07+vxzgxG-^0PhFu+)s@I&pCIT4_$&b265@ zBLsGXF5$U$I47sLnzmVF^R;{)8P3$|h(l>Ee8gOhFcjlF#H!b1E#x`p-F&jee82p{ zF*bOQO>&;Jnn&rn>;17v>BEU9rl_Q@AjjXDf;e2M&^()iP1p>yuzq+=8sR%YaQUACKVsbt=80Su#XLjfL!`n1?Yu{3i@?t&0&M)^;M1U zqL~GAsvrh$#6kCM@7?|{MP=s?yOikRpTZn97g+EiySMDPF0lIR1f(vMq@E&bEoR}W zzT5q!h?l-j*8^gpg12%kgmjSK`y_R)IF;Q^pNP`y{X~CMW~YNdxrZ7s2F--y z2k7Kz5{6Ehh4l3VW(+!?(-F`UTXI8rv%h&VG_tG4% zy4DO73Rm6TUVP`z}@* zqTS5~lIAgdwxaX68S#F<@#)oa>G@{&i}l#8j(_>kYW-MJ>R{APKOYG7 zhrnji*_1C0{>GFW2%#(}qL$co=Is0Y1j-q3(hni;sjzpGHy2R`7VxC)gNNoFeu%_B#}nF-``9u zrWlqY^%s_`f4NsaIrde2~ps_h&bM3x^ z_=PPVi|}jcau?bU#;pk)br-90=?cf40NFB}2;E#o_El$^(OJtjvar>I$yNgk0pryY!1QnM_iX3R?!Bh`(=1#4dlG_(ejUMLG{(hO4dG08pRr$7(k5h#BSM0$#0&S_IceZV0^Uge;?#Vx) z)W-F(wtwu?(POrtok{bclA^4z9D_`YtZiZ`J``6doc>|+XY?GYUY z&)+k4ChUay8k?aW`NZ&vT6dJp_6A$Zm541HesxYtN_Mh{(1S|S+^$H#acmH~W-qwz zl#CVHy8ZQb)1in$;Px`W;Jryo!ldsWXCTV@3u9hnXs^A=W}%&Rp2xT|5t&`$Q<@xf zdE&P(05ZgN%@qj-VgnBb7Hy5snqZ6n*V+kWj@gIRB6Gdhv@aSY>KsCAO6aDWOy*5a zZ-?ADh>eM~>E;urts`Sz51Fs?ECr5ytKQF;tKUWw6d8|=XSS7R_I8xP^qUhrIfBGf ziMhcr)fA#CBqiObf|UgRo#x~|b1cQ-PbcPh;8sB!-4F}oCuoK+F8M${DQ93T#lee* zLJSFp9wo>WAI(UJR5fZ;4wjLoP_3~5m9n`nDc#VIM9Mo zfOy#-RRvK!b!igXNAHR=wjXl7N9vHG2Y0@&hI1K~zt<)lQTF|!(0SQ-S}7zv=n}JH zfkffT*B1T`y2dkw=6n^_*^*J=Kb`kTr&KDDX{C3cOln$Q)+#B@i&Tr>L=wZQ6J6=w z5Ck%Wn1F?gpTWr5|7bTYcB`t)IUf^(z9Ay&Z7=V)noYX*-X&3n2P1G_g z4=BU`Ti=|vZ99m}gt#a5U638Sgd*K2m3w8%%lv0NgE!uppy(w6#(aim-dSu*~ImzpQES>SASMVMZ%Y zT5Dn&v~yk3OHD>Ur_<>VthMW;HZ0oavbdTv&c1!E!mekSe(1ywNWk^x=Nsn52Yrcw z(=tIh3>JK~@)Chys^}XXh%5owXzG=-tj`2OwdO4!n@E#dVW?tO}nTBq!mEsM{VgVQR`P?^$TGx>6iqwPM ze(EkL$1BPT))}hTXwzECf#JC?i|F*o>Li$Hiw}ZvP6Kya|ERF>h|n+NIoZ7Ld_*;K z{jQ*EVRhrT>^k9_UBWsVP{)R_#i%nVbrIaoZmZ~mnMlqnlDj%B-4hLIC`}@U|DS68bp0CSP!thqm5 zmttCzDa#+xet5J5C+xaZh@n-{-YLAn2MPALh{=5TcNWk8wb5E1&{|`4*eU@AXG*$k zVogaR7uBI}KZ98M@zZuNzi78kj;HI7S5xZ;d5SIv5s6ER8Tq?+*)fgV*0UGddX{q@ zPml;{(U9xEb&2h6zt=Q%u81=P(wQ!zR#Zr@LUFmU(93v9yGJ;7Q26Rij*&vRlftze z%f(*b()7@BY0A$7>?^LFi`(Pj@h>85SP#|gJ!tAD*}TPfG-9do_%WXy#3Hcf=`zV63&`Jv98lyU7x zy4@Tc!W`=Ia44W9`dJeXad7xsYspH|!>bg}TVJ97S)tkeG5s%b>B{MLp1zX5NA(|t z{%ky@Ot;#4fQVT1!0rbn#YWMnUTxnCu+!O zFAp1c7w&Y1@dwup=q*Xv*v;}8%O+hcu3Fh%4K17c0RO&$#;WS=?F{^WeG&6|>rXqCMJiY`A= zcr(8^Z6(gc$&2-7LBV*D%zf%(;Rv%A z?y)krwZJIp%H2wO%r{AXQw`zV9Q_NEUjE9>xn=D1X_%eDSB@h|v*K84F?0^{EA6@{ z1mM#fc`3RHsqwbu;%KjcSvqaV5PVz(B3Br%mE@KR;g;5Q5c~wO+V`-mNQZ9&3D-wJ zx~+bKMAFpMRPAegC0p3Xt2->zNcU~M!nRx-Yc$J3g{SUxsbMwh(4HD~^#`EoC4Yyc zd?_z?891ur$J)7z)e+HYF=U#gPv|(U0rq2)v}$$mqJ(BPvxFRE$VfcWRo|(uvXDN} zIDI*Y7zqyaC~(Kgm}7pcNEvVIE2NLU#*MA04=YcM*~YsvmOUE*OccX8&ChyI7-pru<0Cc0$&dqPt z;f2wayuFGWN?m=@8)HGwcq5j!_3;#(#PeU<%|0I4uxgzK8c>^`_%vZz=lY$`cjp0V z@DEfTqDqEF$_m!A%2&C{LEWR+4*8oN)DldqRRRZvRuKhKT1E+a?>w@BAbWyI4iB-d zD*dawyynhIU1#UiFBoJ_K#5i{<>I1wiL@td@zer2V!C8sTe35h1PJMu+fr+#*X{8) z7O={zX+peCe>d6g83#%@4gc%+lh+r*joz)7K4~|>;0{PTh8DU1H0xN|y$D*PnME45{5J5#fV@Wcjyje;`$!qK z925KtpWcYdGuhUGvMkQ3BPtBnN&&Y-_|E2>pS{x7J{r%YY^a+Z*#m?x=N#J+9zvADFSmdv`T2Y_ z{_6ZgQ_0a--tF`{wUZg`*Knh6A2s#%^ZEtkl%b~uqKfD&0P}^=m;2%U58(+8QIQf) zCBBT*^cuu;4iSxXsPy{dbnF5J&$;=(N5W=?HvJ-=3iHgA4cej^dgRhv8F|OTTqrI_ z#W+$NioZCcHc9eG8asaRsLL{P3M`)SRxV^x2$iw92l{DO*%9A)y zJ&4O6T`<hWf3tF`S`GcR5LIc2`2Ra!<>(9@@b<9M7>ez+f#UaSmCB!LmR6S%l~E89WLX z`H2B)X9KsHOc&%?N7iDFklFcTs_SD0A&%%L@`#!R{0+sE)(( zBt7O7Ps^Y34wpzXuQe-LmwiBvNs0h@q&S z^ius0Mb~^qWwrIE!at}aE6PvR#KcCDj{yW#0(PM>ObrEQm9g(iZYcp8Sl|W>*o=xr zDfg&t!;9y=V~9LN`BJVr z0AEM0oqQ*Mu`Kru&O(wz$Vto6VR}6`nCkwClHRX`K$E$-yF5wHM1#CHN{O0w8I97o z`6kg4Fe6ud8FgzoML$`OJlMWPezVt*5nkw`C(5R&2l|JoKeOQ9bzQ6qt#v=Y<*2;T zQ3vn}&x=N>yVFY*xr>&olvU{0%upWv24r)lSY6z*CHRlF*Tgtp22<8d9w+<6$2R5j z8_z3xN9I)0ED}mwpViIo7dg&i2VPc(j{{(h8Wb9F2cpHP8%yx!ijj0ozWc z|IPx5vva|T>jB|)&2ygc0pVU@0GG0gUi&X?`;n>~Z}q6G=OidWGwaLGV8?qaN${$!lXrF)s_diWgIBQ@<2 z9(FyBXK@H|m?ZcK7A^(ZLUaSHtk=ER@=gvlsU~(2EI9Qbcb%j9w#)nX6d9+46x?PG zeY~8xAc=Y!YnEiJ7a&2MJ?C%-e<(EX% z2zs{(()R4^D5F^s6Yi@c;GsUzMs14}I|N0Z5PiGe<3t0g_Ar$q_t*j0T@I>k8|^Z% zV+mCSc3Fc+L&w^S5z#{0u}bK5h=cVbgI>OG!ial748Z6UmsGmP>Ui?gjG%^_3`~pM zK+2EGN*}!ZjE|=#G2a|c>OHliRKpq>`Fw{fcIhJBg4Rx=M=DOLEB}-_WMT?QBGV*2 zJIft5_n6rDJ+)dj^AZaDjQ;h~rwtYE-_*KW$qLv#Y9@6km_PFEI|=okQ$OE1b$VDQ zI|>J_;4`>XfuzRj;?-x_#d*#3oA|u8Xw)7-Khcf{zBw)&AIj8fEqxx+4g|b?T6He^ zt}%j-IEx^#pHLwA(6*_wIhpD?r@8k%nxa|ROHm4+`rUkQ_0&!_q*8j8 z>v|9l4>vdPweSjOUq4%Wpq`XRMX5L@U42czO zM>?V~*7U$cF9{(a@q9)JU`&w6p^MSZIj$?dBNUq>VO>@5d4tQFiyx?MN?J7u7!5H% zZxB)|Dd27OrtwnR46e|vn{m*I>GX0NE~|I!3Xr(Su#cPt|A?@4|S=`yP-^kYsRa;kKch~{f64OJ&kF{qWvWXnW@M{9~!|o&|Y?6dqm+Ix-joWAW1z7%%R<9EA z)YYKV^Iw{$f=h9Bh;oyE)8-cW0OE%4S}19X$`&QREPZ|+{T?+=5nO_)!L{W^fXcY9 zFQwG>ZUi&RE9un@l_9h#v?$qZ+F8$wHw}pEcq<3;RNQPJGR3+M^A$`)P(H${??ng7 zmXwZ8TIQnFl{-YmCPWcp1x8l^Nj}?tHRmkp&+C3(Xv(4qrw9ef zlFd1Cx_8&rSi4@5uY^?IJJCE!rA6WVjI3n(hm69nr}l?_Bq;iBnwP38r8<_HGytsA9L*)e<)-&krH&}04R(5 zZqQTZqvJEbx7lE3wmz)o@m4>~7|RLAvRp@XH{`stNll4^6KD*l$jI>Tu!FUbMjSH`@)`L4m&t!~@px;P*RBw7N^!;$|bUmB%k<26dxW0^S8`l}>>XPX%!$v0DRQoa>yPM}3r)oHp{HBJMgJImv zO)*K!IP(D0TVd4OSQcsA4M4${5DdkmShOoe6X&mZlSBE(fV`Vs(*Z)D{Ku`YoU}?3 zen^NRv4+8OKKUVnP>^mvt;7if` zF9`+G%YDX!mOS4dqHxhHlVlvj;sRb&eC~JIUWiDR&Rkw*KZrTSY5{emC))P`Om3&C zzd~|o(0bk176k*A_|+(vq{7*T~k~5jcn;h5)70wyPEBT4aj?6%-OIC! z7g%|EPXD!il#iB?eOgUVydS?8a~b5Y$F$WV@btV5ndz{{bi9S5IvO6n&&zX%Dn9df z!(oKex(lrsg3*ywbN`l31^#Us2|v5IN0l(+gl8iz*V6qjxiEfp#)&w`oFoaPnej9S zlWS^g^*)gA9u~|xZ%S0qnpQ3uyyC}~kK!yTdrpYwsy{Hx%p@?O_DEY`D6y&2!CS2O zQSaF8mX9=3Z_+iuIqlvShf}?2rg&0{6OY+iMQCdW0(vHVan?9%7V{XBm*#?Qfm^>^wko$@%m@L}lP!3`U(lVz=$f}lV#J5@h|K)vtzB6l72 z_VRC{LG^{fh%gY+T8=}wPDSIso2Kj}KRQI4V@JWaxc>RnvZ64VYS!Ajxe2zp>PHaL zDg&mrJX#NIm!(*dPNc5e>5i>Cti#2Z;EB5lz`j)<^^WA>_AuwrJJiv$1w<}-v>NO7 zLW6i2Gu+auc|d{M-1UKcTAY37$@lwVL(+mmkG387bbRV-U`LrUwQnR8*i2lh6w8oB zDX!0}_-TYeCIkaJN}n()q2S}2K2^RXX25pr;LH086(E&0rG`pJd05wN8k|)Y^}&B>pFB7LowM%n~{P%@*I9GM**HuB_L8t|%1o;^Ha z9&5a~(3L_rFeupJsq8Y(ZnC zpsVg+&UigVlk3He-czaVO|Mp+48-!xqNT#G$nuGMVOu@7tW%cG=attNiLt-)E8X^W zOiI2Oq;3cH)>Pkfa)sXu`Rb~@FVg@fwR(`nBVw~FGt;)jH$9bJ+Y4&YNJZ?br% zCjbGdrmr|^sfp!p)@t>|by8;;QTR;NSt@M9q6V~X_uxfpmsd3Hj&|>p zX&)8q9}#O!&S=%N+aQDcO;XkFLya)aMo=xnVc>NtTb9IM5LI+}+{Qr0phHFR0?}6! zNMD@S4|?W8j~kkUy)>gVBFWZLg^Q?)@-csbCuro8%c+5r`6kB!bCR zdo+r?!`PINvAI-ZAP4~o6l2#tc6~yAgPr1E+<_CEf*6wGW;=88ZwK26RvBaD-FLEZ zi~tZ19&oe5mlO)}i>ZMZ3L6Uo355oTpZ(H6t&;N93eo{=Y&l_0(s)+1*Kkjoq z@AE4OwWzy)V}tTv_nWw|j8LV3uJ3>O@cy?S>i;sv!GgqX6C(f`mQicXD4&};ddD^& zWE!`Z#?BiSh!>c`Rnm69oxD7Qs&WlSRGjRE!!9A4yVHaET$kVr z+CNU@W>(NJV{IOz_wQ&@^i-~6t1kp^r=|e$tJti~k4xGu3o#$npY*A)%n1^X`F|#L znd7J>_tW`Exe9>O1^piL@$=L4unYYZqbImGE?ak4$||MqtA8Z%=cq2KQeY69U_*a0fH$FC{^LEkrdgQb%6RY}(s;VWokM@|v4X@So>n(Xw}MZ*KuP z-;QOJ9q>v^2wHa(4>-h9t)7Fwo{gz+JAFLIwx5WD)!2M-h{p7NC>J&MiL;J~q?&SR zpc=rw>(J^FDo}V5yL<^opIXdnKE)QIs~+5AwNn{$!T%xTEpz&(Ii%k0C?@~U3$v3A71RVRp0XqH1SIdhTi{j?_8 z)jOJ9-_A)hKctMLrrgVA#e?gg%#|(m+MxaK$Y*mk>h=^)*ZVicq0gAQwx7{Y9-{N-Q_nDr^}@dU;3gjg3!0xfQT1g>&yxLyR75{m!NW;*f3h0j63hl$zZ_90*%>2hr<>x;{J~Pi&Q1d9V2> zG7xkB?g|fIk!|UhSGPEF!MN~9wDTi4-uVDW=cF63N>^erF6D0-i`V``0w~Gk^-c;f zpOAvzMLD=Nf#y~(d%w!K6f2T!@a$i5R!L83V7E4Xs_wc8x9TZw<1VE@8?9ZCM5ipj zdU5K>4$;V=sxXTf_hT^ZVK92DO8O`c#`JU%7u~RGWtKZmYdaU5*Q^9ak(>*<^a0=o zhQEChF2x_kBi}YZiHIv?gs#JaI=tLwU@18JjLs5z#{A=0ETkoXSp6!RuRFK~6N^6x ziHVDCNDsOv;f)>uv9B$I)Z05DF%pZALUQ9bZ~_yrTadVH}jzD-Hxy#2Od z2Q>0|H%RU*ycD6r-1xa4&L$Ppg)*<7Z|*I4KIJ^H%G*2oz~@u5on5jo#lD_@zrGmE za@NMZD^dwud)Tqc^q^_}reJ!Brm^fqyY_r;;9BGw4-Zld9YuXNfM6-`jtvDMHpm9u zHmU_!5_9N&>Vh%AKEK&9JwMAxg8lS45zOXmA6b)HpzV-32u=Evri)u}V&43<6y%O) zv#i?Wg$}Dp)GJkWDR}cs=}hGE6`AYz00s08*aB1O@zew>*O_oY@-F-0xkuZfz)=*U zjLY!ve0g?F(N9Sv8OW_C#GnK~I~C|@mciK4ZNae+ zgsw~~Br#oD(xl{B5U7i$XBin(1*HT9*n%Gk=XziY6Lbp`emg`(-YNhwI3>T0ac&@w zn+Qc-8!lT_zK<#wJ@Ij@@@H{?KVKMRG!`}OMlFo-^AslVk}H7l*{_;mhnt}x@4eRl z{9`^}_!tmRAc5x6y@-yVCzLv{pOk-6$87WKteK-}hIFjfpWX$>=Sp!;#e2hC*SJp#MIdy0h)#1Wwka(^j zb^YvqV$p6G<>2omedWD~H7Jj@NY1sgIxY{z`en?|P%#l^2=73Cuut)dJ-F8A98RSF zoDq?8wSV=MA@yMz?-RWQIid}W?Sv9W*AdXvXMBHcaV^L9MEe32xpMtHG!2b2B5a zr47P=wvD+7-YxazaIr8?3Je(}vqW$8Y6q^QQgQq|fHsts_$VC@=k9|hmv)C_;N&9| zNH|59t_d#kyXpoye=~E*dKiQvTPu|r4heVtk(dQnc=s>yTVpExo{bm4SW=?!;e^D$ z4E1%a(rgysL%K zWXr>Nezl;EQWqiL)H-qU&7;dy{TvYNKFp#k`K`1OW?6=TwEr+~|1y{VVLr;QzSV_~6l|TzzXM23;65La^bm|ZHVf_}|wTmGz*M((k*c~O+S$~p~(4U?z#-@qR*vTp|C^jho zQIc}x!#<6V{HRVD#`V=Gg?n^JZt)m5-!20mSExY2Ybz7E7dcf|CXmw!zrfvZ4Mx0E zwd)&4*uGu$TANeWqAU)g-k{2(kTY9yoT~OY5X4j`Tey+y*pG<~5i*zoXr|`}%oru= zO?TNdF4SV!yfu_eA12T{n(cU`l`$5;M9hSB9a{wiqs*@}1OK+x7Mww~zioZyQE>5K zACwhvEsD`K&)BVPEXPD1GKCnN^}fE*7tR`pKWs0gE%r##OkT9gBERrJAOcJoTp~v5 zJV5+dUkl!l4ewb&6TZyyYg6>@1}fnwEO_;;y)1^_9`#AaVxKkAbC#c0FBxVf=z}Jr zge`ncZ{p?C3X1;z(;$rX5oMpCHIp&fx*B8>J;75BB6u6P?lN|Lvi{dzXV7XxhX(@! zg24Q*z3yLk-T!f$yHn!>S`&7A%_yBmlyVXai&hJA=;9-LDW!PwU%OVLEAX2`zp%amPN6Dmx0 z>XGOE-Oqjh&Og_6KIe1JALqYwuGjT;PtPakR=uLY-A0q@@=XAmHW$##iOl5FA?D`M zeabzaPOrtl3%|AxM$G@mzC;Yvpf+97Pi zBDGJ7huns8%RGMg1j?0P@xS>q=^=e1+Fk>6%lcURL2c_yM*1|zt(246%j9xN5iPH( z#x4m|SeHxxY>B{PgSxp}SwNUpN5e?*6xB!_HY%pI3~Dtt8f6+__%?a5r&lT$JO3Up z<6)p#7NfT6C)Jos4dLmeQts(tZ-*W0)Xn z7ENEVi?!L!j<(Q@&Ep{+E!+#a@-FKD3`Yg^Rc$&$Z@#2KK2N5s7 zY9BM@_6OHohWm#!$F|{6i>~DX2kux>-Jo0{iotG(IWafu+VK*CtRZsEG2TPeFDzmw z+{y0o0RIsnnh9SxWRQd_P3OAlC}ntSt)ZED3C)`@eM zXpnIIWJE)A+tp>?NdZ*V$=Vm$6&A8tJUQ<$=zG4~ETwDC&06TUoNF~VwRX4s^;y$s z)<{3C-s(THlQMZE)W10TE$d~ul?|7E!@Il0;uLV;o!V97#Ym(f;Uxx2L2oKaJ1^hc z7EX5)eAw$6q)K0Sg)7L&d_j;Pr{|^U^q&*io>%Lz@8__MLG3IL_>wE<_Wd)+W{aCe zYRV>eG$QxNH$1$GAf2Ya(c1WFSas%irFL=lE?E|LVz?@MC5};K5gQv2_t^Punt||u zrw9Tdis?kq7Jd3Bp+zxkF`1m|To9koD}2Ai4Bx>lhLI%Eo+xADfNC{gtMZg)TztP+ z>uh?4nhac6qDb;_06}1_)GXsPu*}c>iX{P;1La>`x<1h<%Go&9 z=V3=F?|we*Xh^QBQ))(yH!%fbq0uRR;K2KQ{v+NG`Zuw+GgtR;=l?Jd`?Y`bgZ7aM zR80gRmY0kbYD=={TCG?C10_MlxQ-RQ(FyT_6LNCyf!8y^(5Q@YTxmtm_2D1%5Mx{F(EGND51&p9E;2M2K`We>_t_cBCHE?~6H?els@vzW&v zB8M(h&xV6ZofvD>u2K6t-r5aKH=s1rkKa*oL}D&4c6wcgO`ECCbva^w%zJqq;CGZ3 znyO%Q!_!Cbd(NQUS%dTfa`f$Ek`1sy?s-Gbn2KP)`^KxnB_ z0j)<=te;REbcFjv@WjRFye`brH<TB43T(hD@N-o&{7rX2*w1 zbD`ac3(_GDjcL|w%?J}%J@(lbOsoT&c8g;A@aTUDs@7Jv3JnvVya2sa8 z{vg-Z5L4xD2GR4wk$#-MQcYQXziuAAZq2NB4;}=CyTXI=UfTV4??z#(72<=G;IVnP z39HQ+oei^%yFt|rD*>&04t=bSeDxCb$M5^$Ji^E>AsL(U-;O@tfGN69d`=8YL@|Jo zi_o@UUW_epR&o@w+yeZbeBAYV-%#r*hP;M8NWQ;qcLZp0fO-A!G$SpqtT3j^0ZzYk z5t)V_Je3fJ%s;l^=q@UO8Z+lSRqm>yc4>IPE!bg#OAFp}++u!6of##tq11GI+dMS8 zcVRC!I=4r(U)ZV6?Nf5Wdw}1$|GY_qA(Z6fb1nGB)h2zIp%S8$WDUn9t9y}N z`je{tNx3dklm8jaZBi<=QqSV>Yrawy#L@v@9^Xt?ItbnO1OL9pP31qw9>9CrwCGrj z(v)X{{IUtSLbg{X4~^TynaLi_#>5O1BY}mc9DZDx;_i-(Gu`4us>gE%SIvx^5ooi@ z;*BF7{1Stp{{8GT+}^TV6cSmqqP}aFr!|64OX2m~#m~=Xa@@nNx|jOxcIzQd61Q2rs^aWkK$sZPEGlax+If}rZ@B4jMr>VZm|n$*EnbTXi_#`2YgaK z<<^7`VwifoC0MwS$7)I)G4=XaTi=F~SNZJ>X*WSWA$q1AnDIZ1^ogWnJ?Iu;@J>bU zZW4&DL5c~A$vFzHPZQbxT#ueGUe@CrHz96s8CIhA-e^m`lF;R_{d)rP7rp6&$ZBd2 z5{~qH^1>@M8aK#5U;J^TPAMLb0JGjOA(g9JNn>UPh;Ws(tkQ8SZy8ZH`a^F7SfX>Q zNNoiynrAGYHB%z)4`%D8d{ZV69>DDAjM0J>Q0Ux@GNnwX?{?_vOW8^wFnXE;Kf==O z$rJY*w-OL;$ZB+UE(tR)p+RmB=CFZ5d(*^+}d%L99!P>E?!KLeet_Nt|6lYLu%2hDDCEPaz}cRico9zWy58n zz`?Phlg-(K?B4vC6olGF!R4jP4b_RJpNU=XV4G^x3qRhN!6`lTJLrgSvr?RU6s-An z!pqXF$~y3kT`1fax%l${V4|98f5hWf(5ZMO>~?1khWu#Uqex1$6?(lLQ(%y%yK<-= za%HIq&w%W0D`J?8cn5jM%W&1NyL{j z*OnYxdEY`B#u`N3QJ-(eMWheO4!Zk^X4e=1CaPu6j8$~)2W%k#(}pS<305}rW(K)_ z?Q^=rp!b8_d9*Mw$^>du%1NfHOf>Wppiu7 z{px!Ec=47CxJ(>)?u9XyS|gBIxt$#qi77k@xZWsg;QgsM`@p34G=a8N&9%}V{KaI1 ztG0T_K}np8Tf^R#^ML0o3dz2XQPYSl*!y;Ka&nzjyU2G86s8M4`JS3KC${f_o$Q@m zm>6;XURYsOK740_!u~i_?(-8^W|w7|a{+VK*geMi3fo3tqH(0@W%wFspQBFDX$H<7 z?QhzgNfmDXtBHm-M4ZAU*D^vmN9;xQ$~a}J>7A*yXd?C`T&NhC6MG*=*pt_A?`MJQY`FNMWy|C@Ye-NV^mR7~ zRj$3uYX|`($|Rm+gj5`kc`&>JcpHoKyRX*cry`=Jm)=uwG)2JjYC)djtvi#a%(95| z)#}McW>Tsk>jAF4k7u_1r@_QWex8`rP-Vws1!L8-XhqLD?X_ojwY9i1@4udJ*O`lR zTB(ZIS>RA*xwcHOt9rRYCGd(?UfN1}L`i`Qse2w^O?V>YyZkxTIwg$|^-! ziO#!)@AdMw^P>Rv*Y5K61hTlbHEDR%J6~zQLlb>qb4^&vIQ;DgkU1J3bFFcn(iaa& z)?fJU1-_)x#hIB&8iTXB+E14M=1~d3;%@Gf1cmHwZ*@89Rbhy8Wqvl@q$BL=l|^r= zp2xgEhR`tXuDtN*gp51&&6cp{BMJw%H$Usqg+V`sB$}M)mT28`Ci`dtC2ZcUZ*#4? z9NsNQmFziIvcS|c{g1ZKwrM3(tsN?_1shTfcYWr<^>eD9+^5*sdi9EL18l|f+}>P( z8T~2*ZCbm;MD}Bn+5M#J>{0e5obKh+=VXd!Kw?BN5WPDz%^_wHzi9CGcL=S<3=c)c zU~%OvXE6#DekWu2#YxC#O|$5ZLJ5}#k78SgVdSL)qAyalf)h43WQJ<$vs|shulFG2 zm6@?5f~ccwf}Z6+ULWkRxVyEuzG*ZcTjtqwc~+*PQu>p+7e4M=$JG~*a~k?AN!fP- z0#I$+NvEnJ^Y0gh5MW()%X(+7PbjyG;kh==XHYH26I$bBe%8CDdh4F83uFQfifWJSIFOFNZiMd4)xFLbc1)wl6; zl!ZJW_|G~2e8ZFf%ab6FDw1ci{A2p(ZBYEnG_OuT;Oy%Y=;{;r2Pr7D83Vfto7loMr0G{5|2><{9 delta 13192 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 // to use the kdtree search in pcl #include #include - +#include /* @@ -62,12 +62,13 @@ float passz_max = 5.0; float voxel_size = 0.02; float Pseg_dist = 0.025; int green_thresh = 150; -bool cluster_on = false; +bool cluster_on = true; typedef pcl::PointXYZRGB PointT; void callback(pcl_tutorial::configConfig &config, uint32_t level) { + std::cout << "dynamic parameters have been updated"; xbpos = config.xbpos; xbneg = config.xbneg; ybpos = config.ybpos; @@ -113,7 +114,7 @@ void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& cloud_msg){ transform.rotate(Eigen::AngleAxisf((roty*M_PI) / 180, Eigen::Vector3f::UnitY())); transform.rotate(Eigen::AngleAxisf((rotz*M_PI) / 180, Eigen::Vector3f::UnitZ())); pcl::transformPointCloud(*cloud, *cloud, transform); - + // Create filtering objects for all 3 coordinates pcl::PassThrough passx; passx.setInputCloud (cloud); @@ -240,7 +241,7 @@ void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& cloud_msg){ // cluster_indices[0] contains all indices of the 1st cluster in the point cloud std::vector cluster_indices; pcl::EuclideanClusterExtraction ec; - ec.setClusterTolerance (0.02); // 2cm => choose right value: too small => 1 objects appears as multiple objects + ec.setClusterTolerance (0.2); // 2cm => choose right value: too small => 1 objects appears as multiple objects ec.setMinClusterSize (50); ec.setMaxClusterSize (25000); ec.setSearchMethod (tree); @@ -249,31 +250,79 @@ void cloud_cb (const sensor_msgs::PointCloud2ConstPtr& cloud_msg){ // seperating each cluster out of vector // => iterate through cluster_indices, create new PointCloud for each entry and write all points of respective cluster into that PointCloud //int j = 0; - //for (std::vector::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it){ - std::vector::const_iterator it = cluster_indices.begin (); - pcl::PointCloud::Ptr cloud_cluster (new pcl::PointCloud); - + + + // std::vector>> cluster_vector(2, std::vector>()); + //std::vector> cluster_vector{{}}; + pcl::PointCloud cluster_vector[cluster_indices.size ()]; + //std::vector> myRow(cluster_indices.size ()); + //std::cout << "größe von cluster_vector: " << cluster_vector.size (); + + + pcl::PointCloud::Ptr cloud_cluster (new pcl::PointCloud); + int count = 0; + + for (std::vector::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it){ + //std::vector::const_iterator it = cluster_indices.begin (); + std::vector> single_cluster; for (const auto& idx : it->indices){ cloud_cluster->push_back ((*cloud)[idx]); cloud_cluster->width = cloud_cluster->size (); cloud_cluster->height = 1; - cloud_cluster->is_dense = true; + cloud_cluster->is_dense = true; + cluster_vector[count] = *cloud_cluster; + } + count++; + } + //std::cout << "size of first cluster that has been found " << cloud_cluster->size() << std::endl; + //std::cout << "size of first cluster that has been found " << cluster_indices.size() << std::endl; + std::cout << "size of first cluster that has been found " << sizeof(cluster_vector)/sizeof(cluster_vector[0]) << std::endl; + //std::cout << "size of first cluster that has been found " << cluster_vector.size() << std::endl; + int color_id = 1; + for (int i = 0; i < cluster_indices.size(); i++){ + if (color_id == 1){ + for (int l = 0; l < cluster_vector[i].points.size(); l++){ + cluster_vector[i].points[l].r = 200; + cluster_vector[i].points[l].g = 0; + cluster_vector[i].points[l].b = 0; + } + } + if (color_id == 2){ + for (int l = 0; l < cluster_vector[i].points.size(); l++){ + cluster_vector[i].points[l].r = 0; + cluster_vector[i].points[l].g = 0; + cluster_vector[i].points[l].b = 200; + } + } + if (color_id == 3){ + for (int l = 0; l < cluster_vector[i].points.size(); l++){ + cluster_vector[i].points[l].r = 0; + cluster_vector[i].points[l].g = 200; + cluster_vector[i].points[l].b = 0; + color_id = 0; + } + } + std::cout << color_id; + color_id++; + + + } + pcl::PointCloud clusters; + for (int j = 0; j < cluster_indices.size(); j++){ + clusters += cluster_vector[j]; } - std::cout << "size of first cluster that has been found " << cloud_cluster->size() << std::endl; sensor_msgs::PointCloud2 clustered_cloud; - //clustered_cloud.header.frame_id = 1; - pcl::toROSMsg(*cloud_cluster, clustered_cloud); + pcl::toROSMsg(clusters, clustered_cloud); // publish all points in all rows + //pcl::toROSMsg(*cloud_cluster, clustered_cloud); + clustered_cloud.header.frame_id = "zed2i_base_link"; pub3.publish(clustered_cloud); - //} } - + // convert to ROS data type sensor_msgs::PointCloud2 output; pcl::toROSMsg(*cloud, output); pub2.publish(output); - - } int main(int argc, char **argv){