From 341bd6a239b9af61ac653d575aaf1d98bb1d4cc0 Mon Sep 17 00:00:00 2001 From: jhy <2584851718@qq.com> Date: Tue, 14 May 2024 20:27:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E8=87=B3=20Code/MowingRobot/pibot=5Fros/ros=5Fws/src/upbot=5Fv?= =?UTF-8?q?ision?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上传笔记 --- .../upbot_vision/upbot_vision阅读笔记.md | 196 ++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md new file mode 100644 index 0000000..97a9793 --- /dev/null +++ b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md @@ -0,0 +1,196 @@ +### 一.目录结构 + +include:包含头文件 + +model:存放用于目标检测的权重文件 + +src:源文件 + +### 二.主要源文件 + +- detection.cc + + **关联头文件**:dection.h + + **主要功能**:对输入的视频帧进行目标检测。 + + **主要函数**: + + - ``` Dection()``` :整个构造函数的作用是在创建`Detection`对象时加载模型,并初始化相关的属性和参数,以备后续的使用; + - `detect_result_group_t Detection::outputParse(cv::Mat netInputImg)` :接收一个图像作为输入,对其进行预处理,推理和后处理,最终的到检测结果保存到detect_result_group_t结构体中并返回。 + +- ranging.cc + + **关联头文件**:ranging.h + + **头文件重要参数**:目标检测模型、相机内外参及畸变系数、图像校正矩阵、重投影矩阵、深度图等。 + + **主要功能**:利用两个摄像头拍摄的左右图像,通过图像校正、模板匹配和三维重建等技术来检测目标并计算其距离、宽度、高度和角度信息。系统的主要功能包括图像校正、像素坐标转相机坐标、模板匹配、水平估计以及从双目图像中提取测距信息。 + + **主要函数**: + + ##### 1. `Ranging::rectifyImage` + + ```cpp + void Ranging::rectifyImage(Mat &oriImgL, Mat &oriImgR) + ``` + + - **作用**: 对输入的左图像 `oriImgL` 和右图像 `oriImgR` 进行重映射校正,去除图像畸变。 + - **参数:** + - `oriImgL`: 左图像的引用。 + - `oriImgR`: 右图像的引用。 + + ##### 2. `Ranging::pic2cam` + + ```c++ + std::vector Ranging::pic2cam(int u, int v) + ``` + + - **作用**: 将像素坐标 `(u, v)` 转换为相机坐标 `(x, y)`。 + - **参数:** + - `u`: 像素坐标的横坐标。 + - `v`: 像素坐标的纵坐标。 + - **返回值**: 相机坐标 `(x, y)` 的向量。 + + ##### 3. `Ranging::muban` + + ```c++ + std::vector Ranging::muban(Mat &left_image, Mat &right_image, const int *coordinates) + ``` + + - **作用**: 使用模板匹配的方法在左图像中找到目标框的位置。 + - **参数:** + - `left_image`: 左图像的引用。 + - `right_image`: 右图像的引用。 + - `coordinates`: 目标框的坐标数组 `[x1, y1, x2, y2]`。 + - **返回值**: 匹配点的坐标向量 `[maxLoc.x, maxLoc.y]`。 + + ##### 4. `Ranging::horizon_estimate` + + ```c++ + void Ranging::horizon_estimate(Mat& img, Mat& bboxs, int k) + ``` + + - **作用**: 估计目标物体的水平距离和角度。 + - **参数:** + - `img`: 输入图像的引用。 + - `bboxs`: 包含目标框坐标的矩阵。 + - `k`: 目标框的索引。 + + ##### 5. `Ranging::getInfo` + + ```c++ + void Ranging::getInfo(Mat &imgL, Mat &imgR, Mat &detBoxes, Mat &info) + ``` + + - **作用**: 从左、右图像中提取测距信息,包括目标的距离、宽度、高度和角度。 + - **参数:** + - `imgL`: 左图像的引用。 + - `imgR`: 右图像的引用。 + - `detBoxes`: 包含目标框坐标的矩阵。 + - `info`: 存储测距信息的矩阵。 + + ##### 6. `Ranging::get_range` + + ```c++ + std::vector Ranging::get_range() + ``` + + - **作用**: 获取双目相机的图像帧,对图像进行处理并返回测距信息。 + - **返回值**: 包含右图像、目标框和测距信息的向量。 + + ##### 7. `Ranging::Ranging` + + ```c++ + Ranging::Ranging(int index, int imgw, int imgh) + ``` + + - **作用**: 类的构造函数,初始化各类矩阵和相机参数。 + - **参数:** + - `index`: 摄像头的索引。 + - `imgw`: 图像宽度。 + - `imgh`: 图像高度。 + +- main.cc + + **主要功能**:通过摄像头获取图像数据,并使用自定义的测距算法对图像中的障碍物进行距离测量。测量结果以自定义的ROS消息类型发布,用于机器人导航或其他需要环境感知的应用。 + + **主要函数:** + + 1. **宏定义** + + ```c++ + #define ANGLE_TO_RADIAN(angle) ((angle)*3141.59 / 180000) // 角度转化为弧度 + ``` + + - 将角度值转换为弧度值,便于后续计算。 + + 2. **全局变量** + + ```c++ + Ranging r(40, 640, 480); + std::queue> frameInfo; + std::mutex g_mutex; + ``` + + - `Ranging r(40, 640, 480)`:初始化测距对象,假设摄像头索引为40,分辨率为640x480。 + - `std::queue> frameInfo`:存储图像帧信息的队列。 + - `std::mutex g_mutex`:用于同步访问队列的互斥锁。 + + 3. **`void \*ranging(void \*args)`** + + ```c++ + void *ranging(void *args) { + ros::Publisher dis_pub_; + ros::NodeHandle nh; + dis_pub_ = nh.advertise("ceju_info",10); + + while (true) { + std::vector result = r.get_range(); + cv::Mat info = result[2]; + pibot_msgs::dis_info_array dis_array; + + if (!info.empty()) { + for (int i = 0; i < info.rows; i++) { + if (info.at(i,0) > 0 && info.at(i,0) < 200) { + pibot_msgs::dis_info data; + data.distance = info.at(i,0); + data.width = info.at(i,1); + data.height = info.at(i,2); + data.angle = info.at(i,3); + dis_array.dis.push_back(data); + std::cout << data.distance << std::endl; + } + } + dis_pub_.publish(dis_array); + } + + g_mutex.lock(); + while (!frameInfo.empty()) frameInfo.pop(); + frameInfo.push(result); + g_mutex.unlock(); + } + } + ``` + + - 该函数是一个独立的线程函数,持续从摄像头获取图像数据,并进行障碍物测距。 + - 使用`r.get_range()`获取测距信息,并将结果存入`pibot_msgs::dis_info_array`中,通过ROS话题发布。 + - 使用互斥锁同步访问全局队列`frameInfo`,确保线程安全。 + + 4. **`int main(int argc, char \**argv)`** + + ```c++ + int main(int argc, char **argv) { + ros::init(argc, argv, "stereo"); + ros::NodeHandle nh; + pthread_t tids[1]; + int ret = pthread_create(&tids[0], NULL, ranging, NULL); + pthread_join(tids[0], NULL); + + return 0; + } + ``` + + - 初始化ROS节点`ros::init(argc, argv, "stereo")`。 + - 创建并执行测距线程`pthread_create(&tids[0], NULL, ranging, NULL)`。 + - 使用`pthread_join(tids[0], NULL)`等待测距线程结束,确保主程序在测距线程结束前不会退出。 From 2cacacfda6053f1dc847f65e7682f770250ba1ee Mon Sep 17 00:00:00 2001 From: jhy <2584851718@qq.com> Date: Tue, 4 Jun 2024 20:51:10 +0800 Subject: [PATCH 2/2] code node --- .../Note/Images/世界转相机.png | Bin 0 -> 14658 bytes .../Note/Images/四大坐标系.png | Bin 0 -> 51585 bytes .../Note/Images/图像转像素.png | Bin 0 -> 9827 bytes .../upbot_vision/Note/Images/成像原理.png | Bin 0 -> 38599 bytes .../upbot_vision/Note/Images/整体转换.png | Bin 0 -> 60793 bytes .../Note/Images/深度计算公式.png | Bin 0 -> 1962 bytes .../Note/Images/相机转图像.png | Bin 0 -> 8576 bytes .../Note/upbot_vision阅读笔记.md | 628 ++++++++++++++++++ .../upbot_vision/upbot_vision阅读笔记.md | 196 ------ 9 files changed, 628 insertions(+), 196 deletions(-) create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/世界转相机.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/四大坐标系.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/图像转像素.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/成像原理.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/整体转换.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/深度计算公式.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/相机转图像.png create mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/upbot_vision阅读笔记.md delete mode 100644 Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/世界转相机.png b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/世界转相机.png new file mode 100644 index 0000000000000000000000000000000000000000..6589329528d511fd2c74948eb561a98c86e3a455 GIT binary patch literal 14658 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 literal 0 HcmV?d00001 diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/四大坐标系.png b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/四大坐标系.png new file mode 100644 index 0000000000000000000000000000000000000000..1df1eae3298dc599c74b2e4a100cdbded77e6321 GIT binary patch literal 51585 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 literal 0 HcmV?d00001 diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/图像转像素.png b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/图像转像素.png new file mode 100644 index 0000000000000000000000000000000000000000..02509475dd55c459d6a63e81cb7d20a5555b643b GIT binary patch literal 9827 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

F_ z7cbjb@u!}HI=BE2be$@9n{qbmHezEX2zg$z7@Fuv+tQ7}F&-Rc%&%-HQMJHOpc zMUN?CnIt+yQ(?~&bW$p)e!F7w`v;*o$&FdR>Bs*Q3IoW;JO%)u)BHCJ@cREQo#713 zhb5r{+SbRpdt>*! z4hQcwxeMCbD>3L>AybA>?&5kiR2B8Ew~Jn)|4OhJ+&h`|TbhhX@=qi6SZ*aOJLln3 zP1v0Q+c61Y{r&;1jplvqW+g9%=9hcbEwIx}bcV^&m?7IVu*c9Ay{Nu6D zL`E=C6-7hp{{nPgSg0_5z(`(lg&8B2MN_Rk^23r6)iqo-YUWpV>dzlHNnpuT>f7*$db%TZa<7A|HAQ!tc)J9Oa4Vm$vb2Qk_)2jNFQ0ZHQ?0u)WPy zZj3F`C7;rZCnuLF9kh+35L7Jx;6x`)pM#!V?5x2_kjg=5rC}up@@ zJh~;n39j=eA>;Xb?vKmQ*rwv&Px#yVeU8MVKZlleOST2|NYUmr-eka-d}Db6V%c!m zG*=}b{)DOU;q*91F4^%DmBx=P-weRg^#-WaCnr=i*_;dhjF}XoFraRD=12%}>M)sST8HK% zFR$IP(vw#XZApeX94Shs^ct@7aT-fB#st$d53dtc-7&y;>RVqN>m*#J4$^!G#bq<) zYkqwnjzDu2fl&@$T7gKF{<>?CvlQ*1LjDYexAnVbzhx z_U3EOb7zLc7a(@h{UP2P@d4qEcw&4I1|9uy7?lHa>*?x7so`Vyz18u#ZybQl@n`sL zEb?SD!4ob@xtPYu8a;$#W=b`~FMh{g5nF$;*km#g>_B_6`gxb#=TA|42S&VuZ^^{% zpv(17LxU%nxBek2qCuHZ{B5QY0Re$rP^XoL+%5IyQ)T-ASGJ;%*cbb#t+q1p=yTph zDx(EFgAUK#G5<%|gjZ!bfB(8F{t7ZK@b5xpHom(Day9)z*l^CFX}+#23wBHbvCiZ stxD#A6xVyU!?u0>uI|O$E1QI;BLvV-S!3pjT!QI_m?s?v-@Bckj z%#WF3&OUp0uU@@+O_-{(EE+NqG6)1hgUCs#gFrAPz+X7xJK!CDclrbnhynzW64&(1 zI9~DaB>CsZ`^f3%ZsB3+W5nc5=}rBYMO!T@j%gu@xwpY=&utSN9nX8Rn%*-Qe{{`v zHrjTP*XnMk%TmKUn2SuWo-Y+^3?q&WCw7g_)Np55xGYLHsF{QK6(tTdw#O<$!6t}u z?0+}2CJu(Y!-Nw*LiH|k1O-v-qkmm^FFxT7SBnw!>ju$+9QX)pL?{P4Nm2lAi|37SaJR(paHY>BRc{e%Au+9C`PUFWGKfQigHk4rC z;&k<*%Biro{XJBT=XVR-$O=9`7$-P+9BqWA_Swxy+G%R;Pg`5%GR4!k>_K>%N0v@xk=Td70S?wistnYpmFSk}y6v{!EcBURQjs5HP zhStkjFOc4Bix(GHHSM)F_G!WCVC02j+v2^hot%>B(ewr`=ssRV0I*GU@4%4A7H^ey z*KOZ{)%kXFmk^|%X!$-Jpu%Tf;MP$A%X-Q zZ!_ZKjXCLivQ_JkUntp&lwS7kV%jf1R_4ywO)jS1bqJDYG<)9nvu52LHVA)N%ZlQr z!Bc4e$CP_=@k#PLLGV9Jg-txyak5yYHQWkT8!1bwQM=dE9(d%1{?4d0b;{yKghfU7o(<{ggCc zY=F!64@R63M9qfUE3U0;R%TONRR?AM5K)ou|FkQBmq~m|?h$J8fYHvsL3k|S?#Y*L zyVhJ`8Z6CB8!%1YW5yu4;)hYM!IedeD+7-NW+!z+b8p)+@esNgtrBi%92>$O_9XvE zP{!!6Twfcj!44rSK)PNG-VNI7mi*Fi>tghj*?(I%uXT+ryK=86kTrUA1U(b}Z95&R zp5B|g-exLH+mb0acsefP?{tK~so<|3aL3Cl!@gM4SMhW=yHWX(wd0GsK+UyfBjSGv zBi&<~^J}eu$0j0zi31lN1WM?1`YJEMk|bw-b#}*o6_^_6(*OSQFimOcusj3x?GuY? z^ox;KF@e-t6B{yEWQS1TvW>i*wDkU&x5LvYQ%jkp!r+z|am-47QIL1ts>abyBy|)P zWD>s@)B0t|a^-d2)Q9MV;c<)Cg)>FpXzrnNE8EZ2G1x#lSI+MBu;sgvXP&5?O~>2D zQ-h{1?)K<3?q4~j-i8ysqdynjj@d2EKXvDDo?ZW2JhhqWhH)n>mwX;%T>oejl1p&T zl0W^$w0gF4aP6pQm+H#&1z*2Yb$Z51XZT#jQz19szJKp-;Sxvm<*%MbyNl@K*m$Tt z#@mh#xi!5u)-aj~5Kc~M+*&jH@RNcf#3S3^2CjE_$MxkB)~*I#l?s~8;mARtWcsKA zG&ilp57c41@3!`$Tko&BUvzDcUZ3uGk_ic&V^f2t9v5$;+!hC#vKYJD@eoD-m*gBU z|3+r4daPV$aE}my&6ay;;{2|xPk5tqI=`szpkt^|q2I&FzkDQxnAcrc=!l7mSZU4w zyMs^gKH}}M?Grk*?hl4@yF zS1(6=qzjD)2b#*U@O?Qr(J>UL{+fIeaD4T&#OTIha)B?c8d8xzQ;dFnZIpRYnC!us z{SE-{imzt#TkgtnB$kb7R;ch4Q+Jo5etS!z0$BD>&&i@K9ivP>RezJhL-BX}*uvR} zUE%!mv`HlBh))Golbo|p4@;j9MTJ~cQlmSO&v&Kio7!vIbcbcfJFcGtI_@8T?qso;)|QH z7xJqM#cPjN*2gs7rQ>nT>0bZ`LHK!z>Ok|=(VExp@KYKpl>fo-i8eX%{WA)pWNM_q zLR305jxMzC$fesEubF><6x=>rqIMCmnNh5ci4fM>OWgZJ)uM{`>jRX@t_V!l%n zQJ?KSN7M(VOr!fLQ=g;onPGzDo_d+GxlUA{whb#H0#R$V?MtAH{R$eEk`%ckfwt_F zu=;Kd>xC!$+x?71SoE)yf8hp2T}o~H$_uvuiA2_+E>3yd^r&t$#!q| ziq5OMfFFRhB{X~+ef@|5o)mXNz3{t>!!W?Rwq_Xp6JtxsF(P|$kp5Z z@9$RpUb_<)S&j{^%R}J)8|S9FwXKB7ni}=@jR_Zjh+}JV!W8=bFPDeotycoq{0{?} z-DDPqPL=h@fSA=ZRv!@MWnWf_jdHKedcOY54=1jQnh1v6Z-++x3~PO}=YI)ntGAP}!bZi;L^0Hr64gN4TkJF62b zh?%%Ig!-X&x|p*fp$ zRIFk&EzaQ_HI|_Aez{#WbPwiU)rE!lG++bcbyH{1KHy>R4*v^os+NQ3`S0u7hkq&= zFBZem7-{iw1D3(HAB&7$CKdWuNpCM9fn^If+vEXT)nm@2W0twGs&o;~8PHyJa#GrD zjmf6hEQnf-Ksf^8MUK!w|I6zs{_Cwz)y;^s_!Rj7_v;4h+fifsH4_7J(;r8cg!mFA z?O8V;7BJ;TmXP0me+Qqy*Cq0oW!RR(VQzwVJFfk2Szlcn2l zekcGO+rPf}QRe=a85A2=c|DAIeMQ^Z3b^Xp;0<^!YKcPrZWyyg z2cp0s2{;%RybZX;@Mm{j>6H>WB@+y|@9l1LsN9Mz0)VGYB82LzN=ub%hnxGVYzen_ zcqa_VciCrmLG-z=Bdg?oNc44cf^qHbB~vC*DX&XZV4M``kK|utNbGE}MwdG|+)D4g z-Hhu!|URb(d$!( zU!}*N?Xn%4aB&z=TndKrjZ#R6ndioH&PU61a@#Tjma?N z3(eIFipl%9xFC?61WUSdeu=)}vlBc_*f@N@_o~-J@0N(sJ0w0@+T{YMjM63|h@$p< z3?u7hHuCT);8v7u`4dC@Wz^CVd2ZQ)ZKeqX`|7}xBXP`cLM^#R-_Ct~n>9ONW2FqH zKg$3aGyPCl5DkQ=lHqxhEP4d{M8r2+@2ND}da?3$BVYQM9`G{zGO8_vW52MPwK0TO z6Jw_^=AGeU*pYi8W*?TyJg~Os4V2Sjr<&M@9LBwVs>8)wZMd+}YqSyG4@W5~OO)c) zBwA4?hgWUEe!;Ii!Ew22aQT)hZLa&iQhF_J-Hk&7V?+5&R8go4# zhc=QKNZK%<0>0T9mT$)JWJ2l(3au`6J^^_c0<9iPo896)Us4o-0Qd6SF z4F#P0Aewdd37B6_pTk}cq3P`~aF7^}@B_ILsL5SP4VUu( z7lP@Xc==KWdC=$BM~R56t{(j=^*!d-D26bTC?c5yndnlDEC{8D)WA22(|J);O zxPk)?hGVvn^>wT8j`bBrM8vzGXdF^^W?jn7`D-0$S5!BC_cgy5JsCZ9G$dr_DDFh1 zd+4~69-atru3Bx3Fon?(XFU&}i9A%FY1+SS@ix3&xEaMd4<^|DJ-DEZj+QTbZL2cG zry`7TaUY|t=jL+Pg#N%#@-r@PxG4#6@H@nDpcfTn=Q`UeWt1O*Zok<2pVvw-um@Z` zN4ELz;pj1}zER23my^ak`}cqB2&mmlCvI8Xi~4Xee*6wq=mq>9XQYFe$e}n~q02fZ&w`!Pa7bk0S%iv%| z1NG#j`b07InQEP;UL@DHEzKO zI^`Ss^ZCfsXnZHY^LpE59OdG>hpQdiAbzbLzPM^!EyR6y4&Ph)9j!nTeQilZBjcuRgjWWp;{R}US<6cc01-EZ%B zU14n~PP#F(PBJxX;;#}VQL?~VKM|Z0E~;E>tkxgJ1j(7u2nqVW{u33N;Vkny*E90} zJuS|9^w|OV>9(<>jYB7t!s>#qz9K*OQ%Gph-Kul_^cv2mZDFpv{k+xvO;w*r&m*DW&l0BB#eY33_#%id96OxK^E3Xcg^|eHd=-Be+5DGy$NPoW*^6 z>Upd}Wr(Uw+)pt&0d3sS@ujqu1p+1}*lS&LDJhfuFO6GjJUH;KAUwmI-U`|c*@ZN_P41!Y| z*_Ae=yTAB6VgC;3u|?$HQDBenz)j}I3Qst&@(h*PEsqAELbd+e?eB7+9`&Zir>Jpuhu=u;r!&NGDSJJ1?P^MIY{NrMVlh&-hl#hn4;o&h2gN9_5K3I z@EV&^?>vi)6+T`R z)(Q5qY}1wTzkI|)l`eXfupyav+q}NXkZ72w?yn`khXX8WvIk)m1M0ZS|rC#>z zaE+<*=}*)s152J`6;IfOEzt;GMe=A}E?+jZ&QQ#4|#SEW%p_>|&Qa9IZGf5^1A5l%dTQh zcYnU0!x8DW*A?baJjqV4l^dk!JMkmLa0;fVB{aoa^%b>}X$E>+nl*3uS_~-uC9s2G zdzZQ5(r1p<19JMk*iQ6o-Uz@)PjG5P20uvK|NI<9!Em3qiO?hn^)>lYDow>!SD;^} zq5k0nd+zR{DK&oWZIJQo+AH9Sdr^PE>%5WdjOiceZ>o`#|L(9Qg{0_%<7j9|kQL)l zI(5KL)bBuj2LPQUR$llVeMx~LhC&=c`jOzc&x7t}w;+U3V`GkEG>fKIO?vGydWD45kOYIQ>Cf-Bu|JIqt@GsZQtTLX?$ewB zuOq=r44R-Ge1zziYa{>JmoZyBJtBoWZ7Xx9%Zr9UAP&rf=x&rlS)$(`g=^k5E|DO3 ziQCluh{J`L(Jog*`_;$UB-kYE%ZhCetY%;+c1dhz1h4SF=jGM5D>lFl7!RNQ?^|?p z>0m%S+6M`!IT};u7Sb@ZKqgBeF*(Z81^rio0S#BqON8==*w^m{s{qLTs;5sIXs$b zSnSlt3y-(Qvn(H%<#bGArGh2IhNoZL)Z-B^oUz^b_?Vzm`+A28?#dplX52uBDsH=y zNmf5S#GHv!@58mXswyGXDtOR#&_`OM`=T?UrJG9^QD&Cc?qDVF5AD>BIP<5$a|w2a zkp(U!3dgn$$2Na9DB~OD67uCZcsHWon=Vklu?1~{A(LE6({)pebtivmMLQ(3BBKp5 z&&_MPke8XS!`8o}*2$P%Nl>KWQJ2)~>zVG=A&2K^AMRvs^}2j~CGQZvIj4ET5tMg0 zfWnD$mQxL1UAW48OZ?_Yp5iwFbvh}p-_lv;3KXfEbeOJgY<4q+hvZTq{#S*+xjK1o zPZfNwl33NWn2v=z{;|RX9GwM3xY{)1a|RakoqO3QBpVqE^}otLnRr5j1Djpx)DeGap8B}D=eVbnF%R|+bC=e6 z&C=Ldf^a4qRLo`#058iT!GTr`Yr;hPM3-0u&@{m&?2f}UwZXxvWBRof zv%hLmGJdWy@RC^d8Jfd``i2y2QgQi=oH^D;xfS{?)$)#W1KK8f?5>ReJ+MqPzVL=C z59Ypr#i6FqsE(&jYq;a~AGl?HY~Dk;|#_IA|? z{WTI_IrT_T{jTm%f+$c!l2h@#qbqCZSye)>NkU8q@&#Fb7}#;c ziXQTkKLACXnftL&JxaG*)#+|A6QTC(lsY_)E{v~Xb=)40+L|)OyTZrciDgPVXJyt{ zn^F5*jvVr?Qk5Zf!(PB$whe-rPkJMhrhkbgiwJ^?cIHC@$yvaY%Eq*8eQ(~A&8W7o z4@Hw^h^AiW=oGZlvdm6U_(sb@exe5g{grE4RnuBi&H32t%W+IZPLisRxC6?WSzo!Oo#7>b|&cR_C4^LL4+i&I|P{GT9hD4bf_E!ePQ zAGNPW<&1ev%~A?$doISE)9Lze)U64ukM{)cX*m3rZg?k={0sr|e+x0^w#aub5p6s~0Y`Gx$+aqtb-3ACmCyw1=H~#izKTu(z7q94@pb=8~6ZHhRSGW2_udPuv}ioGCTRS9@a>B z3?uzdh%{=rv9Ww%c}^eh-Jzo=A|T9fs_Be^7{@h6%^6XBaa0qzVw=;S$47eX=0A1p zP0D7^>pHgduET<)@+Kv}qh|_vO&PNhpdy4rFQVZ7852Ow)R!Wc6FAqAdSEy5m6;of zwaO!VCb+Y{4x$D;hd)g`JSurwG>M5c~ zn*P1#EHS1uIa|KI+^ua?x5f;9J*zO(fSR={n??=#j}3Ngn2b1*>n~}De?7I!@()RE zTB0lJoDrg-2Q(>>T~Nk4nfl{R&-E#(VjnJwA|zp11yBo57oseT&LYFO$k$)RiuQCY zRkSSkef>oyCz>|Czltnr3LTq0?h0*$HNN&EhDdzJASWXx#(~?|pUiuYPQpeM)mU+G z2gBUYP<9{&=HEjb_n``Os+lRBE&b#?s-=W2?PN`LKJ>t!)`{*=Z#(7Qnlmtw;jm_Q&0|SE#PeA2#6~q5;SA)%q;&L739)BB#9iVDngoq)-baqZ|BkPzNG-}`J0h2{gkeYm6 zTlq`|8R>C4q(Y^*hckn$RL7lkE=1s=MVb?>WDCE9;sg}u0O-UKBNcLy5-S~x= zyOEM+Vp?EOwKcEG#VvG_4n+(#p*O@lTaQ`^S5)3lM<*8$1!_8*t+^gA!Kdc);V>!4 z&~^yGAB(OAnT)KpR+mhyS!U^U{?K$OQG!yqM}(sagEMc5T840xF-E?{>x#tgehkZ? z=<-&8Z#aBv1%bXA!%0sggR5rd5A_7f&}zC2mdrSWZ)P-Ngf0g>I-XWEij;+4uBR(1 zDjHo%?=*}FY-Skh80N^8J%cZd!Gu4+b_mK<+P}G)nm;I-U3LBD^ggb!75TZW+GDVU zt9CAnB}Gp#Jobo<8)%KYeJT?lPF(>Fg+4Y!C4Qw6`$(%dRL8^YG7F~tl0Z|ffb&<3 zN#jU$$qlvT2U_n0RYizV0r>L3jEQWN$i6o*FzDFja3>Rsj~jW=y@_tj*S zRRAx@fTFr7B|-3APr?l0xfDb!FO^$JQJ^ zdu;$Em-D9p=XQ$_A=MYnykDP)jKaP#C)oDZfRVToi{lCXm+|~gf?QlF8#)%$Kfmlp zkU&FQUJSmt#L?w%t_Pp8&~T5{84>q#H8K;ICAIKfx~lt7KtLb-A5 zkgV!hFeYSsEau*)?;VMPyY^A~FxSwm6CF6{EA+jk>Le`ZWdu$Rz2h>TJYM?thG%ra zmwEVhys}ph+OUUj0S?CX1`mm+?3!L)xeNquT@(1WE-x5_S<{?!AM&kbbSR z9Bt#`LW~6x^#`XInwT(^5I#Zz_&(3k+ap9L#(K<#>#8N}z6>JiD3;}ymFt_*7n%$P z{o@_G45Ehe6*B}AIvRzRY+#RcXXf!97&f*XZyV#dB=nzHh9Yko_Dz@J?hiqm89Jw$t~i zA_TwS+Sn*9ftIXUx`7~!HfoONbvtm$wBIr+^ zfiV)u2)x35e3Xf5vprK!I1)tb3{E{FM9FGB%yAkij?-EKPx9Ing=4B1IY}(3EgaWGBFVW=+B8vqH^zQN&UozXM+#Z z1m_3Ufgkp6q4JEfc&@{hU>GAV7mEQ8?}_xSUi*3(SlOzm=^#uvC)B1UnKQQEZSgrs z9wWq%Jumj8A%!?_GFBPSl4Ij+rXT1RAN4=zHu+QYz~1y=BnUAnvEuG>9Wm%9oXk20 zp^}Z3a{!&lQ5XPj&MkAFrzU1d_d)X5081g2ZA`Q!4xdFX?A$p51kNU`w=fajz`Un4 zX5jQPolm$TRB_eVr1(oF7)qeukzvFV@~0&Y9r>nJ%PSk`cX$O=k=~VwJ~_a3JEcaB z?8Rpp^TqCNwYS$g-rT$15PLKvIM>uamW!eVQE-LD^Yu;T2NmoIZCvnoh-NU=+uYbZ z*e~%Vj-1DuMR!g%AlplZE#?>U7yj(_4WbLnmD;3}{0#K2E~$l0nt3KVqa%G(26|5w z8tM#5xYG0lliGJ~j z?N-xXncVzsQ+)FhBnC8LSRXRg2d6eXhwv3Mh*Kt=?Mw@#D}Gj7lgM#&-zkT%M7_87 zwor)5k%QnhU>?=iF3aGX5FeNJnYe{W17eWvy*}4}bu$+HOHDO%7U7*Fs}kJWq1*VA zMhmeLxBIDsVW($*#q2TcH$@FVH)AaH)?v#^BuHE}b4jU34%Odjd2u8S0-;JKGEpbT z5>c0_Ph=TCZ}&oiWmYwubQY0?IfBwb<~y$$|)HVkx5!D-LC`KD$}h?4qmD|$|w1o$(`U9T@)c%pMh z?g$zuc+I=&QMtbqBH{^OyFRU-_reD-O&jLeGEA#(3p~1fM5J)iEc=Da(JD7?arF*j zoJ

LnBE|<7HXD+Bs=k{x9HY&fym3D+OI>-tWmbdQ3P>zEIOoURa+ehMxLA7>WvO z9l|O2Ia#p)qBrzNb#U%+XpUNUc;P)Wb`S`=zfRuWMbg?f z>SgNZ)l-$L2M?dXQ3Og2B7!6qw}SSP77_fcS_vyV1F~Lh3Ro3Z7T8g0nTK68g!FAh@L;0kfHW}$Di z{a)B6$~Uv3X>MQ9z$^$O4UAcwHM0K1QF_b}!hpchA4+>^<>Of64#>~|K|v#RH}wUN zFFfwvd#r6u3`=V8CotwPr+FAGTRn{hMd!eU(oB1yN?N}Q?w|%#E?G4=2i}q!qTYeX zs-vNVVe*AZ{mO)C1ya^TFs9OW%uTZjhBuJifWXVND3Os34B;qPe_Xw81O57N{9iPl z%6U3gc0b?Lz2;Dmm~k;=)Yqcc)F?ir6U&kBWw=r|t>@IXRsi+V?Uf&<7UK~PF=&7; zH>Ycptz_(Wyw%(0cVUmJ$*c`7hwqp44KT>$;5p3yu6mdyGtP!#mS7g1kv@GiB5!QJ zY~@OF%&K0?>(`3KbahDcJy9^l*B-#$`VKVm7*|5FCWuFr6?5uXZ&x{YlyKcFjD=)D z?kY(T4os;!lhATLUCtDgydtT{R1UrVIu_04a1`&GCa(ZeRELl-CkMHoiBDMfz^VaC z;5R#=V-I+o&Hmx*Jc3Ft+=E1T-2#+ajAkTM>1&3E;3ZzBdn!NEtUx3WgVd&}%J|8i zqE_?g$&qtkfZjbVG69DavS|8q5G6H(B6(xSB1BF4%$^7T;IocLwd#MP2cy=ax@xHx z?J9+LV(%!@Mv7`$!>LnR@;Wij$OW#?0xn12$TatvWT*oH?wSzQY?1K_X5;aF5fpui zmn}twClCT6iy0ZR-m9IN6n_`h^4OOV>seDX@N0u0{C=O9CLU+=pcSgTy5U~1Mg}LcHbdKOi9sG#M=k4{`m}UxEX%dSm40cy27IRV`0KvExe(CP?fr zCI-;f94v5lw@-$oFs2CoskYL~4D3{cTTUfo>&0_yd5gfi<1Jywl{4|&-Hv(NT4?O6 zW)677H(J!QWLlOb1Jq!CCsgKYn@DKLG;x+b;@F>{UTtQKfxP4um-g*BX!n>mj=>M~ z5;_RKVJjb*?_Fu*RB3C+=%RY%U$sBt^=z1+ZLU?_JXY>ufWo5$CPem84eIk{Y1DjE zhG5NOYrm6^10%j0zgl0!wuO6GCkMt55szinbB~!ZGe#{LDYvL?56c*a&3siWFa1W| z#v0X0`m58=Qh>s2E`j+iF*XrBSUis)?KXP+d%thfWQdexn73nmZ!v>dTdTgID?%Ji z)JT3|qdl8l6{o{*7bhc|zn|$$CfV-lb#bh-XsZ7<4O|#D22nzX>bZHS`{N=qWX8=n zf`fxsR#pbh)Jrs{09~J}{|nRb;)#3NtbAMq1}j9anT6c{w8P(Dz`Es4PepW5t&q`9 zO9DVKW^v4K@xy7Qc0`U$2^U4v{KVfei+_$@!G$sl7J-rSYo0@@#qNsVR<-qH3o5&E zxp1jea)@&fBdORR@8k(7^QvD{&l7l8^>Yu(C-I4QBIps~$M;(@@U#7>$caR+hGP8B`?PX)8?(H2W5?u`D3^ReKwvve*28ub zwIQV|->%EFOcyB@shie{6eZUY^5@9}vKCCcM$yT~ngIgVom949JU$Pt3tV*9dW$e7 zT!J2M%#?IN-#IV=ED?7!#N~FD|BHzTx-S|toa8c4|L>YwS|Ub-1A+LWO$oF$HMgDk z=xio;CZ$B!{9ktf$Jjns{Xy!Qmq|dGwA$CATP)z@c5tKyi6H>LC;KAPXvcQ!z?MFv z$dT#xe)DSeyz`r&#n?P5Lnuvh9r+mfC`r?{0QY_Y(($^Ck8sAqpEf5{xBVRfcmq2# z*68n*euw&*NGMcvwFCUS07-_#T|W47q@p4O*VfhwjSrjENKplT{se&x0(X3)><31Av z<^BjN&?PLV>gGF!&$VEeF6aJiv$+u)3bqLTdw z=MzztNAW08XqTFJLUX9^RiI|QQj=To-$F}5Y*|c-a1)w%r0?BVS67mflE5qI>(G#V z(X`jj5MD&@<%A@L@Z)|SH8nL~`#^E*{kO8S9#;SRh-t$9$|}EyFnc`s%=JI$|79o` zv{~|;`uT0)vuHmyFs>mE|AUd#n@d-^@kvGoXv#b&L^e?Wz_QmyPnQyC%b4({oGI+V z>ChFJK+2M=t0s7oY=DvJ(aWzAL1bwxSXo%m6n{<+UG@d-cobY=YZx(#5r)}UaRLRuw)^#}`&37Aav`jhsg_MhD3U_X+&$&iLI6vCsvg6COC{URP<@R6cpR=cxG8?h)Im<% zhWfs*xxcz{TPMB55QEq_)MaoOLPqez$DeX_XocNBT28t+hc;_}P>mA_+^G{mP6ijK7s#Npblojq38q@WRU?gw`{3Z!huXS*ye18FnsT-BszSgSvl5 znW>qX87Tw=1ejQMj5_YP|Fu;lMtyd6JlDzuj1)UxsOC0N#sRAi8?B4 z^=@g-?zDK~Z{?{0P*~)^o2~)??DqHd6&4jKC@9>Wt#y3vMyQ7}Cl8C7XZKBcbVHh4 zd-#u%ljl6-zzt5X6DY~6Eixi_aJ#pe_F5KrXkSwlnwpJ#TvX>TlAqE^pxEM0wl6P6 zk1nxuOgBhf0OerpkH|x*Hcd8Ib@EoI$Z>a&4Qi1{YfC~dpn+VeHL1XGd#~DRb8pw z_`kQxE5@$=@LL!VNTMbqPWo%Yu*`eb+rojQXoLz>+5ZL~jI)L2LSO(z)W9Hs1P;QC z=kvCg$al2-HPd9hV&cM;miqcleM(VoWLF9_MG`Uj$q?HUX&uyg-oh!R7AZwFJw5&L z<453?ET-R>>vW;EsG%Wgi!VI)LnEb!7bfnUaaBKx~w z5LgXc3L>*X%;*MS7NG1NW4uWTh_Vs$`}Yd(sqiG*q?Oh+DGu#KgqT{lsF}~v>n=2l zSe@Js?>Mt0+nSk~xw^W3{=5N|Je!myXLjZ@&

i(xU3s$1*J<_9=wYnE6wR)f6kuihls7ejg^03s}*gV+*R@h zKPTX%jP1lIjXV{72y!|7-JSa-WrlnP?wfWH81O5~voN-c61i36H&&oPSJ@aGy(0 z%9M?RlY)d7Jy<&i;rG}RM+zQBeL!?@0PNJxY6-S@%ISIK|dpd8yLDS0u9$>Z6Hdm;8@C<@k+O0!0!LnIKh#@=%*0V zODChy(*s+YJ$bly>r2O)C^t7ZKR;naFI~7ZABooNY$6^WN&m`$Pb(up?L-(-cUU74 zWHKiGn3GQ2WI&h;Qy8fUVEX7WJ08Qb zJKQQpyp63b@JT{~eDKtwAV&TAI1vJW{5^wC}{cus67{343brS4V( zyn@JmwVbQpBD>0=yQ|s}X$5uy77Lag99###ixZu_=Wx)a;tmv*yQ`tmYK(*?D;|N= zkf9yt9Mypn_i=z&jEv-~(79LX-@=$4;EH(eYS;n{VutWQk#@*Z;|B|KuZ zU8o)<->Opl&KJt%%%$`TJ|nvTvRt~yB~M6O1RJ~E%DZ_jU4bxGx@U%4?f>Y~q(63c zH~zot$+!IzQ{NYTdwY8|wb)r3trAT}&KOFhRMj-pg?DnU2BI>OI8CIh7GJik4&R%3oUsdc#l= z-lV4cJPRn&G5wrC?gIeVGSD|hD>+xW=BL$MSW8|J%qj@!TYpu9@ zb#yIQvAF+iWL)^87oWa(&3;h0Ls|K(W67v&n|!DE0ZAMLj90iBEsH%lw$S=sVx>4T zb!5$GDkLh5=lbY(4_v){eSPihMz$`totu0`jDT)TUmsur+(c24pB;2o-a`gtzpG>$ zs&a|GEYOB080@VHz04gvG<-jGHnnxBkA z!TxV)X^HoP#_S(>hc3LTYDRPLZT0%Fw0^fiRYt0;m4?@Jp*^z&5hzy0r@y(`r{BOj zl#$u7>`JC4Sq9ddT5HwXp`@Yx=19kT%t3eFfzjZhEr%|MjY~ZKPeu+G$yN+_Pbe1N zsBXEkmRPd~J9%bVOW)z{d}3mK-Iyx2^NW7b^z6TXOLjc<&CXs5Q}6Z^U01Gk!6u&XEZPF9TOs} zALr@W9c)aq`kyuFDDywe^}Ed~ktRMGpwVPrc2hrmv$NXW+|YSH?R7RAvFGpWdfuqp zjgxNA1;Wn0Men%kDtkdX>eh3Shx{}nfLibHg+w#3uyVphqq-WooiZ|aC^@3wN`E4R z#PiW651P-k@(KZ=AssJm5hXKNUODQNs%T+jQ`*?*VPPQ?2M+yQT3X7$$cTmzERjQZ zKXXC_5fb$|-KpenzDgZMPvp>R@;eHB^FKXo!7n5$t2B3fds!Ap@$+DZ>)v@BnmXjE zv)n(C6h3=hEL?@EPt{c{^xY4Z8Hfs9ss9UvW#)-41j)$;YXsv@E83TIKjz&2??-Ts zRqXTS7SHkhME~ann7YgJu&jz!o*gcHTJ^P5=fFR)LLRE%c6V^BZCWnP7pVy)grTG4 z#r>De)#&uRz4W%~_j`;pH!Raf~(H8_;Nt%Rt|LM~W-8UFcYo-fXrPA#u~eG2=(>{@v4i1cXY%Hlmn* z>$HYXOhEhE+uO^K7;e5GP5z|?8=RFb?32&h*KlIZ9!n5?FwC>oaWfl0EVw58kh&N; zOW@D;bZSUfz$SPYVMpZ6kd5?x(?&{nroF6op|FobKP)(oWjt#1{gf~JFI5q|JAPWz z@-B6=hw~%MyaWWPkholCClZ%pzz=ckST67o!dXS<;`I%jrZ83*k`NW){CNd#lebOvOqah|l zZOVMb{muNCQQ0MiDYluCWSZzK5IYh*`T#qr$ram_Udx(1tfZ`*#qR>dM|eJ6?VzTX z){Yb3wRf97i_u2VV8q9;=aHtoys%Q(n7TAwTyfRZhVmD&^wR+J4DYtP_Rxx9dZK{u ze~()tatOrPIsP9_R~;4g`*Z;p1VmU7DG`?LlO}I z9EwG;Nabh{@7AtR{0$(zP&ha(!^-*1PW9$3ttp;i`uDj{0v_8RW-h(9pN=MOEskDe zV#45sEtyu~k&a?G%`>L*r5LOxbPi)>Dq7D^8`)bQ8D?}AzNXbT$)pv|aCR53TN%Dz z@O?S?-)jR>s3gKc+0oTiNcusK^S8*3m2IEj!nep??TlW_Sy!%pmJ|UwGTGx)$eZ&4 z!a~Wi#?kO_9YHL0Y7qq0-{gke9cJS*?KGDRs(%=D^CjFM;c55eX2+NGlEYGjMexo$ zgge$>A#{A0Zo`E_lwg59{+lGuFsv|xS^Ls|+^d|2j@%&j?eFiGsg)>D4fXd+N=t`l z>?l%U;YKAD@)2~4Gi3c&H6q6Ncq8#-8;bS<&iC%aN3V|&*ey3&+p@)?^^0Fy%#jZw zJnrQe78mIRj6L-Igd{_V;X0UxHYv;Rw2gp!c!)M8c*gfm$p>{x24> z)Z@(^AR_u`1+e&iN{Apu8e`(1X){i6Vd-nmi@)#gR3tO9(qi-0q<6DMzWc&K{9#e+ zoZfOPDLhCJKQc&EcXyj484DX5fO|9Z^WnKaxT%XPD;0`W!bM52#H7e3PHoQl<^C?; zcdl7SOs&_c4%g~F{IH|LN0EqLRe9<~KQl@3bW3tQgU;g|U2hL}i)dRn2^FZZz`&-{ zVb-HNUcPMkEU$*2CDhuvKvv6SwP$sZOpuW~85ALvn$P=MKuEB?lTZ^gjudkcuP!Pg zvXBe!>-3(CtXjF$+lXCB-qCl6@NoAQlWH~?Iu#AAtq&Umamvcd_>qMzExgp!QY0~z zpXpdq2-HV#i2~N^qbAw%q5@l=j&u*1ZTW}t*FJZ!*q#K;ETK0e%CHPqJT7Zx5aHFNOsX~UpBr}Zb;3p(#L z@0toVLK-ba3X_9krHFjCm~=C~)S3_O5~;YTW*yMEO*H1>FNQ{ZY(tr)5Jy@N$MFm! zB~^}M<8}OXS(oJfXd=>hzuCT$R2hnb({YeG<0;mwIHkH>$}8ZIfk_ z={HndoO2ovXI&Mol_k}Za?O{$>(29ACfHMd&Mh;JFYguAkU+I>I-2SA^l-&TI0`n+ z`y@h_D&fyH@5r6~R>j}?q2WRH3Yqnq{;b>T0BATTa~*8(c*db{x_<5Mn_K$kmko8_ zv9?B}tLE+Pp^+AUt>A;<13UpyKnI=@JzTx`zLJzCNb2(si%2x+&v|a$-w0(V`Ui~t z3qZIFk`dT5eAZewV>uX>H|peAM=!B4$Do;tzQEHC!Zr z*zs<66;<%}QIF+P_Sf<}r^&488KM&d4NEl+0m1eM_sG^6_=ktM3O}vV`cX-&xWU8BwPlz!;e&$v@ z^u?4B`wEMwe~ux_@v@WaSg#$`g!s#SZ@UL2JV}-G>p-Y!F_ZtrzNqTbNcce=yeCzJw>vp#aX_#61Dl{{%D=pKRIV5a7oA zF)Rp9E@a(e^S_lf0rOWxpdcCQMO;GLxM1H2>4W$B*;B0?rM{Lb9a^`<_F@I$L6t|| zS7qEA!H4D$41>9+^J6|l|F1>CCz57`MJJ1MGA-#vgtPJ9Wi=gBVnYbSyN>d*vVW(h z0JNRlJ*U^KZ#kck5zevgCD>jn10lChkN?WwjiR54Cjb8Z8%(GwjP>Q|rR<>pv2V!ejLu}w{z9o8o+D(I!-m<{JJbeY1}IU}$N8SAg1 z#nXoF7dSqbiLKW*0-hvk9%TiqF}@2Eie5X671{u7fu zFfYt0vfLSm9xHd5<7Qgr-kSbtL1S&#h%WRa-(RBzErl1at&Ouv`v=;!et#t_I=9e% zL6XsMbiv_sL3=jx@<`n_XA%&mBn?OlNJytNnQ0XI`swp5YZ_jodz|*;3Q=WgFaWRdOD!{Ff6uFdj-nV9doD--Uw6nH0R zXLdHWn}^5O@7Z~;79CJfPkzmL$7QNn(`J;jU<`-zc9+` znws771lL(HK{H)~7d3Csj-DD?pZaHtMQ7B@B_Wkx{Kgewm?%t5-TIf`T$4m0W6VUz zxf~>(ifBaa&HQG`|KV%OCbC?Ws}`$j9h68AwjbI|TvMkJKJ6C1cUPtjP2LbAc~dh- z@IHBQW##C^Ra#n_(Cfb{qcZ0v97$Ul=zIfBs3=?JT0;E*gcIX{?M0s-a?= zIK94>`n7>oL#OTe#yf|VKvLSU<|0l-TI1giHS<=$5CganOG`^zTU!$o6Hm|dUW0?> z*5=B}=w6a}Rkas^mu0BfIDRh6@ZL8vFkA?{?>I*^8w$plo=sN)%JO;$X)a3T|_IF<&4h~L+yeY_+c;{IN!wnMoj+9PU&eK8T&;Q45aQ`?~?BKG#^6;Bb6XXim3KQ zbg+LxW~}(AK?LZ1J3D4BpS~}d0M>+;(B|Rx!p+Ui@-lpHilmVl`9SmCDkn5jT(3u> zFos0`3#YFjoNa5m2wAw?f+vpq_WPHmmfYr%@*VlHtE1Dh6(&q*uR^-{vuv!b%iG(1 zjEs7Yt^!~`)JkfqtHD&JAYqL|Hq1o^@Oxj2-XQ3n+~Rp$m+Bk-bjvo_A<3SE*Tv5h zWA?OMc4(WNF!=&?_+cy_CM+0oh`$yA1WdsW>xS=9QI{BKvj@(Y{>L}>0QO|aQ$mpw zodkJ1GkmXo)p>D)M}5s|>W$b#Jh^K~`roP@cXfzhz#}5gc=CcH?fbHOywiN<_?srZ zNxZQ%3nmxUX8BGJ@V#3%csM&d>*?v4nNi`Qow~N1*Rp2FCq+jK7EOlz*=U9c->I?V zMvXQjnBG|qC;P@X5QYj0dh;KbUHHnsM25_Gw)7EQLP*GPV{Ofhk*dB7DTJl4p0b%v zS76%0g^H4ZWzpByx3{+k@8RyADxA~5X&(tFbTbg!Q|{-)z5J(M=XlYk*+Sl@*ttZ~ zqxPmlay(1zP!*_rCu+a)bB3=)Wa=&SclDR@(EH`7S399%2ch|RpRz%=p`mABke8H<9x$TAj@apIw&B5(XWBl_1 z+_sl>E9tnGf#s?9wsB|9{3rK(O{mOXL0T-h!EU^n17TGo^$d55D*gM}le_M%I(g&Z z>k@vKuslDsSL+XwJvO%`uyyS|Abo`!^?qvc;06`x9bTQQ(mPA)BYY=%u#H^z;Dn{V zw8FyFD#bDR$?5o~j^FFbajCiDzTG8_vg{4>cejgUT9z5@v&*Nkft9Dnbqza#Ocp3I z9Ua}!$Vk+;Z?*LE>peGaB`wd9;lMVMaH2PQt`!RH7uVzQ$Hmea(gZmo zL#7OVJ2am=?wJZG6TIwFv>bVpoPK4$vtiK6q}jc#y-?iE=Kasd=QPCdg|Er5$mrun zn=C7PLI>ZZ`=hLKDCVe}9$NRJb;Fz`=%09x_aP%AC1>1hp!oKDapL@M{{8529W+%kY;a^E$Z)v6kws0iV@vIZ?;!d%t0hDLcP;zp zmm_l|LP;+gh4e4yi|X}1`|VHJGrw0(Y#7_m>(~ZJ&iA@=0TG~Y7})c8s*gG-%1KcF zrR?q7w-j;auCCy+P@1zYxcoOpMt;+kJ-4-X(kNO$*l7x@wF!FDd)!9dmvV{s38s`t zO)vF!yjb1E(9j`MmuQz!>MdU@8)y_Dc**N$dz7DN*YR6e$~Yx<(Flwa?8mu-F|cNF zv2lrvc%AGnA%1!Du#Sc-E6n9@Y=`%RX-jbB$_o@R@EHIst zu`puVG}M@P{sO%@eHzb)vuElnxi0IbJ;kgGF+~ z)pIcJ6*OD<1J`|W;$}1T?jxRG{r13F?LDJA8Tu-2l*fyhFfNR!7w;n{>UMMY1i_P?M}1()!j9=IaLam~5M7(#honZ9jm>3BSt8 zZ*`T?!m`9|IV!m!%1_7nhz3ROfSS3yyemo`B>7?>0>y!#*_~PADP9Z^6IbHwNt#v zWbO@Ow;j1df`flGHv?5DOjLOHytLfd z+z9Xe&7z7T!AsB1{#;5)|4v&nd}IlIT!`SR38{LMU75V?iRA;2s?~eQ*S{>-n?D`@ zjc1RpM+i~{+#qId$OsN?vO|%RhqrQaa+a5M2>R>@X7(>`Zf@`+gGGOd#OFar!TV!02KBYBa^0VX)ea8P8?+~ftE zLS=!KpLfPgN)3GV%_hgglXu={4ugNYN7X2l4H&l@F4$B#xQrK$d^jaqRE~}e4Mfhd zv9UqG1sLbRnI}Pd^Tc&`_c;cVVbVXyU@l(JMP4Ez_*GRgmrVUsD(*304g#eJX=h}> zx-SRrhXzC@vdZQD@9)Tz1-2hT^<7~Ey|#o_46|)oJU@5LkS`iH3w_JyztD$iMii_sUsO|GemIo!(Y>_|q}Tryuh2Jt)RA7o z6*2z(xVFc9*9~i84UgcQk^C#3cU{^oz_PA{yi09AJwsI)D(B!X0%E#XTvP<#Sq@YE zGHi``00u|Gp;j64Q>Ojo>Zx#f%=^EYmkZq6x#~VcN_h3&>uDY=fih=Eh9c(%;tk;T znlvc)8#QT_tCawD0}%lptb>~lglv)gk5N24Q|NAd65K^Edg@zAnGz42)HTNGl?tX#_nwkq^W45auen7pe zuC8YLI{ib121_gqdi@(kqSDWNJLOU%g!0EbMP(y2q>CD!9YHE?mVN#e zN#Pv|vNMuQWShB`@ukX@Z*b2;a$mnVtBH7IC8y+zA>ABTV6kug^de9y_glCep3GGt zNla+>T5<+3n52KZ$zsMuD^LQBTi|VPJo&>!Nf#7bEZF<>qBGe8?B=-Kqxd8_0&Z=tksrGLt>{ zC;_KU1d?dT2#9pjVLCmgO5AU6s5<+ z3GxCbCnp!zt}Ul6LDGPcxw*N0lNJmLnqI-Dgkmfv&YM7l0HRFmm6nxd#gBAya*B+M zv}u2E2FLMtppdF|1`{8P3#%hT@K|HTQ6rlEnql?Xw&-`vn|xWV>QAw-{uSG8sASCt`E9#+ z;G7m5a(8!k;Oqf|W-ArDxAGGc3jtbk&NBBj3|8K#jQ}RWrpP7^7-=!6mrVUehp*6T zVqsJ z0UbADQ`k?yP{6_Y5u;~(TlW>fia8sjjpJw{r#$a89re$CePSq-YN zv9zSaLi2}FB}fBp@H5@ki7Ob~wBi7<>py6v5`u~&Tj5Yo=A0;hSMGQ$`-Q&tv8D zJG<#T=RihAP+=)muAW1yPXDxzt8GT4Aqky$hkymiLq=P=exqmUxYN-gsHvIOYmlQr zMSw1ml$x5Hj2mGUhIaxv8Opd84%ScZHQ2pyZ_>)l$nZM(*Soj3_u?gbPjyEchmE|H zRMS_9aEV;bs27+Fb)Ok&BsVFglCu`a#F*&_dZD<&#i7h$>ai4m|9s|9$Uij}gh>{W z(7XxggO!MW3v>JAAANWlq#10*i$pHdou^!3s1&6?3ydos9v;B)K!s(%l0r>Q{iRHe zA*tpw9eyN|$l6@nZ4KqmyAN=1F)8-lzfS9Jib+T&KS2c+oAd%jNlsi_z|SX0C&a}$ zv=we`guSh3e{^?nIJ-PpprxfH#~fHnM67QPh0c|H97ixtruD_u~9!1wG%+L?;X{93(x|FT`+Z^S94y~A7hyU&BYq%RKQMv9I! z(;P~s#vu@y-Vc1C@IukD6rjFD56PRdaB#4fPv=xrR{qGuWP5YE>2cKBke?qoV6;r` zH<3%}Sl+EPX*D4I?@%KSW}+;hk+*#rk`{u)L*d1Xt+tAakIBUeM`xu-h>TzaA?Y-N zLa-3rH3}OGzaAQ_EMB)z3Iyru$5-!ceAgMZZqRLUt!isq-oK!rqy&XM@Ulr4C{e`W zy-)VMPqTNJe{g+?bq!}HlRe_8MC4li;_z8mC{IKP>V>pc$ki8bvPi62*P(( z_R^M;+WqEs+Y|N{ggt~DCO&$45I3j8gmM(1kehQHRWs|_iw&NmsFyXFzpfr*Sy93T z-$=)^=|cg4)n&BB1-jxHB?iV@Z+*BgNOjkbx&K_3gl8ziex3 zi|=Z=+2hK(NvrLP$f_QvdzDN1FGF_xUgs@JBk~je-S2C!#O3QoR9uGi#?917Qge)| zcN-qk;QR%VBI8L+QRY!l3xoC738b!e zZFD5e!>cqq^oTYLU+ zwIbkpyh>ZqVh<)GP-eR3mX=zoVhc063m0l|1g~j2Y=Wp2aap{Gi06kX<`@|mlV@_r zYmJZ6_R$9(3a5v>@sXOLdGp-wp{Qik?fT}?j&|lq2jq`Vz0lXD_p!YY96FJV$W~;R zuRrAnLs5vZ!x|6HBKUDeOlx*(-&emThBdyRd-{zELcLIb1?YaLpvC6yQBU}$d-U<_?M51rC!(G zfRaPjT;azbjaWuuX$)yjE;xZN}JdANQTGlZV{2kf6O_yVd8!CM7ZeZvYdOrwlRaw|FOPF5(@74 z-ka~$^O)p7>JZ`0{qE-W%ey2Y^dNr@KBq@oW&r`8>*F=lPmK7q%R?*KXu zn~<)x4^5W5nrLrmsy@Z=x$Yj%14De*f?{K18Qlp9BE-A&8RAl?nz$G7A_6V*T3ZvT zU4BRX-GDHU4~auLdLk}+Ln9I5CCNVVp7aF2e*bvgCvdpZ{v;uAJDwvF;(Z)IRJsGj z?Sr5Ewy&};d$d6ki6D`Si>x#JQIz@KbNj!?i1mm}+aSg2X2~$`sfo?^IvjEr8~^VG zK#O{2jSu$r+_y7a=I7^6PfxusYqEfk87bh+pdKdyIvkuHuCQWlWhE0A*A2LC0uQ^N z9PI5gUH_pZNMGDsCyARz7)u?Rx4SI|!`mZ=UN4Hgo+^tA*sFNjudi!TGMJHo3iKp_ zuR*ORE&b>Dw2ty!-Jd44x454CTW<9@YCdY)&hpVInk;Md^TkE~ropRPw$&yjk(jD( z5{>-%?{{vhpFAc{&UTAL;fLBujpPy|!ZzwAq!ey|i!-RwYV*7~UhD4EtE{d*z1hzC zuEFoEXpa)CpQCUMZW-3QcdZxGngZ9I7>BJ_%fQyppY=4*3HhOrs8%WDwraV)5Q2Z& zR(Se7(_=l-D};h2)9o?lF5H-doio*Ubp-l-9*4Bh7kK~Y=H^1si5?GZydA(4h4ntr zqa*OR4q6!)VkCe3edl0n?R3j{IpXx4#}V~%OUunaG^zs@yzZxf<(EUoEJAKlDu?r~ z09D|qzlyAfY;@N#Dk>_I$ECcWK&)8B8{CzF!9l~S&m760B%ow$Y!?Md&)9B4)24N5 zZ0z`=!iVqU$Fp_QZ0c~r$L*CGv8RjH75@6I88~4R{04!Cq9+dvZDG%*jJMF9n#*1| zp=kLcfz#veckemcF6X~KhvEwFi<0gTjP~QMSDTxg234FRwD5KW-wj;J!j&Zz$`jRd zam>kOF+u&=ICsdmVk{NQ1Zab!l_VkmPIAV75jWetL%#D13yivLEkKi2Q8};4dXO!d z@(wbuh9OUw)dCNHX=!P|ON_^@hW6p%;iW1s4<#kc@LVXwFT11hEXa#T_wzi5uwdmz zPxGZ0$kjI|-+fvMG@Ddf<{GsS(Lypx-Cp+(B;(l6Ms5JuH{Wve{tifR^kMdB|u;_H>b%L z*(|p-)z+#|VJ#c1ks<#9n-meCItPK^&X?!u9?TR*rv^`Kas@L zW;j8rkrfWk(@*j$aDC(5S^m^l6}yJbfnKe7r84~PN?T5_a!hP&#w;m-N-tF_5zliw zY}y8$50T=Usn5?X05c+`K7CRzRsoo~NInCwbwNQv;(3ZBF+JPrZ{RyAHKgWo0z^rc z04Vr6Q|57%;et-Y?+FS#Fw^BFp=&mn;axJtk}~AFgVbrexQ3$5JjZx3><34+KCXc3 zzYgAE3(?1FbTNHWH=brTomLrjr(wAu;+gmXOUFF$o{*3|ZI}#`T0o$^vGFra!g5sH>~1 zXuX`@987XKT+~of%2g{VR@q~rfuX}K3+8)t+2xorgu`#9{JS^e&+z92*0QK>rXMj( z=csC#iHutl)?(KNu{aAmk>9>0i;Dwf@*yGuGt3AqKT?37d=cZ?-7N_W86Yh%c;i{P zABdwA;B-|;O8ugskUee&bcGyW$jLzX-!@z_%mF>7A5(iy`_mt|?DMOtPSo3PRYgR) zw}#Vzj=X7qW1qpNk9+u9w6IhMtxx8>izFjjid1f{^#f^yBEhKA8BL9m5vC~dQcw2S zXe$I8HK;}BsCLd0pD;5y*_Jy4jNQRU1JNNYEX+mccEG5*QxEtxKu-?XK|nnM)&)S5 zDhv`r_H_s(%Lwr+cvb)m8SD_KgFr*W%=9#nLaTvj*WB!}^vmfzEe#N&5M8FP-@Wuz zz&(R>;UeLxEQ%6qlNz%82sNMfs%Fmmmk!lrD`h?ekpxRfxJt0T^NMXU8%>k;|$n02OpoOjSV9hR8Wx>G$?fIDU_(3 zy#4a~o*MucLnd4X-8L;0lERB7|tmcxKnOUwt1rpOp1`j9* zu9iKHfQo3n*jNR=8#8l^e9_8uKP}d8@oipHZj(NfCGuSov_4|!F%n6D$xQ81Q3A`1 zai|k2yL)TcaTY>f_gZB)@GfIZh>N?syDwUEgy(|V6;y$L$@sgaP=jJKGZ~Twfh-8p z;m?v1@ZSK%QY*#E0ul65x%yCC=j(~!5knZqGBL!$$kHtpEy__zJ0|y z&1HdNAw3b$alks0c8UMq9rp>H5{7KwwD|e5xV6QD=zfJIk3=aOB zXv3|7CXa6KUw~+GJ6ZIpp}rm+4GoYQ*7LOkW~`?-_XP(?o$wu-7#tXL&6LbuH7#DF z*w{cILIxtA>b_WMdU&{~&-7e3j+_16b>t;v99ghOR%0$vxHACfzD$i4JK`e?3s{wr zOg>F*?WL)u)~XiI_1}>L)YPTqKOsG~yab(saDvpf;pue@B173ENq5_t!3R``)3jVz znD=~b8{MT1FW2!J0~G?1UmIX>RqAhCfWvk_!gB-+2-e`T z4X3ivB1c1BO2y|VN3Om78&Fjs>^V3% zfG$CBkg+4gK)Hj3#l$Hb@rolK5L^Q^q3DK`m>?Jc6R@6MHgHFQ0ahRafDdNhbkCk4 z28DXQDbcty=n>B?*Qf!)Td79P7I093i9t^fD^Fg#69wAM&LBN|ZTcaDs;DJL#_MdG zho0O#cPU7k``vDe?Y9y49)dmhfY~2g%x1b<)OcT;GC;)+3Lydl;C=`12F@XBkbmEL z)4k%S71qXIm!f2tQWS9~uDl7-Q_IWCGb=R)<+ru-zT}T1rZaCw3JkFMMXt%ahS2+h5N&jp^|iE z%Od^!OV8WH!Qo*(x6=*a-&*#0dI0hwShxh6#pKk~@Ch>x*Y%r#m@VS3swH^A*|DsO zoc^sY`m!S;S6Gx-yAUWur^bD5`wH|lL;;B|DoXy-r*%$H11hPhQ6xxf&`p~vWwEk! z87rAujkGaWCy!#;?l|t@$Y-FsS+2_!{bY1x{nC2u-}|qyV(t!O^moDkqQZbtVL<^k zR(NJ+<|`Zq0xo+aGqWEc9+av11l@drKsb7}^Szh_p+-!&;3k7L0l4xd#s>>av+JcJ z@0q`UYrXoSV*eQ=NINY-abLpeG68}MS)!7Sn>cE{Xnx2~fmP#o5B%!c8R&ocF}X`X zL`1}%^1JVMsT%F~K3d?ulaX0Jan=2ME-gVFw2Lw=cGUBqfx~FNO8?)I9xaO78)lzz zUx$s;M|ItWqp^qXtEVztyw-`akH4pAIU7!sev!hEyVg$tkW*4t1{O-7A%X}9qA%*J zSAYYrf+uVAT66-CcqUtTZS;zGT zno}Ad2iijDFvEZ&EHNd;?e=^(H8u6{@DR97jEqeu)kYkx{S$h%e|j;40d8lm3-#8+ zBY(KPZqHBF`#xpz&Mhvsc->tBSC5gg@%ZlfsF^ZWw+H2iVUhZKBk%G=#`QcOZaxsN zG|x5)%t>xT2t{y%L7BIoQA^TZ2t^C$kdc!=j}-%V z`XvS-uj9^G!u0f?aMTR>hQ$)n&q0e*U<=ed?`93ZZ*FZ7@_Sx`*@!kRC*pwR0(p|d zdhy4&S^q|I5JTvT)#Go?=K2$?`%$7`XoO5cjSCJnsbVQi%(p|qvL$@V;^63r2p>N+ zB?WXqgMHXfqzBd^+E4KaLU0hFFkkYmkEW&NoncKe)Xht~Z_kpI_&;bS6Iqt-5|biI z+1s%abi$C^E@FHKMTYXp1q1}>=?@m0985>jQ<&3Up`uQgYLH@vg|Z0xlS4pR?9;ON zHT0DpZlWX^XyAHQ#z-zME`Xyd^80s*JVo@7fZQE`FvU%lLUV12WevxrmIaN5{tZZO z?7f|phR2T-U9`R$8&d#%mIX3Nz>ES92lU)#=Y#o5ec-JB9NX;yg=jebRO!f7kUVo9 zJ)Z56{0dNO%3I13qyxAFc|>{C_|teEeit*Ft`1)umXR7}-pc9n}p z(zzz5rc}WdOih)}QBYGeBoZP361FL5u&0PSn5&@##p3&5dxz?w8;1?I!1)2m4#5xh zxIG8$p$xqA!lT3fYGq#B``TF+%+1a#Pszz%ILyR5N1iS1b!=srQc%gC+yx-lp3P9~ zzU?N55F;Tr#aJ@tbjz|lN2+82M^TkE2 zGPS`q`!^&Iibg5qgJyJ4geYQ56y`DQ@zqN~DVnX62?w*25z90+EtqgcNybl|atwsp z4Gmml#oxSlLQP0#++v~F#xFQd~d^?Ke?UE*6Fl;cs8ftl}<1{~kE{uSyXqvc&=m>JQ6N`26Jy z{`)WsmK1OpL9zw_z=#De;YSd~v+=5#-=YadE9U*CU|uM?Gs!}ELfVO-Z|Hba1_y(H zb8Kv^(s(ej?(2+2-8|1a%FP?s*`wtD_MJ#JYFS^u3^Qj;36#8+We>2>KA-)-f7W7X z-ATX2Ozue`t<7gGWW=ITpwug#3yMl-Cnq3u>`qRcb7x4BkyLj;W`JFBzuPc(^M<-_ z6Ab?u%Z@pitv2zBLc(y937-KC6WUGon~@yLW|o%E!3HdVQgMr+*Y%tB(Zv<^0N+&B zNNBKt5*rkvNTWgg?|9a+xtqt-<@+c@V+(v!^stG-K)z}$QdrY@0q7|wi`9=Su4uTL zD3CGC%M;IICMOR{ekpRiS?YSwZ8vmO`R$w)T@zI2P!_r5==9jqO~xg-x46MdZ+kJ} zUj=tq73?m^Omfj-A>0^LQE_oK6%=g#EmnSbc%Xm$fAtnuu&XaOQqS+bbQe+c`}sETuzI?J>4ZX2tX`MK|`<{|r1OTm%Ke zAR^5OFezwj^YQYg$HnETl_YsMK~4t4r}=sRxyU(Aspt}>;^TemXB)EZXw|!nh1^!Z zYHsUS!jKgyImYpEj2}aoMkL(#9B~2+4u$iFB?yzmL9sLT&XKnMI}|G#-9!n! zkxlUx%PWl)0VZ!;G*H!519%BKL);AOYn@PxrCOZ6!uhr@z9I`{R4cvIC!XoqZ1BF? znlr!1^l9_?WLy|8A#og;PFYv!jh4O)q*9^B^T$yVz$?$MD-^q1s%3W>S}9S zPJX`!cs`BYiiUxq?E|83Otz0n_9UuZWP%tC(#0>+J1Au02N?^Vel}Lof=yL(-|(w? zF`L|Y+SM_2Ic(fu{pSXLCJ?8<6)U(cq#eG{2|--^0+egn*{(O9J*ZRsbUP_6*E1`g zW52T9S3_226Z7JLxRKhQIbM>@$?o1`1$Kt27SL(n2zRE=;^8 zz=#Ykf)RDpHo?H2N$hgDZ~vfS!W2sr$x6rw1JEJU$rLKFf3KoO8FY3ts%QB$s98Mg zWV;YLOUhwrNFq53XlUr{Z0v21xBGy4eE061u7SK@fSE+zM<=##TI3S4xCE7!TUoPa;{P_s6D|^+jH#wI!(aqdfXNCirFwagwUM|V3Lw= z#PIr<3H5=j7Q8I~KMax|sBQAJ>^f1O4NlpTJ17TrPb#-M! zL%>=AP!FKw*+2kt)~Ey+*Hg5rI*NMlTP0~$+T1BbLi>?5EGw~1K~LY}hmV0pjHyB~ zrs!b(!5tP901LrPZV* zEh(lpU$fR;Ui+^-RyC!wPW_ZZ7X;g8W=Z&sf$ajgEx=FPSXnLAeN9p;5rg(v)V1C2 zl>igo*XdH?F9GTtv?;aIN_yfY0cJyqv78`6@JVv9bTwc*0iM zs}SlifQhot5V1Myo){aQPX6`9Ck?IJ*G*#LA1E{P!9N1lJ9$?WxTfWc7OEV!ZM+}$ z!Aw`av!RcGj{wSEE)WJo6kb7upn!>IktVMgR>SzjQ?hqgSQb(6n+)Ih!pKh_*QDw* zz>=UHtg6ZmXlqApcZYyX=;i=uT zi~N80Yz0k!FdSg70@!?9z4H`@0aceCZ#DYR=Dvvc`L_cd6k-^*`g(t+9f&&Z4+l0t z&5t3KV7Hn-kITC6F{tYK6btV!h#jD2pmI<)l-ba{!ZkI`V}Jr79c(QpC%x1FhBLV| z_J{jz0h};V03v~ibad5ze>zAJM~xrJaE1Szrxfla$!hce!E^p+#izzW*aJe^edScETMtx%?o-rs~=mCIqF;C{QNT8lh@ ze->WOwnv{u7bBJ%oc3!mFdn4M>n>fMGPqYPlUNOn>TUIv^`AN5nV9`}a#=iGl@erz z6+sl)CT8H#0VZ6;4Pc>am!Z_nSw0IA<_!x;|K3$fQte#1d$kEt`S+H8CWr_`@NO4? zMj4cB95qgazI@ZDAxY=G`TgliA7;C`{d8+`wV3W^f85o%(sun{1SP`P%!i^Q0nPGY z(A4-MaXFZj=r02qmgjoPoy-NbbO8$^hhhm<^m?%?{WQkaWY**P^~pMq^MAlXvvM=y zLg;UjJ7~J(_?a#`SjuSjY;a`dAAKVIXTsa=Huol&afg{#IL@Et0z6f&eSfe3WD9V zEBf&TSR-EIljClQpb7bZHyX{tXMZ`K_8;q>5aE~-$~9b$zN!k$=iD9>Cx7)W&8wPu zqo}r3KqYDf7riBLy>!2+b&&*y>N-1LF4(kt0g+Z+*Q*Z9l>$lvhQR%?;dj2o^mNY< ziCphDFyt|_4YV>9Iz2XLxpXT+mcstHw}Fl{ZoR2Fy1k&We|x)|i5Cn_e;%>Mlp>2B zvR>iyu+InjSY(_f9jxy7&CcTQS64GH1nveHM|CWI&`JHyOM1MXc*@M8kcwd6EI>&P zbUL=LWO=@dfef_Xk3C~&y2mSxea1xZt5%b##OT+`qaVpJ!yG|tTZLxBVTQ}{T!YO@ z8qk*jn_-&iW^#9Vpj6B%PlqQ2#j?ZGlyMY!JKd%@n7))jwK*V0hn-PxkEj3`?9Ed^ zhtWSM4~Dm0SiXUSn>CpIAyv$gBFBd#N3S|bef4l+OFA^S6e>+(G8JWt{~=!Sv>baHYT zlM>th60iR16)fAahs)Y2+ zeuGK%@67#5z7nm8LA|zcrc$RLmEvRH*`w8@YLv~tRA@T=FT6s6c%)!td>K27qIsk9 z<*Pc9t?-iJ1nGijgbUnpw&0`!I{)cr)W_P)Y!;y1+l&3@Sl$zlEu;qqQf;sVQX31I58J zn5Cu;OPTl`fG}acQL56kfb$;_csd1x4^xkRE+%}$U_P;(qLN!t=h9YGr#TLa@v!#I zf*-p0W&KNy_<$riLz8_2!9VcAoU+8kv>al!)f&C?4fEhZ86dd;i=KeM6Y%>2mmnyb z=;`SJ>;OGLpthHHKT4q@SFg}=yptGqo~#|NUY(!`G$4!XW2v~REWv6*pt>H+M0$F*D zDjAor%6qKUrKTfolE|zf3U4Q>eOgEP!`yJ1N;!9MR4(SsY%r_hmkj8l5kv5Y1$6e0 zj(!5jaAX8%clfV_{=)XS1EGBd zei<*2CCb!f$S?yspKWg7!0G;SeCGS}^NoPf7T8L)7+mIP!BbjbaZuur&U{5zI>+fP ze71!H`K-{v)f&Y;ixUaT&qAQ30v}EYDmGqQ%Nisc1GwME`SPIups~)sBzv zF=9#5))jM zqrOS`FJAq|2hIq6`VLfKR-4 z9G5AC=lD9d4<7%`OG&v6?%(!k)=GnoE})SC+y-U#UnwaS8mGAnL;Yjhgj0|l+x&q_M-O5v2K>^^2 z=z%JwRO~oc(*epUO*dz zPXQ)7?eFb9`ys)X1#K0IidBH52P`dm$Xg5vODIGbTB?X_gs?Rh-|92;?*x$z)i1O! zJ391h0_aLCFKR{vjtVkh6###L3 zFsR1>cAm*|JNN|5^q8OmyN<0LmoFkfL`?D2Nf~#8aksY z@s?zeTc6I~QDd_@x zycsEq&f+kVrf5EMjr2?xhF|w6m{G}n`AU+32$-I1UwEnh`V{?Ej&+l0kh zDWy?4MfP#F+Tw|+MwKURVA^P!Ijos@Zm4v?LSKny3>mdneJ}?Zl`6FC-@DFi|FMbf z8lTF9usO>}sWEF;{t5x=l6&Wq@IX((|10jy|DoL9KaQpb$xtK7v5i5= zQgRS8)F6k(OtwPSREn}CBQp&VbK+z&$x`B=UA7{!4(d#iC635GO<7`)vDH|z-!BaTtpYIgeADfilt1(z@F^8hu&F7g$hg%TwQwTS!VV4?>7zEXu^?Mrl+{Q!1(G-?33;Q5cwhc zfo>fDJp$emF+K2!I!bgq2Y&)YNGe_|Y*%8MxCWulStldw&g!?i$;R8EPpnksHm}e% zd%F(pl3a7xtTs7`&j`A-v0egnztNMgTH+o z&&*%#8BBFdXWdTEmD_5?Ha0%+F*?X+`R6k$<@A%bT^#M~fz9A?w9}JgT;C|^9(HAA zt!YK+y}hAhW?%O! z*{#nj0_PXg^ZnZwwk$i+n}uID|JX-}oo%;gE~u=9N9X8IXXe;UZ1s~Phm%;?NRQ;$ z?Y7r&4~R7WBA(f!zjefR@9c%MDl`<>86G$m-n85HnWyXK#^>`PMS*S%2L`X;oK%Xh zx4F4_YUUTI{J7HN&~o%LooM)m+k)YhOS+F#72jmEd?k++hN5jHH`eTuQz9kRn%BoL zdB4?d;UH+iVpk6qbZes%A*6%mI@P9RY3XFwWAESkC5B5}S4ezWpnm0eop#c(6a>R2 ztTN0#?*prdDM`I^oD*V_YW3QG_L2%sz6?bNrRnv_Py!+LKk28X4IDl}<`FeKmVkEV z8Cy3pggP)$v+r&(x^l+*qE}sOQpp#$P7L-?Z8_dwWHPKt@ zXLR?1w@{&TCVL^-3m=_k+gd~M3!m5X4s_4Vd_1CVDPsV`-{B7y^ktKbZwx5c)X;!B zQ2)-lW!g-1d-A=&r$ViT^gWSFDplBro!w^&5tM#{_#vT>=uPaqF#(t~JoLy$RtoBW z4zG_|Y^o;L@NkcuwT{*M7@S*LRn(?uSN6ub(TV|bJYxPU$fWrt)Xv-3tLfTFUuZ*9@9KhNI2BNjPn z?kY}X&j=!EYccKA*3xwze`eV3*^o!|;Z`*Xc%ujCi@5a_K{aJ&=;ejG&e~Uixef>j z0Kg|`sOG@B9WmySRC`I3$Frz}?xo+2>AAIQ-WKL#TKY!k*Etk@jrG-Hx^PtctGa)L zEi3iiDUj_pZrq4CBqc3vWN4U$r=~qTciT=wMx4M+dCXSs4P`Sq@9|j?rgzqse^AYy zgdF)gT=N}OTr9ah9o@|P4lvpfUC8h3?1T*M7Yp|3`2*Mnm9SF=9}I7J?!_sYw2g2C z`>^Vc8P9cEcwqtbQvNIS_nZSoXYW8v40t0Trxzfvf^!1tKQJ(`rKM#dsusF5?v%+k zWHl5HF~@+v?R()*h9wB1suF)UQ=tCXY<4!D3J7emS1p8LfdK(?0s$0}Hj3fGm9tf! z2~{&jE7;Jyx}+ooYF{=?Wnhc~-~3$Yc5wkSSK%>1Bn~Z;jVMFKk})aH&dvZD{0_RY zv2n$3xZcZir(9fIAVz`r^AR<9-)CnXTz$@}T!Y5TZ;yLj)-X0+Vqe_=2Q4fpn4Fr@ z(bw14)&@WnFrGMLa%1Bmp=wzMQ8WKTWmN0V6HZPxHXN|LR99DnEi5M|r?_jv3L{I3 zW5cjg{Q`{(x;Ji|&~ze^+PF;&GgDJ=io%-#6O)nzb8{FBCS)gqjw?eEQa$vBD?{@^ zt##D_RRd-fP+#$Q{Dae{GZhp-6s4J4^zLuOBrF~p$JiREspY}S+`YfAZz_Tc`VKgeLPJC8bUKZO zD~eB05#h&K`>dT4hw-v0uA%CrHQXvPWywb6%C9gQpu~diopN&V`l4JaJg^@|!d`)H z4}nYOhw%^-81tliroV$$mY#mx!;uwaaL#b&fV31-0x7AZ32&yi!T?0m9RQ3bSjFH2 z2ZveN!NCE*99X~XyL!c%a^e>oK3h7#MF0(;b0Qpo6`;+NZ)w5PFgQHy?d4S$_O%(j zm$^rGOzl&POf`fOAu~b=27oa#-Op z;X-@|4BY9dsez+zZePA%bF>xf-!*m}qTZQlih2u=c?G#Kka73=*o^f8mr zJjm97KGxLSh=$VgXfO*gc^9j_RKvb-<^x z(j=3(eJVxGWVR@e6Hk%T#b9mi9&`fZ>woIhW9O&vn{8U8`K2W?i3FYhSy&iT(3I60 zITv4 zhxrjgnz>$j5@)@1OCNFyu1rX=Vj$N8DN-WahZH$~4Vr~3=3WtDA3m${zni!}&3%~c zCaNF)#zLzWqb^()k=x-f=dyOmH<30mx{_Q9x-eJ|kMWu^-$CTm zp}E)1JK`L;)&F*V{Al(qk5_Kz{+9dhbGh$}ZI-R}LZp9uV#w``r23=>sCqvi6sslu zABFwLM_uJ)Q#vD8pMNna&uHh`y*^nNvp>CT`c2O2)SJeC-|jV!w;pCO7Deyg#FCYj zZv_}J-aT-7agiP!gT4O!1-!s>9P_Nbd(HDSiDlPl{i9cezacHR5yR7se1#uv_`22YV}TLl|i3>}plIa^J7M9*7ZZ&H_1P{35z_77pJaf6|!I)BPrd~&?E ztx!gdHg)xqN(u9*a!Lj(H_GJa8)W@jF)uG`uJ6XDeRlgAIofAcN@Toq|Jr|FyLPSQ z{@3p46EE6i)V?C9nvuO&}Jy*Q@8XwT)oxhWv(4iaEM&_rh~1?>^7eUZRK07Yt;C zl#Y}4i2gIPKr*dH23OY5;j7Hk_jv;*zA_9(e8Qrr+1|BRPbOay>I zpI99O6@%4a{sln+e?Gpj)c9UrPtC5PELD7L{Jt@v>uMGNP!*IXEdy5NU8qQ zWzF+l#SvhH@KjklSx!vPd?va0C?+1JM;2${^q7M-4y zyhkvIF25MIP<$(HMb?K4lkgV@oGJbE>6PYYo9Op08e`AMZEox1WPd&8U!)Y<-KLot zQ#C%yh=i~25>s>I3Z>GINoTc|j^oDQshBX_adp3c~dtBpT4k1=cx z>n&cQRZXI_f)P}0*T`Oh810s-Z>u++I?bDQDqN6nLS$taChb0=wRzFGWVXXR#-=0m zKzDJ%gQ2RiIRk|3Irmy(Q&XIDnkpRo#Ikm++XK`hdiEMuXfEQTUWO9s6$kr?5kaV& zPSgZ2>et#DC&CtEze?t~KzUML{!!ONEM8nhM}*bDt5RY1Om0Dl;gp$qC9a!X=R1BK pMaNep=Ei^D{^xlAZ=3ShMHxux?h+UG2}topY^_OFMFgMN{{!=$Ls9?$ literal 0 HcmV?d00001 diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/整体转换.png b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/整体转换.png new file mode 100644 index 0000000000000000000000000000000000000000..b34b45733168e94b0898fd6a04694460b4b30089 GIT binary patch literal 60793 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 literal 0 HcmV?d00001 diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/相机转图像.png b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/Note/Images/相机转图像.png new file mode 100644 index 0000000000000000000000000000000000000000..155d4ee1bdea56d9f99a594e89d728828cb0dc86 GIT binary patch literal 8576 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坐标系之间的转换:** + +- 世界坐标系转相机坐标系 + + ![image-20240528142049084](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240528142049084.png) + + 这里的transform函数代表具体的转换过程,很好理解,从世界坐标系转成相机坐标系时,需要进行两种操作:旋转和平移:![image-20240528142259790](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240528142259790.png) + + 还可以继续用齐次坐标来简化,即把三维坐标增加一个维度,变成四维,第四维的值设为1: + + ![image-20240528142325700](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\世界转相机.png) + + 上面的第二个矩阵就是我们常说的**外参矩阵**。 + +- 相机坐标系转图像坐标系 + + 有了相机坐标系的坐标,再根据相机成像的原理,即可推断出对应的成像平面的图像坐标: + + ![ ](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\成像原理.png) + + 根据相似三角形的性质,很容易得出下面关系: + + ![image-20240528142626714](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240528142626714.png) + + 写成矩阵乘的形式如下:![image-20240528142644836](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\相机转图像.png) + +- 图像坐标转像素坐标 + + 像素坐标系和图像坐标系都在成像平面上,只是各自的原点和度量单位不一样。图像坐标系的原点为相机光轴与成像平面的交点,通常情况下是成像平面的中点或者叫principal point。图像坐标系的单位是mm,属于物理单位,而像素坐标系的单位是pixel,我们平常描述个像素点都是几行几列。所以这二者之间的转换如下:其中dx和dy表示每一列和每一行分别代表多少mm,即1pixel=dx mm。 + + ![image-20240528143447600](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\图像转像素.png) + + ![image-20240528143532858](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240528143532858.png) + + 上式中就包含了我们常说的**相机的内参矩阵(intrinsics)**,单独提出来如下所示: + + ![image-20240528143035233](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240528143035233.png) + +![image-20240528172144383](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\四大坐标系.png) + +![image-20240528172159999](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\整体转换.png) + +**3.双目测距原理及步骤** + +(1)去畸变以及立体校正:消除相机镜头的畸变效应,使得图像中的物体保持准确的几何形状,提高图像处理的精度和准确性;校正立体摄像机的图像,使得左右摄像机的图像在几何上保持一致,以便后续的立体视觉处理。校正过程包括旋转和平移操作,以及重投影矩阵Q的计算,以确保左右摄像机的图像具有相同的视图和几何结构。 + +(2)立体匹配:找出两个相机中相互匹配的点以便后续计算视差以及深度。 + +(3)识别得到左右目中,待测物体的中心像素点坐标。 + +(4)计算距离(深度信息) + +**4.测距过程中使用到的矩阵** + +测距过程使用到的矩阵除了上面1中提到的相机内外参两个矩阵,还包括有: + +- 畸变系数矩阵:用于相机标定过程中的去畸变。 + +- 重投影矩阵Q:用于将视差图转换为3D点云。举例如下: + $$ + \left( + \begin{matrix} + 1 & 0 & 0 & -c_x \\ 0 & 1 & 0 & -c_y \\ 0 & 0 & 0 & f \\ 0 & 0 & -1/T_x & (c_x - c^{'}_x)/T_x + \end{matrix} + \right) + $$ + 其中cx与cy代表相机主点(相机主光轴与像平面的交点即是主点)的图像坐标;f为重投影后的焦距;Tx相反数等于基线距离;$(c_x - c^{'}_x) $ 代表了左右摄像头图像中心的差距。 + +- Z矩阵:从 3D 点云中提取的深度图,表示每个像素到相机的距离。 + +#### 2.2 主要内容 + +- detection.cc + + **关联头文件**:dection.h + + **主要功能**:对输入的视频帧进行目标检测。 + + **主要函数**: + + - ``` Dection()``` :整个构造函数的作用是在创建`Detection`对象时加载模型,并初始化相关的属性和参数,以备后续的使用; + - `detect_result_group_t Detection::outputParse(cv::Mat netInputImg)` :接收一个图像作为输入,对其进行预处理,推理和后处理,最终的到检测结果保存到detect_result_group_t结构体中并返回。 + +- **ranging.cc** + + **关联头文件**:ranging.h + + **头文件重要参数**:目标检测模型、相机内外参及畸变系数、图像校正矩阵、重投影矩阵、深度图等。 + + **主要功能**:利用两个摄像头拍摄的左右图像,通过图像校正、模板匹配和三维重建等技术来检测目标并计算其距离、宽度、高度和角度信息。系统的主要功能包括图像校正、像素坐标转相机坐标、模板匹配、水平估计以及从双目图像中提取测距信息。 + + **主要函数**: + + ##### 1. `Ranging::rectifyImage` + + ```cpp + void Ranging::rectifyImage(Mat &oriImgL, Mat &oriImgR) + ``` + + - **作用**: 对输入的左图像 `oriImgL` 和右图像 `oriImgR` 进行重映射校正,去除图像畸变。 + + - **参数:** + + - `oriImgL`: 左图像的引用。 + + - `oriImgR`: 右图像的引用。 + + - **步骤:** + + 使用OpenCV的remap函数对左右图像去畸变:`remap` 函数是 OpenCV 中用于图像重映射的函数,它可以根据给定的映射关系对图像进行变换: + + ```cpp + remap(oriImgL, oriImgL, mapX1, mapX2, cv::INTER_LINEAR);//左照片重映射 + remap(oriImgR, oriImgR, mapY1, mapY2, cv::INTER_LINEAR);//右照片重映射 + ``` + + - `oriImgL`:这是原始的左侧图像,需要进行畸变校正和旋转校正。 + - `mapX1` 和 `mapX2`:这两个参数是 `initUndistortRectifyMap` 函数计算得到的映射数组,用于指定图像的重映射关系。`mapX` 存储了水平方向的映射关系,`mapY` 则存储了垂直方向的映射关系。 + - `cv::INTER_LINEAR`:这是插值方法的选项之一。在这里使用的是双线性插值方法,它会根据相邻像素的值进行加权平均,以便在重映射过程中获得更平滑的结果。 + ##### 2. `Ranging::pic2cam` + + ```c++ + std::vector Ranging::pic2cam(int u, int v) + ``` + + - **作用**: 将像素坐标 `(u, v)` 转换为相机坐标 `(x, y)`。 + - **参数:** + - `u`: 像素坐标的横坐标。 + - `v`: 像素坐标的纵坐标。 + - **返回值**: 相机坐标 `(x, y)` 的向量。 + - **依据公式:**相机坐标与像素坐标之间的转换:(u-u0)*f/fx;(v-v0)*f/fy + + ##### 3. `Ranging::muban` + + ```c++ + std::vector Ranging::muban(Mat &left_image, Mat &right_image, const int *coordinates) + ``` + + - **作用**: 使用模板匹配的方法根据右图像的指定区域在左图像中找到匹配的位置。 + + - **参数:** + + - `left_image`: 左图像的引用。 + - `right_image`: 右图像的引用。 + - `coordinates`: 感兴趣区域的坐标数组 `[x1, y1, x2, y2]`。 + + - **返回值**: 匹配点的坐标向量 `[maxLoc.x, maxLoc.y]`。 + + - **重要库函数:**muban函数核心部分使用了 OpenCV 中的 `matchTemplate` 函数,用于在目标图像中寻找模板图像的匹配位置,并计算匹配程度。 + + ```cpp + matchTemplate(target, tpl, result, TM_CCOEFF_NORMED); + ``` + + - `target`:这是目标图像,即需要在其中寻找模板匹配的图像。 + - `tpl`:这是模板图像,即用于匹配的参考图像。 + - `result`:这是输出的匹配结果图像,用于存储匹配程度。它的大小通常会比目标图像小,因为匹配操作会在目标图像上滑动模板,并在每个位置计算匹配程度,因此结果图像会比目标图像的尺寸小。 + - `TM_CCOEFF_NORMED`:这是匹配方法的选择参数。在这里使用的是归一化的相关系数匹配方法。该方法会在目标图像上滑动模板,并计算每个位置的相关系数(匹配程度),最终将相关系数归一化到 [0, 1] 的范围内。归一化的相关系数越接近于 1,表示匹配程度越高。 + + `matchTemplate` 函数的作用是在目标图像中寻找模板图像的匹配位置,并计算匹配程度。在这个例子中,使用的是归一化的相关系数匹配方法,可以有效地检测出目标图像中与模板图像相似的区域,并提供匹配程度的评估。 + + ##### 4. `Ranging::horizon_estimate` + + ```c++ + void Ranging::horizon_estimate(Mat& img, Mat& bboxs, int k) + ``` + + - **作用**: (单目系统)计算目标框中的每个点的距离和角度,并存储在 `Z` 矩阵中。 + + - **参数:** + - `img`: 输入图像的引用。 + + - `bboxs`: 包含目标框坐标的矩阵。 + + - `k`: 目标框的索引。 + + - **重要函数:**要进行深度估计,重要的一步需要使用到OpenCV的canny()函数进行边缘检测: + + canny()边缘检测过程: + 1).Canny边缘检测只算子是John F. Canny于 1986 年开发出来的一个多级边缘检测算法。2.)Canny 的目标是找到一个最优的边缘检测算法,最优边缘检测的含义是:好的检测-算法能够尽可能多地标识出图像中的实际边缘。好的定位-标识出的边缘要尽可能与实际图像中的实际边缘尽可能接近。最小响应- 图像中的边缘只能标识一次,并且可能存在的图像噪声不应标识为边缘。 + + 3).算法步骤:①灰度转换-cvtColor②高斯模糊-GaussianBlur。以平滑图像,滤除噪声。③计算梯度-Sobel/Scharr + ④非最大信号抑制,以消除边缘检测带来的杂散响应, + 高低阈值输出二值图像,检测来确定真实的和潜在的边缘,最后,通过抑制孤立的弱边缘最终完成边缘检测。 + + ```cpp + cvtColor(tpl, grayImage, COLOR_BGR2GRAY); + GaussianBlur(grayImage,grayImage,Size(5,5),0); + Canny(grayImage, edge, 120, 180, 3); //提取边缘,获取与地面接触点 + ``` + + - `grayImage`:这是输入的灰度图像,即需要进行边缘检测的图像。 + - `edge`:这是输出的边缘图像,用于存储检测到的边缘信息。 + - `120` 和 `180`:这两个参数分别是 Canny 边缘检测算法中的低阈值和高阈值。在检测边缘时,像素的梯度值高于高阈值被认为是强边缘,低于低阈值但高于低阈值的像素被认为是弱边缘,低于低阈值的像素被认为是非边缘。 + - `3`:这是 Sobel 算子的大小,用于计算图像的梯度。在这里,大小为 3 表示使用 3x3 的 Sobel 算子进行梯度计算。 + + ##### 5. `Ranging::getInfo` + + ```c++ + void Ranging::getInfo(Mat &imgL, Mat &imgR, Mat &detBoxes, Mat &info) + ``` + + - **作用**: (双目系统)从右图像的所有目标框中提取测距信息,包括目标中心距离、物体宽度、高度、与相机光轴之间的水平夹角。 + + - **参数:** + + - `imgL`: 左图像的引用。 + + - `imgR`: 右图像的引用。 + + - `detBoxes`: 包含目标框坐标的矩阵。 + + - `info`: 存储测距信息的矩阵。 + + - **函数过程:** + + 针对右图像中每个目标框的边界进行模板匹配得到水平视差-->定义视差矩阵并根据重投影矩阵q得到每个像素点的深度即立体重建过程-->得到每个像素点距离相机的距离-->根据相似三角形等原理计算物体与相机光轴之间的水平夹角、物体宽度、高度。 + + - **重要函数:** + + ```cpp + reprojectImageTo3D(disp_matrix, threedImage, q, false); + ``` + + `reprojectImageTo3D` 函数利用视差图和 Q 矩阵,通过对每个像素点进行上述的齐次坐标变换,最终将二维的视差图转化为三维的坐标点云。 + + 对于一个在图像中的像素点 (𝑢,𝑣)和其视差值 𝑑,该点在相机坐标系下的三维坐标 (𝑋,𝑌,𝑍)可以通过以下过程计算: + + 1. **基本关系**:在立体相机系统中,两个相机之间有一个基线距离 𝐵。两个相机的投影平面上的点之间的视差 𝑑 与深度 𝑍 的关系为: + + ![image-20240603151211728](D:\robotkernal-uestc\Code\MowingRobot\pibot_ros\ros_ws\src\upbot_vision\Note\Images\深度计算公式.png) + + 其中,𝑓*f* 是相机的焦距,𝐵*B* 是两个相机的基线距离。 + + 2. **像素坐标到相机坐标**: 假设图像的中心点坐标是 (𝑐𝑥,𝑐𝑦),然后像素点 (𝑢,𝑣)在图像坐标系中表示,相应的相机坐标 (𝑋,𝑌,𝑍) 可以通过以下公式得到: + + ![image-20240603151302765](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240603151302765.png) + + ### 三维坐标计算 + + 利用视差图和 Q 矩阵,可以得到像素点的三维坐标。 + + ```cpp + X = (u * q11 + v * q12 + d * q13 + q14) / (u * q41 + v * q42 + d * q43 + q44) + Y = (u * q21 + v * q22 + d * q23 + q24) / (u * q41 + v * q42 + d * q43 + q44) + Z = (u * q31 + v * q32 + d * q33 + q34) / (u * q41 + v * q42 + d * q43 + q44) + ``` + + ### 公式推导过程 + + - 对于 X 坐标: + + ![image-20240603151559322](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240603151559322.png) + + - 对于 Y 坐标: + + ![image-20240603151609412](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240603151609412.png) + + - 对于 Z 坐标: + + ![image-20240603151617966](C:\Users\dd\AppData\Roaming\Typora\typora-user-images\image-20240603151617966.png) + + ##### 6. `Ranging::get_range` + + ```c++ + std::vector Ranging::get_range() + ``` + + - **作用**: 获取双目相机的图像帧,对图像进行处理并返回测距信息。 + - **返回值**: 包含右图像、目标框和测距信息的向量。 + + ##### 7. `Ranging::Ranging` + + ```c++ + Ranging::Ranging(int index, int imgw, int imgh) + ``` + + - **作用**: 类的构造函数,初始化各类矩阵和相机参数。 + + - **参数:** + + - `index`: 摄像头的索引。 + + - `imgw`: 图像宽度。 + + - `imgh`: 图像高度。 + + - **重要库函数:**在初始化相机参数的过程中需要使用到OenCV的以下库函数: + + `initUndistortRectifyMap` 函数的作用是根据相机的内部参数和畸变系数,以及校正变换的参数,计算出一个映射关系。这个映射关系可以将畸变的图像映射为经过校正后的图像,以消除镜头畸变和校正图像的旋转,使得校正后的图像中的物体保持准确的几何形状。 + + ```c++ + initUndistortRectifyMap(cam_matrix_left.t(), distortion_l, r1, p1, imgSize, CV_32F, mapX1, mapX2); + ``` + + - `cam_matrix_left.t()`:这是左摄像机的相机矩阵的转置。相机矩阵是一个 3x3 的矩阵,它包含了相机的内部参数,如焦距、主点位置等信息。`.t()` 是转置操作符,用于将相机矩阵进行转置操作。 + + - `distortion_l`:这是左摄像机的畸变系数,它包含了径向畸变和切向畸变的参数,用于描述相机镜头的非理想特性。 + + - `r1` 和 `p1`:这两个参数是矫正变换的输出矩阵。`r1` 是旋转矩阵,用于将图像校正为水平方向;`p1` 是投影矩阵,用于将校正后的图像映射到一个新的视图中。 + + - `imgSize`:这是原始图像的大小,用于指定待校正图像的尺寸。 + + - `CV_32F`:这是映射数据的数据类型,指定为 `CV_32F` 表示映射数据将使用 32 位浮点数进行存储。 + + - `mapX1` 和 `mapX2`:这两个参数是输出的映射数组,它们用来存储 `initUndistortRectifyMap` 计算出的水平方向的映射关系。 + + `stereoRectify` 函数,用于校正立体摄像机的图像,以便在后续的立体视觉处理中获得准确的深度信息。 + + ```cpp + stereoRectify(cam_matrix_left.t(), distortion_l, cam_matrix_right.t(), distortion_r,imgSize, rotate.t(), trans, r1, r2, p1, p2, q); + ``` + + - `cam_matrix_left.t()` 和 `cam_matrix_right.t()`:分别是左侧和右侧摄像机的相机矩阵的转置。相机矩阵包含了相机的内部参数,如焦距、主点位置等信息。 + - `distortion_l` 和 `distortion_r`:分别是左侧和右侧摄像机的畸变系数,用于描述相机镜头的非理想特性。 + - `imgSize`:原始图像的大小,用于指定待校正图像的尺寸。 + - `rotate`:旋转矩阵,用于将左右摄像机的图像进行校正,使得它们的光学轴平行。 + - `trans`:平移矩阵,用于将左右摄像机的图像进行校正,使得它们的光学中心在同一水平线上。 + - `r1` 和 `r2`:分别是左侧和右侧摄像机的旋转矩阵,用于将左右摄像机的图像进行校正,使得它们的光学轴平行。 + - `p1` 和 `p2`:分别是左侧和右侧摄像机的投影矩阵,用于将左右摄像机的校正后的图像映射到一个新的视图中。 + - `q`:深度映射矩阵,用于将图像中的像素点映射到三维空间中,并计算出每个像素点的深度信息。 + + `stereoRectify` 函数的作用是校正立体摄像机的图像,使得左右摄像机的图像在几何上保持一致,以便后续的立体视觉处理。校正过程包括旋转和平移操作,以及投影矩阵的计算,以确保左右摄像机的图像具有相同的视图和几何结构。最终的深度映射矩阵 `q` 可以用于将图像中的像素点映射到三维空间中,并计算出每个像素点的深度信息,用于后续的立体视觉分析和深度估计。 + +- main.cc + + **主要功能**:通过摄像头获取图像数据,并使用自定义的测距算法对图像中的障碍物进行距离测量。测量结果以自定义的ROS消息类型发布,用于机器人导航或其他需要环境感知的应用。 + + **主要函数:** + + 1. **宏定义** + + ```c++ + #define ANGLE_TO_RADIAN(angle) ((angle)*3141.59 / 180000) // 角度转化为弧度 + ``` + + - 将角度值转换为弧度值,便于后续计算。 + + 2. **全局变量** + + ```c++ + Ranging r(40, 640, 480); + std::queue> frameInfo; + std::mutex g_mutex; + ``` + + - `Ranging r(40, 640, 480)`:初始化测距对象,假设摄像头索引为40,分辨率为640x480。 + - `std::queue> frameInfo`:存储图像帧信息的队列。 + - `std::mutex g_mutex`:用于同步访问队列的互斥锁。 + + 3. **`void *ranging(void *args)`** + + ```c++ + void *ranging(void *args) { + ros::Publisher dis_pub_; + ros::NodeHandle nh; + dis_pub_ = nh.advertise("ceju_info",10); + + while (true) { + std::vector result = r.get_range(); + cv::Mat info = result[2]; + pibot_msgs::dis_info_array dis_array; + + if (!info.empty()) { + for (int i = 0; i < info.rows; i++) { + if (info.at(i,0) > 0 && info.at(i,0) < 200) { + pibot_msgs::dis_info data; + data.distance = info.at(i,0); + data.width = info.at(i,1); + data.height = info.at(i,2); + data.angle = info.at(i,3); + dis_array.dis.push_back(data); + std::cout << data.distance << std::endl; + } + } + dis_pub_.publish(dis_array); + } + + g_mutex.lock(); + while (!frameInfo.empty()) frameInfo.pop(); + frameInfo.push(result); + g_mutex.unlock(); + } + } + ``` + + - 该函数是一个独立的线程函数,持续从摄像头获取图像数据,并进行障碍物测距。 + - 使用`r.get_range()`获取测距信息,并将结果存入`pibot_msgs::dis_info_array`中,通过ROS话题发布。 + - 使用互斥锁同步访问全局队列`frameInfo`,确保线程安全。 + + 4. **`int main(int argc, char \**argv)`** + + ```c++ + int main(int argc, char **argv) { + ros::init(argc, argv, "stereo"); + ros::NodeHandle nh; + pthread_t tids[1]; + int ret = pthread_create(&tids[0], NULL, ranging, NULL); + pthread_join(tids[0], NULL); + + return 0; + } + ``` + + - 初始化ROS节点`ros::init(argc, argv, "stereo")`。 + - 创建并执行测距线程`pthread_create(&tids[0], NULL, ranging, NULL)`。 + - 使用`pthread_join(tids[0], NULL)`等待测距线程结束,确保主程序在测距线程结束前不会退出。 + +### 三.代码优化 + +#### 1.运行速度慢 + +#### 可能存在的时间瓶颈 + +- **模板匹配** (`muban`) + + ```cpp + std::vector disp_pixel = muban(imgGrayL, imgGrayR, coordinates); //模板匹配 + ``` + + - **原因**: 模板匹配通常是一个计算密集型操作,特别是当模板和搜索区域较大时,计算时间会显著增加。 + + - **优化建议**: 可以尝试缩小模板区域,从减小匹配区域,加快匹配速度。 + +- **重投影到3D** (`reprojectImageTo3D`) + + ```cpp + Mat disp_matrix = Mat(imgGrayL.rows, imgGrayL.cols, CV_32F, Scalar(disp_pixel_x)); + Mat threed_pixel_xyz, threedImage; + reprojectImageTo3D(disp_matrix, threedImage, q, false); //2d->3d + ``` + + - **原因**: `reprojectImageTo3D`将2D图像重新投影到3D空间,这个过程涉及大量的矩阵运算,可能会比较耗时;而且代码中是针对图像中所有像素点在每个循环中都计算三维矩阵,由于图像分辨率的原因会导致矩阵很大,从而影响计算速度。 + - **优化建议**:可以针对图像中的目标区域计算三维矩阵。 + +- **计算欧式距离** (`forEach` 操作) + + ```cpp + threed_pixel_xyz.forEach([](float &value, const int *position) { value = sqrt(value); }); + ``` + + - **原因**: 遍历每个像素并计算平方根操作对于大图像来说是非常耗时的。 + - **优化建议**: 可以针对图像中的目标区域计算深度信息。 + +- **繁琐的矩阵和向量操作** + + ```cpp + std::vector ltPoint = pic2cam(x1, y1); + std::vector rbPoint = pic2cam(x2, y2); + float w1 = sqrt(pow((threedImage.at(y2, x1)[0] - threedImage.at(y2, x2)[0]), 2) + + pow((threedImage.at(y2, x1)[1] - threedImage.at(y2, x2)[1]), 2) + + pow((threedImage.at(y2, x1)[2] - threedImage.at(y2, x2)[2]), 2)); + ``` + + - **原因**: 计算距离和角度涉及到多个矩阵和向量操作,这些操作在大图像和多目标的情况下会非常耗时。 + + - **优化建议**: 尽量减少冗余计算,优化数学运算部分,必要时使用并行计算或SIMD指令集加速。 + +- **Image Rectification (图像校正)** + + 图像校正涉及重映射操作,可能是时间消耗较大的部分: + + ```cpp + rectifyImage(lframe, rframe); + ``` + + **优化建议**: + + - 确保校正的映射矩阵 (`mapX1`, `mapX2`, `mapY1`, `mapY2`) 只计算一次,不在每帧都重新计算。 + - 如果可以,尝试对输入图像进行裁剪,只对感兴趣的部分进行校正。 + +#### 2.优化空间(代码规范性) + +##### 2.1 线程管理 + +- **减少锁的使用**:使用标准库提供的线程安全队列来替代手动加锁。 + +- **代码结构优化**:将线程函数独立成类成员函数,增加代码的可读性和可维护性。 + +- **合理使用多线程**:如果某些部分不需要频繁执行,可以考虑使用条件变量来减少无效的循环。 + + ```cpp + #include + #include + #include + #include + #include + #include + #include + #include "upbot_vision/ranging.h" + #include "pibot_msgs/dis_info.h" + #include "pibot_msgs/dis_info_array.h" + + #define ANGLE_TO_RADIAN(angle) ((angle) * 3.14159 / 180.0) //角度转化为弧度 + + class RangingSystem { + public: + RangingSystem() + : r(40, 640, 480), nh(), dis_pub_(nh.advertise("ceju_info", 10)) { + startThreads(); + } + + ~RangingSystem() { + running = false; + cv.notify_all(); + if (ranging_thread.joinable()) ranging_thread.join(); + if (process_thread.joinable()) process_thread.join(); + } + + private: + Ranging r; + ros::NodeHandle nh; + ros::Publisher dis_pub_; + std::queue> frameQueue; + std::mutex mtx; + std::condition_variable cv; + std::thread ranging_thread; + std::thread process_thread; + bool running = true; + + void startThreads() { + ranging_thread = std::thread(&RangingSystem::rangingTask, this); + process_thread = std::thread(&RangingSystem::processTask, this); + } + //负责从 Ranging 对象中获取数据,并将其推入一个线程安全的队列。 + void rangingTask() { + while (running) { + std::vector result = r.get_range(); + { + std::lock_guard lock(mtx); + if (frameQueue.size() > 0) frameQueue.pop(); // 保持队列最新的帧 + frameQueue.push(result); + } + cv.notify_one(); + } + } + //负责处理队列中的数据并发布。 + void processTask() { + while (running) { + std::vector result; + { + std::unique_lock lock(mtx); + cv.wait(lock, [this] { return !frameQueue.empty() || !running; }); + if (!running) break; + result = frameQueue.front(); + frameQueue.pop(); + } + + cv::Mat info = result[2]; + pibot_msgs::dis_info_array dis_array; + if (!info.empty()) { + for (int i = 0; i < info.rows; ++i) { + if (info.at(i, 0) > 0 && info.at(i, 0) < 200) { + pibot_msgs::dis_info data; + data.distance = info.at(i, 0); + data.width = info.at(i, 1); + data.height = info.at(i, 2); + data.angle = info.at(i, 3); + dis_array.dis.push_back(data); + std::cout << data.distance << std::endl; + } + } + dis_pub_.publish(dis_array); + } + } + } + }; + + int main(int argc, char **argv) { + ros::init(argc, argv, "stereo"); + RangingSystem rangingSystem; + ros::spin(); + return 0; + } + + ``` + + - **线程安全队列**:使用 `std::condition_variable` 和 `std::unique_lock` 来保证队列的线程安全,避免手动使用互斥锁和条件变量时可能出现的错误。 + + - **条件变量**:用条件变量来管理线程的等待和通知,避免忙等,提高效率。 + + - **类封装**:将相关函数封装到一个类中,增强代码的可读性和可维护性。 + + - **线程管理**:在析构函数中停止线程并等待其结束,确保资源的正确释放。 + +##### 2.2 注释 + +​ 对于代码中的部分变量解释不够清晰,影响代码的可读性。 + +#### 3.通过双目视觉计算深度的核心原理优化深度计算算法 + +**1.省去模板匹配** + +利用rk3588的两个npu分别进行检测,取得识别得到的目标中心的像素坐标,进行计算视差,再而通过重投影矩阵然后计算深度。 + +**2. 缩小模板匹配的搜索区域** + +尝试缩小待匹配模板的搜索区域,从而减小计算压力,提高运行速度。 + +**3.引入跟踪算法** + +加入跟踪算法,在检测后面加上跟踪框,针对部分置信度较高的框的,可以省去模板匹配,直接使用上一帧目标框的视差值。 diff --git a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md b/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md deleted file mode 100644 index 97a9793..0000000 --- a/Code/MowingRobot/pibot_ros/ros_ws/src/upbot_vision/upbot_vision阅读笔记.md +++ /dev/null @@ -1,196 +0,0 @@ -### 一.目录结构 - -include:包含头文件 - -model:存放用于目标检测的权重文件 - -src:源文件 - -### 二.主要源文件 - -- detection.cc - - **关联头文件**:dection.h - - **主要功能**:对输入的视频帧进行目标检测。 - - **主要函数**: - - - ``` Dection()``` :整个构造函数的作用是在创建`Detection`对象时加载模型,并初始化相关的属性和参数,以备后续的使用; - - `detect_result_group_t Detection::outputParse(cv::Mat netInputImg)` :接收一个图像作为输入,对其进行预处理,推理和后处理,最终的到检测结果保存到detect_result_group_t结构体中并返回。 - -- ranging.cc - - **关联头文件**:ranging.h - - **头文件重要参数**:目标检测模型、相机内外参及畸变系数、图像校正矩阵、重投影矩阵、深度图等。 - - **主要功能**:利用两个摄像头拍摄的左右图像,通过图像校正、模板匹配和三维重建等技术来检测目标并计算其距离、宽度、高度和角度信息。系统的主要功能包括图像校正、像素坐标转相机坐标、模板匹配、水平估计以及从双目图像中提取测距信息。 - - **主要函数**: - - ##### 1. `Ranging::rectifyImage` - - ```cpp - void Ranging::rectifyImage(Mat &oriImgL, Mat &oriImgR) - ``` - - - **作用**: 对输入的左图像 `oriImgL` 和右图像 `oriImgR` 进行重映射校正,去除图像畸变。 - - **参数:** - - `oriImgL`: 左图像的引用。 - - `oriImgR`: 右图像的引用。 - - ##### 2. `Ranging::pic2cam` - - ```c++ - std::vector Ranging::pic2cam(int u, int v) - ``` - - - **作用**: 将像素坐标 `(u, v)` 转换为相机坐标 `(x, y)`。 - - **参数:** - - `u`: 像素坐标的横坐标。 - - `v`: 像素坐标的纵坐标。 - - **返回值**: 相机坐标 `(x, y)` 的向量。 - - ##### 3. `Ranging::muban` - - ```c++ - std::vector Ranging::muban(Mat &left_image, Mat &right_image, const int *coordinates) - ``` - - - **作用**: 使用模板匹配的方法在左图像中找到目标框的位置。 - - **参数:** - - `left_image`: 左图像的引用。 - - `right_image`: 右图像的引用。 - - `coordinates`: 目标框的坐标数组 `[x1, y1, x2, y2]`。 - - **返回值**: 匹配点的坐标向量 `[maxLoc.x, maxLoc.y]`。 - - ##### 4. `Ranging::horizon_estimate` - - ```c++ - void Ranging::horizon_estimate(Mat& img, Mat& bboxs, int k) - ``` - - - **作用**: 估计目标物体的水平距离和角度。 - - **参数:** - - `img`: 输入图像的引用。 - - `bboxs`: 包含目标框坐标的矩阵。 - - `k`: 目标框的索引。 - - ##### 5. `Ranging::getInfo` - - ```c++ - void Ranging::getInfo(Mat &imgL, Mat &imgR, Mat &detBoxes, Mat &info) - ``` - - - **作用**: 从左、右图像中提取测距信息,包括目标的距离、宽度、高度和角度。 - - **参数:** - - `imgL`: 左图像的引用。 - - `imgR`: 右图像的引用。 - - `detBoxes`: 包含目标框坐标的矩阵。 - - `info`: 存储测距信息的矩阵。 - - ##### 6. `Ranging::get_range` - - ```c++ - std::vector Ranging::get_range() - ``` - - - **作用**: 获取双目相机的图像帧,对图像进行处理并返回测距信息。 - - **返回值**: 包含右图像、目标框和测距信息的向量。 - - ##### 7. `Ranging::Ranging` - - ```c++ - Ranging::Ranging(int index, int imgw, int imgh) - ``` - - - **作用**: 类的构造函数,初始化各类矩阵和相机参数。 - - **参数:** - - `index`: 摄像头的索引。 - - `imgw`: 图像宽度。 - - `imgh`: 图像高度。 - -- main.cc - - **主要功能**:通过摄像头获取图像数据,并使用自定义的测距算法对图像中的障碍物进行距离测量。测量结果以自定义的ROS消息类型发布,用于机器人导航或其他需要环境感知的应用。 - - **主要函数:** - - 1. **宏定义** - - ```c++ - #define ANGLE_TO_RADIAN(angle) ((angle)*3141.59 / 180000) // 角度转化为弧度 - ``` - - - 将角度值转换为弧度值,便于后续计算。 - - 2. **全局变量** - - ```c++ - Ranging r(40, 640, 480); - std::queue> frameInfo; - std::mutex g_mutex; - ``` - - - `Ranging r(40, 640, 480)`:初始化测距对象,假设摄像头索引为40,分辨率为640x480。 - - `std::queue> frameInfo`:存储图像帧信息的队列。 - - `std::mutex g_mutex`:用于同步访问队列的互斥锁。 - - 3. **`void \*ranging(void \*args)`** - - ```c++ - void *ranging(void *args) { - ros::Publisher dis_pub_; - ros::NodeHandle nh; - dis_pub_ = nh.advertise("ceju_info",10); - - while (true) { - std::vector result = r.get_range(); - cv::Mat info = result[2]; - pibot_msgs::dis_info_array dis_array; - - if (!info.empty()) { - for (int i = 0; i < info.rows; i++) { - if (info.at(i,0) > 0 && info.at(i,0) < 200) { - pibot_msgs::dis_info data; - data.distance = info.at(i,0); - data.width = info.at(i,1); - data.height = info.at(i,2); - data.angle = info.at(i,3); - dis_array.dis.push_back(data); - std::cout << data.distance << std::endl; - } - } - dis_pub_.publish(dis_array); - } - - g_mutex.lock(); - while (!frameInfo.empty()) frameInfo.pop(); - frameInfo.push(result); - g_mutex.unlock(); - } - } - ``` - - - 该函数是一个独立的线程函数,持续从摄像头获取图像数据,并进行障碍物测距。 - - 使用`r.get_range()`获取测距信息,并将结果存入`pibot_msgs::dis_info_array`中,通过ROS话题发布。 - - 使用互斥锁同步访问全局队列`frameInfo`,确保线程安全。 - - 4. **`int main(int argc, char \**argv)`** - - ```c++ - int main(int argc, char **argv) { - ros::init(argc, argv, "stereo"); - ros::NodeHandle nh; - pthread_t tids[1]; - int ret = pthread_create(&tids[0], NULL, ranging, NULL); - pthread_join(tids[0], NULL); - - return 0; - } - ``` - - - 初始化ROS节点`ros::init(argc, argv, "stereo")`。 - - 创建并执行测距线程`pthread_create(&tids[0], NULL, ranging, NULL)`。 - - 使用`pthread_join(tids[0], NULL)`等待测距线程结束,确保主程序在测距线程结束前不会退出。