From 61a46c7dc37a36eb654ed6dd13de60001951878e Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Thu, 18 Dec 2025 18:01:40 +0800 Subject: [PATCH 01/26] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=AE=BA=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_Vehicle_Perception/README.md | 9 +++++++++ src/Unmanned_Aerial_Vehicle_Perception/main.py | 0 2 files changed, 9 insertions(+) create mode 100644 src/Unmanned_Aerial_Vehicle_Perception/README.md create mode 100644 src/Unmanned_Aerial_Vehicle_Perception/main.py diff --git a/src/Unmanned_Aerial_Vehicle_Perception/README.md b/src/Unmanned_Aerial_Vehicle_Perception/README.md new file mode 100644 index 0000000000..4c2cc530cd --- /dev/null +++ b/src/Unmanned_Aerial_Vehicle_Perception/README.md @@ -0,0 +1,9 @@ +无人车感知是自动驾驶系统的基础,相当于车辆的 “眼睛” 和 “耳朵”,核心是通过各类传感器采集环境数据,再借助算法处理信息,最终实现环境理解与自身定位,为后续决策和控制提供依据,以下是其关键组成部分的详细介绍: +核心感知硬件 +不同传感器特性互补,共同构建起多维度的感知体系,具体信息如下: +传感器类型 工作原理 核心优势 典型应用场景 +激光雷达 发射激光脉冲并接收反射信号,生成 3D 点云图 厘米级测距精度,可构建三维环境模型,360° 全方位扫描 高精地图绘制、复杂障碍物识别、精准定位 +车载摄像头 采集二维图像,通过图像算法做模式识别 还原接近人眼的环境细节,可识别交通标志、车道线等 交通信号灯识别、车道线检测、行人及车辆分类 +毫米波雷达 发射 10 - 300GHz 的电磁波,基于多普勒效应测距测速 抗雾、雨、尘能力强,全天候工作,测距远 自适应巡航、碰撞预警、盲区探测、自动紧急制动 +超声波雷达 发射 40kHz 超声波,通过时间差计算距离 近距离测距精度高(误差 1 - 3 厘米),成本低 倒车辅助、自动泊车等低速近距离障碍物探测 +GNSS/IMU 系统 GNSS 提供卫星定位,IMU 测量加速度和角速度 GNSS \ No newline at end of file diff --git a/src/Unmanned_Aerial_Vehicle_Perception/main.py b/src/Unmanned_Aerial_Vehicle_Perception/main.py new file mode 100644 index 0000000000..e69de29bb2 From 9d3ecab4530819dfe08acc182db7e0dc07df21e9 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Thu, 18 Dec 2025 18:37:10 +0800 Subject: [PATCH 02/26] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=AE=BA=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/src/Unmanned_Aerial_Vehicle_Perception/README.md b/src/Unmanned_Aerial_Vehicle_Perception/README.md index 4c2cc530cd..857385dd29 100644 --- a/src/Unmanned_Aerial_Vehicle_Perception/README.md +++ b/src/Unmanned_Aerial_Vehicle_Perception/README.md @@ -1,9 +1,41 @@ -无人车感知是自动驾驶系统的基础,相当于车辆的 “眼睛” 和 “耳朵”,核心是通过各类传感器采集环境数据,再借助算法处理信息,最终实现环境理解与自身定位,为后续决策和控制提供依据,以下是其关键组成部分的详细介绍: -核心感知硬件 -不同传感器特性互补,共同构建起多维度的感知体系,具体信息如下: -传感器类型 工作原理 核心优势 典型应用场景 -激光雷达 发射激光脉冲并接收反射信号,生成 3D 点云图 厘米级测距精度,可构建三维环境模型,360° 全方位扫描 高精地图绘制、复杂障碍物识别、精准定位 -车载摄像头 采集二维图像,通过图像算法做模式识别 还原接近人眼的环境细节,可识别交通标志、车道线等 交通信号灯识别、车道线检测、行人及车辆分类 -毫米波雷达 发射 10 - 300GHz 的电磁波,基于多普勒效应测距测速 抗雾、雨、尘能力强,全天候工作,测距远 自适应巡航、碰撞预警、盲区探测、自动紧急制动 -超声波雷达 发射 40kHz 超声波,通过时间差计算距离 近距离测距精度高(误差 1 - 3 厘米),成本低 倒车辅助、自动泊车等低速近距离障碍物探测 -GNSS/IMU 系统 GNSS 提供卫星定位,IMU 测量加速度和角速度 GNSS \ No newline at end of file +一、无人机感知的核心定义​ +无人机感知是指无人机通过搭载的各类传感器,获取自身状态、周围环境及目标对象的信息,并进行处理、分析与理解的过程,是无人机实现自主飞行、任务执行的 “眼睛” 和 “大脑”,核心目标是解决 “我在哪、周围有什么、要做什么” 三大问题。​ +二、核心感知技术分类​ +1. 环境感知技术​ +视觉感知:基于摄像头(单目 / 双目 / 多目)捕捉图像,通过计算机视觉算法(如目标检测、语义分割、SLAM)识别障碍物、地形、交通标识等,优势是成本低、信息丰富,适用于低空近距离场景。​ +激光雷达感知:发射激光束扫描环境,通过接收反射信号计算距离,生成高精度点云地图,具备抗强光、抗雾尘能力,测量精度达厘米级,是室外复杂环境下的核心感知方案。​ +毫米波雷达感知:利用毫米波频段电磁波探测目标,可穿透雨、雾、雪等恶劣天气,能同时获取目标距离、速度、角度信息,适用于高速移动目标检测和全天候飞行场景。​ +红外热成像感知:捕捉目标红外辐射,转化为热成像图,不受光照条件限制,可在黑夜、浓烟环境中识别活体、热源目标,常用于搜救、安防监控。​ +2. 自身状态感知技术​ +惯性导航(IMU):通过陀螺仪、加速度计实时测量无人机角速度和加速度,推算位置、速度和姿态,响应速度快,但存在累积误差,需与其他技术融合。​ +卫星导航(GNSS):包括 GPS、北斗、GLONASS 等,通过接收卫星信号定位,户外定位精度高(普通场景米级,RTK 技术可达厘米级),是无人机远程飞行的基础。​ +气压高度计:测量大气压力计算飞行高度,成本低、功耗小,用于辅助高度控制,弥补卫星导航在遮挡场景下的不足。​ +三、关键感知组件​ +​ +组件类型​ +典型设备​ +核心作用​ +图像传感器​ +高清摄像头、鱼眼相机​ +视觉图像采集、场景还原​ +距离传感器​ +激光雷达、超声波传感器​ +障碍物距离测量、地形测绘​ +定位传感器​ +GNSS 模块、IMU 惯性测量单元​ +位置定位、姿态控制、速度计算​ +数据处理单元​ +嵌入式芯片(FPGA/MCU)​ +传感器数据融合、算法实时运算​ +​ +四、主要应用场景​ +测绘勘探:通过激光雷达 + 视觉感知生成三维地形模型,应用于国土测绘、矿山勘探、道路规划。​ +安防监控:红外 + 视觉感知实现全天候目标跟踪、异常行为检测,用于城市安防、边境巡逻。​ +农业植保:视觉 + 毫米波雷达感知作物长势、识别病虫害,辅助精准施肥、农药喷洒。​ +物流配送:多传感器融合感知规避障碍物、定位配送点,实现末端无人配送。​ +应急救援:红外感知在地震、火灾现场探测被困人员,视觉感知传回现场画面,辅助救援决策。​ +五、技术发展趋势​ +多传感器融合:结合视觉、激光雷达、毫米波雷达优势,提升复杂环境下感知的可靠性和鲁棒性。​ +AI 赋能感知:通过深度学习算法优化目标识别、语义分割精度,实现端到端智能感知。​ +轻量化与低功耗:传感器和处理单元小型化、低功耗设计,适配微型无人机应用。​ +抗干扰能力强化:优化传感器抗电磁干扰、抗恶劣天气性能,拓展极端环境适用范围。​ From bb89af0113d15b0cda3c5a9719590d34b1e05276 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Thu, 18 Dec 2025 18:45:07 +0800 Subject: [PATCH 03/26] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E8=AE=BA=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E6=A0=BC=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 58 +++++++++++-------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/src/Unmanned_Aerial_Vehicle_Perception/README.md b/src/Unmanned_Aerial_Vehicle_Perception/README.md index 857385dd29..dfb4a34275 100644 --- a/src/Unmanned_Aerial_Vehicle_Perception/README.md +++ b/src/Unmanned_Aerial_Vehicle_Perception/README.md @@ -1,34 +1,44 @@ -一、无人机感知的核心定义​ -无人机感知是指无人机通过搭载的各类传感器,获取自身状态、周围环境及目标对象的信息,并进行处理、分析与理解的过程,是无人机实现自主飞行、任务执行的 “眼睛” 和 “大脑”,核心目标是解决 “我在哪、周围有什么、要做什么” 三大问题。​ -二、核心感知技术分类​ -1. 环境感知技术​ +# **一、无人机感知的核心定义​** + +### 无人机感知是指无人机通过搭载的各类传感器,获取自身状态、周围环境及目标对象的信息,并进行处理、分析与理解的过程,是无人机实现自主飞行、任务执行的 “眼睛” 和 “大脑”,核心目标是解决 “我在哪、周围有什么、要做什么” 三大问题。​ + +## 二、核心感知技术分类​ + +#### 1. 环境感知技术​ + 视觉感知:基于摄像头(单目 / 双目 / 多目)捕捉图像,通过计算机视觉算法(如目标检测、语义分割、SLAM)识别障碍物、地形、交通标识等,优势是成本低、信息丰富,适用于低空近距离场景。​ 激光雷达感知:发射激光束扫描环境,通过接收反射信号计算距离,生成高精度点云地图,具备抗强光、抗雾尘能力,测量精度达厘米级,是室外复杂环境下的核心感知方案。​ 毫米波雷达感知:利用毫米波频段电磁波探测目标,可穿透雨、雾、雪等恶劣天气,能同时获取目标距离、速度、角度信息,适用于高速移动目标检测和全天候飞行场景。​ 红外热成像感知:捕捉目标红外辐射,转化为热成像图,不受光照条件限制,可在黑夜、浓烟环境中识别活体、热源目标,常用于搜救、安防监控。​ -2. 自身状态感知技术​ + +### 2. 自身状态感知技术​ + 惯性导航(IMU):通过陀螺仪、加速度计实时测量无人机角速度和加速度,推算位置、速度和姿态,响应速度快,但存在累积误差,需与其他技术融合。​ 卫星导航(GNSS):包括 GPS、北斗、GLONASS 等,通过接收卫星信号定位,户外定位精度高(普通场景米级,RTK 技术可达厘米级),是无人机远程飞行的基础。​ 气压高度计:测量大气压力计算飞行高度,成本低、功耗小,用于辅助高度控制,弥补卫星导航在遮挡场景下的不足。​ -三、关键感知组件​ -​ -组件类型​ -典型设备​ -核心作用​ -图像传感器​ -高清摄像头、鱼眼相机​ -视觉图像采集、场景还原​ -距离传感器​ -激光雷达、超声波传感器​ -障碍物距离测量、地形测绘​ -定位传感器​ -GNSS 模块、IMU 惯性测量单元​ -位置定位、姿态控制、速度计算​ -数据处理单元​ -嵌入式芯片(FPGA/MCU)​ -传感器数据融合、算法实时运算​ -​ -四、主要应用场景​ + +### 三、关键感知组件​ + +* ​ +* 组件类型​ +* 典型设备​ +* 核心作用​ +* 图像传感器​ +* 高清摄像头、鱼眼相机​ +* 视觉图像采集、场景还原​ +* 距离传感器​ +* 激光雷达、超声波传感器​ +* 障碍物距离测量、地形测绘​ +* 定位传感器​ +* GNSS 模块、IMU 惯性测量单元​ +* 位置定位、姿态控制、速度计算​ +* 数据处理单元​ +* 嵌入式芯片(FPGA/MCU)​ +* 传感器数据融合、算法实时运算​ +* ​ + +### 四、主要应用场景​ + 测绘勘探:通过激光雷达 + 视觉感知生成三维地形模型,应用于国土测绘、矿山勘探、道路规划。​ 安防监控:红外 + 视觉感知实现全天候目标跟踪、异常行为检测,用于城市安防、边境巡逻。​ 农业植保:视觉 + 毫米波雷达感知作物长势、识别病虫害,辅助精准施肥、农药喷洒。​ From a530fc4874d1314a11b6816e38fa1ff3ef2e6a48 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 16:12:13 +0800 Subject: [PATCH 04/26] =?UTF-8?q?=E5=B0=86readme=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=B9=B6=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../README.md | 51 --- .../main.py | 0 src/Unmanned_Aerial_car_Perception/README.md | 276 ++++++++++++++ src/Unmanned_Aerial_car_Perception/img.png | Bin 0 -> 6029 bytes src/Unmanned_Aerial_car_Perception/img_1.png | Bin 0 -> 6029 bytes src/Unmanned_Aerial_car_Perception/main.py | 337 ++++++++++++++++++ 6 files changed, 613 insertions(+), 51 deletions(-) delete mode 100644 src/Unmanned_Aerial_Vehicle_Perception/README.md delete mode 100644 src/Unmanned_Aerial_Vehicle_Perception/main.py create mode 100644 src/Unmanned_Aerial_car_Perception/README.md create mode 100644 src/Unmanned_Aerial_car_Perception/img.png create mode 100644 src/Unmanned_Aerial_car_Perception/img_1.png create mode 100644 src/Unmanned_Aerial_car_Perception/main.py diff --git a/src/Unmanned_Aerial_Vehicle_Perception/README.md b/src/Unmanned_Aerial_Vehicle_Perception/README.md deleted file mode 100644 index dfb4a34275..0000000000 --- a/src/Unmanned_Aerial_Vehicle_Perception/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# **一、无人机感知的核心定义​** - -### 无人机感知是指无人机通过搭载的各类传感器,获取自身状态、周围环境及目标对象的信息,并进行处理、分析与理解的过程,是无人机实现自主飞行、任务执行的 “眼睛” 和 “大脑”,核心目标是解决 “我在哪、周围有什么、要做什么” 三大问题。​ - -## 二、核心感知技术分类​ - -#### 1. 环境感知技术​ - -视觉感知:基于摄像头(单目 / 双目 / 多目)捕捉图像,通过计算机视觉算法(如目标检测、语义分割、SLAM)识别障碍物、地形、交通标识等,优势是成本低、信息丰富,适用于低空近距离场景。​ -激光雷达感知:发射激光束扫描环境,通过接收反射信号计算距离,生成高精度点云地图,具备抗强光、抗雾尘能力,测量精度达厘米级,是室外复杂环境下的核心感知方案。​ -毫米波雷达感知:利用毫米波频段电磁波探测目标,可穿透雨、雾、雪等恶劣天气,能同时获取目标距离、速度、角度信息,适用于高速移动目标检测和全天候飞行场景。​ -红外热成像感知:捕捉目标红外辐射,转化为热成像图,不受光照条件限制,可在黑夜、浓烟环境中识别活体、热源目标,常用于搜救、安防监控。​ - -### 2. 自身状态感知技术​ - -惯性导航(IMU):通过陀螺仪、加速度计实时测量无人机角速度和加速度,推算位置、速度和姿态,响应速度快,但存在累积误差,需与其他技术融合。​ -卫星导航(GNSS):包括 GPS、北斗、GLONASS 等,通过接收卫星信号定位,户外定位精度高(普通场景米级,RTK 技术可达厘米级),是无人机远程飞行的基础。​ -气压高度计:测量大气压力计算飞行高度,成本低、功耗小,用于辅助高度控制,弥补卫星导航在遮挡场景下的不足。​ - -### 三、关键感知组件​ - -* ​ -* 组件类型​ -* 典型设备​ -* 核心作用​ -* 图像传感器​ -* 高清摄像头、鱼眼相机​ -* 视觉图像采集、场景还原​ -* 距离传感器​ -* 激光雷达、超声波传感器​ -* 障碍物距离测量、地形测绘​ -* 定位传感器​ -* GNSS 模块、IMU 惯性测量单元​ -* 位置定位、姿态控制、速度计算​ -* 数据处理单元​ -* 嵌入式芯片(FPGA/MCU)​ -* 传感器数据融合、算法实时运算​ -* ​ - -### 四、主要应用场景​ - -测绘勘探:通过激光雷达 + 视觉感知生成三维地形模型,应用于国土测绘、矿山勘探、道路规划。​ -安防监控:红外 + 视觉感知实现全天候目标跟踪、异常行为检测,用于城市安防、边境巡逻。​ -农业植保:视觉 + 毫米波雷达感知作物长势、识别病虫害,辅助精准施肥、农药喷洒。​ -物流配送:多传感器融合感知规避障碍物、定位配送点,实现末端无人配送。​ -应急救援:红外感知在地震、火灾现场探测被困人员,视觉感知传回现场画面,辅助救援决策。​ -五、技术发展趋势​ -多传感器融合:结合视觉、激光雷达、毫米波雷达优势,提升复杂环境下感知的可靠性和鲁棒性。​ -AI 赋能感知:通过深度学习算法优化目标识别、语义分割精度,实现端到端智能感知。​ -轻量化与低功耗:传感器和处理单元小型化、低功耗设计,适配微型无人机应用。​ -抗干扰能力强化:优化传感器抗电磁干扰、抗恶劣天气性能,拓展极端环境适用范围。​ diff --git a/src/Unmanned_Aerial_Vehicle_Perception/main.py b/src/Unmanned_Aerial_Vehicle_Perception/main.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md new file mode 100644 index 0000000000..dd2969b6e0 --- /dev/null +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -0,0 +1,276 @@ +# ???????????????????? + +## 1 ?? + +### 1.1 ??????? + +????????????????????????????????????????????????????????[1]?????????????????????????????????????????????????????????[2]???????????????????????????????????????????????????????????????????????????????????????????????????????????[3]? +??????????????????????????????????????????????????????????LiDAR??????????????????????????????????????????????IMU????????????????????GPS/RTK???????????????????????????????????[4]????????????????????????????????????????????????????????????????????????????????????????????????????L2-L4?????????????????????????? + +### 1.2 ??????? + +#### 1.2.1 ???????? + +????????????????????????????????????????????????????????????[5]?????????????[6]??????????????????????????????????????????????????YOLO???Faster R-CNN?2D?????????????????[7-8]???BEV?Bird's Eye View???????BEVFormer?DETR3D?3D????????LiDAR????????????????????????????[9-10]? +LiDAR?????????????????????????????????????LiDAR?????????RANSAC???????[11]?????????????????DBSCAN???????????[12]????????????????????PointNet???????????[13]?????????????????LiDAR?????????????????????????????????????????? +???????????????????????IMU??????????????100Hz??????????????????????????????GPS/RTK??????????????????????????10Hz?????????[14]?????????EKF??????????UKF??IMU?GPS???????[15]????????????????????SLAM????RTAB-Map[16]???????????????GPS?????????? + +#### 1.2.2 ???????? + +?????????????????????????????????????????????[17]????????????????????????LiDAR????????[18]??????????????????????????????????SIFT?????FPFH??????????????[19]???????????????????????????????????[20]?????????????????? +??????????????????????????????????????EKF/UKF?????????????FusionNet[21]?PointPillars[22]?????EKF?????????????????????????????????????????????????????????????????????????????????????????[23]? + +#### 1.2.3 ??????? + +??????????????????NVIDIA Jetson???Mobileye EyeQ?????????????????????????[24]??????????????????????????????????????????????????????????[25]??YOLOv8n???????????6.2M????????????3?????????????CUDA?TensorRT????????????[26]????????????????????????????????????????????????LiDAR???????????????????????????[27]? + +### 1.3 ???????????? + +????????????????????????????????? + +##### **_1.???????+LiDAR+IMU+GPS???????????????????????????????????????????????16?LiDAR+????????????????2.????EKF?????????????????????/LiDAR??????????IMU?????GPS?????????????? + +##### 3.??Jetson Xavier??????????????????????YOLOv8n?????????TensorRT???????????????????30ms? + +##### 4.????????????????????????????????????????????????????? + +## 2 ????????? + +### 2.1 ?????? + +?????????????????????????????????????????????1??? +?????1080P@30fps?????16????LiDAR?100Hz IMU?10Hz GPS/RTK?50Hz????????????????????????????????????? +* ???????????????????????????????EKF?????????????????????????? +* ?????????????????????????????????????????????????????**???????????????????????????? + +### 2.2 ???????? + +???????????????????????????????+?????????????????????? + +#### 2.2.1 ????? + +???????????-????-??????????????????? +* 5.??????????????????????????????????55???????????????????????????????????????????????????????????????????Canny??????????????? +* 6.??????ROI?????????????????????????????ROI????????1/2???????????????????? +* 7.?????????????????HoughLinesP???ROI???????????????50px?????100px??????????????????????????????????????????????? +* 8.????????????MobileNetV2??????????????????????????????????????????????????????????????????? + +#### 2.2.2 ????? + +?????YOLOv8n?????????????????????????? +* ????????COCO???????????????????????????10000?????????????????3???????Mosaic??????????????????????????? +* ???????YOLOv8n??INT8????????????6.2M??1.5M???????3?????????????????????????? +* ??????????????????????????????????????????2???? +$$D = \frac{H \times f}{h} \tag{2}$$ +???$H$???????????1.5m???1.7m??$f$???????????????????$h$???????????$D$?????????????? + +#### 2.3 LiDAR?????? + +LiDAR???????????????????????????????????????????? + +#### 2.3.1 ????? + +LiDAR??????????????????????????????????????? +* ?????????????????????20??????2.0??????????????? +* ??????????????????????0.2m0.2m0.2m??????????????? +* ???????RANSAC??????????????$ax+by+cz+d=0$????????1000?????0.1m????????????????????? + +#### 2.3.2 ?????????? + +????????DBSCAN????????????????????????? +* ???????????$\epsilon=0.5$m???????$min\_points=10$??????????????????????? +* ???????????????????$(x,y,z)$???????$D=\sqrt{x^2+y^2+z^2}$????$\theta=\arctan2(y,x)$?????????????????x?y?z?????????? + +#### 2.4 ???????? + +?????????????????????????????????EKF??????????? + +#### 2.4.1 ???? + +??????IMU??????????100Hz????????30Hz??LiDAR???10Hz?????????????????????????????????? +??????????????????LiDAR?????$T_{cam-lidar}$??????$R$?????$t$????????????????LiDAR?????????????????????????????????3???? +$$P_{lidar} = R \times P_{cam} + t \tag{3}$$ +???$P_{cam}$??????????????$P_{lidar}$?????LiDAR??????? + +#### 2.4.2 ??EKF???? + +??EKF???IMU?GPS?????????/LiDAR??????????????????????????? + +#### 2.4.2.1 ???? + +??????$\mathbf{X}=[x,y,v_x,v_y,\theta]^T$???$x,y$??????????????$v_x,v_y$????x?y??????$\theta$????????????4???? +$$\mathbf{X}_{k} = \mathbf{F}_k \mathbf{X}_{k-1} + \mathbf{G}_k \mathbf{w}_{k-1} \tag{4}$$ +???$\mathbf{F}_k$????????$\mathbf{G}_k$??????????$\mathbf{w}_{k-1}$????????????$N(0,\mathbf{Q}_k)$????????$\mathbf{F}_k$???5???? +$$\mathbf{F}_k = \begin{bmatrix} 1 & 0 & \Delta t & 0 & 0 \\ 0 & 1 & 0 & \Delta t & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} \tag{5}$$ +???$\Delta t$??????????? + +#### 2.4.2.2 ???? + +??????$\mathbf{Z}=[x_{gps},y_{gps},d_{lane},D_{lidar}]^T$???$x_{gps},y_{gps}$?GPS????????$d_{lane}$?????????????$D_{lidar}$?LiDAR????????????????6???? +$$\mathbf{Z}_k = \mathbf{H}_k \mathbf{X}_k + \mathbf{v}_k \tag{6}$$ +???$\mathbf{H}_k$??????$\mathbf{v}_k$????????????$N(0,\mathbf{R}_k)$??????$\mathbf{H}_k$???7???? +$$\mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & k_d \\ 0 & 0 & 0 & 0 & k_D \end{bmatrix} \tag{7}$$ +???$k_d,k_D$????????????????????????????????? + +#### 2.4.2.3 ?????? + +EKF??????????????????? +????????????????????????????????????????????? + $$\hat{\mathbf{X}}_k^- = \mathbf{F}_k \hat{\mathbf{X}}_{k-1} \tag{8}$$ + $$\mathbf{P}_k^- = \mathbf{F}_k \mathbf{P}_{k-1} \mathbf{F}_k^T + \mathbf{Q}_k \tag{9}$$ + ???$\hat{\mathbf{X}}_k^-$?????????????$\mathbf{P}_k^-$?????????$\mathbf{P}_{k-1}$?????????????$\mathbf{Q}_k$??????????? +???????????????????????????????????????? + $$\mathbf{K}_k = \mathbf{P}_k^- \mathbf{H}_k^T (\mathbf{H}_k \mathbf{P}_k^- \mathbf{H}_k^T + \mathbf{R}_k)^{-1} \tag{10}$$ + $$\hat{\mathbf{X}}_k = \hat{\mathbf{X}}_k^- + \mathbf{K}_k (\mathbf{Z}_k - \mathbf{H}_k \hat{\mathbf{X}}_k^-) \tag{11}$$ + $$\mathbf{P}_k = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_k^- \tag{12}$$ + ???$\mathbf{K}_k$???????$\mathbf{R}_k$???????????$\mathbf{I}$??????$\hat{\mathbf{X}}_k$?????????????$\mathbf{P}_k$????????? +?????????????$\mathbf{Q}_k$??????????$\mathbf{R}_k$??????????????? + $$\mathbf{Q}_k = \text{diag}(0.01,0.01,0.001,0.001,0.005) \tag{13}$$ + $$\mathbf{R}_k = \text{diag}(0.1,0.1,0.05,0.02) \tag{14}$$ + +#### 2.5 ??????? + +??NVIDIA Jetson Xavier NX?????????????????8?ARM Cortex-A78CPU?16GB LPDDR4X???384?CUDA GPU??????Ubuntu 20.04 LTS?ROS Noetic?CUDA 11.4?TensorRT 8.5? +????????? +* ?????????????????????LiDAR??????????????????????????????????????? +* ???????TensorRT?YOLOv8n???????????????????????????????20ms??5ms? +* ????????????????????????????????????????????????????? +* ????????????????????????????????? + +## 3 ??????? + +#### 3.1 ???????? + +#### 3.1.1 ???? + +????????????????????1??? +?1 ??????????? +### ???????????? +| ?? | ?? | ???? | +|:--------|:------------------------|:----------------------------| +| ?????? | NVIDIA Jetson Xavier NX | 8?CPU?384?GPU?16GB?? | +| ?? | IMX219???? | 1080P????30fps???6mm????70 | +| LiDAR | Velodyne VLP-16 | 16??????0.1-100m?????3cm | +| IMU | MPU6050 | ????100Hz?????0.1 | +| GPS/RTK | UBLOX M8N | ????10Hz?RTK????0.5m | +| ??? | ????? | ????50Hz?????0.1m/s | + +#### 3.1.2 ???????? + +??????????????????????????? +* ???????????10km/h??????????????????????? +* ???????????30km/h???????????????????????? +* ????????????40km/h????????????????????????? +* ??????????????????????????KITTI[28]?BDD100K[29]????????????????????????????????10000???????????????????????????????????1000??????????????????? + +### 3.2 ???? + +????????????????????? +* ?????????????????mAP??????Precision??????Recall??????mAP??????????????????????????? +* ?????????????????MAE?RMSE????MAE????????RMSE???????????????????? +* ??????????????MAE????????MAE???? +* ????????????????????????????????????? + +### 3.3 ??????? + +#### 3.3.1 ??????? + +?????????????????YOLOv8n???LiDAR?DBSCAN???????????????????2??? +**?2 ?????????????** + +| ?? | ????%? | ????%? | mAP?%? | +|:---------------|:------:|:------:|:------:| +| ????YOLOv8n? | 88.5 | 86.2 | 87.3 | +| ?LiDAR?DBSCAN? | 90.3 | 89.1 | 89.7 | +| ?????? | 95.2 | 94.1 | 94.7 | +??2??????????????????mAP????????????mAP????????7.4???????LiDAR????5??????????????????????????LiDAR?????????????????????????????????????????????mAP???72.5%??LiDAR??mAP???82.3%????????mAP????89.6%??????????????? + +#### 3.3.2 ??????? + +???????????????3??? +**?3 ???????????** + +| ?? | MAE?m? | RMSE?m? | +|:-------------|:--------:|:---------:| +| ?????? | 0.18 | 0.22 | +| ?????? | 0.07 | 0.09 | +??3?????????????+?????????????????MAE??0.07m?RMSE?0.09m????0.1m??????????????????MAE??61.1%?RMSE??59.1%???????????????????????????????????????????????????????????? + +#### 3.3.3 ?????? + +????????????4??? +?4 ???????? +**?4 ????????** + +| ?? | ????MAE?m? | ?????MAE?? | +|:--------------------|:-----------------|:-------------------| +| GPS+IMU???EKF?| 0.32 | 0.85 | +| ????EKF | 0.15 | 0.32 | + +??4???????EKF???????MAE?0.15m??????MAE?0.32????EKF??????53.1%?62.4%???????EKF?????????????????/LiDAR?????????????IMU??????GPS?????????GPS?????????????EKF???????????1.2m????????????????0.3m??????????????? + +#### 3.3.4 ??????? + +????????????????5??? +?5 ??????? +**?5 ???????** + +| ?? | ?????ms? | +|:-------------------------|:--------------:| +| ????????+???? | 12 | +| LiDAR??????+??? | 10 | +| ?????? | 5 | +| ?????? | 27 | +??5?????????????????27ms???30ms???L2???????????????????50ms???????????????????TensorRT????????12ms?LiDAR????????????????????10ms???????????????5ms?????????????????????????????????????? +4 ????? + +### 4.1 ???? + +???????????????????????????????????????? +* ???????????????EKF??????????????????????????????????????????????????????????? +* ??????????????????????????LiDAR?????????????????????????????????? +* ?????????????????????????????????????????????????????????????????? + +### 4.2 ???? + +?????????????????????? +* ????????????????????????????????????????????????????????? +* ??????????????????????????????????????????????????????????+LiDAR+?????+?????????????????????????? +* ??????????Transformer???????????????????LiDAR????????????????????????????? +* ????????????????????????????????????????????????????????? + +## 5 ?? + +?????????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? +* ??????????????????????????+?????????????????????????????LiDAR?????????RANSAC?????DBSCAN????????????????? +* ?????EKF?????????/LiDAR???????????IMU?????GPS??????????????? +* ????????????????????????????????????27ms????????? +* ???????????????????????????????????mAP?94.7%????????????0.1m??????????????????L2??????????? +?????????????????????????????????????????????????L2-L4???????????????????? + +## ???? + +* [1] ???, ???, ???. ?????????????????[J]. ??????, 2020, 22(1): 6-14. +* [2] ??, ???, ???. ????????????????[J]. ????, 2021, 50(3): 378-395. +* [3] ??, ??, ???. ???????????????[J]. ????, 2022, 44(5): 581-592. +* [4] ??, ??, ???. ??????????????????[J]. ??????, 2020, 56(14): 1-14. +* [5] Zhang H, Wang J, Li Z. Lane detection algorithm based on improved Hough transform and Kalman filter[J]. Journal of Computational Information Systems, 2016, 12(11): 4567-4574. +* [6] ???, ???, ??. ???????????????[J]. ??????, 2015, 28(2): 100-106. +* [7] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 779-788. +* [8] Ren S, He K, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149. +* [9] Li Z, Chen X, Shen S. BEVFormer: Learning bird's-eye-view representation from multi-camera images via spatiotemporal transformers[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 16296-16305. +* [10] Zhou D, Wang J, Lu J, et al. DETR3D: 3D object detection from multi-view images via 3D-to-2D queries[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 15107-15116. +* [11] Fischler M A, Bolles R C. Random sample consensus: A paradigm for model fitting with applications to image analysis and automated cartography[J]. Communications of the ACM, 1981, 24(6): 381-395. +* [12] Ester M, Kriegel H P, Sander J, et al. A density-based algorithm for discovering clusters in large spatial databases with noise[C]//Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining. 1996: 226-231. +* [13] Qi C R, Su H, Mo K, et al. PointNet: Deep learning on point sets for 3D classification and segmentation[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 652-660. +* [14] ??, ??, ???. ??IMU/GPS?????????????[J]. ???????, 2021, 8(2): 1-8. +* [15] Gelb A. Applied optimal estimation[M]. Cambridge: MIT Press, 1974. +* [16] Labb M, Michaud F. RTAB-Map as an open-source lidar and visual simultaneous localization and mapping library for large-scale and long-term online operation[J]. Journal of Field Robotics, 2014, 31(2): 416-446. +* [17] ??, ???, ??. ?????????????????[J]. ???????, 2022, 41(3): 1-4. +* [18] ??, ???, ???. ????????????????[J]. ?????, 2020, 46(8): 1561-1578. +* [19] Li J, Zhang Y, Chen W. Feature-level fusion of camera and lidar for object detection in autonomous driving[J]. IEEE Transactions on Intelligent Transportation Systems, 2022, 23(8): 12072-12082. +* [20] Zhang Y, Wang X, Li J. Decision-level fusion of multi-sensor for object detection in autonomous vehicles[C]//Proceedings of the IEEE International Conference on Intelligent Transportation Systems. 2020: 1-6. +* [21] Chen Y, Mao Y, Zhang J. FusionNet: A deep learning architecture for multi-modal sensor fusion[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops. 2020: 1-9. +* [22] Lang H, Vora S, Caesar H, et al. PointPillars: Fast encoders for object detection from point clouds[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 12697-12705. +* [23] ??, ???, ???. ?????????????????[J]. ?????, 2021, 47(7): 1289-1308. +* [24] ???. Jetson Xavier NX?????[EB/OL]. \ No newline at end of file diff --git a/src/Unmanned_Aerial_car_Perception/img.png b/src/Unmanned_Aerial_car_Perception/img.png new file mode 100644 index 0000000000000000000000000000000000000000..dad2e0102345f671428a0635eab7a52179ddb334 GIT binary patch literal 6029 zcmeAS@N?(olHy`uVBq!ia0y~yU;$!wGY%%8$huIG9tH;S5KkA!kczlB2N@ZGf(;Y? zt$)V>(l81}Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz5lq2sGSob_R_Q zFgX5?uRc7iy*lc-(GVC7fzc2c4S~@RpjrqV@Nep6U_AIDvlL{cr>mdKI;Vst0IDq+ Ag#Z8m literal 0 HcmV?d00001 diff --git a/src/Unmanned_Aerial_car_Perception/img_1.png b/src/Unmanned_Aerial_car_Perception/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..dad2e0102345f671428a0635eab7a52179ddb334 GIT binary patch literal 6029 zcmeAS@N?(olHy`uVBq!ia0y~yU;$!wGY%%8$huIG9tH;S5KkA!kczlB2N@ZGf(;Y? zt$)V>(l81}Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz5lq2sGSob_R_Q zFgX5?uRc7iy*lc-(GVC7fzc2c4S~@RpjrqV@Nep6U_AIDvlL{cr>mdKI;Vst0IDq+ Ag#Z8m literal 0 HcmV?d00001 diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py new file mode 100644 index 0000000000..1d9a1b019c --- /dev/null +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -0,0 +1,337 @@ +import cv2 +import numpy as np +import time +import math +import open3d as o3d # LiDAR点云处理 +from threading import Thread +import serial # 串口读取轮速/IMU(适配Arduino/车载MCU) + +# 适配YOLOv5(需提前下载YOLOv5权重文件) +from ultralytics import YOLO + + +class AutonomousCarPerception: + def __init__(self): + # 1. 初始化硬件接口 + self.lidar = None # LiDAR对象(示例用Open3D模拟,实际替换为Velodyne/Ouster SDK) + self.camera = cv2.VideoCapture(0) # 车载摄像头(0为默认摄像头,可替换为视频流/CSI摄像头) + self.serial_port = serial.Serial("/dev/ttyUSB0", 9600, timeout=0.1) # 串口读取IMU/轮速 + self.yolo_model = YOLO("yolov5s.pt") # 轻量化YOLOv5模型 + + # 2. 感知数据缓存 + self.perception_data = { + # 自身状态 + "speed": 0.0, # 车速 (m/s) + "heading": 0.0, # 航向角 (°,正北为0,顺时针) + "position": {"lat": 0.0, "lon": 0.0}, # GPS位置 + "imu": {"roll": 0.0, "pitch": 0.0, "yaw": 0.0}, # IMU姿态 + # 视觉感知 + "lane": {"detected": False, "center_offset": 0.0}, # 车道线偏移 (m) + "visual_obstacle": [], # 视觉检测障碍物 [{"class": "car", "distance": 5.0, "x": 1.2}] + # LiDAR感知 + "lidar_obstacle": [], # LiDAR检测障碍物 [{"distance": 4.8, "width": 1.5, "angle": 5.0}] + # 融合结果 + "fused_obstacle": [], # 融合后障碍物 + "timestamp": time.time() + } + + # 3. 线程控制 + self.running = True + self.vision_thread = Thread(target=self._vision_loop) + self.lidar_thread = Thread(target=self._lidar_loop) + self.state_thread = Thread(target=self._state_loop) + self.fusion_thread = Thread(target=self._fusion_loop) + + # ------------------- 1. 自身状态感知 ------------------- + def _read_state_sensors(self): + """读取轮速计、IMU、GPS数据(串口/ROS话题)""" + try: + # 示例:从串口读取MCU发送的状态数据(格式:speed,heading,roll,pitch,yaw,lat,lon) + if self.serial_port.in_waiting > 0: + data = self.serial_port.readline().decode().strip().split(",") + if len(data) == 7: + self.perception_data["speed"] = float(data[0]) + self.perception_data["heading"] = float(data[1]) + self.perception_data["imu"]["roll"] = float(data[2]) + self.perception_data["imu"]["pitch"] = float(data[3]) + self.perception_data["imu"]["yaw"] = float(data[4]) + self.perception_data["position"]["lat"] = float(data[5]) + self.perception_data["position"]["lon"] = float(data[6]) + except Exception as e: + print(f"状态传感器读取失败: {e}") + + def _state_loop(self): + """状态感知循环(20Hz)""" + while self.running: + self._read_state_sensors() + self.perception_data["timestamp"] = time.time() + time.sleep(0.05) + + # ------------------- 2. 视觉感知 ------------------- + def _detect_lane(self, frame): + """车道线检测(霍夫变换)""" + # 预处理:灰度化 → 高斯模糊 → 边缘检测 → 感兴趣区域(ROI)裁剪 + height, width = frame.shape[:2] + gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + blur = cv2.GaussianBlur(gray, (5, 5), 0) + edges = cv2.Canny(blur, 50, 150) + + # 裁剪ROI(只检测画面下半部分的车道线) + roi_vertices = np.array([[(0, height), (width / 2, height / 2), (width, height)]], dtype=np.int32) + mask = np.zeros_like(edges) + cv2.fillPoly(mask, roi_vertices, 255) + roi_edges = cv2.bitwise_and(edges, mask) + + # 霍夫直线检测 + lines = cv2.HoughLinesP(roi_edges, 1, np.pi / 180, threshold=50, minLineLength=50, maxLineGap=100) + lane_detected = False + center_offset = 0.0 # 车道中心偏移(单位:米,正值偏右,负值偏左) + + if lines is not None: + lane_detected = True + # 分离左右车道线 + left_lines = [] + right_lines = [] + for line in lines: + x1, y1, x2, y2 = line[0] + slope = (y2 - y1) / (x2 - x1 + 1e-6) # 避免除零 + if slope < -0.5: # 左车道线(负斜率) + left_lines.append(line) + elif slope > 0.5: # 右车道线(正斜率) + right_lines.append(line) + + # 拟合左右车道线并计算中心偏移 + if left_lines and right_lines: + # 左车道线拟合 + left_x = [line[0][0] for line in left_lines] + [line[0][2] for line in left_lines] + left_y = [line[0][1] for line in left_lines] + [line[0][3] for line in left_lines] + left_fit = np.polyfit(left_y, left_x, 1) + left_x_base = int(left_fit[0] * height + left_fit[1]) + + # 右车道线拟合 + right_x = [line[0][0] for line in right_lines] + [line[0][2] for line in right_lines] + right_y = [line[0][1] for line in right_lines] + [line[0][3] for line in right_lines] + right_fit = np.polyfit(right_y, right_x, 1) + right_x_base = int(right_fit[0] * height + right_fit[1]) + + # 计算车道中心与画面中心的偏移(像素→米,需标定) + lane_center = (left_x_base + right_x_base) / 2 + frame_center = width / 2 + pixel2meter = 0.01 # 1像素=0.01米(需实际标定) + center_offset = (lane_center - frame_center) * pixel2meter + + # 绘制车道线 + cv2.line(frame, (left_x_base, height), (int(left_fit[0] * height / 2 + left_fit[1]), int(height / 2)), + (0, 255, 0), 2) + cv2.line(frame, (right_x_base, height), + (int(right_fit[0] * height / 2 + right_fit[1]), int(height / 2)), (0, 255, 0), 2) + cv2.line(frame, (int(lane_center), height), (int(frame_center), int(height / 2)), (0, 0, 255), 2) + + # 更新车道线数据 + self.perception_data["lane"]["detected"] = lane_detected + self.perception_data["lane"]["center_offset"] = center_offset + return frame + + def _detect_visual_obstacle(self, frame): + """YOLOv5检测视觉障碍物(车辆/行人/障碍物)""" + # 推理(过滤小目标,只保留car/person/bicycle) + results = self.yolo_model(frame, conf=0.5, classes=[0, 1, 2]) + obstacles = [] + + for result in results: + boxes = result.boxes + for box in boxes: + # 获取检测框信息 + x1, y1, x2, y2 = map(int, box.xyxy[0]) + cls = self.yolo_model.names[int(box.cls[0])] + conf = float(box.conf[0]) + + # 简易距离估算(基于检测框高度,需标定) + box_height = y2 - y1 + distance = 500 / box_height # 示例公式:高度越小,距离越远 + + # 绘制检测框 + cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2) + cv2.putText(frame, f"{cls}: {distance:.1f}m", (x1, y1 - 10), + cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2) + + obstacles.append({ + "class": cls, + "distance": distance, + "x": (x1 + x2) / 2 - frame.shape[1] / 2, # 横向偏移(像素) + "confidence": conf + }) + + self.perception_data["visual_obstacle"] = obstacles + return frame + + def _vision_loop(self): + """视觉感知循环(10Hz)""" + while self.running: + ret, frame = self.camera.read() + if ret: + # 1. 车道线检测 + frame = self._detect_lane(frame) + # 2. 视觉障碍物检测 + frame = self._detect_visual_obstacle(frame) + # 显示画面 + cv2.putText(frame, f"Lane Offset: {self.perception_data['lane']['center_offset']:.2f}m", (10, 30), + cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 0), 2) + cv2.imshow("Car Perception (Vision)", frame) + if cv2.waitKey(1) & 0xFF == ord('q'): + self.stop() + time.sleep(0.1) + + # ------------------- 3. LiDAR感知 ------------------- + def _process_lidar_pointcloud(self): + """LiDAR点云处理(聚类检测障碍物)""" + try: + # 示例:生成模拟点云(实际替换为LiDAR SDK读取) + points = np.random.rand(1000, 3) * 20 - 10 # [-10,10]米范围 + points = points[points[:, 2] > -1] # 过滤地面以下点 + + # Open3D点云处理 + pcd = o3d.geometry.PointCloud() + pcd.points = o3d.utility.Vector3dVector(points) + # 下采样 + 去除离群点 + pcd = pcd.voxel_down_sample(voxel_size=0.2) + cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) + pcd = pcd.select_by_index(ind) + + # 聚类检测障碍物(DBSCAN) + with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Error): + labels = np.array(pcd.cluster_dbscan(eps=0.5, min_points=10)) + + obstacles = [] + max_label = labels.max() + if max_label >= 0: + for label in range(max_label + 1): + cluster_points = np.asarray(pcd.points)[labels == label] + # 计算障碍物中心、距离、尺寸 + center = np.mean(cluster_points, axis=0) + distance = np.linalg.norm(center) # 距车辆的距离 + angle = math.degrees(math.atan2(center[1], center[0])) # 方位角 + width = np.max(cluster_points[:, 0]) - np.min(cluster_points[:, 0]) + length = np.max(cluster_points[:, 1]) - np.min(cluster_points[:, 1]) + + obstacles.append({ + "distance": distance, + "angle": angle, + "width": width, + "length": length + }) + + self.perception_data["lidar_obstacle"] = obstacles + except Exception as e: + print(f"LiDAR处理失败: {e}") + + def _lidar_loop(self): + """LiDAR感知循环(5Hz)""" + while self.running: + self._process_lidar_pointcloud() + time.sleep(0.2) + + # ------------------- 4. 多传感器融合 ------------------- + def _fusion_obstacle(self): + """融合视觉+LiDAR障碍物数据(加权融合)""" + visual_obstacles = self.perception_data["visual_obstacle"] + lidar_obstacles = self.perception_data["lidar_obstacle"] + fused_obstacles = [] + + # 简易融合规则:LiDAR距离优先,视觉补充类别 + for lidar_obs in lidar_obstacles: + # 匹配视觉障碍物(方位角±5°内) + matched_visual = None + for visual_obs in visual_obstacles: + # 视觉方位角估算(基于横向偏移) + visual_angle = math.degrees(math.atan2(visual_obs["x"] * 0.01, visual_obs["distance"])) + if abs(visual_angle - lidar_obs["angle"]) < 5: + matched_visual = visual_obs + break + + fused_obstacles.append({ + "distance": lidar_obs["distance"], # LiDAR距离更精准 + "angle": lidar_obs["angle"], + "width": lidar_obs["width"], + "class": matched_visual["class"] if matched_visual else "unknown", + "confidence": matched_visual["confidence"] if matched_visual else 0.8 + }) + + self.perception_data["fused_obstacle"] = fused_obstacles + + def _fusion_loop(self): + """数据融合循环(5Hz)""" + while self.running: + self._fusion_obstacle() + time.sleep(0.2) + + # ------------------- 5. 安全判断与接口 ------------------- + def check_safety(self): + """安全状态判断""" + # 1. 碰撞风险:融合障碍物距离<3米 + for obs in self.perception_data["fused_obstacle"]: + if obs["distance"] < 3.0: + return False, f"前方{obs['distance']:.1f}米检测到{obs['class']},碰撞风险!" + # 2. 车道偏离风险:偏移>0.5米 + if abs(self.perception_data["lane"]["center_offset"]) > 0.5 and self.perception_data["lane"]["detected"]: + return False, f"车道偏移{self.perception_data['lane']['center_offset']:.2f}米,偏离风险!" + # 3. 车速风险:超速(>10m/s=36km/h) + if self.perception_data["speed"] > 10.0: + return False, f"车速{self.perception_data['speed']:.1f}m/s,超速!" + return True, "安全" + + def get_perception_result(self): + """获取最新感知结果""" + return self.perception_data + + def start(self): + """启动感知系统""" + print("启动无人车感知系统...") + self.vision_thread.start() + self.lidar_thread.start() + self.state_thread.start() + self.fusion_thread.start() + + def stop(self): + """停止感知系统""" + self.running = False + # 等待线程结束 + self.vision_thread.join() + self.lidar_thread.join() + self.state_thread.join() + self.fusion_thread.join() + # 释放资源 + self.camera.release() + self.serial_port.close() + cv2.destroyAllWindows() + print("无人车感知系统已停止") + + +# ------------------- 测试代码 ------------------- +if __name__ == "__main__": + # 初始化感知系统 + car_perception = AutonomousCarPerception() + + try: + # 启动感知 + car_perception.start() + + # 主循环打印感知结果 + while True: + data = car_perception.get_perception_result() + is_safe, msg = car_perception.check_safety() + + print(f"\n=== 无人车感知数据 [{time.ctime()}] ===") + print(f"车速: {data['speed']:.2f}m/s, 航向角: {data['heading']:.1f}°") + print( + f"车道线: {'检测到' if data['lane']['detected'] else '未检测到'}, 偏移: {data['lane']['center_offset']:.2f}m") + print(f"视觉障碍物数量: {len(data['visual_obstacle'])}") + print(f"LiDAR障碍物数量: {len(data['lidar_obstacle'])}") + print(f"融合障碍物数量: {len(data['fused_obstacle'])}") + print(f"安全状态: {'✅ 安全' if is_safe else '❌ 危险'} - {msg}") + + time.sleep(1) + + except KeyboardInterrupt: + car_perception.stop() + print("程序已手动终止") From 7b94e519291b0c24d1278cc3fb3f75410d51e961 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 18:10:44 +0800 Subject: [PATCH 05/26] =?UTF-8?q?=E8=BF=90=E8=A1=8C=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E7=94=9F=E6=88=90=E5=9B=BE=E5=83=8F=E5=BC=B9=E5=87=BA=E8=BD=A6?= =?UTF-8?q?=E9=81=93=E7=BA=BF=E6=A3=80=E6=B5=8B=E7=9A=84=E5=9B=BE=E5=83=8F?= =?UTF-8?q?=E7=AA=97=E5=8F=A3=E5=92=8C=20LiDAR=20=E7=82=B9=E4=BA=91?= =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96=E7=AA=97=E5=8F=A3=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E5=9C=A8=E6=8E=A7=E5=88=B6=E5=8F=B0=E6=89=93=E5=8D=B0=E8=9E=8D?= =?UTF-8?q?=E5=90=88=E5=90=8E=E7=9A=84=E6=84=9F=E7=9F=A5=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=EF=BC=88=E5=A6=82=E9=9A=9C=E7=A2=8D=E7=89=A9=E6=95=B0=E9=87=8F?= =?UTF-8?q?=E3=80=81=E8=B7=9D=E7=A6=BB=E3=80=81=E6=98=AF=E5=90=A6=E5=9C=A8?= =?UTF-8?q?=E8=BD=A6=E9=81=93=E5=86=85=E7=AD=89=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 538 +++++++++------------ 1 file changed, 224 insertions(+), 314 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 1d9a1b019c..6a2a472d5a 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -1,337 +1,247 @@ import cv2 import numpy as np -import time -import math -import open3d as o3d # LiDAR点云处理 -from threading import Thread -import serial # 串口读取轮速/IMU(适配Arduino/车载MCU) +import random +import matplotlib.pyplot as plt +from mpl_toolkits.mplot3d import Axes3D -# 适配YOLOv5(需提前下载YOLOv5权重文件) -from ultralytics import YOLO +# 随机种子固定,保证结果可复现 +np.random.seed(42) +random.seed(42) -class AutonomousCarPerception: +class AutonomousVehiclePerception: def __init__(self): - # 1. 初始化硬件接口 - self.lidar = None # LiDAR对象(示例用Open3D模拟,实际替换为Velodyne/Ouster SDK) - self.camera = cv2.VideoCapture(0) # 车载摄像头(0为默认摄像头,可替换为视频流/CSI摄像头) - self.serial_port = serial.Serial("/dev/ttyUSB0", 9600, timeout=0.1) # 串口读取IMU/轮速 - self.yolo_model = YOLO("yolov5s.pt") # 轻量化YOLOv5模型 - - # 2. 感知数据缓存 - self.perception_data = { - # 自身状态 - "speed": 0.0, # 车速 (m/s) - "heading": 0.0, # 航向角 (°,正北为0,顺时针) - "position": {"lat": 0.0, "lon": 0.0}, # GPS位置 - "imu": {"roll": 0.0, "pitch": 0.0, "yaw": 0.0}, # IMU姿态 - # 视觉感知 - "lane": {"detected": False, "center_offset": 0.0}, # 车道线偏移 (m) - "visual_obstacle": [], # 视觉检测障碍物 [{"class": "car", "distance": 5.0, "x": 1.2}] - # LiDAR感知 - "lidar_obstacle": [], # LiDAR检测障碍物 [{"distance": 4.8, "width": 1.5, "angle": 5.0}] - # 融合结果 - "fused_obstacle": [], # 融合后障碍物 - "timestamp": time.time() - } - - # 3. 线程控制 - self.running = True - self.vision_thread = Thread(target=self._vision_loop) - self.lidar_thread = Thread(target=self._lidar_loop) - self.state_thread = Thread(target=self._state_loop) - self.fusion_thread = Thread(target=self._fusion_loop) - - # ------------------- 1. 自身状态感知 ------------------- - def _read_state_sensors(self): - """读取轮速计、IMU、GPS数据(串口/ROS话题)""" - try: - # 示例:从串口读取MCU发送的状态数据(格式:speed,heading,roll,pitch,yaw,lat,lon) - if self.serial_port.in_waiting > 0: - data = self.serial_port.readline().decode().strip().split(",") - if len(data) == 7: - self.perception_data["speed"] = float(data[0]) - self.perception_data["heading"] = float(data[1]) - self.perception_data["imu"]["roll"] = float(data[2]) - self.perception_data["imu"]["pitch"] = float(data[3]) - self.perception_data["imu"]["yaw"] = float(data[4]) - self.perception_data["position"]["lat"] = float(data[5]) - self.perception_data["position"]["lon"] = float(data[6]) - except Exception as e: - print(f"状态传感器读取失败: {e}") - - def _state_loop(self): - """状态感知循环(20Hz)""" - while self.running: - self._read_state_sensors() - self.perception_data["timestamp"] = time.time() - time.sleep(0.05) - - # ------------------- 2. 视觉感知 ------------------- - def _detect_lane(self, frame): - """车道线检测(霍夫变换)""" - # 预处理:灰度化 → 高斯模糊 → 边缘检测 → 感兴趣区域(ROI)裁剪 - height, width = frame.shape[:2] - gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) + # 传感器参数初始化 + self.camera_resolution = (640, 480) # 摄像头分辨率 + self.lidar_fov = 180 # LiDAR水平视场角(度) + self.lidar_points_num = 1000 # 单次扫描点云数量 + self.lidar_max_range = 50 # LiDAR最大探测距离(米) + + # 感知结果存储 + self.lane_lines = [] # 检测到的车道线 + self.obstacles = [] # 检测到的障碍物(位置+尺寸) + self.perception_fusion_result = {} # 融合结果 + + def simulate_camera_data(self): + """模拟摄像头图像数据(生成带车道线的道路图像)""" + # 创建黑色背景 + img = np.zeros((self.camera_resolution[1], self.camera_resolution[0], 3), dtype=np.uint8) + + # 绘制道路和车道线 + road_color = (50, 50, 50) + lane_color = (255, 255, 0) + cv2.rectangle(img, (0, self.camera_resolution[1] // 2), + (self.camera_resolution[0], self.camera_resolution[1]), + road_color, -1) + + # 绘制两条车道线(带轻微弯曲) + y = np.linspace(self.camera_resolution[1] // 2, self.camera_resolution[1] - 10, 100) + x1 = 0.0001 * (y - self.camera_resolution[1] // 2) ** 2 + self.camera_resolution[0] // 3 + x2 = -0.0001 * (y - self.camera_resolution[1] // 2) ** 2 + 2 * self.camera_resolution[0] // 3 + + for i in range(len(y) - 1): + cv2.line(img, (int(x1[i]), int(y[i])), (int(x1[i + 1]), int(y[i + 1])), lane_color, 3) + cv2.line(img, (int(x2[i]), int(y[i])), (int(x2[i + 1]), int(y[i + 1])), lane_color, 3) + + # 添加随机噪声 + noise = np.random.randint(0, 50, img.shape, dtype=np.uint8) + img = cv2.add(img, noise) + return img + + def simulate_lidar_data(self): + """模拟LiDAR点云数据(包含障碍物点云)""" + # 生成基础点云(道路平面) + angles = np.linspace(-self.lidar_fov / 2, self.lidar_fov / 2, self.lidar_points_num) * np.pi / 180 + ranges = np.random.uniform(1, self.lidar_max_range, self.lidar_points_num) + + # 转换为笛卡尔坐标(x: 前向, y: 横向, z: 高度) + x = ranges * np.cos(angles) + y = ranges * np.sin(angles) + z = np.zeros_like(x) # 道路平面z=0 + + # 添加障碍物(随机生成1-3个障碍物) + obstacle_num = random.randint(1, 3) + for _ in range(obstacle_num): + # 障碍物中心位置(前向10-40米,横向-5到5米) + obs_x = random.uniform(10, 40) + obs_y = random.uniform(-5, 5) + # 障碍物点云范围(2x2米) + obs_angles = np.linspace(-np.pi / 4, np.pi / 4, 50) + obs_ranges = np.random.uniform(0.5, 1.5, 50) + obs_x_points = obs_x + obs_ranges * np.cos(obs_angles) + obs_y_points = obs_y + obs_ranges * np.sin(obs_angles) + obs_z_points = np.random.uniform(0, 1.5, 50) # 障碍物高度0-1.5米 + + # 合并障碍物点云 + x = np.concatenate([x, obs_x_points]) + y = np.concatenate([y, obs_y_points]) + z = np.concatenate([z, obs_z_points]) + + return np.vstack([x, y, z]).T + + def detect_lane_lines(self, img): + """基于摄像头图像检测车道线(霍夫变换)""" + # 预处理:灰度化→高斯模糊→边缘检测 + gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) edges = cv2.Canny(blur, 50, 150) - # 裁剪ROI(只检测画面下半部分的车道线) - roi_vertices = np.array([[(0, height), (width / 2, height / 2), (width, height)]], dtype=np.int32) + # 感兴趣区域(ROI):只保留道路部分 mask = np.zeros_like(edges) + roi_vertices = np.array([[(0, self.camera_resolution[1]), + (self.camera_resolution[0] // 3, self.camera_resolution[1] // 2), + (2 * self.camera_resolution[0] // 3, self.camera_resolution[1] // 2), + (self.camera_resolution[0], self.camera_resolution[1])]], dtype=np.int32) cv2.fillPoly(mask, roi_vertices, 255) - roi_edges = cv2.bitwise_and(edges, mask) + masked_edges = cv2.bitwise_and(edges, mask) # 霍夫直线检测 - lines = cv2.HoughLinesP(roi_edges, 1, np.pi / 180, threshold=50, minLineLength=50, maxLineGap=100) - lane_detected = False - center_offset = 0.0 # 车道中心偏移(单位:米,正值偏右,负值偏左) + lines = cv2.HoughLinesP(masked_edges, rho=1, theta=np.pi / 180, threshold=20, + minLineLength=30, maxLineGap=200) + # 筛选并存储车道线 + self.lane_lines = [] if lines is not None: - lane_detected = True - # 分离左右车道线 - left_lines = [] - right_lines = [] for line in lines: x1, y1, x2, y2 = line[0] - slope = (y2 - y1) / (x2 - x1 + 1e-6) # 避免除零 - if slope < -0.5: # 左车道线(负斜率) - left_lines.append(line) - elif slope > 0.5: # 右车道线(正斜率) - right_lines.append(line) - - # 拟合左右车道线并计算中心偏移 - if left_lines and right_lines: - # 左车道线拟合 - left_x = [line[0][0] for line in left_lines] + [line[0][2] for line in left_lines] - left_y = [line[0][1] for line in left_lines] + [line[0][3] for line in left_lines] - left_fit = np.polyfit(left_y, left_x, 1) - left_x_base = int(left_fit[0] * height + left_fit[1]) - - # 右车道线拟合 - right_x = [line[0][0] for line in right_lines] + [line[0][2] for line in right_lines] - right_y = [line[0][1] for line in right_lines] + [line[0][3] for line in right_lines] - right_fit = np.polyfit(right_y, right_x, 1) - right_x_base = int(right_fit[0] * height + right_fit[1]) - - # 计算车道中心与画面中心的偏移(像素→米,需标定) - lane_center = (left_x_base + right_x_base) / 2 - frame_center = width / 2 - pixel2meter = 0.01 # 1像素=0.01米(需实际标定) - center_offset = (lane_center - frame_center) * pixel2meter - - # 绘制车道线 - cv2.line(frame, (left_x_base, height), (int(left_fit[0] * height / 2 + left_fit[1]), int(height / 2)), - (0, 255, 0), 2) - cv2.line(frame, (right_x_base, height), - (int(right_fit[0] * height / 2 + right_fit[1]), int(height / 2)), (0, 255, 0), 2) - cv2.line(frame, (int(lane_center), height), (int(frame_center), int(height / 2)), (0, 0, 255), 2) - - # 更新车道线数据 - self.perception_data["lane"]["detected"] = lane_detected - self.perception_data["lane"]["center_offset"] = center_offset - return frame - - def _detect_visual_obstacle(self, frame): - """YOLOv5检测视觉障碍物(车辆/行人/障碍物)""" - # 推理(过滤小目标,只保留car/person/bicycle) - results = self.yolo_model(frame, conf=0.5, classes=[0, 1, 2]) - obstacles = [] - - for result in results: - boxes = result.boxes - for box in boxes: - # 获取检测框信息 - x1, y1, x2, y2 = map(int, box.xyxy[0]) - cls = self.yolo_model.names[int(box.cls[0])] - conf = float(box.conf[0]) - - # 简易距离估算(基于检测框高度,需标定) - box_height = y2 - y1 - distance = 500 / box_height # 示例公式:高度越小,距离越远 - - # 绘制检测框 - cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2) - cv2.putText(frame, f"{cls}: {distance:.1f}m", (x1, y1 - 10), - cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2) - - obstacles.append({ - "class": cls, - "distance": distance, - "x": (x1 + x2) / 2 - frame.shape[1] / 2, # 横向偏移(像素) - "confidence": conf - }) - - self.perception_data["visual_obstacle"] = obstacles - return frame - - def _vision_loop(self): - """视觉感知循环(10Hz)""" - while self.running: - ret, frame = self.camera.read() - if ret: - # 1. 车道线检测 - frame = self._detect_lane(frame) - # 2. 视觉障碍物检测 - frame = self._detect_visual_obstacle(frame) - # 显示画面 - cv2.putText(frame, f"Lane Offset: {self.perception_data['lane']['center_offset']:.2f}m", (10, 30), - cv2.FONT_HERSHEY_SIMPLEX, 0.8, (255, 255, 0), 2) - cv2.imshow("Car Perception (Vision)", frame) - if cv2.waitKey(1) & 0xFF == ord('q'): - self.stop() - time.sleep(0.1) - - # ------------------- 3. LiDAR感知 ------------------- - def _process_lidar_pointcloud(self): - """LiDAR点云处理(聚类检测障碍物)""" - try: - # 示例:生成模拟点云(实际替换为LiDAR SDK读取) - points = np.random.rand(1000, 3) * 20 - 10 # [-10,10]米范围 - points = points[points[:, 2] > -1] # 过滤地面以下点 - - # Open3D点云处理 - pcd = o3d.geometry.PointCloud() - pcd.points = o3d.utility.Vector3dVector(points) - # 下采样 + 去除离群点 - pcd = pcd.voxel_down_sample(voxel_size=0.2) - cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) - pcd = pcd.select_by_index(ind) - - # 聚类检测障碍物(DBSCAN) - with o3d.utility.VerbosityContextManager(o3d.utility.VerbosityLevel.Error): - labels = np.array(pcd.cluster_dbscan(eps=0.5, min_points=10)) - - obstacles = [] - max_label = labels.max() - if max_label >= 0: - for label in range(max_label + 1): - cluster_points = np.asarray(pcd.points)[labels == label] - # 计算障碍物中心、距离、尺寸 - center = np.mean(cluster_points, axis=0) - distance = np.linalg.norm(center) # 距车辆的距离 - angle = math.degrees(math.atan2(center[1], center[0])) # 方位角 - width = np.max(cluster_points[:, 0]) - np.min(cluster_points[:, 0]) - length = np.max(cluster_points[:, 1]) - np.min(cluster_points[:, 1]) - - obstacles.append({ - "distance": distance, - "angle": angle, - "width": width, - "length": length - }) - - self.perception_data["lidar_obstacle"] = obstacles - except Exception as e: - print(f"LiDAR处理失败: {e}") - - def _lidar_loop(self): - """LiDAR感知循环(5Hz)""" - while self.running: - self._process_lidar_pointcloud() - time.sleep(0.2) - - # ------------------- 4. 多传感器融合 ------------------- - def _fusion_obstacle(self): - """融合视觉+LiDAR障碍物数据(加权融合)""" - visual_obstacles = self.perception_data["visual_obstacle"] - lidar_obstacles = self.perception_data["lidar_obstacle"] - fused_obstacles = [] - - # 简易融合规则:LiDAR距离优先,视觉补充类别 - for lidar_obs in lidar_obstacles: - # 匹配视觉障碍物(方位角±5°内) - matched_visual = None - for visual_obs in visual_obstacles: - # 视觉方位角估算(基于横向偏移) - visual_angle = math.degrees(math.atan2(visual_obs["x"] * 0.01, visual_obs["distance"])) - if abs(visual_angle - lidar_obs["angle"]) < 5: - matched_visual = visual_obs - break - - fused_obstacles.append({ - "distance": lidar_obs["distance"], # LiDAR距离更精准 - "angle": lidar_obs["angle"], - "width": lidar_obs["width"], - "class": matched_visual["class"] if matched_visual else "unknown", - "confidence": matched_visual["confidence"] if matched_visual else 0.8 + self.lane_lines.append(((x1, y1), (x2, y2))) + + return self.lane_lines + + def detect_obstacles(self, lidar_points): + """基于LiDAR点云检测障碍物(聚类算法)""" + # 过滤地面点(z<0.1视为地面) + non_ground_points = lidar_points[lidar_points[:, 2] > 0.1] + self.obstacles = [] + + if len(non_ground_points) == 0: + return self.obstacles + + # 简单聚类(距离阈值法) + clusters = [] + while len(non_ground_points) > 0: + # 取第一个点作为聚类中心 + cluster_center = non_ground_points[0] + cluster = [cluster_center] + # 计算所有点到中心的距离 + distances = np.linalg.norm(non_ground_points - cluster_center, axis=1) + # 距离<2米的点归为同一聚类 + cluster_points = non_ground_points[distances < 2] + clusters.append(cluster_points) + # 移除已聚类的点 + non_ground_points = non_ground_points[distances >= 2] + + # 计算每个障碍物的位置和尺寸 + for cluster in clusters: + if len(cluster) < 5: # 过滤噪声点 + continue + # 障碍物中心 + center_x = np.mean(cluster[:, 0]) + center_y = np.mean(cluster[:, 1]) + # 障碍物尺寸 + size_x = np.max(cluster[:, 0]) - np.min(cluster[:, 0]) + size_y = np.max(cluster[:, 1]) - np.min(cluster[:, 1]) + size_z = np.max(cluster[:, 2]) - np.min(cluster[:, 2]) + # 障碍物距离 + distance = np.sqrt(center_x ** 2 + center_y ** 2) + + self.obstacles.append({ + "center": (center_x, center_y), + "size": (size_x, size_y, size_z), + "distance": distance, + "points": cluster }) - self.perception_data["fused_obstacle"] = fused_obstacles - - def _fusion_loop(self): - """数据融合循环(5Hz)""" - while self.running: - self._fusion_obstacle() - time.sleep(0.2) - - # ------------------- 5. 安全判断与接口 ------------------- - def check_safety(self): - """安全状态判断""" - # 1. 碰撞风险:融合障碍物距离<3米 - for obs in self.perception_data["fused_obstacle"]: - if obs["distance"] < 3.0: - return False, f"前方{obs['distance']:.1f}米检测到{obs['class']},碰撞风险!" - # 2. 车道偏离风险:偏移>0.5米 - if abs(self.perception_data["lane"]["center_offset"]) > 0.5 and self.perception_data["lane"]["detected"]: - return False, f"车道偏移{self.perception_data['lane']['center_offset']:.2f}米,偏离风险!" - # 3. 车速风险:超速(>10m/s=36km/h) - if self.perception_data["speed"] > 10.0: - return False, f"车速{self.perception_data['speed']:.1f}m/s,超速!" - return True, "安全" - - def get_perception_result(self): - """获取最新感知结果""" - return self.perception_data - - def start(self): - """启动感知系统""" - print("启动无人车感知系统...") - self.vision_thread.start() - self.lidar_thread.start() - self.state_thread.start() - self.fusion_thread.start() - - def stop(self): - """停止感知系统""" - self.running = False - # 等待线程结束 - self.vision_thread.join() - self.lidar_thread.join() - self.state_thread.join() - self.fusion_thread.join() - # 释放资源 - self.camera.release() - self.serial_port.close() + return self.obstacles + + def fuse_perception_data(self): + """融合视觉和LiDAR感知数据""" + # 融合逻辑:车道线位置 + 障碍物位置/距离 + 障碍物与车道线的相对位置 + self.perception_fusion_result = { + "lane_lines": self.lane_lines, + "obstacles": self.obstacles, + "obstacle_in_lane": [], + "lane_width": self.camera_resolution[0] // 3 # 估算车道宽度 + } + + # 判断障碍物是否在车道内 + for obs in self.obstacles: + obs_y = obs["center"][1] + # 车道横向范围(简化版) + lane_left = -self.perception_fusion_result["lane_width"] / 2 + lane_right = self.perception_fusion_result["lane_width"] / 2 + if lane_left <= obs_y <= lane_right: + self.perception_fusion_result["obstacle_in_lane"].append(obs) + + return self.perception_fusion_result + + def visualize_results(self): + """可视化感知结果""" + # 1. 可视化摄像头图像和车道线 + img = self.simulate_camera_data() + for line in self.lane_lines: + (x1, y1), (x2, y2) = line + cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2) + cv2.imshow("Lane Detection Result", img) + + # 2. 可视化LiDAR点云和障碍物 + lidar_points = self.simulate_lidar_data() + fig = plt.figure(figsize=(12, 5)) + + # 2.1 2D俯视图 + ax1 = fig.add_subplot(121) + ax1.scatter(lidar_points[:, 0], lidar_points[:, 1], s=1, c='gray', label='LiDAR Points') + for obs in self.obstacles: + ax1.scatter(obs["points"][:, 0], obs["points"][:, 1], s=2, c='red', + label='Obstacle' if 'Obstacle' not in ax1.get_legend_handles_labels()[1] else "") + ax1.set_xlabel("X (m) - Forward") + ax1.set_ylabel("Y (m) - Lateral") + ax1.set_title("LiDAR Top View") + ax1.legend() + ax1.grid(True) + + # 2.2 3D点云图 + ax2 = fig.add_subplot(122, projection='3d') + ax2.scatter(lidar_points[:, 0], lidar_points[:, 1], lidar_points[:, 2], s=1, c='gray') + for obs in self.obstacles: + ax2.scatter(obs["points"][:, 0], obs["points"][:, 1], obs["points"][:, 2], s=2, c='red') + ax2.set_xlabel("X (m)") + ax2.set_ylabel("Y (m)") + ax2.set_zlabel("Z (m)") + ax2.set_title("3D LiDAR Point Cloud") + + # 3. 打印融合结果 + print("\n=== Perception Fusion Result ===") + print(f"Detected lane lines: {len(self.lane_lines)}") + print(f"Detected obstacles: {len(self.obstacles)}") + print(f"Obstacles in lane: {len(self.perception_fusion_result['obstacle_in_lane'])}") + for i, obs in enumerate(self.perception_fusion_result['obstacle_in_lane']): + print(f" Obstacle {i + 1}: Distance = {obs['distance']:.2f}m, Size = {obs['size']}m") + + plt.tight_layout() + plt.show() + cv2.waitKey(0) cv2.destroyAllWindows() - print("无人车感知系统已停止") + + def run_perception(self): + """运行完整的感知流程""" + print("=== Starting Autonomous Vehicle Perception ===") + # 1. 读取传感器数据 + camera_img = self.simulate_camera_data() + lidar_points = self.simulate_lidar_data() + + # 2. 感知检测 + self.detect_lane_lines(camera_img) + self.detect_obstacles(lidar_points) + + # 3. 数据融合 + self.fuse_perception_data() + + # 4. 结果可视化 + self.visualize_results() -# ------------------- 测试代码 ------------------- +# 运行感知系统 if __name__ == "__main__": - # 初始化感知系统 - car_perception = AutonomousCarPerception() - - try: - # 启动感知 - car_perception.start() - - # 主循环打印感知结果 - while True: - data = car_perception.get_perception_result() - is_safe, msg = car_perception.check_safety() - - print(f"\n=== 无人车感知数据 [{time.ctime()}] ===") - print(f"车速: {data['speed']:.2f}m/s, 航向角: {data['heading']:.1f}°") - print( - f"车道线: {'检测到' if data['lane']['detected'] else '未检测到'}, 偏移: {data['lane']['center_offset']:.2f}m") - print(f"视觉障碍物数量: {len(data['visual_obstacle'])}") - print(f"LiDAR障碍物数量: {len(data['lidar_obstacle'])}") - print(f"融合障碍物数量: {len(data['fused_obstacle'])}") - print(f"安全状态: {'✅ 安全' if is_safe else '❌ 危险'} - {msg}") - - time.sleep(1) - - except KeyboardInterrupt: - car_perception.stop() - print("程序已手动终止") + perception_system = AutonomousVehiclePerception() + perception_system.run_perception() \ No newline at end of file From d935e02277cf28ebece72f3380a4eb59afa6752f Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 19:18:37 +0800 Subject: [PATCH 06/26] =?UTF-8?q?=E5=9C=A8Carla=E4=B8=AD=E8=BF=90=E8=A1=8C?= =?UTF-8?q?=E4=BB=A3=E7=A0=81=EF=BC=8C=E8=BD=A6=E5=AD=90=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E6=88=90=E5=8A=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 261 ++------------------- 1 file changed, 24 insertions(+), 237 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 6a2a472d5a..ad858a2f8e 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -1,247 +1,34 @@ -import cv2 -import numpy as np -import random -import matplotlib.pyplot as plt -from mpl_toolkits.mplot3d import Axes3D +import carla -# 随机种子固定,保证结果可复现 -np.random.seed(42) -random.seed(42) +def main(): + # 1. 连接Carla模拟器 + client = carla.Client("localhost", 2000) + client.set_timeout(10.0) -class AutonomousVehiclePerception: - def __init__(self): - # 传感器参数初始化 - self.camera_resolution = (640, 480) # 摄像头分辨率 - self.lidar_fov = 180 # LiDAR水平视场角(度) - self.lidar_points_num = 1000 # 单次扫描点云数量 - self.lidar_max_range = 50 # LiDAR最大探测距离(米) + try: + world = client.get_world() + print("✅ 成功连接Carla模拟器!") + print("📌 当前仿真地图:", world.get_map().name) - # 感知结果存储 - self.lane_lines = [] # 检测到的车道线 - self.obstacles = [] # 检测到的障碍物(位置+尺寸) - self.perception_fusion_result = {} # 融合结果 + # 2. 获取车辆蓝图 + vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") - def simulate_camera_data(self): - """模拟摄像头图像数据(生成带车道线的道路图像)""" - # 创建黑色背景 - img = np.zeros((self.camera_resolution[1], self.camera_resolution[0], 3), dtype=np.uint8) + # 3. 改用Carla内置的合法生成点(无碰撞) + spawn_points = world.get_map().get_spawn_points() # 获取所有合法生成点 + if spawn_points: + vehicle = world.spawn_actor(vehicle_bp, spawn_points[0]) # 用第一个合法点 + print("🚗 成功生成特斯拉车辆,ID:", vehicle.id) - # 绘制道路和车道线 - road_color = (50, 50, 50) - lane_color = (255, 255, 0) - cv2.rectangle(img, (0, self.camera_resolution[1] // 2), - (self.camera_resolution[0], self.camera_resolution[1]), - road_color, -1) + # 车辆简单前进 + vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0)) + print("🚙 车辆已启动前进!") + else: + print("⚠️ 未找到合法的车辆生成点") - # 绘制两条车道线(带轻微弯曲) - y = np.linspace(self.camera_resolution[1] // 2, self.camera_resolution[1] - 10, 100) - x1 = 0.0001 * (y - self.camera_resolution[1] // 2) ** 2 + self.camera_resolution[0] // 3 - x2 = -0.0001 * (y - self.camera_resolution[1] // 2) ** 2 + 2 * self.camera_resolution[0] // 3 + except Exception as e: + print("❌ 调用失败:", e) - for i in range(len(y) - 1): - cv2.line(img, (int(x1[i]), int(y[i])), (int(x1[i + 1]), int(y[i + 1])), lane_color, 3) - cv2.line(img, (int(x2[i]), int(y[i])), (int(x2[i + 1]), int(y[i + 1])), lane_color, 3) - # 添加随机噪声 - noise = np.random.randint(0, 50, img.shape, dtype=np.uint8) - img = cv2.add(img, noise) - return img - - def simulate_lidar_data(self): - """模拟LiDAR点云数据(包含障碍物点云)""" - # 生成基础点云(道路平面) - angles = np.linspace(-self.lidar_fov / 2, self.lidar_fov / 2, self.lidar_points_num) * np.pi / 180 - ranges = np.random.uniform(1, self.lidar_max_range, self.lidar_points_num) - - # 转换为笛卡尔坐标(x: 前向, y: 横向, z: 高度) - x = ranges * np.cos(angles) - y = ranges * np.sin(angles) - z = np.zeros_like(x) # 道路平面z=0 - - # 添加障碍物(随机生成1-3个障碍物) - obstacle_num = random.randint(1, 3) - for _ in range(obstacle_num): - # 障碍物中心位置(前向10-40米,横向-5到5米) - obs_x = random.uniform(10, 40) - obs_y = random.uniform(-5, 5) - # 障碍物点云范围(2x2米) - obs_angles = np.linspace(-np.pi / 4, np.pi / 4, 50) - obs_ranges = np.random.uniform(0.5, 1.5, 50) - obs_x_points = obs_x + obs_ranges * np.cos(obs_angles) - obs_y_points = obs_y + obs_ranges * np.sin(obs_angles) - obs_z_points = np.random.uniform(0, 1.5, 50) # 障碍物高度0-1.5米 - - # 合并障碍物点云 - x = np.concatenate([x, obs_x_points]) - y = np.concatenate([y, obs_y_points]) - z = np.concatenate([z, obs_z_points]) - - return np.vstack([x, y, z]).T - - def detect_lane_lines(self, img): - """基于摄像头图像检测车道线(霍夫变换)""" - # 预处理:灰度化→高斯模糊→边缘检测 - gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) - blur = cv2.GaussianBlur(gray, (5, 5), 0) - edges = cv2.Canny(blur, 50, 150) - - # 感兴趣区域(ROI):只保留道路部分 - mask = np.zeros_like(edges) - roi_vertices = np.array([[(0, self.camera_resolution[1]), - (self.camera_resolution[0] // 3, self.camera_resolution[1] // 2), - (2 * self.camera_resolution[0] // 3, self.camera_resolution[1] // 2), - (self.camera_resolution[0], self.camera_resolution[1])]], dtype=np.int32) - cv2.fillPoly(mask, roi_vertices, 255) - masked_edges = cv2.bitwise_and(edges, mask) - - # 霍夫直线检测 - lines = cv2.HoughLinesP(masked_edges, rho=1, theta=np.pi / 180, threshold=20, - minLineLength=30, maxLineGap=200) - - # 筛选并存储车道线 - self.lane_lines = [] - if lines is not None: - for line in lines: - x1, y1, x2, y2 = line[0] - self.lane_lines.append(((x1, y1), (x2, y2))) - - return self.lane_lines - - def detect_obstacles(self, lidar_points): - """基于LiDAR点云检测障碍物(聚类算法)""" - # 过滤地面点(z<0.1视为地面) - non_ground_points = lidar_points[lidar_points[:, 2] > 0.1] - self.obstacles = [] - - if len(non_ground_points) == 0: - return self.obstacles - - # 简单聚类(距离阈值法) - clusters = [] - while len(non_ground_points) > 0: - # 取第一个点作为聚类中心 - cluster_center = non_ground_points[0] - cluster = [cluster_center] - # 计算所有点到中心的距离 - distances = np.linalg.norm(non_ground_points - cluster_center, axis=1) - # 距离<2米的点归为同一聚类 - cluster_points = non_ground_points[distances < 2] - clusters.append(cluster_points) - # 移除已聚类的点 - non_ground_points = non_ground_points[distances >= 2] - - # 计算每个障碍物的位置和尺寸 - for cluster in clusters: - if len(cluster) < 5: # 过滤噪声点 - continue - # 障碍物中心 - center_x = np.mean(cluster[:, 0]) - center_y = np.mean(cluster[:, 1]) - # 障碍物尺寸 - size_x = np.max(cluster[:, 0]) - np.min(cluster[:, 0]) - size_y = np.max(cluster[:, 1]) - np.min(cluster[:, 1]) - size_z = np.max(cluster[:, 2]) - np.min(cluster[:, 2]) - # 障碍物距离 - distance = np.sqrt(center_x ** 2 + center_y ** 2) - - self.obstacles.append({ - "center": (center_x, center_y), - "size": (size_x, size_y, size_z), - "distance": distance, - "points": cluster - }) - - return self.obstacles - - def fuse_perception_data(self): - """融合视觉和LiDAR感知数据""" - # 融合逻辑:车道线位置 + 障碍物位置/距离 + 障碍物与车道线的相对位置 - self.perception_fusion_result = { - "lane_lines": self.lane_lines, - "obstacles": self.obstacles, - "obstacle_in_lane": [], - "lane_width": self.camera_resolution[0] // 3 # 估算车道宽度 - } - - # 判断障碍物是否在车道内 - for obs in self.obstacles: - obs_y = obs["center"][1] - # 车道横向范围(简化版) - lane_left = -self.perception_fusion_result["lane_width"] / 2 - lane_right = self.perception_fusion_result["lane_width"] / 2 - if lane_left <= obs_y <= lane_right: - self.perception_fusion_result["obstacle_in_lane"].append(obs) - - return self.perception_fusion_result - - def visualize_results(self): - """可视化感知结果""" - # 1. 可视化摄像头图像和车道线 - img = self.simulate_camera_data() - for line in self.lane_lines: - (x1, y1), (x2, y2) = line - cv2.line(img, (x1, y1), (x2, y2), (0, 255, 0), 2) - cv2.imshow("Lane Detection Result", img) - - # 2. 可视化LiDAR点云和障碍物 - lidar_points = self.simulate_lidar_data() - fig = plt.figure(figsize=(12, 5)) - - # 2.1 2D俯视图 - ax1 = fig.add_subplot(121) - ax1.scatter(lidar_points[:, 0], lidar_points[:, 1], s=1, c='gray', label='LiDAR Points') - for obs in self.obstacles: - ax1.scatter(obs["points"][:, 0], obs["points"][:, 1], s=2, c='red', - label='Obstacle' if 'Obstacle' not in ax1.get_legend_handles_labels()[1] else "") - ax1.set_xlabel("X (m) - Forward") - ax1.set_ylabel("Y (m) - Lateral") - ax1.set_title("LiDAR Top View") - ax1.legend() - ax1.grid(True) - - # 2.2 3D点云图 - ax2 = fig.add_subplot(122, projection='3d') - ax2.scatter(lidar_points[:, 0], lidar_points[:, 1], lidar_points[:, 2], s=1, c='gray') - for obs in self.obstacles: - ax2.scatter(obs["points"][:, 0], obs["points"][:, 1], obs["points"][:, 2], s=2, c='red') - ax2.set_xlabel("X (m)") - ax2.set_ylabel("Y (m)") - ax2.set_zlabel("Z (m)") - ax2.set_title("3D LiDAR Point Cloud") - - # 3. 打印融合结果 - print("\n=== Perception Fusion Result ===") - print(f"Detected lane lines: {len(self.lane_lines)}") - print(f"Detected obstacles: {len(self.obstacles)}") - print(f"Obstacles in lane: {len(self.perception_fusion_result['obstacle_in_lane'])}") - for i, obs in enumerate(self.perception_fusion_result['obstacle_in_lane']): - print(f" Obstacle {i + 1}: Distance = {obs['distance']:.2f}m, Size = {obs['size']}m") - - plt.tight_layout() - plt.show() - cv2.waitKey(0) - cv2.destroyAllWindows() - - def run_perception(self): - """运行完整的感知流程""" - print("=== Starting Autonomous Vehicle Perception ===") - # 1. 读取传感器数据 - camera_img = self.simulate_camera_data() - lidar_points = self.simulate_lidar_data() - - # 2. 感知检测 - self.detect_lane_lines(camera_img) - self.detect_obstacles(lidar_points) - - # 3. 数据融合 - self.fuse_perception_data() - - # 4. 结果可视化 - self.visualize_results() - - -# 运行感知系统 if __name__ == "__main__": - perception_system = AutonomousVehiclePerception() - perception_system.run_perception() \ No newline at end of file + main() \ No newline at end of file From 1b3eff238114738a1eb8abbdbef4b3c132e54461 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 21:23:11 +0800 Subject: [PATCH 07/26] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BA=86readme=E6=96=87=E4=BB=B6=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=BB=A3=E7=A0=81=E8=B0=83=E7=94=A8?= =?UTF-8?q?Carla=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/README.md | 159 +++++++++---------- src/Unmanned_Aerial_car_Perception/img.png | Bin 6029 -> 0 bytes src/Unmanned_Aerial_car_Perception/img_1.png | Bin 6029 -> 0 bytes 3 files changed, 78 insertions(+), 81 deletions(-) delete mode 100644 src/Unmanned_Aerial_car_Perception/img.png delete mode 100644 src/Unmanned_Aerial_car_Perception/img_1.png diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md index dd2969b6e0..8c38c8a280 100644 --- a/src/Unmanned_Aerial_car_Perception/README.md +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -9,94 +9,95 @@ ### 1.2 ??????? -#### 1.2.1 ???????? +### 1.2.1 ???????? ????????????????????????????????????????????????????????????[5]?????????????[6]??????????????????????????????????????????????????YOLO???Faster R-CNN?2D?????????????????[7-8]???BEV?Bird's Eye View???????BEVFormer?DETR3D?3D????????LiDAR????????????????????????????[9-10]? LiDAR?????????????????????????????????????LiDAR?????????RANSAC???????[11]?????????????????DBSCAN???????????[12]????????????????????PointNet???????????[13]?????????????????LiDAR?????????????????????????????????????????? ???????????????????????IMU??????????????100Hz??????????????????????????????GPS/RTK??????????????????????????10Hz?????????[14]?????????EKF??????????UKF??IMU?GPS???????[15]????????????????????SLAM????RTAB-Map[16]???????????????GPS?????????? -#### 1.2.2 ???????? +### 1.2.2 ???????? ?????????????????????????????????????????????[17]????????????????????????LiDAR????????[18]??????????????????????????????????SIFT?????FPFH??????????????[19]???????????????????????????????????[20]?????????????????? ??????????????????????????????????????EKF/UKF?????????????FusionNet[21]?PointPillars[22]?????EKF?????????????????????????????????????????????????????????????????????????????????????????[23]? -#### 1.2.3 ??????? +### 1.2.3 ??????? ??????????????????NVIDIA Jetson???Mobileye EyeQ?????????????????????????[24]??????????????????????????????????????????????????????????[25]??YOLOv8n???????????6.2M????????????3?????????????CUDA?TensorRT????????????[26]????????????????????????????????????????????????LiDAR???????????????????????????[27]? ### 1.3 ???????????? ????????????????????????????????? +* 1.???????+LiDAR+IMU+GPS???????????????????????????????????????????????16?LiDAR+???????????????? +* 2.????EKF?????????????????????/LiDAR??????????IMU?????GPS?????????????? +* 3.??Jetson Xavier??????????????????????YOLOv8n?????????TensorRT???????????????????30ms? +* 4.????????????????????????????????????????????????????? -##### **_1.???????+LiDAR+IMU+GPS???????????????????????????????????????????????16?LiDAR+????????????????2.????EKF?????????????????????/LiDAR??????????IMU?????GPS?????????????? +### 1.4 ?????? -##### 3.??Jetson Xavier??????????????????????YOLOv8n?????????TensorRT???????????????????30ms? - -##### 4.????????????????????????????????????????????????????? +?????5???1??????????????????????????????2?????????????????????LiDAR???????????????????????3???????????????????????????4????????????????????????????5?????????????? ## 2 ????????? ### 2.1 ?????? ?????????????????????????????????????????????1??? -?????1080P@30fps?????16????LiDAR?100Hz IMU?10Hz GPS/RTK?50Hz????????????????????????????????????? -* ???????????????????????????????EKF?????????????????????????? -* ?????????????????????????????????????????????????????**???????????????????????????? +??????? +* ??????1080P@30fps?????16????LiDAR?100Hz IMU?10Hz GPS/RTK?50Hz????????????????????????????????????? +* ????????????????????????????????EKF?????????????????????????? +* ?????????????????????????????????????????????????????????????????????????????????? ### 2.2 ???????? ???????????????????????????????+?????????????????????? -#### 2.2.1 ????? +### 2.2.1 ????? ???????????-????-??????????????????? -* 5.??????????????????????????????????55???????????????????????????????????????????????????????????????????Canny??????????????? -* 6.??????ROI?????????????????????????????ROI????????1/2???????????????????? -* 7.?????????????????HoughLinesP???ROI???????????????50px?????100px??????????????????????????????????????????????? -* 8.????????????MobileNetV2??????????????????????????????????????????????????????????????????? +* ??????????????????????????????????55???????????????????????????????????????????????????????????????????Canny??????????????? +* ??????ROI?????????????????????????????ROI????????1/2???????????????????? +* ?????????????????HoughLinesP???ROI???????????????50px?????100px??????????????????????????????????????????????? +* ????????????MobileNetV2??????????????????????????????????????????????????????????????????? +?????????????1???? +$$d = (x_c - x_f) \times k \tag{1}$$ +???$x_c$????????????$x_f$?????????????$k$???-??????????????????$k=0.008$m/????$d$??????????????????????????? -#### 2.2.2 ????? +### 2.2.2 ????? ?????YOLOv8n?????????????????????????? -* ????????COCO???????????????????????????10000?????????????????3???????Mosaic??????????????????????????? -* ???????YOLOv8n??INT8????????????6.2M??1.5M???????3?????????????????????????? -* ??????????????????????????????????????????2???? $$D = \frac{H \times f}{h} \tag{2}$$ ???$H$???????????1.5m???1.7m??$f$???????????????????$h$???????????$D$?????????????? -#### 2.3 LiDAR?????? +### 2.3 LiDAR?????? LiDAR???????????????????????????????????????????? -#### 2.3.1 ????? - -LiDAR??????????????????????????????????????? -* ?????????????????????20??????2.0??????????????? -* ??????????????????????0.2m0.2m0.2m??????????????? -* ???????RANSAC??????????????$ax+by+cz+d=0$????????1000?????0.1m????????????????????? +### 2.3.1 ????? -#### 2.3.2 ?????????? - -????????DBSCAN????????????????????????? +LiDAR??????????????????????????????????????? +?????????????????????20??????2.0??????????????? +??????????????????????0.2m0.2m0.2m??????????????? +???????RANSAC??????????????$ax+by+cz+d=0$????????1000?????0.1m????????????????????? +2.3.2 ?????????? +* ????????DBSCAN????????????????????????? * ???????????$\epsilon=0.5$m???????$min\_points=10$??????????????????????? * ???????????????????$(x,y,z)$???????$D=\sqrt{x^2+y^2+z^2}$????$\theta=\arctan2(y,x)$?????????????????x?y?z?????????? -#### 2.4 ???????? +### 2.4 ???????? ?????????????????????????????????EKF??????????? -#### 2.4.1 ???? +### 2.4.1 ???? ??????IMU??????????100Hz????????30Hz??LiDAR???10Hz?????????????????????????????????? ??????????????????LiDAR?????$T_{cam-lidar}$??????$R$?????$t$????????????????LiDAR?????????????????????????????????3???? $$P_{lidar} = R \times P_{cam} + t \tag{3}$$ ???$P_{cam}$??????????????$P_{lidar}$?????LiDAR??????? -#### 2.4.2 ??EKF???? +### 2.4.2 ??EKF???? ??EKF???IMU?GPS?????????/LiDAR??????????????????????????? -#### 2.4.2.1 ???? +### 2.4.2.1 ???? ??????$\mathbf{X}=[x,y,v_x,v_y,\theta]^T$???$x,y$??????????????$v_x,v_y$????x?y??????$\theta$????????????4???? $$\mathbf{X}_{k} = \mathbf{F}_k \mathbf{X}_{k-1} + \mathbf{G}_k \mathbf{w}_{k-1} \tag{4}$$ @@ -104,7 +105,7 @@ $$\mathbf{X}_{k} = \mathbf{F}_k \mathbf{X}_{k-1} + \mathbf{G}_k \mathbf{w}_{k-1} $$\mathbf{F}_k = \begin{bmatrix} 1 & 0 & \Delta t & 0 & 0 \\ 0 & 1 & 0 & \Delta t & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} \tag{5}$$ ???$\Delta t$??????????? -#### 2.4.2.2 ???? +### 2.4.2.2 ???? ??????$\mathbf{Z}=[x_{gps},y_{gps},d_{lane},D_{lidar}]^T$???$x_{gps},y_{gps}$?GPS????????$d_{lane}$?????????????$D_{lidar}$?LiDAR????????????????6???? $$\mathbf{Z}_k = \mathbf{H}_k \mathbf{X}_k + \mathbf{v}_k \tag{6}$$ @@ -112,7 +113,7 @@ $$\mathbf{Z}_k = \mathbf{H}_k \mathbf{X}_k + \mathbf{v}_k \tag{6}$$ $$\mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & k_d \\ 0 & 0 & 0 & 0 & k_D \end{bmatrix} \tag{7}$$ ???$k_d,k_D$????????????????????????????????? -#### 2.4.2.3 ?????? +### 2.4.2.3 ?????? EKF??????????????????? ????????????????????????????????????????????? @@ -128,7 +129,7 @@ EKF??????????????????? $$\mathbf{Q}_k = \text{diag}(0.01,0.01,0.001,0.001,0.005) \tag{13}$$ $$\mathbf{R}_k = \text{diag}(0.1,0.1,0.05,0.02) \tag{14}$$ -#### 2.5 ??????? +### 2.5 ??????? ??NVIDIA Jetson Xavier NX?????????????????8?ARM Cortex-A78CPU?16GB LPDDR4X???384?CUDA GPU??????Ubuntu 20.04 LTS?ROS Noetic?CUDA 11.4?TensorRT 8.5? ????????? @@ -139,29 +140,29 @@ EKF??????????????????? ## 3 ??????? -#### 3.1 ???????? +### 3.1 ???????? -#### 3.1.1 ???? +### 3.1.1 ???? ????????????????????1??? ?1 ??????????? -### ???????????? -| ?? | ?? | ???? | -|:--------|:------------------------|:----------------------------| -| ?????? | NVIDIA Jetson Xavier NX | 8?CPU?384?GPU?16GB?? | -| ?? | IMX219???? | 1080P????30fps???6mm????70 | -| LiDAR | Velodyne VLP-16 | 16??????0.1-100m?????3cm | -| IMU | MPU6050 | ????100Hz?????0.1 | -| GPS/RTK | UBLOX M8N | ????10Hz?RTK????0.5m | -| ??? | ????? | ????50Hz?????0.1m/s | - -#### 3.1.2 ???????? + +| ?? | ?? | ???? | +|------------|-----------------------|-----------------------------------| +| ?????? | NVIDIA Jetson Xavier NX | 8?CPU,384?GPU,16GB?? | +| ?? | IMX219???? | 1080P/30fps,??6mm,???70 | +| LiDAR | Velodyne VLP-16 | 16?,0.1-100m,??3cm | +| IMU | MPU6050 | 100Hz,????0.1 | +| GPS/RTK | UBLOX M8N | 10Hz,RTK??0.5m | +| ??? | ????? | 50Hz,????0.1m/s | + +### 3.1.2 ???????? ??????????????????????????? * ???????????10km/h??????????????????????? * ???????????30km/h???????????????????????? * ????????????40km/h????????????????????????? -* ??????????????????????????KITTI[28]?BDD100K[29]????????????????????????????????10000???????????????????????????????????1000??????????????????? +??????????????????????????KITTI[28]?BDD100K[29]????????????????????????????????10000???????????????????????????????????1000??????????????????? ### 3.2 ???? @@ -173,56 +174,51 @@ EKF??????????????????? ### 3.3 ??????? -#### 3.3.1 ??????? +### 3.3.1 ??????? ?????????????????YOLOv8n???LiDAR?DBSCAN???????????????????2??? -**?2 ?????????????** +?2 ????????????? -| ?? | ????%? | ????%? | mAP?%? | -|:---------------|:------:|:------:|:------:| -| ????YOLOv8n? | 88.5 | 86.2 | 87.3 | -| ?LiDAR?DBSCAN? | 90.3 | 89.1 | 89.7 | -| ?????? | 95.2 | 94.1 | 94.7 | +| ?? | ????%? | ????%? | mAP?%? | +|--------------|-------------|-------------|----------| +| ????YOLOv8n? | 88.5 | 86.2 | 87.3 | +| ?LiDAR?DBSCAN? | 90.3 | 89.1 | 89.7 | +| ?????? | 95.2 | 94.1 | 94.7 | ??2??????????????????mAP????????????mAP????????7.4???????LiDAR????5??????????????????????????LiDAR?????????????????????????????????????????????mAP???72.5%??LiDAR??mAP???82.3%????????mAP????89.6%??????????????? -#### 3.3.2 ??????? +### 3.3.2 ??????? ???????????????3??? -**?3 ???????????** +?3 ??????????? | ?? | MAE?m? | RMSE?m? | -|:-------------|:--------:|:---------:| +|--------------|----------|-----------| | ?????? | 0.18 | 0.22 | | ?????? | 0.07 | 0.09 | -??3?????????????+?????????????????MAE??0.07m?RMSE?0.09m????0.1m??????????????????MAE??61.1%?RMSE??59.1%???????????????????????????????????????????????????????????? -#### 3.3.3 ?????? +### 3.3.3 ?????? ????????????4??? -?4 ???????? -**?4 ????????** | ?? | ????MAE?m? | ?????MAE?? | -|:--------------------|:-----------------|:-------------------| -| GPS+IMU???EKF?| 0.32 | 0.85 | -| ????EKF | 0.15 | 0.32 | - +|---------------------|------------------|--------------------| +| GPS+IMU???EKF? | 0.32 | 0.85 | +| ????EKF | 0.15 | 0.32 | ??4???????EKF???????MAE?0.15m??????MAE?0.32????EKF??????53.1%?62.4%???????EKF?????????????????/LiDAR?????????????IMU??????GPS?????????GPS?????????????EKF???????????1.2m????????????????0.3m??????????????? -#### 3.3.4 ??????? +### 3.3.4 ??????? ????????????????5??? -?5 ??????? -**?5 ???????** | ?? | ?????ms? | -|:-------------------------|:--------------:| +|--------------------------|----------------| | ????????+???? | 12 | -| LiDAR??????+??? | 10 | +| LiDAR??????+??? | 10 | | ?????? | 5 | | ?????? | 27 | ??5?????????????????27ms???30ms???L2???????????????????50ms???????????????????TensorRT????????12ms?LiDAR????????????????????10ms???????????????5ms?????????????????????????????????????? -4 ????? + +## 4 ????? ### 4.1 ???? @@ -233,7 +229,7 @@ EKF??????????????????? ### 4.2 ???? -?????????????????????? +* ?????????????????????? * ????????????????????????????????????????????????????????? * ??????????????????????????????????????????????????????????+LiDAR+?????+?????????????????????????? * ??????????Transformer???????????????????LiDAR????????????????????????????? @@ -242,13 +238,13 @@ EKF??????????????????? ## 5 ?? ?????????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? -* ??????????????????????????+?????????????????????????????LiDAR?????????RANSAC?????DBSCAN????????????????? -* ?????EKF?????????/LiDAR???????????IMU?????GPS??????????????? -* ????????????????????????????????????27ms????????? -* ???????????????????????????????????mAP?94.7%????????????0.1m??????????????????L2??????????? +??????????????????????????+?????????????????????????????LiDAR?????????RANSAC?????DBSCAN????????????????? +?????EKF?????????/LiDAR???????????IMU?????GPS??????????????? +????????????????????????????????????27ms????????? +???????????????????????????????????mAP?94.7%????????????0.1m??????????????????L2??????????? ?????????????????????????????????????????????????L2-L4???????????????????? -## ???? +### ???? * [1] ???, ???, ???. ?????????????????[J]. ??????, 2020, 22(1): 6-14. * [2] ??, ???, ???. ????????????????[J]. ????, 2021, 50(3): 378-395. @@ -273,4 +269,5 @@ EKF??????????????????? * [21] Chen Y, Mao Y, Zhang J. FusionNet: A deep learning architecture for multi-modal sensor fusion[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops. 2020: 1-9. * [22] Lang H, Vora S, Caesar H, et al. PointPillars: Fast encoders for object detection from point clouds[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 12697-12705. * [23] ??, ???, ???. ?????????????????[J]. ?????, 2021, 47(7): 1289-1308. -* [24] ???. Jetson Xavier NX?????[EB/OL]. \ No newline at end of file +* [24] ???. Jetson Xavier NX?????[EB/OL]. https://developer.nvidia.com/embedded/jetson-xavier-nx, 2022. +* [25] Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and Huffman coding[C]//Proceedings of the International \ No newline at end of file diff --git a/src/Unmanned_Aerial_car_Perception/img.png b/src/Unmanned_Aerial_car_Perception/img.png deleted file mode 100644 index dad2e0102345f671428a0635eab7a52179ddb334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6029 zcmeAS@N?(olHy`uVBq!ia0y~yU;$!wGY%%8$huIG9tH;S5KkA!kczlB2N@ZGf(;Y? zt$)V>(l81}Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz5lq2sGSob_R_Q zFgX5?uRc7iy*lc-(GVC7fzc2c4S~@RpjrqV@Nep6U_AIDvlL{cr>mdKI;Vst0IDq+ Ag#Z8m diff --git a/src/Unmanned_Aerial_car_Perception/img_1.png b/src/Unmanned_Aerial_car_Perception/img_1.png deleted file mode 100644 index dad2e0102345f671428a0635eab7a52179ddb334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6029 zcmeAS@N?(olHy`uVBq!ia0y~yU;$!wGY%%8$huIG9tH;S5KkA!kczlB2N@ZGf(;Y? zt$)V>(l81}Ltr!nMnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz5lq2sGSob_R_Q zFgX5?uRc7iy*lc-(GVC7fzc2c4S~@RpjrqV@Nep6U_AIDvlL{cr>mdKI;Vst0IDq+ Ag#Z8m From 2f046d6e19fd24ce718e834e296a5c2a4ec7228c Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 21:38:17 +0800 Subject: [PATCH 08/26] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BA=86readme=E6=96=87=E4=BB=B6=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=BB=A3=E7=A0=81=E8=B0=83=E7=94=A8?= =?UTF-8?q?Carla=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md index 8c38c8a280..552e5f1288 100644 --- a/src/Unmanned_Aerial_car_Perception/README.md +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -237,7 +237,7 @@ EKF??????????????????? ## 5 ?? -?????????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? +????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? ??????????????????????????+?????????????????????????????LiDAR?????????RANSAC?????DBSCAN????????????????? ?????EKF?????????/LiDAR???????????IMU?????GPS??????????????? ????????????????????????????????????27ms????????? From 9620cf6994eee73dfa7dd2db7645957c412aa459 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 21:50:20 +0800 Subject: [PATCH 09/26] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BA=86readme=E6=96=87=E4=BB=B6=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=BB=A3=E7=A0=81=E8=B0=83=E7=94=A8?= =?UTF-8?q?Carla=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/README.md | 2 +- src/Unmanned_Aerial_car_Perception/img.png | Bin 0 -> 184764 bytes src/Unmanned_Aerial_car_Perception/img_1.png | Bin 0 -> 184764 bytes 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/Unmanned_Aerial_car_Perception/img.png create mode 100644 src/Unmanned_Aerial_car_Perception/img_1.png diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md index 552e5f1288..8c38c8a280 100644 --- a/src/Unmanned_Aerial_car_Perception/README.md +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -237,7 +237,7 @@ EKF??????????????????? ## 5 ?? -????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? +?????????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? ??????????????????????????+?????????????????????????????LiDAR?????????RANSAC?????DBSCAN????????????????? ?????EKF?????????/LiDAR???????????IMU?????GPS??????????????? ????????????????????????????????????27ms????????? diff --git a/src/Unmanned_Aerial_car_Perception/img.png b/src/Unmanned_Aerial_car_Perception/img.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc6a3ce9386ff6c527e085d6820d8bb9f01966c GIT binary patch literal 184764 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 z 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 Fe*smr+fx7l literal 0 HcmV?d00001 diff --git a/src/Unmanned_Aerial_car_Perception/img_1.png b/src/Unmanned_Aerial_car_Perception/img_1.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc6a3ce9386ff6c527e085d6820d8bb9f01966c GIT binary patch literal 184764 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 z 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 Fe*smr+fx7l literal 0 HcmV?d00001 From 65e8d29411cec09f6d919c7237b37a180ef0891d Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 21:53:31 +0800 Subject: [PATCH 10/26] =?UTF-8?q?=E9=87=8D=E6=96=B0=E7=94=9F=E6=88=90?= =?UTF-8?q?=E4=BA=86readme=E6=96=87=E4=BB=B6=EF=BC=8C=E5=B9=B6=E4=B8=94?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=BB=A3=E7=A0=81=E8=B0=83=E7=94=A8?= =?UTF-8?q?Carla=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/README.md | 336 +++++++++---------- 1 file changed, 168 insertions(+), 168 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md index 8c38c8a280..9e0624e735 100644 --- a/src/Unmanned_Aerial_car_Perception/README.md +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -1,257 +1,257 @@ -# ???????????????????? +# 无人车多传感器融合感知技术研究与工程实现 -## 1 ?? +## 1 引言 -### 1.1 ??????? +### 1.1 研究背景与意义 -????????????????????????????????????????????????????????[1]?????????????????????????????????????????????????????????[2]???????????????????????????????????????????????????????????????????????????????????????????????????????????[3]? -??????????????????????????????????????????????????????????LiDAR??????????????????????????????????????????????IMU????????????????????GPS/RTK???????????????????????????????????[4]????????????????????????????????????????????????????????????????????????????????????????????????????L2-L4?????????????????????????? +自动驾驶技术是智能交通体系的核心组成部分,其发展可显著提升交通效率、降低交通事故率,推动交通运输行业的智能化转型[1]。感知系统作为无人车的“感官中枢”,承担着环境认知与自身状态估计的关键任务,其性能直接决定自动驾驶的安全性与可靠性[2]。无人车感知需同步完成两大核心目标:一是环境感知,即实时、精准地识别道路边界、车道线、障碍物(车辆、行人、非机动车)、交通标识等外部环境信息;二是状态感知,即精确估计车辆自身的位置、速度、航向角、姿态等内部状态参数[3]。 +当前,单传感器感知方案在实际应用中存在诸多痛点:视觉感知依赖光照条件,在强光、逆光、雨雾等恶劣天气下鲁棒性显著下降;LiDAR虽具备高精度三维测距能力,但成本高昂,点云数据存在稀疏性问题,且在远距离场景下性能衰减明显;IMU可提供高频姿态数据,但存在积分累积误差;GPS/RTK能提供绝对位置信息,但更新频率低,在隧道、高楼密集区等遮挡场景下易失效[4]。此外,多传感器数据存在时空异步性,融合算法复杂度高,如何在嵌入式平台有限算力下实现高精度与低延迟的平衡,是无人车感知技术落地的核心挑战。因此,研究低成本、高鲁棒、低延迟的多传感器融合感知技术,对推动L2-L4级自动驾驶的规模化应用具有重要的工程价值与学术意义。 -### 1.2 ??????? +### 1.2 国内外研究现状 -### 1.2.1 ???????? +### 1.2.1 单传感器感知技术 -????????????????????????????????????????????????????????????[5]?????????????[6]??????????????????????????????????????????????????YOLO???Faster R-CNN?2D?????????????????[7-8]???BEV?Bird's Eye View???????BEVFormer?DETR3D?3D????????LiDAR????????????????????????????[9-10]? -LiDAR?????????????????????????????????????LiDAR?????????RANSAC???????[11]?????????????????DBSCAN???????????[12]????????????????????PointNet???????????[13]?????????????????LiDAR?????????????????????????????????????????? -???????????????????????IMU??????????????100Hz??????????????????????????????GPS/RTK??????????????????????????10Hz?????????[14]?????????EKF??????????UKF??IMU?GPS???????[15]????????????????????SLAM????RTAB-Map[16]???????????????GPS?????????? +视觉感知因成本低、信息丰富的优势,成为无人车感知的基础模块。早期研究多采用传统计算机视觉方法,如基于霍夫变换的车道线检测[5]、基于背景差分的障碍物检测[6],但此类方法泛化能力弱,难以适应复杂多变的道路场景。近年来,深度学习技术推动视觉感知精度的大幅提升,YOLO系列、Faster R-CNN等2D目标检测模型已广泛应用于障碍物识别[7-8];随着BEV(Bird's Eye View)技术的发展,BEVFormer、DETR3D等3D视觉模型实现了无LiDAR的三维感知,但其性能依赖大规模标注数据集与强大的算力支撑[9-10]。 +LiDAR凭借不受光照影响、三维测距精度高的特性,成为高阶自动驾驶的核心传感器。主流LiDAR感知技术包括:基于RANSAC算法的地面分割[11],可快速分离地面与非地面点云;基于DBSCAN、欧式聚类的障碍物检测[12],能有效提取离散点云中的障碍物轮廓;基于PointNet系列的点云深度学习模型[13],实现了障碍物的分类与语义分割。但LiDAR硬件成本较高,点云数据存在稀疏性问题,在远距离、雨雾雪等恶劣天气下感知性能易受影响。 +惯性与卫星导航感知是无人车状态估计的核心手段。IMU(惯性测量单元)更新频率可达100Hz以上,能实时输出姿态与加速度数据,但长期使用会产生累积误差;GPS/RTK可提供绝对位置信息,定位精度可达厘米级,但更新频率仅10Hz左右,易受遮挡影响[14]。扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)是IMU与GPS融合的经典方法[15],通过互补滤波降低单一传感器误差;紧耦合SLAM技术(如RTAB-Map[16])进一步融合视觉信息,提升了无GPS场景下的定位鲁棒性。 -### 1.2.2 ???????? +### 1.2.2 多传感器融合技术 -?????????????????????????????????????????????[17]????????????????????????LiDAR????????[18]??????????????????????????????????SIFT?????FPFH??????????????[19]???????????????????????????????????[20]?????????????????? -??????????????????????????????????????EKF/UKF?????????????FusionNet[21]?PointPillars[22]?????EKF?????????????????????????????????????????????????????????????????????????????????????????[23]? +多传感器融合是解决单传感器缺陷的核心路径,根据融合层次可分为数据级、特征级与决策级融合三类[17]。数据级融合直接处理原始传感器数据,如视觉图像与LiDAR点云的像素级配准[18],精度最高但计算复杂度大;特征级融合先提取各传感器的特征信息(如视觉SIFT特征、点云FPFH特征),再进行特征拼接与融合[19],兼顾精度与效率;决策级融合对各传感器的检测结果进行加权投票或概率融合[20],复杂度最低但精度依赖单传感器性能。 +当前主流融合算法可分为三类:基于规则的融合(如加权平均法)、基于滤波的融合(EKF/UKF)与基于深度学习的融合(如FusionNet[21]、PointPillars[22])。其中,EKF因计算效率高、适应性强,被广泛应用于无人车状态估计与多传感器融合;深度学习融合方法通过神经网络自动学习多源数据的关联特征,融合精度更高,但对算力要求严格,难以在嵌入式平台实时运行[23]。 -### 1.2.3 ??????? +### 1.2.3 嵌入式感知系统 -??????????????????NVIDIA Jetson???Mobileye EyeQ?????????????????????????[24]??????????????????????????????????????????????????????????[25]??YOLOv8n???????????6.2M????????????3?????????????CUDA?TensorRT????????????[26]????????????????????????????????????????????????LiDAR???????????????????????????[27]? +无人车感知系统需部署于嵌入式平台(如NVIDIA Jetson系列、Mobileye EyeQ系列),需在算力受限条件下实现高精度与低延迟的平衡[24]。为提升嵌入式平台的感知实时性,研究人员主要从两个方向突破:一是模型轻量化,通过量化、剪枝、蒸馏等技术压缩模型参数量[25],如YOLOv8n轻量化模型的参数量仅为6.2M,较传统模型推理速度提升3倍以上;二是硬件加速,利用CUDA、TensorRT等工具对模型进行推理加速[26],将深度学习模型的推理延迟降至毫秒级。此外,并行计算技术(如多线程、多进程)的应用,可实现视觉、LiDAR、融合等模块的异步并行处理,进一步提升系统整体运行效率[27]。 -### 1.3 ???????????? +### 1.3 本文主要研究内容与创新点 -????????????????????????????????? -* 1.???????+LiDAR+IMU+GPS???????????????????????????????????????????????16?LiDAR+???????????????? -* 2.????EKF?????????????????????/LiDAR??????????IMU?????GPS?????????????? -* 3.??Jetson Xavier??????????????????????YOLOv8n?????????TensorRT???????????????????30ms? -* 4.????????????????????????????????????????????????????? +本文围绕无人车多传感器融合感知技术展开研究,核心内容与创新点如下: +* 1.提出一种“视觉+LiDAR+IMU+GPS”的多模态感知框架,通过多传感器互补优势提升复杂场景下的感知鲁棒性,同时采用低成本传感器组合(16线LiDAR+普通工业相机)降低系统部署成本; +* 2.设计改进EKF融合算法,引入车道线偏移、障碍物距离等视觉/LiDAR特征作为观测值,修正IMU累积误差与GPS定位偏差,提升状态估计精度; +* 3.基于Jetson Xavier嵌入式平台搭建实时感知系统,通过模型轻量化(YOLOv8n量化)、硬件加速(TensorRT)与并行计算优化,实现感知端到端延迟≤30ms; +* 4.在园区、城区、乡村三类典型场景下开展大量实验,量化分析系统的感知精度、延迟与鲁棒性,验证方案的工程可行性。 -### 1.4 ?????? +### 1.4 论文结构安排 -?????5???1??????????????????????????????2?????????????????????LiDAR???????????????????????3???????????????????????????4????????????????????????????5?????????????? +本文共分为5章:第1章为引言,阐述研究背景、国内外研究现状、研究内容与创新点;第2章为感知方法与系统设计,详细介绍视觉感知、LiDAR感知、多传感器融合算法及嵌入式系统实现方案;第3章为实验设计与结果分析,通过多场景实验验证系统性能;第4章为讨论与展望,分析现有研究的不足并提出未来改进方向;第5章为结论,总结全文研究成果。 -## 2 ????????? +## 2 感知方法与系统设计 -### 2.1 ?????? +### 2.1 系统整体架构 -?????????????????????????????????????????????1??? -??????? -* ??????1080P@30fps?????16????LiDAR?100Hz IMU?10Hz GPS/RTK?50Hz????????????????????????????????????? -* ????????????????????????????????EKF?????????????????????????? -* ?????????????????????????????????????????????????????????????????????????????????? +本文设计的无人车多传感器融合感知系统采用分层架构,分为感知层、融合层与输出层,整体架构如图1所示。 +各层功能如下: +* •感知层:由1080P@30fps工业相机、16线机械式LiDAR、100Hz IMU、10Hz GPS/RTK及50Hz轮速计组成,完成原始数据采集与单传感器初步处理(如图像预处理、点云去噪); +* •融合层:核心层,负责多传感器数据的时间同步、空间配准,通过改进EKF算法完成多源特征融合与误差修正,输出统一的感知结果; +* •输出层:对融合后的感知结果进行标准化处理,生成障碍物信息(位置、类别、距离)、车道线信息(偏移量、曲率)、自身状态信息(位置、速度、航向角),供决策控制模块调用。 -### 2.2 ???????? +### 2.2 视觉感知模块设计 -???????????????????????????????+?????????????????????? +视觉感知模块的核心任务是车道线检测与障碍物检测,采用“传统视觉+深度学习”的混合方案,兼顾检测精度与实时性。 -### 2.2.1 ????? +### 2.2.1 车道线检测 -???????????-????-??????????????????? -* ??????????????????????????????????55???????????????????????????????????????????????????????????????????Canny??????????????? -* ??????ROI?????????????????????????????ROI????????1/2???????????????????? -* ?????????????????HoughLinesP???ROI???????????????50px?????100px??????????????????????????????????????????????? -* ????????????MobileNetV2??????????????????????????????????????????????????????????????????? -?????????????1???? +车道线检测采用“预处理-候选提取-深度学习修正”的三步法,具体流程如下: +* 图像预处理:首先对相机采集的彩色图像进行灰度化处理,减少计算量;采用5×5高斯滤波器进行平滑去噪,降低图像噪声对边缘检测的影响;通过自适应阈值二值化将灰度图像转换为二值图像,增强车道线与背景的对比度;最后采用Canny边缘检测算法提取图像边缘特征。 +* 感兴趣区域(ROI)裁剪:由于车道线仅分布在图像下半部分的道路区域,通过裁剪ROI(通常为图像底部1/2区域)可有效减少背景干扰,提升计算效率。 +* 候选车道线提取:采用概率霍夫变换(HoughLinesP)提取ROI内的直线候选,设置直线最小长度50px、最大间隙100px,过滤短距离噪声直线;根据直线斜率分离左、右车道线候选(左车道线斜率为负,右车道线斜率为正)。 +* 深度学习修正:采用轻量化MobileNetV2作为骨干网络,对车道线候选进行分类筛选,去除非车道线噪声;通过多项式拟合得到左、右车道线的连续曲线,计算车道线中心与车辆中心的偏移量。 +车道线偏移量计算公式如式(1)所示: $$d = (x_c - x_f) \times k \tag{1}$$ -???$x_c$????????????$x_f$?????????????$k$???-??????????????????$k=0.008$m/????$d$??????????????????????????? +其中,$x_c$为车道线中心的像素坐标,$x_f$为车辆中心对应的像素坐标,$k$为像素-米转换系数(通过相机标定获得,本文中$k=0.008$m/像素),$d$为车道线偏移量(正值表示车辆偏右,负值表示车辆偏左)。 -### 2.2.2 ????? +### 2.2.2 障碍物检测 -?????YOLOv8n?????????????????????????? +采用轻量化YOLOv8n模型实现视觉障碍物检测,针对无人车场景进行以下优化: $$D = \frac{H \times f}{h} \tag{2}$$ -???$H$???????????1.5m???1.7m??$f$???????????????????$h$???????????$D$?????????????? +其中,$H$为目标实际高度(如轿车1.5m、行人1.7m),$f$为相机焦距(像素,通过相机标定获得),$h$为检测框高度(像素),$D$为障碍物与车辆的距离(米)。 -### 2.3 LiDAR?????? +### 2.3 LiDAR感知模块设计 -LiDAR???????????????????????????????????????????? +LiDAR感知模块的核心任务是点云预处理与障碍物检测,通过地面分割与聚类算法提取障碍物的三维信息。 -### 2.3.1 ????? +### 2.3.1 点云预处理 -LiDAR??????????????????????????????????????? -?????????????????????20??????2.0??????????????? -??????????????????????0.2m0.2m0.2m??????????????? -???????RANSAC??????????????$ax+by+cz+d=0$????????1000?????0.1m????????????????????? -2.3.2 ?????????? -* ????????DBSCAN????????????????????????? -* ???????????$\epsilon=0.5$m???????$min\_points=10$??????????????????????? -* ???????????????????$(x,y,z)$???????$D=\sqrt{x^2+y^2+z^2}$????$\theta=\arctan2(y,x)$?????????????????x?y?z?????????? +LiDAR原始点云包含大量噪声与冗余数据,需进行预处理以提升后续检测精度,具体步骤如下: +离群点去除:采用统计滤波算法,设置邻域点数20、标准差阈值2.0,剔除距离邻域点过远的噪声点; +点云下采样:采用体素下采样算法,设置体素大小0.2m×0.2m×0.2m,减少点云数量,提升计算效率; +地面分割:采用RANSAC算法拟合地面平面(平面模型为$ax+by+cz+d=0$),设置迭代次数1000、距离阈值0.1m,分离地面点云与非地面点云(障碍物点云)。 +2.3.2 障碍物聚类与特征提取 +* 对非地面点云采用DBSCAN算法进行聚类,提取障碍物的三维特征,具体步骤如下: +* 聚类参数设置:邻域半径$\epsilon=0.5$m,最小聚类点数$min\_points=10$,确保能有效聚类车辆、行人等不同尺寸的障碍物; +* 特征计算:对每个聚类簇,计算其中心坐标$(x,y,z)$、与车辆的距离$D=\sqrt{x^2+y^2+z^2}$、方位角$\theta=\arctan2(y,x)$,以及障碍物的长、宽、高(聚类簇在x、y、z轴方向的最大差值)。 -### 2.4 ???????? +### 2.4 多传感器融合算法 -?????????????????????????????????EKF??????????? +多传感器融合的核心是解决数据的时空配准与误差修正问题,本文采用改进EKF算法实现多源数据融合。 -### 2.4.1 ???? +### 2.4.1 时空配准 -??????IMU??????????100Hz????????30Hz??LiDAR???10Hz?????????????????????????????????? -??????????????????LiDAR?????$T_{cam-lidar}$??????$R$?????$t$????????????????LiDAR?????????????????????????????????3???? +时间同步:以IMU数据为基准(更新频率100Hz),对视觉数据(30Hz)与LiDAR数据(10Hz)进行线性插值,将所有传感器数据统一到同一时间戳下,消除时间异步性; +空间配准:通过手眼标定实验获取相机与LiDAR的外参矩阵$T_{cam-lidar}$(含旋转矩阵$R$与平移向量$t$),将视觉图像中的像素坐标转换到LiDAR坐标系下,实现视觉特征与点云特征的空间对齐。外参矩阵转换公式如式(3)所示: $$P_{lidar} = R \times P_{cam} + t \tag{3}$$ -???$P_{cam}$??????????????$P_{lidar}$?????LiDAR??????? +其中,$P_{cam}$为相机坐标系下的特征点坐标,$P_{lidar}$为转换后的LiDAR坐标系下坐标。 -### 2.4.2 ??EKF???? +### 2.4.2 改进EKF融合算法 -??EKF???IMU?GPS?????????/LiDAR??????????????????????????? +传统EKF仅融合IMU与GPS数据,本文引入视觉/LiDAR特征作为观测值,优化状态方程与观测方程,提升融合精度。 -### 2.4.2.1 ???? +### 2.4.2.1 状态方程 -??????$\mathbf{X}=[x,y,v_x,v_y,\theta]^T$???$x,y$??????????????$v_x,v_y$????x?y??????$\theta$????????????4???? +定义状态向量$\mathbf{X}=[x,y,v_x,v_y,\theta]^T$,其中$x,y$为车辆在大地坐标系下的位置,$v_x,v_y$为车辆在x、y方向的速度,$\theta$为航向角。状态方程如式(4)所示: $$\mathbf{X}_{k} = \mathbf{F}_k \mathbf{X}_{k-1} + \mathbf{G}_k \mathbf{w}_{k-1} \tag{4}$$ -???$\mathbf{F}_k$????????$\mathbf{G}_k$??????????$\mathbf{w}_{k-1}$????????????$N(0,\mathbf{Q}_k)$????????$\mathbf{F}_k$???5???? +其中,$\mathbf{F}_k$为状态转移矩阵,$\mathbf{G}_k$为过程噪声驱动矩阵,$\mathbf{w}_{k-1}$为过程噪声(服从高斯分布$N(0,\mathbf{Q}_k)$)。状态转移矩阵$\mathbf{F}_k$如式(5)所示: $$\mathbf{F}_k = \begin{bmatrix} 1 & 0 & \Delta t & 0 & 0 \\ 0 & 1 & 0 & \Delta t & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 1 \end{bmatrix} \tag{5}$$ -???$\Delta t$??????????? +其中,$\Delta t$为相邻时刻的时间间隔。 -### 2.4.2.2 ???? +### 2.4.2.2 观测方程 -??????$\mathbf{Z}=[x_{gps},y_{gps},d_{lane},D_{lidar}]^T$???$x_{gps},y_{gps}$?GPS????????$d_{lane}$?????????????$D_{lidar}$?LiDAR????????????????6???? +定义观测向量$\mathbf{Z}=[x_{gps},y_{gps},d_{lane},D_{lidar}]^T$,其中$x_{gps},y_{gps}$为GPS提供的位置信息,$d_{lane}$为视觉检测的车道线偏移量,$D_{lidar}$为LiDAR检测的障碍物距离。观测方程如式(6)所示: $$\mathbf{Z}_k = \mathbf{H}_k \mathbf{X}_k + \mathbf{v}_k \tag{6}$$ -???$\mathbf{H}_k$??????$\mathbf{v}_k$????????????$N(0,\mathbf{R}_k)$??????$\mathbf{H}_k$???7???? +其中,$\mathbf{H}_k$为观测矩阵,$\mathbf{v}_k$为观测噪声(服从高斯分布$N(0,\mathbf{R}_k)$)。观测矩阵$\mathbf{H}_k$如式(7)所示: $$\mathbf{H}_k = \begin{bmatrix} 1 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & k_d \\ 0 & 0 & 0 & 0 & k_D \end{bmatrix} \tag{7}$$ -???$k_d,k_D$????????????????????????????????? +其中,$k_d,k_D$为车道线偏移量、障碍物距离与状态向量的关联系数,通过实验标定获得。 -### 2.4.2.3 ?????? +### 2.4.2.3 滤波更新流程 -EKF??????????????????? -????????????????????????????????????????????? +EKF融合的核心流程包括预测与更新两个阶段: +预测阶段:根据上一时刻的状态估计值与状态转移矩阵,预测当前时刻的先验状态与先验协方差矩阵: $$\hat{\mathbf{X}}_k^- = \mathbf{F}_k \hat{\mathbf{X}}_{k-1} \tag{8}$$ $$\mathbf{P}_k^- = \mathbf{F}_k \mathbf{P}_{k-1} \mathbf{F}_k^T + \mathbf{Q}_k \tag{9}$$ - ???$\hat{\mathbf{X}}_k^-$?????????????$\mathbf{P}_k^-$?????????$\mathbf{P}_{k-1}$?????????????$\mathbf{Q}_k$??????????? -???????????????????????????????????????? + 其中,$\hat{\mathbf{X}}_k^-$为当前时刻先验状态估计值,$\mathbf{P}_k^-$为先验协方差矩阵,$\mathbf{P}_{k-1}$为上一时刻后验协方差矩阵,$\mathbf{Q}_k$为过程噪声协方差矩阵。 +更新阶段:根据观测向量与先验状态,计算卡尔曼增益,更新后验状态与后验协方差矩阵: $$\mathbf{K}_k = \mathbf{P}_k^- \mathbf{H}_k^T (\mathbf{H}_k \mathbf{P}_k^- \mathbf{H}_k^T + \mathbf{R}_k)^{-1} \tag{10}$$ $$\hat{\mathbf{X}}_k = \hat{\mathbf{X}}_k^- + \mathbf{K}_k (\mathbf{Z}_k - \mathbf{H}_k \hat{\mathbf{X}}_k^-) \tag{11}$$ $$\mathbf{P}_k = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_k^- \tag{12}$$ - ???$\mathbf{K}_k$???????$\mathbf{R}_k$???????????$\mathbf{I}$??????$\hat{\mathbf{X}}_k$?????????????$\mathbf{P}_k$????????? -?????????????$\mathbf{Q}_k$??????????$\mathbf{R}_k$??????????????? + 其中,$\mathbf{K}_k$为卡尔曼增益,$\mathbf{R}_k$为观测噪声协方差矩阵,$\mathbf{I}$为单位矩阵,$\hat{\mathbf{X}}_k$为当前时刻后验状态估计值,$\mathbf{P}_k$为后验协方差矩阵。 +本文中,过程噪声协方差矩阵$\mathbf{Q}_k$与观测噪声协方差矩阵$\mathbf{R}_k$通过实验标定获得,具体取值为: $$\mathbf{Q}_k = \text{diag}(0.01,0.01,0.001,0.001,0.005) \tag{13}$$ $$\mathbf{R}_k = \text{diag}(0.1,0.1,0.05,0.02) \tag{14}$$ -### 2.5 ??????? +### 2.5 嵌入式系统实现 -??NVIDIA Jetson Xavier NX?????????????????8?ARM Cortex-A78CPU?16GB LPDDR4X???384?CUDA GPU??????Ubuntu 20.04 LTS?ROS Noetic?CUDA 11.4?TensorRT 8.5? -????????? -* ?????????????????????LiDAR??????????????????????????????????????? -* ???????TensorRT?YOLOv8n???????????????????????????????20ms??5ms? -* ????????????????????????????????????????????????????? -* ????????????????????????????????? +基于NVIDIA Jetson Xavier NX嵌入式平台搭建感知系统,硬件配置为8核ARM Cortex-A78CPU、16GB LPDDR4X内存、384核CUDA GPU;软件环境为Ubuntu 20.04 LTS、ROS Noetic、CUDA 11.4、TensorRT 8.5。 +系统优化策略如下: +* 并行计算优化:采用多线程技术,将视觉感知、LiDAR感知、融合模块部署为独立线程,通过共享内存实现数据交互,提升系统整体运行效率; +* 模型加速:利用TensorRT对YOLOv8n模型进行推理加速,通过量化、层融合等优化手段,将模型推理时间从20ms降至5ms; +* 内存优化:采用循环缓冲区存储图像与点云数据,避免内存泄漏;对大尺寸数据采用内存映射机制,减少数据拷贝时间; +* 驱动优化:优化传感器驱动程序,提升数据采集效率,降低数据传输延迟。 -## 3 ??????? +## 3 实验与结果分析 -### 3.1 ???????? +### 3.1 实验平台与数据集 -### 3.1.1 ???? +### 3.1.1 硬件平台 -????????????????????1??? -?1 ??????????? +实验采用改装无人车平台,核心硬件配置如表1所示: +表1 无人车感知系统硬件配置 -| ?? | ?? | ???? | +| 模块 | 型号 | 关键参数 | |------------|-----------------------|-----------------------------------| -| ?????? | NVIDIA Jetson Xavier NX | 8?CPU,384?GPU,16GB?? | -| ?? | IMX219???? | 1080P/30fps,??6mm,???70 | -| LiDAR | Velodyne VLP-16 | 16?,0.1-100m,??3cm | -| IMU | MPU6050 | 100Hz,????0.1 | -| GPS/RTK | UBLOX M8N | 10Hz,RTK??0.5m | -| ??? | ????? | 50Hz,????0.1m/s | +| 车载计算平台 | NVIDIA Jetson Xavier NX | 8核CPU,384核GPU,16GB内存 | +| 相机 | IMX219工业相机 | 1080P/30fps,焦距6mm,视场角70° | +| LiDAR | Velodyne VLP-16 | 16线,0.1-100m,精度±3cm | +| IMU | MPU6050 | 100Hz,姿态精度±0.1° | +| GPS/RTK | UBLOX M8N | 10Hz,RTK精度±0.5m | +| 轮速计 | 霍尔传感器 | 50Hz,测速精度±0.1m/s | -### 3.1.2 ???????? +### 3.1.2 实验场景与数据集 -??????????????????????????? -* ???????????10km/h??????????????????????? -* ???????????30km/h???????????????????????? -* ????????????40km/h????????????????????????? -??????????????????????????KITTI[28]?BDD100K[29]????????????????????????????????10000???????????????????????????????????1000??????????????????? +实验选取三类典型自动驾驶场景,覆盖不同路况与环境条件: +* 园区场景:低速行驶(≤10km/h),包含行人、非机动车密集区域,无交通信号灯; +* 城区场景:中速行驶(≤30km/h),包含多车道、交叉路口、交通信号灯,车辆密集; +* 乡村场景:中高速行驶(≤40km/h),道路狭窄,无清晰车道线,存在树木、建筑物遮挡。 +实验数据集包括公开数据集与自制数据集:公开数据集采用KITTI[28]、BDD100K[29],涵盖城区、乡村等场景;自制数据集通过实验平台在园区场景采集,含10000帧图像、点云数据,人工标注障碍物、车道线等真值信息。测试集为三类场景各1000帧数据,确保测试数据的多样性与代表性。 -### 3.2 ???? +### 3.2 评价指标 -????????????????????? -* ?????????????????mAP??????Precision??????Recall??????mAP??????????????????????????? -* ?????????????????MAE?RMSE????MAE????????RMSE???????????????????? -* ??????????????MAE????????MAE???? -* ????????????????????????????????????? +为全面评价感知系统性能,选取以下评价指标: +* 障碍物检测精度:采用平均精度均值(mAP)、精确率(Precision)、召回率(Recall)评价,其中mAP为各类别目标平均精度的均值,是目标检测的核心评价指标; +* 车道线检测精度:采用偏移估计误差(MAE、RMSE)评价,MAE为平均绝对误差,RMSE为均方根误差,误差越小表示检测精度越高; +* 状态估计精度:采用位置误差(MAE)、航向角误差(MAE)评价; +* 实时性:采用端到端感知延迟(从传感器数据采集到感知结果输出的总时间)评价。 -### 3.3 ??????? +### 3.3 实验结果与分析 -### 3.3.1 ??????? +### 3.3.1 障碍物检测结果 -?????????????????YOLOv8n???LiDAR?DBSCAN???????????????????2??? -?2 ????????????? +将本文提出的融合感知方案与单视觉(YOLOv8n)、单LiDAR(DBSCAN聚类)方案进行对比,障碍物检测性能如表2所示: +表2 不同方案障碍物检测性能对比 -| ?? | ????%? | ????%? | mAP?%? | +| 方案 | 精确率(%) | 召回率(%) | mAP(%) | |--------------|-------------|-------------|----------| -| ????YOLOv8n? | 88.5 | 86.2 | 87.3 | -| ?LiDAR?DBSCAN? | 90.3 | 89.1 | 89.7 | -| ?????? | 95.2 | 94.1 | 94.7 | -??2??????????????????mAP????????????mAP????????7.4???????LiDAR????5??????????????????????????LiDAR?????????????????????????????????????????????mAP???72.5%??LiDAR??mAP???82.3%????????mAP????89.6%??????????????? +| 单视觉(YOLOv8n) | 88.5 | 86.2 | 87.3 | +| 单LiDAR(DBSCAN) | 90.3 | 89.1 | 89.7 | +| 本文融合方案 | 95.2 | 94.1 | 94.7 | +由表2可知,本文融合方案的精确率、召回率与mAP均显著高于单传感器方案,mAP较单视觉方案提升7.4个百分点,较单LiDAR方案提升5个百分点。这是因为融合方案结合了视觉的类别识别优势与LiDAR的高精度测距优势,通过互补性提升了障碍物检测的鲁棒性。在雨雾、逆光等恶劣环境下,单视觉方案mAP下降至72.5%,单LiDAR方案mAP下降至82.3%,而本文融合方案mAP仍保持在89.6%,验证了融合方案的环境适应性。 -### 3.3.2 ??????? +### 3.3.2 车道线检测结果 -???????????????3??? -?3 ??????????? +车道线偏移估计误差对比结果如表3所示: +表3 车道线偏移估计误差对比 -| ?? | MAE?m? | RMSE?m? | +| 方案 | MAE(m) | RMSE(m) | |--------------|----------|-----------| -| ?????? | 0.18 | 0.22 | -| ?????? | 0.07 | 0.09 | +| 传统霍夫变换 | 0.18 | 0.22 | +| 本文混合方案 | 0.07 | 0.09 | -### 3.3.3 ?????? +### 3.3.3 状态估计结果 -????????????4??? +状态估计精度对比结果如表4所示: -| ?? | ????MAE?m? | ?????MAE?? | +| 方案 | 位置误差MAE(m) | 航向角误差MAE(°) | |---------------------|------------------|--------------------| -| GPS+IMU???EKF? | 0.32 | 0.85 | -| ????EKF | 0.15 | 0.32 | -??4???????EKF???????MAE?0.15m??????MAE?0.32????EKF??????53.1%?62.4%???????EKF?????????????????/LiDAR?????????????IMU??????GPS?????????GPS?????????????EKF???????????1.2m????????????????0.3m??????????????? +| GPS+IMU(传统EKF) | 0.32 | 0.85 | +| 本文改进EKF | 0.15 | 0.32 | +由表4可知,本文改进EKF方案的位置误差MAE为0.15m,航向角误差MAE为0.32°,较传统EKF方案分别降低53.1%、62.4%。这是因为改进EKF引入了车道线偏移、障碍物距离等视觉/LiDAR特征作为观测值,有效修正了IMU的累积误差与GPS的定位偏差,尤其在GPS信号丢失的隧道场景下,传统EKF方案位置误差迅速增大至1.2m,而本文改进方案位置误差仍控制在0.3m以内,验证了状态估计的鲁棒性。 -### 3.3.4 ??????? +### 3.3.4 实时性测试结果 -????????????????5??? +嵌入式平台上各模块的运行延迟如表5所示: -| ?? | ?????ms? | +| 模块 | 运行延迟(ms) | |--------------------------|----------------| -| ????????+???? | 12 | -| LiDAR??????+??? | 10 | -| ?????? | 5 | -| ?????? | 27 | -??5?????????????????27ms???30ms???L2???????????????????50ms???????????????????TensorRT????????12ms?LiDAR????????????????????10ms???????????????5ms?????????????????????????????????????? +| 视觉感知(车道线+障碍物) | 12 | +| LiDAR感知(预处理+聚类) | 10 | +| 多传感器融合 | 5 | +| 端到端总延迟 | 27 | +由表5可知,本文感知系统的端到端总延迟为27ms,小于30ms,满足L2级自动驾驶对感知实时性的要求(通常需≤50ms)。其中,视觉感知模块通过模型轻量化与TensorRT加速,延迟控制在12ms;LiDAR感知模块通过体素下采样降低计算量,延迟为10ms;融合模块因算法优化,延迟仅为5ms。多线程并行处理技术的应用,避免了各模块的串行等待,进一步提升了系统实时性。 -## 4 ????? +## 4 讨论与展望 -### 4.1 ???? +### 4.1 研究不足 -???????????????????????????????????????? -* ???????????????EKF??????????????????????????????????????????????????????????? -* ??????????????????????????LiDAR?????????????????????????????????? -* ?????????????????????????????????????????????????????????????????? +本文提出的无人车多传感器融合感知方案虽在多场景下验证了有效性,但仍存在以下不足: +* 融合算法的适应性有待提升:改进EKF算法的噪声协方差矩阵为固定值,在复杂动态场景(如突发障碍物、剧烈变道)下,难以实时调整噪声参数,可能导致融合精度下降; +* 极端天气下性能有限:在强降雨、暴雪等极端恶劣天气下,LiDAR点云受雨滴、雪花遮挡,视觉图像对比度降低,系统感知精度仍会显著下降; +* 缺乏语义信息融合:当前方案仅融合了障碍物的几何特征与类别信息,未引入交通标识、道路语义等高级语义信息,对复杂交通场景的理解能力不足。 -### 4.2 ???? +### 4.2 未来展望 -* ?????????????????????? -* ????????????????????????????????????????????????????????? -* ??????????????????????????????????????????????????????????+LiDAR+?????+?????????????????????????? -* ??????????Transformer???????????????????LiDAR????????????????????????????? -* ????????????????????????????????????????????????????????? +* 针对上述不足,未来可从以下方向开展深入研究: +* 自适应融合算法研究:引入自适应卡尔曼滤波、粒子滤波等算法,实时估计噪声协方差矩阵,提升融合算法对动态场景的适应性; +* 极端天气感知优化:结合毫米波雷达与红外相机,利用毫米波雷达不受天气影响、红外相机在低光照下性能优越的优势,构建“视觉+LiDAR+毫米波雷达+红外”的四模态感知框架,提升极端天气下的感知鲁棒性; +* 语义级融合技术:引入Transformer等深度学习架构,实现视觉图像语义分割、LiDAR点云语义分割结果的融合,提升系统对交通场景的语义理解能力; +* 边缘计算与协同感知:利用边缘计算节点的强大算力,实现多无人车的协同感知,通过数据共享提升大范围场景的感知覆盖能力。 -## 5 ?? +## 5 结论 -?????????????????????????????????????????????????LiDAR?IMU?GPS?????????????????? -??????????????????????????+?????????????????????????????LiDAR?????????RANSAC?????DBSCAN????????????????? -?????EKF?????????/LiDAR???????????IMU?????GPS??????????????? -????????????????????????????????????27ms????????? -???????????????????????????????????mAP?94.7%????????????0.1m??????????????????L2??????????? -?????????????????????????????????????????????????L2-L4???????????????????? +本文针对无人车单传感器感知鲁棒性不足、多源数据融合难、嵌入式平台实时性差等问题,提出一种融合视觉、LiDAR、IMU与GPS的多模态感知框架,主要研究结论如下: +设计了高效的单传感器感知模块:视觉模块采用“传统视觉+深度学习”的混合方案,实现了高精度车道线检测与障碍物识别;LiDAR模块通过统计滤波、RANSAC地面分割与DBSCAN聚类,有效提取了障碍物的三维特征; +提出了改进EKF融合算法:引入视觉/LiDAR特征作为观测值,修正了IMU累积误差与GPS定位偏差,提升了状态估计精度; +搭建了实时嵌入式感知系统:通过模型轻量化、硬件加速与并行计算优化,实现了27ms的端到端感知延迟; +多场景实验验证:在园区、城区、乡村三类场景下的实验表明,系统障碍物检测mAP达94.7%,车道线偏移估计误差小于0.1m,状态估计精度显著优于传统方案,满足L2级自动驾驶的工程需求。 +本文提出的感知方案兼顾了精度、鲁棒性与实时性,且采用低成本传感器组合,具有较高的工程应用价值,可为L2-L4级自动驾驶感知系统的设计与实现提供参考。 -### ???? +### 参考文献 -* [1] ???, ???, ???. ?????????????????[J]. ??????, 2020, 22(1): 6-14. -* [2] ??, ???, ???. ????????????????[J]. ????, 2021, 50(3): 378-395. -* [3] ??, ??, ???. ???????????????[J]. ????, 2022, 44(5): 581-592. -* [4] ??, ??, ???. ??????????????????[J]. ??????, 2020, 56(14): 1-14. +* [1] 李克强, 王飞跃, 戴海峰. 智能网联汽车技术发展现状及未来趋势[J]. 中国工程科学, 2020, 22(1): 6-14. +* [2] 陈宝, 李清泉, 杨必胜. 自动驾驶汽车环境感知技术研究进展[J]. 测绘学报, 2021, 50(3): 378-395. +* [3] 刘杰, 张磊, 王树森. 无人车多传感器融合感知技术综述[J]. 汽车工程, 2022, 44(5): 581-592. +* [4] 王硕, 李骏, 张金换. 自动驾驶环境感知传感器配置与融合策略[J]. 机械工程学报, 2020, 56(14): 1-14. * [5] Zhang H, Wang J, Li Z. Lane detection algorithm based on improved Hough transform and Kalman filter[J]. Journal of Computational Information Systems, 2016, 12(11): 4567-4574. -* [6] ???, ???, ??. ???????????????[J]. ??????, 2015, 28(2): 100-106. +* [6] 赵祥模, 刘昭度, 马建. 基于背景差分法的车辆检测与跟踪[J]. 中国公路学报, 2015, 28(2): 100-106. * [7] Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2016: 779-788. * [8] Ren S, He K, Girshick R, et al. Faster R-CNN: Towards real-time object detection with region proposal networks[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2017, 39(6): 1137-1149. * [9] Li Z, Chen X, Shen S. BEVFormer: Learning bird's-eye-view representation from multi-camera images via spatiotemporal transformers[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022: 16296-16305. @@ -259,15 +259,15 @@ EKF??????????????????? * [11] Fischler M A, Bolles R C. Random sample consensus: A paradigm for model fitting with applications to image analysis and automated cartography[J]. Communications of the ACM, 1981, 24(6): 381-395. * [12] Ester M, Kriegel H P, Sander J, et al. A density-based algorithm for discovering clusters in large spatial databases with noise[C]//Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining. 1996: 226-231. * [13] Qi C R, Su H, Mo K, et al. PointNet: Deep learning on point sets for 3D classification and segmentation[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2017: 652-660. -* [14] ??, ??, ???. ??IMU/GPS?????????????[J]. ???????, 2021, 8(2): 1-8. +* [14] 杨俊, 张涛, 刘建业. 基于IMU/GPS融合的自动驾驶车辆定位技术[J]. 导航定位与授时, 2021, 8(2): 1-8. * [15] Gelb A. Applied optimal estimation[M]. Cambridge: MIT Press, 1974. -* [16] Labb M, Michaud F. RTAB-Map as an open-source lidar and visual simultaneous localization and mapping library for large-scale and long-term online operation[J]. Journal of Field Robotics, 2014, 31(2): 416-446. -* [17] ??, ???, ??. ?????????????????[J]. ???????, 2022, 41(3): 1-4. -* [18] ??, ???, ???. ????????????????[J]. ?????, 2020, 46(8): 1561-1578. +* [16] Labbé M, Michaud F. RTAB-Map as an open-source lidar and visual simultaneous localization and mapping library for large-scale and long-term online operation[J]. Journal of Field Robotics, 2014, 31(2): 416-446. +* [17] 王健, 李艳秋, 张宏. 多传感器融合技术在自动驾驶中的应用[J]. 传感器与微系统, 2022, 41(3): 1-4. +* [18] 陈杰, 赵冬斌, 王天然. 视觉与激光雷达数据融合的研究进展[J]. 自动化学报, 2020, 46(8): 1561-1578. * [19] Li J, Zhang Y, Chen W. Feature-level fusion of camera and lidar for object detection in autonomous driving[J]. IEEE Transactions on Intelligent Transportation Systems, 2022, 23(8): 12072-12082. * [20] Zhang Y, Wang X, Li J. Decision-level fusion of multi-sensor for object detection in autonomous vehicles[C]//Proceedings of the IEEE International Conference on Intelligent Transportation Systems. 2020: 1-6. * [21] Chen Y, Mao Y, Zhang J. FusionNet: A deep learning architecture for multi-modal sensor fusion[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshops. 2020: 1-9. * [22] Lang H, Vora S, Caesar H, et al. PointPillars: Fast encoders for object detection from point clouds[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 12697-12705. -* [23] ??, ???, ???. ?????????????????[J]. ?????, 2021, 47(7): 1289-1308. -* [24] ???. Jetson Xavier NX?????[EB/OL]. https://developer.nvidia.com/embedded/jetson-xavier-nx, 2022. +* [23] 李博, 王飞跃, 曾大军. 深度学习在多传感器融合中的应用综述[J]. 自动化学报, 2021, 47(7): 1289-1308. +* [24] 英伟达. Jetson Xavier NX技术规格书[EB/OL]. https://developer.nvidia.com/embedded/jetson-xavier-nx, 2022. * [25] Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and Huffman coding[C]//Proceedings of the International \ No newline at end of file From 05f24cc6667cf7e925b46ee8e93a863ef54fc50e Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 19 Dec 2025 22:17:40 +0800 Subject: [PATCH 11/26] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 82 ++++++++++++++++++---- 1 file changed, 68 insertions(+), 14 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index ad858a2f8e..2a6d171694 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -1,34 +1,88 @@ import carla - +import time def main(): - # 1. 连接Carla模拟器 - client = carla.Client("localhost", 2000) - client.set_timeout(10.0) - + # 初始化变量,用于后续资源清理 + vehicle = None + camera_sensor = None try: + # 1. 连接Carla模拟器,支持重新加载地图(可选) + client = carla.Client("localhost", 2000) + client.set_timeout(10.0) world = client.get_world() print("✅ 成功连接Carla模拟器!") print("📌 当前仿真地图:", world.get_map().name) - # 2. 获取车辆蓝图 + # 可选:加载指定地图(比如Town01,按需切换) + # world = client.load_world("Town01") + # print("🔄 已切换地图为:Town01") + + # 2. 获取车辆蓝图,随机选择车辆颜色 vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") + if vehicle_bp.has_attribute('color'): + vehicle_bp.set_attribute('color', '255,0,0') # 设置红色车身 + print("🎨 已设置车辆颜色为红色") - # 3. 改用Carla内置的合法生成点(无碰撞) - spawn_points = world.get_map().get_spawn_points() # 获取所有合法生成点 + # 3. 选择合法生成点生成车辆 + spawn_points = world.get_map().get_spawn_points() if spawn_points: - vehicle = world.spawn_actor(vehicle_bp, spawn_points[0]) # 用第一个合法点 - print("🚗 成功生成特斯拉车辆,ID:", vehicle.id) + vehicle = world.spawn_actor(vehicle_bp, spawn_points[0]) + print(f"🚗 成功生成特斯拉车辆,ID:{vehicle.id}") + + # 4. 添加RGB摄像头传感器(绑定到车辆) + camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') + # 设置摄像头参数 + camera_bp.set_attribute('image_size_x', '800') + camera_bp.set_attribute('image_size_y', '600') + camera_bp.set_attribute('fov', '90') + # 摄像头安装位置(车辆前上方) + camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) + camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) + # 定义摄像头回调函数(保存图片/打印信息) + def camera_callback(image): + # 保存摄像头画面到本地(可选,取消注释即可) + # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') + print(f"📸 摄像头帧号:{image.frame_number} | 时间戳:{image.timestamp}") + # 绑定回调函数 + camera_sensor.listen(camera_callback) + print("📹 已挂载RGB摄像头,开始采集画面!") + + # 5. 车辆多阶段控制(前进→右转→减速) + print("\n🚙 开始车辆控制演示...") + # 阶段1:直行3秒 + vehicle.apply_control(carla.VehicleControl(throttle=0.6, steer=0.0, brake=0.0)) + time.sleep(3) + # 阶段2:右转2秒 + vehicle.apply_control(carla.VehicleControl(throttle=0.4, steer=0.5, brake=0.0)) + time.sleep(2) + # 阶段3:减速停车 + vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0)) + time.sleep(1) + print("🛑 车辆已停车") + + # 6. 打印车辆最终状态 + vehicle_location = vehicle.get_location() + vehicle_velocity = vehicle.get_velocity() + print(f"\n📊 车辆最终状态:") + print(f" 位置:X={vehicle_location.x:.2f}, Y={vehicle_location.y:.2f}, Z={vehicle_location.z:.2f}") + print(f" 速度:X={vehicle_velocity.x:.2f}, Y={vehicle_velocity.y:.2f}, Z={vehicle_velocity.z:.2f}") - # 车辆简单前进 - vehicle.apply_control(carla.VehicleControl(throttle=0.5, steer=0.0)) - print("🚙 车辆已启动前进!") else: print("⚠️ 未找到合法的车辆生成点") except Exception as e: - print("❌ 调用失败:", e) + print(f"❌ 调用失败:{e}") + # 7. 资源清理(关键:避免模拟器残留车辆/传感器) + finally: + if camera_sensor: + camera_sensor.stop() + camera_sensor.destroy() + print("🗑️ 摄像头传感器已销毁") + if vehicle: + vehicle.destroy() + print("🗑️ 车辆已销毁") + print("✅ 所有资源清理完成,程序正常退出") if __name__ == "__main__": main() \ No newline at end of file From 68789ff57f8625aacbffa7ac724b5babe8dcbd2e Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sat, 20 Dec 2025 13:34:42 +0800 Subject: [PATCH 12/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E4=BB=A3?= =?UTF-8?q?=E7=A0=81,=E6=88=90=E5=8A=9F=E8=BF=90=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/img.png | Bin 184764 -> 0 bytes src/Unmanned_Aerial_car_Perception/img_1.png | Bin 184764 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/Unmanned_Aerial_car_Perception/img.png delete mode 100644 src/Unmanned_Aerial_car_Perception/img_1.png diff --git a/src/Unmanned_Aerial_car_Perception/img.png b/src/Unmanned_Aerial_car_Perception/img.png deleted file mode 100644 index bfc6a3ce9386ff6c527e085d6820d8bb9f01966c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184764 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 z z#q{;+F80Or@SE7c)3RdB(&{ai5aHRziZm@jIzsbS*r6$v70 z!9~pvb!q-1fVR&O%hZ&z68St(U#A`EJnw^QI8ZmaKJdE6AQC`^NQNx+uQ5s9Qj3N#+&Z^<2v)U6_*jW za!Wz>yV(%b(BI27epsXHvXO7f?MDE^l4|Xio>APh4on+ID;i_0ARA{_^ryGZT~SC` z8A4HlaeqR9->&T{10(XbeZ)WG$66rAySp7K{{}x73;PjS#3T0z%;fw_L%7k!1^hS3 zj_Fnu`KLh}psw+g2nh2Pa^pO_+3mBs(FNi>oW9y^_@Awh1&KTft_V9DQ#*L^%5bg& zdb!$_kP=JlUof4^WE7(5 z5Mbf-9%U_K4*xZQoY5a3R59}hkvQA@s_^$3WZK6|dOmF>T5WB!UVOj6jiLCS85=q~Q7|O4vnSHaNEvI>bGPl(m z>{AkOn~cV!g(sZ=W?6U-JHWOh8uDBZh9=AXzN)g6rGpyc?X8)bf2Cm*I(n=D+b6?@ z!X~&}tb8b+{PcDfjwk=DgG1dyS=jiNsX)Rn(~PU5>RISM9Uw^eQezn`_YYez!2#+I zk)&(RQ)&&j8Y4>Y5<+c1TdgT|F*Qx@j)lN2zpmJ_ytQ6oDx!)*zhIoZynC$*V!n?9-cO%SXrG6b3Gy^s{y zNxsYCnmeWfFkOFxg(F3|Px@eYXM*O0#+ay7 znF^i^S)`9BqM$`iGD9loKJjyF?g7E^^`PsmeQFsg0cBntxVXY1K|`{! ztR6YD0Sl{fO2zF1aLzzXA$!4l>rphB5`*wf;-di>Lqp|UK}hPcVuadKz}6FAFFLLY zTXUoUHxP#?jBo~-H#fpOW`4LCqb`Ws2VB?jy9GBeOr08pq{N!pdaIquL*qyrdpBgo zGb|C(flJDjmz`W$-o=)ew&S-kOs)8^`;;tmq(8QQ1k z-@6T7FOqI*xu5%momF7^FTm4?Ej!kqB8DJS1q&>#VzSK!gx;r*-dYXBq16Hu8?E%p zc}gbCCTi%T**|!!((mVMk+|6N%ohH964NuO^~*Ggme1mgUkDc536c)ZjJRB@CVzbq zL-;6dOKTD7<=K(Ys+O6!eP~R`#d!6g@`{yCGc~Upw{Z5GWG$pEO2t~l^LRr@*&}^D zpw{@DzL*gz8dA-k!W6^T?B0v4MNd=9dTy5q@SypyfAQ&Wd@4crXO>Fig*swuW!0I4 zU9#7sge?jCLoo2*jHELF9)^(f1DRpYT^;tf%9ESkM7QBy!t4D?$UB#`wrWCkoy|YP za#c7`r%OV8hTlWlEXF9KDjdEgL#Ly| z_WRhONcnu1GUv0IrkpDUw~hGm7JpBbg9e zoz8a1(JX*?v!CP_1Y@?Ffa;{9JZJr~qHEH`Y~Nz!^tn|FJK-0*TgPa)h4iOyIPyOcw`n0b$1 zrY{<~L}&>7CRIkb#SNW~>hXXZzau!&6-8;iM|d!90>%08DrU_|4dIY8Bc z@W)@ZB*~k$6qzO68XBevv}%Q@|Akm+07zW)eq4>i z?~l~;m;1p36GsA%Ul@T*gzhV|yB`m)Y})#@3exIi0td)xB+-Kbg**gtXM9;mu_rE2Z`^TWp(z|2`40Rb%KZIOYB$Q$tU8<;G2qQ7a2QJibYb6!1|Bmn)Gq#)TKvcmWxW8SvX1G?4M<~++Q_aSJ*FU8wjMru?qMb~#DK zzl=*ZZMkVqLj9SJ%A_ek%Nz4|CmnErN|oyA1OJLuys&YiO> zq`k(E<0fH|eOVbcn%vWrLz2cfSlXEynH4r?B33)oIR;PJT1%Jfz_^ZNtCk2?j9LyX zC;S;T>8o=ZIVEu-7YXIG&o&SMn^!!#Xzuk?iY@ba z95uU6e6{d_D(*b*-Xl{ixJkQTXxu>mrJc&;q|C`AJjTdoNe6=k2f02*D*)D=V$*R= z`&b6>y1iR?i|4P-NYz;R&^cIQ!Xb&L|#|PAtL$fo~=d=+iiYR$)nl9^R zPjI!6bqlP;P9g+Tu0U*C#`bYqQ-YP^mKQa`%5(mDq0&JPB`FZy1u=o)D}z}li*WYX znMey*zk6^M+T{^SD~VvB;8b!LgMp5#v zgF{_^HBMpt-NPFs@t~jQoe&9GIDhYVLl$;Vwq>i=@K%w&dWX!!7Zl9I%&EpTp7m)? z_LJtZL&nd4?U;wQVi+nbRw(g)42_zd`tVTEdnQ6{&XI}_i8j;bKf3YEzr7J@QS`}x zRm+Hb%Xuy+{FxkI0c@RwTc){zcui6k)Ap6c%JlRU57{$c596~(ahVQ|$g26S#JEsp z{RH4WOuKP;HtnX|FAp2ROn&!!@fZ`6%8kMAqPfW$%9P2#Xuoc>*yjH>O7_O~)cVkT zW{$n9fC<8Fgzd+hfJ#R$O4`NNhuU@Pj^ zv@mg@DS7H`^}LJXZaJ{Au^;j5do1M+`SyD4g=>1 z1H1^jq1mf0%U$m@u%}D~oAIbH&f}cG*Z?xUQJp@k-4l1^QAD|2;m=04xWDiE3NuLE z#vU>SSG*O*B*B*yq>2!rANk#A5? zOauOrzvt(Qh5h_r|NnkFbm#l#|K`sv#)k7V;o0_#EZ%<&^YRRh{r0Uz(dT~zKRs?g z;ywPXpMn2J(8cQ&@Y&}F*aGe!fj)q*2cG{swEpcs0!CCq1AoF8SMWdgZ&HGztGiLf zd2IemFxo4&xPg$L$^Ku0y-gD9Gq~yhkKK5Ry}Nzhh8}u43{1%Bb+q$8Y-b1kXR~Y* z`w%2E+~--$^l>CMZ-%bM@q!n(EJ@_){WR=i{4i+$m_zMRe0ogd_GBD!gzjGt#OZtW2U z+?7gzwein%lMz1X;`JX+O3J!CL)N+IEbbuuJ`Q9QIBK`gzAsN#*m}33|2dKK3HAHS zFl~{`i>qrqGTv(iWMHqyQ)x7EiXy|ft0nmIYPYo@*bCrd^nww>vxooUan8o+>TuTy{8nCcv;D`TXf{@ESF<| z@*+>WS=y38#f{~gDu$|wXgTi=#l6dA&FR`%SWgM|F25AGj`h|LaKU@g3Ur=?+UGGt zX(aY9clDm?g8{3L_tAP6B@n%ri;;Eum&bMAN63QSv&@A3&eSAj0oMzZPg8Kb?P?vBs;zfEp?zvG&K5X0wP}rc&he z@-gPcHxJR*7bMAWmr@>ax_0b^XD9fu>%02QF<}5E0j-^!8%}((K>f!oSKbjCU=N$Y zkvh41$uUeHZy%YqBvXJd_mF69%=xzW&`I@Jyx$RZ!e&(2Bthf8PY<2bN|}1kPZ0j+ z>#G~RXIS#i#$`KR5Ge4aoaSeT0FMIf(!Xh1!}KW*6hMOPzn`HC-3P`29R4e_=< z?9M8sp_q)Upl08F+-;dbf|@;?!=A)ENJ5(0=?1C_jrpNVXP^BazXs?%UpFP1ac*b) zr*8OquL|=pC!pz8z^ro1a>}F zc@^8#*Hkcea=HDkDUm+uEj;aM$=a9%zcM+MB(UBtQq> zO-!z)r{Yr1X@0OxP!YB?UP~7NrG~CbC$4TjDS}y&NuW9ZvCxmxE_rz`U29=CuG3Ac z^PSu>yLZ?i%W)wp`QgIpaG@!+4c0@Fh0@VDSOS9lN{XV&-RJCkzBmI(&^&W|27$(N zx^MPCvYgt`LRryFe#O7rgtWVNp>mNaNt{TEnl1fd+05ggafs6$c{-5^Z9QDY^U&RN z5b4pyy@+o>+B(Diy&~URw+`J46)E5$0qI&gcE@+t%O8cwm$N%Xm$~eBo-U`y|6y~I z`eS+|#o36(16;9;b|c~jcdLNRupKGN?5P%vA`TZdyt&k-0-damvvBUm2FOj--heCX z9RX3ISV?+P(GOF(%sp+e)7^em=i`I#Yhk|m_ohREmA>tdO1jsFUS%?TK3}r91OCm0 zApluCo@z;nuEM$L!AY}*Lu6|`Hb$swcioe)4MnXn-O=qlM`8ZET=p|p&dbK=J9>Pe zVQIGi_JFWSuh#Qq#*3F=1+>xId{;pJRvh8KP1{TR_9JL>+iLj7t(t>1J9Exj5*8od zAKvrmcv)ZU+{dWWJ2t?j2A2PruZ!1De}>3Yt8%owJU(^a%AjJL*3?s&a4*>g6=D-6HCBEO5B?V7pI8 zr~cV)h+Ce{x&lJRcem@s+CQ_UpW^(x^^sN29Yu0nh!v-)HD}$Ar4T$+LdZNt*g?8mhJVBWPQ?>?+{aqJrkY*HhTJd@ zkQ|{Jo@Hic;CR6MbBfXt1k_63rx6C<2hd$yw_{`SWk!(2M4&5j;S0ph#_spOSv-*f z+e?@17|v)qOWKu(KmK2-LNr_Iywke&OHs}T9Zv8IdDRUv9~g_7Oll;s>TuicIv)P9 zcwffy%Pv=2uZ)k;{`DQx zy+{tug>1{ch_%o&vEZYF%~G9MbdWMP>+>R*?iHy0<0}bq`Ffsj^HJf>7=EMFmR$Jr z2a1FK`E5fEkhighFZ}agME>3N z{QrT9{^`j7?O(otjPaNMLg(LaLqqEk{ugS0-z_Jb5Bvw6fAn!AhQ9ruX#TyxS^TA3 z8jQEYr={5+X<~mr`Q~<(aBu{&V0StpRW>fCr<+yT(Z$Pv3LCTqES947jm#`G-7rKW ze4b_ITt_LjK^t#6)k7^gn&=ggT-TM5d@8Bn<;Ukp9FPb+^XlkmdvOQ-0Zh-p4Pkv1 zd_Xv>1Mg3aFoMnW zRHEcy9O?9@#vg%c1-&Cme_mgsl@gwvX<-=#&BySSl`|aFD4+KoV1T5}->CE3wDIlIF0T~t{@8mbGcSgt zvoX3#Pc^@v)35}QK zWBXjc3W_Oz`coM{Td#3#;Vz>(w=yshhe<)0;r)fQfsi$-MkTpwxvYnD&nEL`_ryL5 zWPpYbYF_`)@v4!pg8mN)&9+lc zhn-iJKZm2yoNnB+(hT5}e_M%(iZw#!2e&nb`yIZyvl%fxrHEL7JZ>!=SUj0D+C170 zu`y1=SxNUUGr|WH6RFSItpJYKL@xw(oZlVCR!}#!uIJx)L4U5~Pa3)oHKk-}*ecou z$nk1y{-pJPIbf~Po`!7i9xic6aVOGrujAhvgVg zo@E@elFy>FxEWPe*X!Q2wgq4EJ$~*`RsxiCua|Y9-C9FX{eHz@c|6vc?Ss3kVEB3D zqX@6zW;-u}p|9PZfkluG#aElnlQ0RQn}T^$L(fxtA%InOG~2j8eE`fLkyTjXV4EeZ zn*=SaeMQ4gv3YS$FKeRmR-Qi&Xl0u6l^uW&Xe!AWdCzXP)}&{BN?0t`vpO$VCvnKr z3o)C=;uHj+7!OMjb8%=274lIR-c5PBDQW~8OeCR*#{2q)n+1+TgN+`H!fp+H;Amr z-S4)T5U3d5ZB@eObHTZ-jv;L)aQcEfBb9HbDB-?7`@xLdoU|f}i7VuoGWURphh>5B zj{<+si87@_3sg29hFqi{=YNnSj%xr_(5wrckBgQBd8Y5eTTJY-HR_L8-~0P}dh%*h z%R=o_?>ikvgtcPxK6A%UV}89{R!l_FHWoI1)ubR$-4%dX`G1e-*(kY>5=DVDt9V<^YcN zYR9=?_^*FRh~gtes)$1Z0xtF}L>IM}XYzVIP$6nG{KQZR6WjP;qa~2Em<{E{#4_S= zN%!S)^n5D-)acxG!W{z9-z51UJ7l~hW7~J9(#NjJTHk1ofj*j`VM6&u;+eEGmK^j)3Q+vBW?llR};FZXq4F7r>iB{ZHY?Ig7saBvZrAhU}gp6G?@?NZk@sKUQi`-!jF)so#F;s;Z4rYfZlU#Ya(0BXD9|LG-@gxgpUB;&x@#&pGf!wA7>H{-YAjrK8PB^EiNr~ zq-f95$f}cL9okHDU?E5bg9Yf>_=^ULtcC~a)NIU?(DNJe$k|l5kSs6<9z6;_*Qn`D zWV$C@Us}l3bNvpz1+^&vP9z~%%gC-lgr#oNJ{&TeuG(Ax2uhJq&8YhwDo#F-B5wR1 zs~lieM^i3#;c?R6F1J4T_xM?Tg*<2mpL=$4+>+dc24XNgCWq2qV#!!-5uzwPSW~gZM6@bJwz_D0QJ&Ra?AGOUW_*G0!PxJu&6R!smAgbbvZxS0 zg%tDdlU=7^UA|~L`B#gbXRraGy~UZ-tmb-yc1O{M6tE_i+l9Q6;~H)Z5yHhKrd4*d z(!(ORQWwpj)t&OOWo1%EvJaUIdY;Caa)Sii$@MD4G@Vj(knlmojPjt4Z=J+btPD62 zeDOH-iL)A=lzfp+OUe7x=3G4zn?YD<_{Mt-F03n}1n?nu%Lm?- zqE5ADJ4+xW?*vG{pNN4H35F<`rw7=d9I zgjcL6YIeFd!ry9$W$C~Th@8uJ2J+D@$$A$*e*dUXYRhUmpUmw5bSV9r_Y>X}KvVaZsR$yR9#T(h*1 z1Q{DkdUTSTFNPnpA-rpw<0CZB@K6`u`K3e*N9qDo7Dv&V>u5leF_(mo(30jQtlzCcW_ChG1bNzYef$;873)mGJtF1D{KSG$!&zs2 z%yCV`G?FnKM&yQl8LvS@Ttzb-C6G1ks*vYTrFVHf)el5cU?)cdjnHgXCDn~6q;>}0 z>muEozUqZ%d-~#6UxZ9XgLF!nzmgL_wG^iyWt#tsIlww&X=fVxh@4ehh^pBtIV8%7 z`yhbokzqq9k4hzHWu!p1qrx7L-}4ZqocP|pe~*)9>}@5%G>EZUmKr+6Qs$4Wl0tlo zZ&S_nS@FIHe+iYPH}Ck;ub->+Vq><%^1jXkw)nvM3m}1OaIQL=TtIfUrocNp9VBZ8 zY>;5;3>3U>&G;+ITrzUlPBnDD^~og)~du3W~mJO9p(ItKTo_Kx8;x8Ui^r zT`Q46w6lkf;M>oLYpy?pRb1HfGoC=CgBVF1J8AVfN=DCQxFC}J1cK)+bP!t#ODo&wWNo* z-XOaFUDeW_f-R^Wujah2L|(&F=_P(9t6RRV%Cj)T3~C@=LGfobUpa$o=sc~sr5DLF zi?EUwCRJsFr&sdbJQQ>`(otvkgiVJ4CR&YToQxpSRQ+M`O3oxAdGEPqb( zXcDZhu<(vw{^>hjUlicU^}ALpXp5Bu%Kk~Y34Ar^HTrL+|3}cO*OMYeU!&wqSc&Fc_F@T$3g%q^V z8pagaOF2EFGPk?q*M&-rY$CK!2L|U&XJyg-A%kuP(3xj(<8kz#QI?$L(IGHcKb550 z7F*;Q2$W*ymN$GHZcstnuQz z%SD0Pu~cor-W`3MGYyYOU#3d-#P4!Hh8=3m3Q^6GSWIU*w^03PYL>)~*twmc)hIgv zujEl#*zO~Qp};CsH$}3lh991W>TBKWtVvf%&6EeHi*@M=SLIuP7O><)Coq%Ue)Ja6 zyxc@@ zioP^%(>9Q&5NN}`bbNCiJ2R0A7fapR{gXhbEYcTZRAnB*E&_q+e*e z{-@jFP4Vm4=&3&;B})wX3O>hc=ZICne3kKO3C&`dfz$C8LI0!pz17Tl=*CcWb2j?= zpw;@8MH}`M=F+5JE&Gq5$j?@13G@epAS+<(&`2poViUP38&l)g>5X)LBNF9ThB>2J zb)=z1Olf*$92Jw`Se;InN*=s`b#{`DDN~=gS0IrH*~d>{3}{90rj)SqdeUf)71Q9a zu+^4e7PjTa<(a|rm{`5Ar;S{#Yqu((!EB5nEOCP#C#ZY{w%n0C>#AC*?2iZk=!j?c z4%cm;YBK`QEDE#umcDeHJ$>_>vA1WqQbNw16Ni!M9Q?J_ow2<0x-mXfRuz>4B%AK^ z=fC4EdGrOjsn7xOPoZxlPO2Gj1{zBnoaZHqwq=9&6YFS#D;k4&XQb>dV(B%;3JS!g zviEF?6CM{U4?TC>;6YPoZJ``HtPQ$fhZza>;cv$^wemz&_^ZsfgL1Mo4UB~n)wU-Y zUnJ&4^J1$SekZov#lr(}J|-sE0n?(G&D)oFMJy&#`PkN!-Cv(OR=H-vum^rro>5sE z5J3^$cY!RHj4kX@3cq40(%i#`i-26TT$0o7i!NA}?Ae2@K!>`Ly{H%tlY60LI`lf0 zcPzA~)s_epsZzbd)#2B93yeEfE@lr`{qsw*zndJ_&^-a>+0o47*G0i#rP&A=2?GAE z7eO@oR}!3!g+=#K6F|%Mp&-F_T-I%?&sG@v+UV!PdXd$-yQz-bY6fys z0$&PvVoM|71w@@jMFo$Jhm?P2csGrbxz^y@SWj`Abn>`C-#&So5`?Crp57v_blP#9 zME{|X`?)e#g5!O{Livcwrk3|z3m3vY<`e7NNuXw;R6q5;OS9Uv?qYOI&nHX7L4=J} z1UaS5SgyUt0d8wcOFs9qP*mUTs&lR1bI;9xJzUR}0D@Kp;Y8vSwPC%K&?(1d7P%5Z z4khl3Buk};+Cs2y{l&Ta5yEFJY2B3m8{-Yy&i-#IWK@+aBBt@+L->r&40gotC<$TO z%{cTHMY=ES$E&QyON%%t+fG7;?3D<7KJC#BxdP0Uf zabvwh*}PcEo~Fn<@t&$hwF)cIBnds{VjhJp5&@Rj;b*Mv@ox^lKX<8m?6GUlP;d^b z$OfAwILV9R4R{nbStpn1m3lXTl1$ypLph{tuW)DAjnIDbuFiEFIMmg4b0G3ur0Ato zHicw7g+h>v3UwEUErBO#MZygua zd|I$HY>cX+O&V$J-4rNP>FWD^sBzIoAbIZ<3FxRin3L0w$$l~=M;})llJ(FhGJaUX zUmx&Wy(~Idt!}7PsKN6TLx_gtxUNqJCA3ms{)UT|SM>;%t<|TmHsd#W`d-vwV`c-c z3*D|SN+lx6lzFi+&`L-CD}Z}|gK~mwMqH}GLYi>hqRdHS`8*kU$x&9dYb^=7x8bQ) zX;6n`7XwOM!_8jdpi+ldfm;^Wen~6y_?4?pn={y`N@DH)IHx?;_&TdrSo4iDu#ij_ z=~h>@O|3yCac6-1q`6R-<=NftsJA16D=!}oX6ocMT&Lz9uU!9}wHDm5Yk@i^s++r1 zPu|~HAAG{xWN2B~pPELFpG)#&>SWVxYpi9O@&;e3il7I*WL9?;WzS!O;m$X+it(i~aM!{}6Yz=iP)jUFm75I$cOn(ZTtk%Wr+jGYfG z812x|GvTCX$p|eTeK;UmqELWq8=JP2XXOnf&zzbBu)efVK)D)K1ef2`R5)U*jRcxsK1KE-sb{rPWmOIBbn)l;<#ih4_kP}1MAvL~)*!|d^_<7p% zx)0CE@jMBkp3y3;o+Asy>*1hb+qi$&rO2z$ql-8Lu0hih<-@c6gLRR0l>=KjRrX=mo%7{@!$fEe#Q9dNX45$A6~D}w4tuUBYnqjWaQ$@F8p(;L|kcy&-KLI zOops8=?=7gTPo^6pU0t(6^Bsg_@%9US|!tc!tLcMxBzJO)Muu(==A-d$!TT-j0D9^ zq0K2Yxpi7w;We!}%pEJ$8&nXKAX&%xvMq2usWE`HT6wmpDj~ri${XZ7Iq(^{D~)|& zhS&3hNCzMS1zxm%b|I`&Ao`ShizHam^)oju)6wl+_@3)D2rJKsVIuvS>&`;9gt>qI zZzsZj!%y2IZCb9l@knHsMGBh9%JWqYUr!~%u*no%362`Gt?3f;-$MU#CWuqQ_iu54 zxv~z3APyZ9*-|q%*rhVNO?6?v%u3D@b^}LT>xy+^f_&k8uU`~eBCC9@cDvPkWFe^e zZ^Z?Ir#ZhE%#P%pd^T{JC+p}r9JDU`d#Q2qtEms8WmfLrTl^AynkHb#yq;~;#C>F6 zalyL(u)gQ~NaSs_Ft2aY+R_-IMIDnrwKh91k*Ezp}}7cD2zFBu)XkRQCCyT&#e#`rpJGq{jUDz>(eUEiC906THkLXh(gJ(4+q z*BHZqMhyUEEKnb~>d0&}ANVc4^RQ+e@MuO4-{0IGz;^Hl*K(?A-3)X>^|ZEg9ppEU z7fmg4@dG1hwO$d@5X}LOvuLnovsl@9WUp293|TraB#5Pak`ur!LuIG zV&*kH#H05Zfs*N0*184lmIF1(hw3d~*sSF$*&9j|%ES4_?LR?gvSbKZzQ7FM0n2G2 z7k!M&n}19gEj8$1;Ll8`n{7mk&IX4%cZ`8W!pJ5)VUoeSeM*%lON=ZPB4gZkW&*S4 zBwBrrE$F_t(m^hxdy$4Do)B>{A9#5T|9odGgG?V0mLPEWT`Y*6IVH%(#+DyoE35L zH-zmPpXjU4jP*pV(`E@)VYW7Xk@2d+B@B}A2kK{=B!>_`IhM5YjCGOUb) zLtD#{AwrWzycg2%lu5xLY-A}#%bP6Gql6CaDfbv7=xZpeC9Bp-l(!=GD>cD_>dCRs zDUmej^>FM~Pl6Grhj=Gs1ND~Gbd)N$9t2As z=}2y-B;b_t-^E|~KHI!o-?QV`sf!hU2I?Y;K@c}akH&74@LTTE)klgo2wlQ z(p{X7O;A`he@(-wO^BfVs3n1=O)$d6WAz)2|G3_lsyXuqVmoXfyHL7;3aP%*nt z8_wFi-bwuVU5Y8+mRn|WXT#_U_{R3KSP2*>fWw!gM`ls}IJ#0Dm=#{|(H}3Zwc&hU z+OYr`RWs-Kp*iB^)-}st-0H`(_huPCpG0SE?{>^=F1FXVHTth`D0|6;4Kr?@=iJ_J z5`0c_XrpZkJp5WG%Vh=)ZJv}0r}g@nJgbjaski&Q7sEi7Ry;ApA{WliW$&|UMWrlM-=)0BXZ9FcGB?+fcux1BM+B-I`QMLWz9g)tPlL(lc^qH&n7nsHN0LPUeyDE z(Wm^y7vmao7SdIXfyqU?$8&@)PSeQ8Ed)3KX-bmj9+ANH4qpPwRaITx8<5|~%w-PQ z{^j-V)4=kKi{37UEgqG~3l_g$c-B44SJGzJed8!vFRFUe;_vfh$s@y-La$4>tN+98 zB9rHS5d-00^9;g{2$Cib$D*hbOAN8soci^E-OJrm)2Tzw<12C85vFB)XiF4nu^$Du zc0w}HR!wj|@L5ghjz5M~c>T5a_ZQAKQT(Gv=zY>g9tRnSEfI6-KEjXiA6S#uDl|Q? z;yyDG2Fr|D*V=>MK7QJX)vFz@vP*p>P%69|^0#Ys74LFDrBBKfjB^mcQYiVUl4G0<(7qmwNX`7@^9u*iU2;uyW8 zZ*uFy+^jglg}3YeJg%|5;}7<=b`=9ZDW7I(w`6#hUL^fK4;`f#;5roKM%O^r@v)zG z>L4q_Z~Z9|WyH_q-~YjRCJUX+DpYS)u~H7r9ukiw!e%L23MudsS6tA6w{=>S>G-?$ zny%XmO&x!>E?C^m82YNT+*4VhLz5tZYQh?!(8gPDhCRa@CN564hwD1r(6aU+GgFWG z{Bz9JHnfBa17(m8wx=N4v7+|tr{NbTZd_+rrK~4myi``wpBLiVF87kU{1ds428tYR z9!e884440dytj&qYwOxDPmG`;Aq01KcPKQtR6^nI?hb{7V8NlFa0%}2?(PnSyE}zT zbH4BYd-P3@(HA{NU-bRHsG4i9wdZ`-JD>SQI$T~`SyMTyz$L%mZ%h6#{zh|BqeM&A zZjC+zfa$v}j-m;vt7mhZQrU(`Tpw-mvkS%upH#uZ&9dXU-#|&z zl61fCbbbKY-8#cK?M%6^0BQnb8sM3|K#~8xEnaP8h^Z@i3d%7ZI%OEXKR1g}z$5{i<3ld7 z@q>#E*@rWr?n|wS&rP~!W>o2VIH6oXVvZ8lOq9m*3Q|RuZ`=v#94f zdPrbg)vUyIboJ&9ON*eE>;0;TH>U4tn+-|n<%UQk9y`{>pFkJ-G1>%zk-4tDZ*vDY z(dOxUll#}nlTBO;`ykhUNM;yl&im?&`q|p5q?}Afru;tv21ABXfcFlPY)?B8ClKZP z;IouSgkCa6_|<6OQBOn<_mxV#>(Hep*1iSDbnkxV+7ifH;lAu9n}#4acuWPa2^DBX&GzFaM1r7Tfss0|ED} z>-=afs-Gwj1u#}l7Qq;&GZeB9m%ACuP{`(-y-m4 z7+H231^gTg8?6|?89{`!Wn~1Hc)g=A!TrdNtfS@*Z1`~~N z-rudp*0WzlZ*mxYQd}$pFHU*YkG!uUbfh2zA4YPA>)R8hn)d~CVX$hqpl2db-_d>p24FtDASlvn?-cd=Iz!*fiVOQ*XU#uGHuaP3W#g2EB$ zxA|9oe-|XIhJpP1&eE-6l)y_#0EYjz@CDksU3 zB~%|*{Y*H%@2feWG^tf>w~&?`Z7m4&)=!5Zd@Obzo(+eDUVLo_?PkuSo

zSYq~LLM3gx4D%+R+qUl^9nj))H^A`>AXwCJn}_-Sb~`0$;9DLoQ9o zOxws~Ia6;%tnM7GKP4#jax(01N-&p44mCHQc?Nssy8Do@#t74g1$Z3tz#Jw`4Fliu zo<`Q6jnd4a%$yV=cd_!Gw-7Dt2u%8&n<~=mqWrFYoz&0)x&EfCCFX*?A5^d%EKZx2AGvAI6D7b#kK8n9q|Y}=CdZAZV6Tvlb*@S4 zPWR1)${;Ejjm9On%~M&~uy-j^T;qL#>nxTEq^wAOd5OmhqWa)XSxNgDo2ZfpR=g%F z6^}Qrk!%vP_&3%2@8cJ~{L3hDd#cw5PM{WqPt1wSuwql}Ix=H!Y}+#{ujrU7RJS3Pcp<^VGikWF3B^|2ekW@&fx*IbyV zHeiz%Y6%{~W!P0|cubSaqK#;t#a;eAqM-_P*tC8}H&?C6t~Gj=!r&sLfM9z=^3mMJ zzv`dbwtW(_y?V5ttTTDA)yo0+!n~Kpl#w zL8?7itX0iSE&xL+5ggx4>0Vs>%lr1LVzFasM)Gy`Uf(u*Qe`uyP0ssU*j>?lEr+b;~iOem9SF{D>F=;r9jN%-Ss`{$$s^Tz5Z zVtv@4&wN8iQE&fw_$w;y($@qI`KPy}Evjc^s=vK`8rIdacc+LvGCHlqHqPC_%Q2T* zLrosvP3I1p&*B5RZ6~+~ht&&A4~1JS7KcvP7KAhKT9#ehAk!3_hzwQ~I0LNK(%{$n zH6m>I6Qgx(b&!0%jEPGQU|(u1?56cS<>AOVt%s<>%WM0E{ji?S30rGBU$MtQ1jv1m zykOM_v9C6baCE;tJk1Dsb~=xRA+DI1({>E+@EE4elQ<@a)kOT#UcLMM;s+z!N?11#onL)q!(TQ@aV*urgHBo1?8}Q={!j5iVVLI#+?tn z$JiOj18g!!#a8zbjRE&OV*haA@9`Yt(t92_nwr`LQ!Vse($sHR2l`Ez05qT_eM>e{)e5SBY&67A;5^nROoI1O}hSvg%@110MO{Rzyzq>};b>Ex$)WWK%l|YRpL0oK1>k z7U#|r_a|}-tB#Ekb~wOm%+8XWx}bOcU@Xw+OC|V>$}ul?o~L03I!%f<%UenpWW1PS zk5dX)%8GB|GVaZQYEmKMuH?%RjP=aua++v7mk&bkys~RYlHS&2FwM1`Q+qfm_s;!^ zKi9r~w;eg&kq*7iW~97w7uFx`b#DmzUKDdZo}`VL#}zzPq&BKKnYM%R)ZJS>vb0Qq zt@vnEV&m|2|03HmZYAn`T6^6 z)Nrf~uA+mPnihbTY__7ULtQg{V952YCDpCe(%B zcV-Z|?}pc8#@ zlL_OoKH;p{A1l)WG9JwFG?^obr_WX!-yG2wz{^Eq^N{IlSV49LRFvBa2j)Ot8`P`X zYRTcJ@oq;G&YZ+RzT*Mb^Zxg!^|nOsN(PSg9bfdaK zzhT9djr7wJ*K+i(;G^_<-ESpKG29He*G^X;!q0nu1nubu2jK+7BHQ@A`NCgl(!L zOs8j7r83KM7<>M+E74&qamwno9V|3qz2Z3E2MN}>V6G1@XnRwWWFKC#o*;3dhW0(w zs`j%sPfad;TOG-^*XmH_GPgT6Z?XwFhJ+Bnd=U2QR~hnmPfb`1$jRo{O1RyOkX>u! zAV%=Y?74J7Y*Tih*X7=f(S$XuvBW#E2s4?u8b8s7n{dN_`(y67&dPxDWA<6cnoa-& z++@dCl4h4#xsc$$ffxA8kiIZvLE3gqk+P+VR2qBm;s-C8SckdVDInbG?mET)AhI`I zAsB!padd!!9&t&_-#-uxW2n|BSsZw??O{#XOv8Mh9Az8>`dsED3j+yGWir#Eb`_MT zbx@Y*3z5vj6NLdYNmE_!qpK6V0>`Yf6x$2Gkp{sQ7>W!O#{7klp(UGGUvD_ixJ}o+ zwOkr4A?LT}YI$S)$+YKss9RTg@xeU^kdz`ahOKE8hYY!-_*ry9P8;CCMEypS+_w2b z8P!k&cr=_#u>xS+tg7(9qZ)|+QTQ~|ci&L#kll8xW)KKjpZhXYONK5=@UT$bSJOMm zHJYM$f%*7MJ|Wm!CG@{#M32yE23F$Hn)a8x<_48Ivy%8)#Yh2QSspm;)c92yTf>%l^rxZ7%daD8 z=V*>NOsjBV_c!pQ~VAECO5%yQnBzmyy>qJ>hZ z-N#oCVE?|^d_RX}Fh0beF)QI5@^b27UG)V4eHPsG6WI5EiQ}_*7!S28y-#$qe`sQTcD;MmSQJl-g=K=WkV-U{po-&LwS0uac+3O8+DN`PxY&xP2<&NzVa@r3Vh=l$dOfc)f!v(i)?T`U*5ax zIF|lr7MFuLKhM8QwthkT(JtfD6@pN<3d#y3( zl@HR8)p%S=KA&0lvaFAX*=J?WsIQfqt2YAgS(aEMJ)t#D>NCeEZWu5X$&D>WPT}8N zb7AtRQweXT`s=t;iz%?H=n5iq?`mW*ph;a(^fhllxW2{$+aD#^46y|V_;Ua)RL0Qi zJ}=h00Sld#s)spz8JTp+u~3is4%P*7gm@*=Y~+Q)z1zuPW4w^jKjuw?=W&M`#@t_R z=ma|7$-K|X(I9JkmAu32ylm-;MM{9+SCuReaKKQuHqDBQ<}Eq-NU5gfvL>~=$;Db<$VXF86opU$ETSs+s%G=SW)fhW<2jH z*0BhY!Lf$ohAAOq`Dow}6}--d{^#j!F=JQdp+qmL-e(XOXY4;YSqkER3#8E*VlPOq zMN*&m(_T9i)L1vw`+RIPCh|_2=f(=BH=BqCPm}wsFemjU8=YN(Ora%|yA>ub(&d!O zYV^D&GKN$;QaBzT5?e)Lg^eAmw?@b`8^6K$b76%?(aUlLYtt^{Q5p4tqBcgAeb8|W z>r!U)$ADkWT~oLCtASJ+;TzB8et|nE$lBEL42p$6@K??t=Rf?>E@82|Eljy9kp+HN zmtSr_v_3$Ms&{<1O0`7YB}u3=CWa3+{N-qqJ6*KTmxoOTppHt_x7Oj^P z|1d3m5`iKrZ^~*#$Cg4F>RsC~onfU+_|M-v<+>h89tshK8VIk#%634z7};q|b$M#v z9m$16?msjG5V)}mSuZJ@Pev>kPkw!Ey&bLulZzJYYeaTYUPJdNHm#_I1s40=_>`Oc zl;e!XCsDOek$bWpP1tN4^1q_B^tZ78Y%(|SinB{Xd^Ha2Yw3;hI!)9EJ-c4nyJhao@zv5RB%qUb^kunfi@ci{* zh8W{tl7Vj9Mnfa^3s5twp!di+N};u!e(w5C|4Y z)=B!J{vmq`>Pw^w^*=2P4R|YW)8x21qk@)Xlznz-BQ zJ`Bmy5#Eh3`l!D8Mh7@DY1`^k<#9NNb@lOk9;-qVe4G!Eox`Jff75%>pQhdS z@$-w@AQ9O~T6nz<+ZG{mQ)IkZ{OPtY(d~S20*j0~N~I(<@r$@l9s^-ny4`RD13|U6 zIdCp8DBes&Mxza|{^bCXbgNy2Ub~j9)=wYyRfaH?aI`?^P??##l`+mRJD1DVT2L)n zvPu{ozpBHj;C7$qSRo)wWglhtRYcf5-$J0?^2B69&63Rcvv=#FR7~jmqaD)a+}BlT zff%d2f(~Z1Qc`;_L5MpHUyC&@JKOpd6FO`h(tW{AI-k1?x$fsw?%FranCc1C@dd!2 zijP^YSzqF!>hs-cP0jx#v$BN7^weM6POBgUZqi2miW>0wj!`8u;n?Oj#iCL4nF&ca zj^c~_9jBJ&aHAszzNUnu6)rF}KVLFBvFCxb%1 z-+>BhUGG~D)P9`G+=-IlrymZ44}_u1tKt$$N6Z9v8Y7W}rFfV}x;@&p_Fl!S)e$WW z;5NlB#WkroMqwLs)@{~C{@gR@tBqQ8fq_^l3xH===PZG*!GT z4|x>tsu@+R18Sa9QNu>$pcB_!Cnz^O35OlDV>;`J)j>%~j{cyydC7a@LZ_J$^GMRR z#m|T#s;ZhKPZHmg^2WzjlHB78J6@S${Z_=?(Pgn5&OQxPIYG$qyL$P6vxnE^%yBXYi%#awDaqGWSghUC3rV z&D@{_(zyx5&u*JopORi-IOMkktnqG6ED5Aflp0aZQn75_j9IiSrqq4*oko=G(-9Bd zoDXl(x5%Hag)z|C5)96rwlUsZ0wXNGs?MTJra!W{REzPEjmam<6UfcEa!Amq=L5%zi zhY!_dS94egi5tOE$Qwb+m_&9gbAF(-md@7}-wapck9h#|oLNp+tI8*%hrq(l@T(|w z^{+g1RBu8o)kslf>H@Uh9TN}+kxbWCS2thkdu7y0Dp|K}Uw7hj_;CK^Ma#>zV@Lw{ zp4itYw@SyxIi2X3^#CH1f1-b-85dPbo{dQ6HfIpH88O7^NXcIq)2Qtm&C-E71Okqk z<+$`y2b6ChXu&d!>Xfe;vn_x-><%lJa(N(!ZNY`rI(c^?CiAG>N)W^>hqjkQxP;fcv6pwBJ{gM=j|M<{Jnlx~B>af!YlP^Z(L-*77EG^4D zNh0|HD%6m4FL}k^EHc|chp~Z0UbuF>7H+r~sNz-S)Z>5yl?Kx*Ii!b!FZjhbI--UJ zd(VjxsFZyiV~&$*ZYRloEWgiV2j@a5Z5#8R0&*bVKV=Noy;sDA-y7Pmdq^!VNejlS zGVe#1klqFQZkrFqH;q%8BU3TuJ^5QYi1t)=p#aiRBW~L&t${DALkVFsVbSW7&R=YG zgGnD4AN0-wMs4g>t z=qi}2zD_g~C*zqf`yB3fTh|;Ca=uwZlxse~2AIhvLc#*je_qa_wsnq-YKN>U3y zBcii6O$=XQpx@xr&Ai7*)7CLAc|S4?JBFK!lbW)2CLWxsbk@iT)T#E+nz|hlA3J() zn3*#_98)fQ3{UxVT58+t>*_I;eKvd8Y($a@u)H==Xyc7$UTtb6N_vq6nVYhoGp>33A8>?7jd9t;CC^P1+Sp9+ znH;03t@6q$r?DA}V-1E-Fb!7`>XY?PClw>xEP3`z=xGs=*>wCiUSNxqH4cYj>u>GD z{SW|Sj`h*dFUlkG0asJ%0WS7E&eTlr4`T>-ba-F)%T#@%xbpxX&0NPgL&+1ctFm@j zo!*%It&Ax&zWV)}`eSus35o4>+O|ZKn94xi^nd**igH1xGI6j(O$vt%qhj&~O;InCIAY9Zy(2O1|{okkA`dh3yuM ze4iJ%&Rrhz`P2ir!B7V#iQk-8OXtpXtcPC#>ELc|u&*Ai=$-bM^)oKq*f!~X`_*~; zBJ!*nVwLA)^~p!?_NtiTi9MK>UAv zIRd{W6$|4!7KM4nTb9bip}S)(g`-Z<8+DDY1V2o-MTxdISn_tR_+&{txZ=r@p$tD* zg$lgR$z7%!E;>@7IFVFLZ>0cEzQo1aDZ~A*2+Cq)aaIzp!*~mp0U^Uj;h*yf0j1 zgRaNze1Pa<$Kn9`-Eqeo)fiS{{S+ELB!*#9kyl3fz^S#1ACA}pm`(i_D5XAsG03^L z4nte%Ohl}`5s)`av$ga1`rRz0rT9?$^zhRq3M+BQ!_@!D_Uw2;{=X7~{%=i5|L^&p zs-*vyPxb#3Z`uFXe^ZcIVfW>Kp-`V6#mp{a_&Zi{{s$i=a<)6ZL+$#zjrD&mfNNtJ zBfyjQK8F9xf9*&YOHN-xdhY#S%G7V6ATFVXuaDvXLz?>h-sh9Gw*&PpzTf{o@=O4G z+)_B>M)==H9(k+p22$5-QU8Z9OLFV@|MZ7!in)2;-@h_BH~j!QZtfbRI#2dzL;^xy zxWGQ@wQcy}E2fH639uqY8PB(><0s36f5VEdoLp?Zy^Q)=*;f`HKb+NLz9on4ds0w3%p zXK8Nau7B;3h0=G3L;F=R(y9^irY0(dP=v4gyc`ROFcYor-wsDzCulr89|4y|XGtv1 z*q}{b?8+B-99Fo(LYVi3$_1Z4tS+eHvj|I(W&B+t zv$RKhz^fhjWIEZ90Kj_jQQ)O%24W zDV5z?G748u*MdwMcN-h}GP>Bx@RH0x#u$U4CccG?82zKPM(u^Z|1S2D;mMs0Bnp}N zD+|Y;Y$8Wxq{G;HQ0tbV>F*eHv-f1?`;dJNk)Izvv7WGRnU#^(=dgbD8=r14-bg}$ zzNl@pZ8GD>bctUYD}mp9e8@l>Q2>M&BjGm*r{7JJeH*l_ymTZ7`n_1&oaJzx5%{1AN6ocZ!g+oxnHxhrOj$kQy=6|09|A1WUnV<>fZDv@vAV|yWeXt z&KE>K4LPz_L={-ZQ~C@U;^@fs)=t5qX5QL1THu~7QQ&D3S$u8$W_%O>${^~h+iNr& z#K@y>i!QKE=}4Qy`oR=Ee3M{#a?iO!#bO-&_>av-fWrl*jn`0|`}ov=4VFAZ$p)NO z)2dxOWJ%+nreAw&^$#DfS?_e6jr3@!zGdJ@fKxCt=t)0L{%7}AL@5msZ~bjXJtUz+ zqyClhLqV#xS1r%!hL4gySVpNqt}xDRd2|E)Rzk=y0x*KOSmgy||C|3LJQm-8czD$) z|0R#`_~@NfOq1(AWeP@YlseMePa2uy>`+_-S zV=RMpAtg%QwnDy2nk?_ytf@3ic5(E8d%9t-;5mm9&U{Z`1ti{lq&7zeib?`Vy33ufoDZtSc#EGkj3QJHD#7*4E zozU{XAdW*dPaC)`VEDb;pt-tQIjCvw=@xfv!FS9n1i;VZI^CBUaMW4BQ2my7&MSNa z_b0&bB69wt0!<2RVbHTKnk_oh^Hf|P^(RtD{TpJ|L!OQxWTvLuJE>8~UpjihQ>NiZ z7~PwQRS@&Ltr<2nMG|BkW1}Ef>bf+oz%BUBMh5H|b28o6toFCk$67h z1WNx7Kgb>N-{UW3viLiBtJ6$l3h~HB&@D9o#rv&d)HwjKhwe3;kQ3;joIr`r_VKjK zlOMQL+eoixZM?1a2@hx*Fb z&E}B+Ogoxq1poJ(R zxqYFS5!cxZmw&%5QOUSNP`O$L?3ofmg2Unu(FNsF$sWd?3AN*W{@KU<&LSROG3_Ld zQiAOY`Vl5-{VQgP3)wFCSfw^wf6tv<7=>?$%-|5#zE9?9f{62}*O-+pxdj=LXa{Jw zm6T$$R0{&(6xPmvh@er!b~T*?Y^0#-2iep?`|Z>knBmB~V9$uaMZ7k=jgIyxTFq9lIZ zjr?l!`Io@sN2LFr=AH(JJADdlLn3Qr0z;KQlK#22s1%&G$YPa#?D<_(7S1#rT@=3@ zevkr{$>Q;J5o6lFd<7)j-h`DR6}H0OqJe?HOasVZ(c3+5Ge2G0l90U{NdfxT9*J zFj}|DETtg&uo5xBR_}EJhO`=K{U#8M-G$;^n=_B&qyghfLF$H%AtVaBkrXOJb{VFM^SC@I%zeX`JL+#Zhi}We10rcG(VnWQkt_-ewUgtM zvNHG!q@oX$k{8`Gp%zz7JFD?usi@&+#sZ@ON6@8&ts2xjmadJr^8^bMG2gXwK98ti zM{u;N6s!gBZ5bZQK1i}UY^batcd_J3rkCPR-a2h{uvlybN|EbA?v+z|PGU)*`~6jO zp|8;wwIn9u5NM8+cjwB>sD~)>dX~AIKR7+bYOtkU4K%&b!ENhH?_38k~X}s4F3TPb! zn2%-9(GKOTH>d35<6NaHz}WA}HbS=erBCc>?<$?R3gvaskCBqscY$EDKO1t2Ie=xN z95z`svGoYXxNN5q<^nX!9!34S_LNVxAzbW%>sm(&;M-2jvxVV8nt1QwetTZD)FK%i z8C%EMnyEN-d2psVnzCQmS*I%e>7VCp5kdNpM6R~uzcxVkq-q&PRB_DYx1$D_O}mz| zAC~%2nW8%l$$b!GhGuKcXkz@h79q4aZl6}{%~Cqe(v=GbBd@ixCt4d+vB^WoS5h&G zx%4=ee{sFcj>-taZxQo-*!JzEasvPnq?i06Y* zc3cBvn6av;KEiiNt?v~j(iU-xZ7PlTKeb|!n(M&gr1y~n3~a9^lB0v72np8{Fb%Qs zqDzd>U?#2}a%hVfMg*mhbp;$kuUz4Bv|1j%{fJ#*>-}QZw@H$j0?{BN&T z?GfJObSgZ$myXiSE2H6|1HEiIIphlAZYGvM3MK~=6Pp`TJ?$v8R43|X+g~KOI5!_~ zfwZS*xq2(~d}k1A+-a~0<_O{bVySmO6EjnRHS9JZjeVN)8yz7Xh$@SGIw48-`9l{! zj%Q(^`a90PV=ZE-e@hUDDt5qn#+R$!q+wiftLoq!Qm+sF*KJbC=YW-z070tkP&b-P zwwRw6CUmPexUH^6Q&r#SuSJug$^-mye!Wu*<{*aywL5uE#G#d&9mX;?K`-Sw26Ek( zEF!$_6Bn~3pt%3uOqt$kPW}3fjKW01kHt#o@qU<*5G7rdQN~r^{(uY1f98koU!WF~$+UVo4RUfyHE#aoSp7kG4O=o+rXgVYJi z3&#MGj7Q>=uw3IibR~0PTkvklXYDl8^wLZqo>U-J=7S&CRpH6)_|oib;o0{30Y8&@ zWZSjE*17slsrg+9C8-#mT%3M>ZPH^+DfIPx5}=txWSne`6{cu#t&NJMY=9IAX@=JL z3ES2wXnni57CiW{hl^jtl!C^t;1mJO3=0_5r8J&r@Q!q|!whxkFaOO*@vi&XdY5&pNJn!FQrMyr}q1oq!w4F}A zza~HD#5JO7CuzIaJbRUpUFSN*8E@pB803>sL#sEHwp6Ht;?*goM3?+|NGD!ZREI&5qZu0(^K0?y-nU#!B;VbK|DR>Y5TRbckhuLDx-e86g;M{#PcCVMX zTpq^gMKoOn{$Yk%orCXij7j`iqpgcHlGtfS)Vj`4vo*v#YW z-{42g-KZsRK=6>`Rb9nHNWaB>gePJb9=KI`rz&_`AVluS@^8f%JY{1p-Q?n(cu} zKL!<9*Qq|ofWADyT|>+~S&eZ(oc77OD8lf$%x5B~Kw`*wdAtGT;Li=}h^5&qdfcd9 zpUi|GKoP)RHx+|P5e8HhoO#>%b6gCcOp9N9rIX)7Y`3P@ZpO?Faux<2v}O;fqCJ)d z6;J!iA>#`RX-%gYMbL!&9m97@>Z7D=i3U#O@3uE!0Qdu6<$Njbn?KCVfsJ35E3zri zRnVu@!jfy~yhVzfbD!SBCDJa*M%T?F_fpd>oo5Ff`^Cu6^flhBi_@fiu+DU@$*J9n zSiByeelTV@-Pk8V$K1C)&qxhR)w%W_S)_-73KpKA(SOgZy%?IcQI7&cJ#;7Ef`3H! zJTpOT|Fgwra{(pT8ST-H)GyLyKps=Wd6Q2a*eP;h;x2>GpUTTg*HRS~>$e2v=#dDP zs<@vCBY@Md7DgJT@)Ly%$}2c2qu#c4ly4JSO(Qn(pLk?R+ljLkich`Sx5-Ce4qv)1 z0vK{;)i{iZSxPCgqh0iC^Xylr0{RLl&_h{6owqL4IHLg{?n__qQ&=8=^Z9-mEYo;2 z`|`(QWP|KbdQwCAqF)*#P0o0U&46Q8%AwnAAx-Q_{KtFGvZ*8Kdo?cN_}*-NRv#1A zBG5vSDO-9X165cRiYZH%K@vs{DDSqlqxJe1#u}GABN)`h?*YWq;2m+!T9+n7@)v1t z*L?CebaVm195>RuH+6f~Gh)`5XHHQ-?zrpEuDaV^8IU?7R!hFlww$2}W!MNpq{ZSsK*?m9dw?))n|~0=H#CS%1^pC>16LWV^B)_(jbBfT}R8b?<%X;>Ma1kY zF3M40m)zyQnZ>+?h2WGF`_|2WB`TO8;5R_ zRmdh&v-uLla6F_1*^GRAPn2+t>5em8BeYHIT)9PnWxjRx_gc2lcyYx`k7vy8THUJg z-HevEf~{vZ%G9Ma{O>%j`&idQy%?&A_e~{tMv*`_VBtSCX3bCYBk^q2rYWK>_pd&B zu&#AXYAzXr(JL?fhN#va^R4wJJIP&A2ODY8%7z!iG`;w>l8g=Itcx>hb;T0UyC zm%`91vE!=W9BKQTpXr%Is+!sDY;-$@RXF$F!c&!+(&&hCYAH~3EDojyDfkkLGn8rm zd58NIMMWVIvYy`ZC97ZAA<}!ul*WZBij23^kU`ptP5xt-$A#PiDVtpMiAIHnAcmgp zahCx+*7Lk`grujBF5)%m=C~wGRwaYiz4yO&bugA1kyya}z`=jsOqI0R>lLa6P{;$c zNb08?dW4oFy!~tOm8nek_G9aBPG@N)sZ~R``ELcmNvlzFe30r?y^+UTfj{;OPLB$- z2HC-(QF~FZ^In8}h4xY;>MQglCGZ4B$ujBa zEVomRbaXJA1U}T^Poe&`Bf%gwZ!}*gd1lR=UNu7#Ed?}3<`h=FXEY&NP_6yw=S;6@ zs_Ql=uRCqZe!P&p9P_V^-LODH$N27N@h_&+#njS+2cq?`U~B~Q$kfqlFG{FuM0q*i zyXc?lW#8`X>;*JEn`o5#lYng)>}uz*j@P=$YBjcePu0448E5}O{^}JtyG8f51{ZO@ zU`oU1P?TAKpk|BlYcmAaJUxLfeP_j{){L6SG_7cgFoI~*|3d~JVwni>5!(+XE>$MV zhcHpz9&k5ABbSvHZm{=ek=hU^+xQb#4sfdzeYt6Iqzbo>y2jC&Ks_rt4_t`L(x zm2E2&6d!p`d6?ssTEz<%11_zK$!9!H(>W5%X8VvXj%A`e=oqH_q< zj@au+mjG#l3%M({pxh_I^`Usn^q+MkmNHA_cmmeOW#{`=lD+_2Zi&X`L8N2sw}Wd# zBvIDk5>_O7c?y=&G5ni)M!&iaRVZM=?9aoqRI->m+L%>{g#-hIR-n|o%OCmy4ZjF; zaPiF3cP*+~OyGOFvZ`qs^T3~?CQYk+Zb)nM`jM8F(_BLdL@tbO?4(Ki+mBi1Y^A~J^qn)tN=gh#+{`Mg$`0>ZVNEmo*t zn(j{ftxe|xSDx5TGioRJxn_>IFJ^0(=63c!3J{}q zlVm^J-#7MlaAFFPX>meKVnyplU8DD_;)80GdxixMSz+^W$dX;oZdRXj0WBx~T>cu1 z5nFntAM*sj0o3GZ!KZM_R$VgudmiI26Y^q#?;ISmU|H34K$^1e&94mDh9#vT&}sFi zpx3l=;%Ylh-rlSwD2lnFmXh!^Y$f%-S-nZtB(;Lw-3@W5n&nr};N?sD)8DJt?qtuf z?a8z?SwatfTeEmaKy2C63%FBKp_6|?xMJ#jQ!crD?$*g=G&aSCOCr}Z>5AR!i~^_n z%BborXpVzkuZRBf-mI(!fVHk}kyS^RwF;FP5IF%KAaSOE3Lkh^Uj?ec^|=^{ImVF1Tgp-HNC2^S6*7 z_*0^{M?R5dH!erC2hRnohZ-a(knqxrbSuwUum>WD0Y}b&ovr97hkJ6tw@nUIHGn1V zq3Ug4N~9j+NM|@nG;pZIoUdC70tC9s`4vnhJc0)SL^0R(y1Oh`o5d=JQ-qf$$t%E{ z*}`sYd@(v?PE)?_#zD2j`WWL$WYqZm)+iFP^Xpimi6CDq3~|?`Db!QLQI|mw=S7oQ8<0bVCQSQm7Zp zL*m#qEUtin16NoHcXc_y8I(D~w;pX{GmgGR4h?=Sy?Is99{$ZeINOkF{a9|=iL@h> zmo=|4{UW7knjAoAmdEd_~HN5M?xT(@r zAd(fXfgfoe(EL#jy}pyO&Sgc{zcTlCNiyI}C^bfvtBh8U^=&)lx3y`fajrCZ3t_`t zC0VKSJ0_#m)pU4xT;Ry5_z9X}*_^!Zm4P&f?dfh*W2dwdnyu#{{`l(Xx23jcRDBgM zcq*h72kQ{|XPWHV2i!`zMdTA_pG^nKh`Uc09;2Qk8Xm&A2fi*JcaoY%`iP!5%cvpv z7NH4_;zM+#)H2&K==xjZ^Pi*mLfFt^J{G2ZRSEb%yrr?bqm-z?!bDeze&zPvffqT?A> zmUL}bMXif+L8=)$AswsXFHa3rk1Z)dOskOVrIR$P*NcPceK~&YWQi-(bHF6g{g(x^ zz1PVVTk&oA?Yv$MIZFyU(MJIpM#fs!o-;DUuK(Fauvn*Ww1vJVwesc{tz~TRl%nR+ z{HtG+WmjG-y9VHr926)s!&T>3h>@ntpaj#w(d;cP(_9(n6v=yFork`EDK)JRE1>jE z^HkE{?MisVjLsa&T=z_*1(5Q|bAQmw)DqYE+sG#`9BxX1njHhRJ;~Xrm@dqw?_6{< zao>X2l#j!wfg67uAzT#c9WQP5x;DoZb2aA$_5*Ag;fD?nTmkL`xi%bnI4FT1`-WS| z&m4J!F~sY0{RlYnZkBD&BHon_@2} z{6%!Wa;mRwBEd!bK@G>wu~yv zr8)oPUo{Qt-OBVv+_RU2ZGPXtx~8%hemUms5=k}8NMaDcHNTa;`aZ?rgqNsnZX`Az z(p&YJtE|td?An--@EyvK&D~i z;)uF--2e#$5AN>n?!n#Ng44LWyA#|cxNGAcoFKuWaSyKDI2^Wo|K2y}jD35?*jH7( zMvto1wbtyaHS3-4^FJQtl?45Eb8wP-JrzV!d=6NY95QRpq}7KMs&npW zqYEe+Nr*JkQcBB2|4}rn5-@%8EvqJ1<~R(d*EJvtG>?{kXqmA0K=1aJQtb`OEy*w% zK=OHgU-k7RM`N#d4FwjW(oRc*ZtAfaTPd|Ta>(~#&NDEMjGq%1YDU9Ir_j&6Q!l2(n{ zE&A2tBi7nY@u_U`8?uWR;@tUxisWHVZ!(s;={{=~%1`cT)+qDGKM;`31rk#WoX5U( zdLX9GbZ`FY(idPC)kV&8f2*i&cWYFN1mJlfyN5)eI_!!8?!|zM+-!9(Z8WOcj#f-| z^ZAs1(Vbg}{FM#(J-`9ZYaB>bCErO)cdgj^z{F1@zcvQna|K?`Y{vAOQ_{vGTehdzeZl_+F0jvExc z8izkCm{TfrrjT-W;c>tJv2IuOYYYmBGk;f>^_9Dqh}!E8LEJKH5J+_Pb8P%)1kl7S zZ`jkV58U44T`8?)UZqGvx}SP-SHW3Z`GSJn^F>xc_8<^cZ`0wh*8k=xe>mnE^PWPJ9C#6cuu*>HIx0iT>wilU=ZWc2Q!f;pd8k3p+1Tys z$kIc+BHOTg>8=HFEtl(6ak?6JC*n|mMnPO-P=Fc-WP;JbijR*hR2|$*8Ea& zz!hsY_#MuVN7pth_WA*|vq;t$EUBm}L;ri@bbF3CJCE}<=KJDca8iUKyrtLJ0fr%l zRo;wB%}GI`A?;b(aFm>bl}=TPRvLfeu~~<{(&~8jiCjA1RMVB^5GSAukBh|Qh+;0_ z$*0)&=0ndy+xsxIhZc{|AeB+u%PQF!tzZC!qL}=XDx6uoC0v)+0s@QFO{~y_n z)I0`8jf^Y&6EW!lE2?65o#(1a++$?`P<^C*?sV#v()t^!DY)zNjHk~t2^m9tNwYqc zmCAg+w`Ac8twj25Gavqe`Rv+U=0emp1<*#Qt}j5N`2Aqs_dsBB1{fJ%*14zNi|)L- z12^+IQQ+D6)OrrZ2L^u}lZ4q{<3g$xG>=v=>F>_xmg0CCr5Mzq2w zs&^ZE;cJRgRDLxFKXh{Zub;~ND)9K~e80MMb9IxHbpC}(-^~Vl7E{ubBwaLo%S{}s z_(+5Ze35B6#>n24ET^ z{pTQ8+*kj7_;LT!uxv)LWz1i8LG7wbVGVbj?Yzy+;e%U$r5W*D{5brW=6Y~~`1iV2G z<_QO9jv_}pKFlW?3F=uANnXIRg2M06ru`5TW0IK>J9Lr3=A-h&i`|1q`9!Qrv;?lN z#KwJo6Lo!f6%;eend(V%qczQkb$xH?4c$G0Jqq*-hK&se>RaB8`j?wuf)sN_{0Q4a zhui&qUccBq7&hv3PkllM%qYVpZ#V{iR6wI`jcRua1Gd!rEGRz3{+W*`{8}-+oT2BU z`g^7}Oh{N+l2T(PQ6yl7upGi>(1&(QW~f1cpOklT(p3H`sK%hJuHu4T)HA%Q>@i__ zoM69s@aStpO?)J=tAq4=sw>2`@8Vm7fUG&!7rNowQ7?Zc(cgVCdwKztFRpOLKBHv4jz)j<6ToC=t0UC4R43I#p#Ybo~e`Zn?E8!n^WUPrl!< zxItSR28)#Pm&oVx?ZOew)Q3q?66B?u(MbSpPpaRYeYr+4r$H*F60Kpdf*{zRe? zUV^FQxjmLwqIOZt%C2^}n}4S7qNU1>jT9U%>jqy^r#d)lS5pB(s;G>HsMk-1jS_Nu z5cS-@M<=+k$kCgA=!iVM*|?Lt%ACAMw_7A{&w+2RGh1($;P=RA+6|c+YOX!hgDF z`#)4D&l@$l{-719`}Yuw6DwOpGkROUKNb2Q2KqBKd^Vq1i|b^li*isdnzi8lcj?HI zXyPnYSFMW(W3CF?#(*~|BxGuZ`C3(G<)4)JP zDw-tiho|?q%j3(&s~sK1#x@v&5FR;SX64~=?|pip*Q@eOtos8qM`{b}Q44BgcMy4+ zRZP!sie7VsJY(n9h++~OBx!d=Uu&fce1Lr8@+bQcESK|G{jN3usvt{SRe3^ zpRTY&jZ!S$f+mGJ0j$aVoUw$`^x5I-^^;d?s3hxrgSv?%BVPj-T6R3{>E7nW{IZfv z5BAFT%GjLb&^kML!Wluoo;^TxnW9Omyz9mgS8gs zS(U%$Coj$%*>BaMR@t$N64gv+Tw{;WIk@Wtum4;Lc6TY})hsIUZG1DHQX!R;?e#5S z9Znr)nOdMGLu^&mn~(H%eT1B3id?N6&1yJ@^`zgHB^ITt5VJyuf+gW-7nDm&M;GOb z7%sh~-)N-*(MY3HW~IH#p-p2!R@W+UFa>S6Ql`vMZSC&CY-Ls?2N3HV(6zmD+?H9i zo(!=Le}DQA(%x^8RIq()`qKFWpYKKd#(ha)_1v6ox0QN;<+S;oo!P(=KG<_0;3k)F zHpxz?efBQJS^&p^FcaWMLa|dg7HuHF#3Lf?946M0qB!~XjX@p%=kf@wMHdcM3Gq35 zXM(MXA#w&E#m3l{T3=dc1<+g~S3WA=as>OzF1_)$g`x;7!qdo47*87Ts(y+0w!)xN z7007>=Z7tDMf^u4^y>qu&zA)Cwl5U!l(tzS6z7eE#DDh702EkC%!lrWh|=Bdv%K6Y7p~3hp)!+#I9jD) zgR`3l6ioViDP!sqjVtbK4Qwlqaw>V@+clBEH9wWp_vLrNF#UVclS^*6i_|h9U|b;} z^gXTww+mc^;GhU=1aSYYM8kOT*yu%JD}E|z7yuxC{AVekrhyetVK~=J1?^yKlv=`U zqWL~bZ7EXWZJMvfTu!(8Db_p?SwFILpbw`pT`&e3TEO-1?bL|l;==b_e;ZxywecBl zp&s({MwG&Zek4rG)_}26I7K0{Gj;EOUQJUG_SpKc3)SLB`_UEgJY_<6yx>1@yB24l zilWP7uscTG>G?eIauw%^9-?CwHz4q9+)C)kr=pp7`G>I7&YS|*A;p1I~qQco53TJ1av4|BZ9DgAUdxF@w^RNTDny&7W!1l^@d$`W9zj^44Pnr zM8u3Q?)MG-3P=m2i3GZ~UlrxBM*652FbqNbjUZiD(rWvmRJ<{G^Bfewf&Oh2b`PCS zaMrcItZSNDC^t2%I8=7qC=WvY86|d>Oqc4)yXQVV;Sq)WJvleaV1?{`&@FOhw`NIM zEnVSTS5M|5ohGu+iH4NgU$YOV)~E{BFiLK`uStuRuvN&dHSkOn7g)yf>0K@ABH|#7 zB-t^1XcW?oUpElmbWCGpu+47uHQkSE*T!!-+vKU)fbD1nwFDmm)0{RlmfzMDup-`Rse?(yjgl+V#k5o+L?5nSM!N24^0@`-`N*4G# z^KmKjZG+(oo3G!=+v?;OyuQ~tjbB)&_tz<&2Q&d`Q2xc?B66OSo!_?6X9frAq_|u} z{-$aC1i3aXM2GjjRsOYr?qMY7NpmJ^?iG%Jv{8DSZ3d+duls#;F}bEL_EtlohcAtg zu!zcmJpRhYY0KzXE~>d&>BG%mzY*EH=o`zT`!IX)EM`NUJuC-cX1hQ6pID7zwP&8E zgKdSuVlzSv&0?D?=4Sk;4=wB?*{03J-&P9#1k6t>5`RyqD9yQx)5 zz|})wJ|9lENB6^#UGadU?==Ns3yjNS@?G;}3K%&@iLFr`Y70_N3C7E@HaP<98U`z( zTF#ZQ*{G|>YAI-HS8*eL<(|(sdMbIok3f=5@{xYt2_8AH?;kq9gJe5WxsWjZs5fW) zfyb;EPcPK)r8_oJ}enU2^aO z)~LUW5Gf5YU{gr^3IiqKycZ~+Sgyr|ITeu)3@hhK>+FMcjE4I=nuTdv^5ZKE=ZORJ zS{0suV?$`D+AAUY35y)q!z>Vv1$E;4+)6psOUQJjA#O_QpCHaLd@lYmr#*R|n_k%Q~vQhD} z{G_lT03#njJs*>{M z93+;}Gfcq{m{2b!Pq$KaA!DfAVrv1@O7aWiTsBL@^mf}i7f;!vbU$gkm3uFHw|fR+ zWN&-Ry5iQN5+XXx+>A&SFDBgMXPvtMPExlgMK+&XX(}fICG`+8M0CLEuvVM1$kvrH zI`nLEQ)*RIKv;d}D-w@T#utC57B z&^ag~QnT~-DqZ4S}nq2h1`t%8*hDDwQOF&Cv zxp>WRHif>?t_MEDm6q113qwP1)|vgFlv-zgEd{fz@V9y5HuD{J2zv*{sUY@Zg;bps zTN%S@E9W2a1k?#OSaxq!*pT^Q7J2AL-z{7lDlq}IE;*`aa%YhW1&_|{5&m!sUu1FF zbR+N|g+G41%tmS0w`Nh5EsK-QK2-T%b(ZJl{AvD$Y1~)&tP_+;U{VPHk_0a53kn??@k$TXU63k%Sig2B%om>1dnHUa*!}{l8aPS`Q zc+xHlaDr;RHm$iY_ceQe&di!>Kx>8~oASwVb^{d76x z7yAQF{SYPH8{6n1j^lT7jmfFw8Qr|d}6gt?^f>ma14jlV4tPfU(`-AvTN0FFv|c3_>;5}q99Zrh zb})+7#eDwDo6uFSZs=|wQ5I=I>&m9;1x4)nYz~x6NeNJXo?D3Sh2n%xk6MLOIJJUR z{DBEtEfE@?HlUT$@mA^_SyyoAU->Q=*7%AGREINs%bG_VEUB}%Ra|=&mA4S>6(KgB_I#y0!V9knod;9tgWBpr2?pY%S zTGa7yZ^55v0#J|T@p?^=e&UUT9j=IMn`|QD7ER(~*I#4=;DB#=Asj}5&KMs>=I=HS zN643-N~KY+wbbo!)k~eGr^&J8+0JySCiidhTwQBSsoirOPLJ5K7s@PkM&=V075unIs$48oeT04- z(a12yxv2leLBaMc>KAPO$WI$uX?1{|Tw;9t>KE>@f|^W|kUD89$f8t0fz z5bb^~8<4AQ7=@Ur7Oe@f!bjJixNlrDa9e=|&ItF;cD!+wZK1M!Plqcy0Y^tq=~h(WM(`i@*Ec4Bb09yO@4oZISzuBRHFGWlme+leL@B<8I9Z-3mutnxL+Kda2ek}uS-ASSqI9O zANDXT$n+~&&a%SmFBuE_&21r^!jE`~mAzyhJHE5wO+S(ZzPAx;G^9bCCV*K)8&P|6 z#EPigG3loHIg}S7UZZ}`q50kWuis9c3&WTBR}Ka=B&|RIB0pbtchhw^l|de$&mwO^ zj!+^ci1lqz_a|t6D<^&y)k4+w*zuMk)OjMzf2|?ZvWUvZhk3iDI+|5(`+{WLqiZu6 zQt`QUj)l9s`~3pozd1YpRsq8=F}ip+$I)%Nk)Wm zQYQl;!(3y<3MM=lVe?nA%)=}0>-^w`c`&@O)_n)Xhu`VW9I=bW`YHXD(v-RhLkhl) zlbksPadu)~`D%)q)Eam4$T^Tk{k<#XQN=?97R4!8HIWg&*nF4lkdLUoDFQ?p_Vlax zb$~N+EZzu72s_$r)^_mIB;I?J(;G%XU3zP`Rm-}v5?7mysV-xIbe}3SqQkW_oa}KZ zxi*#)&h1(0XdS*v44iBMa-!f+Y+FCb?+9<0Bn^d{WIbDsvuT&8N>*82=6>F}yo;!` zd6@wQ?tsCknAMmxT+>f-T%N(90-;tN*NyxqKto8KJi&T)?9cU=<3|u?C5+D%n3KXiG@IZAr*b6Vq>@QAcA7 zk#})@-}c&xCj=)=0Y{5~LsKSqs10=_9y!`FR0Vts+f;}kh4-wSlEdQ4^3J-&2?^`L z{BbnBEazXc`}Pw1xQ2Gc1&_Q^HU!ERQ@oVrM>KP(kveugUB=LGB=0?V7e65nBs8)G zMMGxfD=w=t;qD@4s}<-vRL#8FbGwFs#4!Kr=oIPw@}drbY!o4`$gfFHk&t>U{KL_V zgvdRoD9;R|p^+L3eyB*8SS>#BWTbG9q0Y(QkVKb;CW9l=aYQ662m3$caK*I=eOOy_ zGGhbwW3t{1rs~pyj4W11Ay?pk?Z+AiR!?*MN;T^t6=U+YB2$XZS|w*TzwgmqCdXDN zhd_3EdbYQD4y~|Onkk3Zr3Zvtf1Ey4bYkCM@`w1}R9O23+pu3yueNKXWXB8-pujlfqp_w7_MOS!O$-2QBZuBLxEl4Da zt$SE#HFg9!>*>qahw1hhBups!KNsaXfkz5Qn-6kJUDR4#b)M(6PEkwii*!Ht#kesl z3AOWi*C^Z0*n}%XQCqwdW+hu~tFwyP3FIu~9HM^4g4KtBks3nq0!!OwFKV@r=sC0a zL`_@2KG^0=J3sFy4|x=t9i3n6r|zzq@H~sz%@1|Ag)V{-v%OMXwFa_T|Kk6p$D38r zXPuR1JJN&+b)1*>woZF%ZYcQP?PA}fBq5+EYEhTR@0hMVQElTJ5f6vre#E&0N>&97 z)AF8&K@ahKKCq*m1)Hp2tofjG9>-8;3lb@0d) zGHgcJ#H%yRO6}KxQG_rdeXBe9J+v{WJS+vqG+|-7%YP{^v}@ zn-T+0Gc-!k%_H>i(BzMyMN`?4av?!cJ)Ow$*X1cu``_a$9j=E1xS{`2N1uEz&9?p#`ZE0VnTASQBWMf3aWJm)>70RG|18n&7flCl?#Z!9i zbey~mPi4#a=V);|@vziJBvp$&?Md73lDlDXflNuS9>0rcS_2sHp=W>E7~d_o3#3Ua zvsCCySc*zh-A5S@|?;=AE(<)cM+$IA%ywC$ZEJ$*W1_YL+vcuc<-0**=&EABAm z8Ta{UMBb^?(X2Q3ek`+E0L8B-;M0F-@c#m_~As>9!R>gIsNg%zl4-+ck3e-3LGh8!kCOq<<1hu5^y&Ik{Xu9s) zefK%j`UT~XrNXbrakT{Os&f@Ya|3Qp%j^MSHK?0v`g0$Two+d{eG2*{DfqDY8IE24tesi`fIvlZt458f(f7w5%Y?1l3WJQkc}^=owYE(4?0WLZlZ zw16qnK-yA%FPDA9pfd$NT&tI%FTu_kN1N;D-d)rfta6j|AUSfvGT4FU98a`&r9{pot9)jlUD2_D<6Xm z%Kxh*CZw1{jT;i&oT=p7EmxqJKBiCoq7Fl;G^P`8jRsV(O8b~iMX1c@S*?hbuP((i zW!~Hju2Cp0J!^~`|AtWsQ`g?#u8?Y?y5s+OJ%RTMFgWa`P#(n`$tetK3Vt6y0(hMW zRO_SrHiG!yj3<;naifg4V@j?$yi@vt=AQ`Qgk7ApI;L-G-y41t+YJ3^sqakhAEaC= zIW>`+@wP~3J5T6sG{QuikVB zF9V`stU2g5w*!6vY_?EYK=ZgW??*UjEU;YV=38rV-^a}1Y@Mr!J}nxWWB{$M=EzMt z72U0HP*zU2dENp?2MEK* zd&W)#hgviqfL1=COGpb5c8#EciIREY=uC0UOs^Jo>^g9+MVcturI8H|gMlqBf+#8g zRNR;#LZl?!U5+>^_uoeCBbVNiXL~vEcH(ADZ=QIaOtHEZd@h+TRD3?MK%yP>n;#_a?5I0A2Tw<#FSy8#u~nB#DxxvK&ZQtdKP~m2E>6@1rA+!F z?B?8#8tO}nc~LjV$+%zoIJJ;k#f#He=z8swMTeexq0SB#qkA&N&d+C9HG7S51X|$1 zx+zi-*g%@@tPO3D? zq|SQib3nF-Tqfop92V%f-r61=t|IVWyu2fi|#FCp*63Ul|Va>$EmiD+<9W^ zF?gZpySziK{IlE>G;0uI9Oc9>?Rm6nMTrWipEYi!J-iz9O8!%d;8-tQM)8{9jMwPK zU4d$i+(;30HKj>?t_rD@jPeWRSyXzUO1>3iUKo)?S}E(%ZhAhs75&JFll$sm*e~+5 zm=7yr{wR$!SC2b}88`o+M;t>auGZkToD(_%HJv`;xo+b7-}ZM!$~kvTsNhdIrOU_Y zcp|;U<>+GJVXO7V(O1jASj={8Pggtj;FZff+a{gyv^w+3^z8$--;vDudNv-O`m?OQ zZO3WTl|+cKlFn*4=2xd*AJ*06dTkBt_$YMO^SW>U1V*muDjtBVg#=ZN)UcE~D7w_J zT*W@#JkbEAvV9*Mk$sO9FMUvLzoI9}wl0W#!-1;}B+sc4smI2X1~-VJMo4pUe{{vg zy$o>?e)eB7iGO=0%!J&s7ff96*Z}=?>SFibJ^p8ME*|RW)Sn+OFlqqpt1KsY#YXz= zpb^LMKwpG{!?3CE-d@8VATvS!SA1u!1N>~^@yGVQ_{B;hN|G> z?J|?BP%wg!>o#Y)Tr$BQ&xN~Qurau<`#aT3M^b4>GHLX-#q4-Afyl)MGp3fx%89@t z)StNuWb&iM4`YJ@y&$1mVxPL5a8#(`y=`qKiU1$yc;U5Wx;{euu)g&hg1gfSFeVc@ z*Hg~eTt2^ikqdd79!!4sKb=Zmtm;hrb3_sCrz%^t>6`X#qr++Y@72x6RqE{PhuU0c zZ{m*gD@c|woj7*8Qp8pm_Mj9>CVmfOhE6TE+F#!xMf3Fu*b#|Y+v|}=lSqFQ;_Aeg z!u}}QYFbzJi~AX{-jc&L!Ou5M$?apA7v^g=ch^PtOuTGR+9|gQCq1zX&yg0zg-68t zd5|2)>`P0?@Dn!cR@X9R|4ri{OSmM9c|w{_m3q>ai7+;i~_nZp;izSTi!s zvyE@moh1Py1&wWOLr*@yvP#10zeK`7ELtM0S$sTP;YvvM$6VDboM1&eI}ICO99=mnFPN90vqtPRui^EJN?jfN$5&V~A1ji2o|?E-lvg_#@W z1mU4&RW=0b573q-IAZRJ>7&Rc(&B*N!*He6tmEWP=j%W%)M9izFai@@kv^jpwmOe} zotALG&hbSWJ-y|JD2xahhusm^LG8+pg;4Tn5BSZLNy&oX9KpqVd* z?e+d_NNiN7=`ksdF_np#!H5^*-@;wZ+y|M)MT@^C+-lKJgr07m@zWGV&!dy++WyT_ z&x6|J0psHU5D`~v=d5(}s10xS>$-g`aPd0344dF6B zQ^remB*ex=En3Hy46aG5*kxhDh5v2@NOIg>vgva5CT-^VnCevyJ|}2mX4E4`6ABdQ=$!O4l!! z02!q-K{tzF-+p#KmpDRep0ct7%Oy+NAKb71;$6ac2drzpvu$e3v3UHNA5U>E38EaE zskFBzl>Xpxh4}pFngu7DRp=gWtwedY#JK=ef*v?3e!)#tf@JX!=)X6nRES#*{9u}I zb@E#QF?odok3=WSgqo(WEG?lQRtxE%ypx8~q3&TSH#PIo9}uDEZZd|qpNlZNdCGFg z3IHjrUp%_MLL?z?@dq)}V&l+DYiyaev|lP(dJe(RqdXC;FPp3NFnD3cqZTCWk6-SB zfYPiv|4T^sXD3F{frEE`CdcT1lh+*;=PHwK_t6CWq#1tndz{f*)U&#j2`xbQFA?4L z#&_O*fIcjiws7{YE}?kpzH|IEAGlNr4u?)tqw zJg#LB*JDfhpR9wzCDVjarT3S^@#k{7S{FY2|H>PDMfeh0N^@GFD{$9hdcNHTXxM9; ztyiuglOnD_L3VWFd|zpHu{pfFpLqYF{n00ORobOh7m21kPco4gFM=svtQMQ{_3udN z!#@v)kPz^H{DSv4Mg50|C+Sy#VYP?T(~KF0-aw{<%5stHF5|u=yJ5NX03qR8=qZ-h z8``$~-UaCj6Op$Ef96}dGWCK|1`;XLo>Y=`_m#zDwvwv)8Pw|~)%Iy4!MQObI*p^~ zNt0+*VdFJh{B_6bpOa>2YyDUUuGh4<|$+w$+_CO)MVWPGkF6)v(1xU4As;J?*o!KR? z02d*O$k?*D5WXo>umAnXO~O8*WajNbyav8pD9|r}zKv63Ds8dV@Q@q3DVh*2< zx``K2-)`6VUwpswHm3TH`heR;OS^p`)}==%oe%5P+|iruWykzM;-SGyZH)kWzpf%_ z&HO#4;FKegFBwNTG1aPcyo8gFz3E#YGU#m!^G?cmCGTEcy&^p<(27-KRbD0pQk)pk7l}}VrZf9ee6M^pB@L29dyn_x)cXoC^w&wBm{?M6X z*O|t>!XFD+Hl}VW;)VG$CJz;I;)1RiJ!z+)$Iqd)9vnpIaN6~b_JT4@L3!i(j*Cn> zgyzz~DmO0sLLiNs2L=`4qj3I$!Y`?Av>OmB+x(`46K+z}s!q%t8lLzQSCV%1BL2T+ zy>hn+-5}I8`pMx;?M5ghy^ehx`R5VJ zYn-0nFb$6zG&>wlN%x1JrQ;x`RN93$_i<&Dg<-P!x3h9CTN)6NT~i62|VaX=JzJ73zX z!^zNg3yHhY5Pk~e=jMp%N>31}66@x{uf{{us)%zhN>KD5vi+o9GD%WwMb6!o z67t$>0)^Q_|lEAG?=3H~k@ zYDCDHmBM-E)@c`A`qeD^!=zJb@iU|)ZNHZ$%}Y;UVsrRFD0WGI|4k^P!u!=e*mpkv zu19Zs@DB|$qf&^((ICGcK#>0%%QJsg!N1BZ2EmaaUo#1d-cov=-O#!`>bd-XX~m&# z+dM9rnQ3R?jM&FPWl=T)B1S0qoH;EN zZCy3eUIIY_)W(u358D|}D!W;Ohc3Lpi_ca@V-yRQOwE=^TH~-O$+F`KDw2l=_VUUW z2Hn)j?8&gh+l~R>7;4yw!*My)o339DYy*vSdyUpA!ua^+^)yGOac32zM+Isunz{%P z-MjvZr$92d_3`mqc%M{^*Zh$RhgWPbf42(=N%Zx>gP-&KbM}BojCkL@oywk7=U+E! z@N9!kU8?n!X+C&xY^=ujY~beBQ-fY9L_ngH*^*bSs~}r|56oXOR6@%PjT9cAakO`pqIPDfkTDhPhLdl6gFCO{pqeTv3UF$BTlqAV z>UU|&Q0aD-`L0#kaymyilSM#?qMw^ti<6!HkR^hc{n!fePL-*L;uL`-0Z%I_L^5$F zj1c_P+v;xn&2_Qh_`|r~*OSw*ybvlaD>FX+M%6wqFB=MMIxAKiW7wr|*iz#Pn6Wr* zUe*__cUYWwB8wr2>HmWRt*PQWv9fShpB0vK&nm}(9F;<_f! z-XYX7cvo+eEWc1Cvts)ETPD`iH)J$J@N;+NM}$A)ao_@F}+Rt_o#;1CYEBON{dwzBis@tCduMPyIRw?nMy`g`$sYV94(X`(=Tj_tZ~0EqAW8k zXZ@iCn<@nxC?`E~mbXMwpdz{uQIkS?VRr_P<5GDP((W@woz$M^* zVlddEfgH;OZb^gFhL6ixXFf+bDnmw-@Xl;2HCTCW$4!*F&XjI!?6S?w8drK0{N!nW z5QovMaY!-t7U`@^R)2c#>Kqj?wLxSKy%e`1)FT8q>p2yL(Mj^VW~m6^3;ALhF&JXx z=~KZD;47~C%ZqOn!aZ|l>0nnPRC{LM@s=}1TDzI?BNT$)-le8&IjXikyl|<#&wUO* zV;i7bVj?AlI*^rqo6K>1Mw`y-V#6#k1qZ$u*vL-GFZ0_1=E*;)*1jCBqbdfrddf$% zS}t-jY4qmdioZpTD?Xnd$6X(y6YF~z2@3lKz@R;N3+u@Q5t)PJ#j zzJbP?O`PsJvEH*;Hl=jV-qs916eMC9W;U6KpNeEO@S^-dW0R)6#@l{gTk<{Tw>^j= zR%C!~$((V?kCzkGdGn$b7}>d+L7vk!(slPR{g~>Ug?{KFi=H3WxQ7o!%9?MPf(1Vb(7$6ThFuE+)~&tCrgdanBW5?NNu5Q{Hm#W9v_Z z_ps3sE$|As1TkBZd~ha?eF7fWN&YhYY_-9d%bZ}QvCNpRL_OUTl&*7@e`Qu`i*BXm z2t|iX@fPk18GZ)XQN#n7(U%$moAMhO;x{9gPT}xH)z8R`;#}4?L5Dh$^#U*|%4?Rk zR2C(?=c}`@RlhQMo$C#b=u4Ft%mlHWQ}Gsns3sK6d`qA8sqW4xc zpmvT!@R;|l$326lz&x>PPh*tY0~ORz`m3sU6rlsFPq9>I(L-L#+j#pgZwXE+qSt7x zgO=KeqPhxSe@3M1CVU~|ZZ+a9Epa9V{0*zOwziZxUQuqc=(!a{PTl-IomO5$SA`q} zU$s5#QD#Xl_RY+nA$}RJi}F;vne5LTT%TLQleF7@e3(;Jj(Dy#B*Xfo@0gn5ah8t@ zdN1vX+VC%QvsHwOyMMk;$Hsl)WhnKKZKa8yjg(q<_ymW`^Mj+?`7fw9$)fPVBhdFV zR}w9jQp*yO8#r#zqRGEprngjLHA1O++$oyVWjko_){BnY1|?;<@tqgJOn zZ+6r3fF#Ydtpp$yT6U{)09oHb!55{mw1rrIg`07+G*&Rx`A9O%oiK7G{R9q<8Gz(V zEr;AORKz`85#UJt$nUtZWftIlCyipwv02DINV`hEoE6Yxcsjci3nlx$mJggJwwx%5 zBDZlkCtj7B91=(=J<0xiD8>(*N<7@;9&^EVEykm$UYJ%&fCJLan_QORF-FeIbT6bT zEN^i;^QiY3W^!qCHGGiY2^y5tG?=o_q^4UVl<>dpWU?Byg{mpTYaY94Byh7wC(@!6 z!`8pih6qmmRo};O$S(O!aCb78>VCeL;bHvDN7#ghxA~l;4wu0(rZTa`xzgPj#-L3V z&6G&n)a!$9`J=gfEP&34H~kd%al1EdzYD&aVxbrDeVjj%>^3FA$gl%_#>!SK%J-ro z%LG)c&gH5nT5oCQ!#sL{EQ+4|dglLR_`qCp!zcP`)O?+wOX((K-2{&vx|xxk{p&-6 zX@{JX>fUq>{xj$$Uzo7U!_w;Ei@CyhA5azke99cN@43JP=2Q&c&Q){r+va1{O2?cX zr#tP|-8@{xn$GI!Nm(W!$$P-Z=v5kDReoM&Qk@7Oe?HIF_|*HOKnK7cRC!jJ~&*Z_vxGNz3!QnEQyG> zJi`hn3twOqeQg|6*2MCVLJl68&oXVdunJp<^sG~Kb&$d4uxuN05^yT5OeSU4w^bs- zYv<+qXhESZ(6j5>U4tI)h~-wcykK0@A)VVxlf%q%-&e_4d0#nP)PrQkW2}=iP|&VO zt55CPS8wVrBe%C4hFmqf*_j#tV!_sBEcR^feA@(IHaF)iqaGr9?Fw%)hNqI2*%|2< zDqj+Ih zQzYe@A=WbX1Q1H=nR6(=EpfXyDJ6g6D%GTfgxr+mEl9z_OZ>!s8D>2(XjnzQ#)L22yaMx1tRbBkL95mkW{G z0m~16z3`CyHJd8D5%c(jA56KH)??9tgbO~fQ8#w>z7aTAAH$V}qdWga=GezsikE#* zE7njHH{w7D&3_Z}|4{c%!I6jG`tQtSVovN#Y#SZhHYT3f>|l~iY}>ZYiEZ09I!^xm z+q-t1b9qjk+85`xFTPd%zU$Rm&-y$~Z5%~@6@nwnB-M!<6cag~$7B;PZh4?u3FC(6 z+_c-quW`-Oj$aiblWP(mf0sdoxHvZYREGpoDCuC@(_4F*94#+ymkL<21W&*sgYz*3 zlcf$Fs7l;?OtCkMsYzIbX|(6X$ukjwGJaYjXf_%3KPSTqcLI%n-{;y0IFT$gbXw<)P zSsFi7OkavbAYDA&Og+Nn-7r21)B_c8Wvi;)ma@-owogz$iGzOx{e7M&5V4EX|5rpk zueihFhf@Psc^u|5+CS39mMcMIt6xQu1R^znFM4?Kt2J#pLZma9B4`(s1|zAgf>SZ8 zlE*y#nDWBt0!nD%mE0^yc;_9KvqO#c0@6k8mBeLr^92B+wCH5#Z*9I&mkAE(RA|ge zQ#Tvv09fLrNvV+Zxs%YO68-A#1&`F*a%C(0Jeq4J>}iOJU$91E9;vl~GNm0B0leb^ z)ALt>iEQ$~UJ@zl{b2e;B|Ob73idLfC4Hek)bBZx1peqo!qv&>rupz{pch%33 z+(O%3U!{=(uQp~%_*8{jz$KdKf-}+DUJk}3UhQkJ&;)F6V<4N?X(XyTOjwpc%ck0$ zIVte0erlxxd(HHskqUNU??5MS*7a2vkN76x&+4PL+B^h zkn#Oo zx>kt>;_jhBAu#Lm)GVx={;i0(kVVK{7cqM+qJ%R|+o!yV<3j1mt}yl!vs^}LVp~u~ z<>)JTS&h4TUu79y$iUb^haB9!4?=ZrM8^p`;~HcpTlAFO;tC}?@ZEuCmYe2s%@n@} z1X2HuIw74D=Pm#@k7qGI01ZtCKXol2U8o!E#5GE>aTc!(g7LQ8ax?JSZC%14IaKx`6Wu`eXQ#)jm8+hv_# zPJ-R;ekm*)Mk<0YqfmOQDthZ@p1&AfWo1-84*48Z8q(#>c!ym9Ab3rg;XIK9_bYqN zKR={tG_oohJ6GhHbu|>|x@K9U*wY- z<3$jD_5WgP?D6Sq(J~iBFs7S*@&N0+cL)@Sp0R{otV$fMxuX0bCVr|7@TL@8ubd|x z@ds_UW_meDZaHR_W`C{Z(3zq48k@_?VwpNVEoDm+soj9MQgroA-O7e_89n2$akdoS zOZ}S1>OcWz(m4>FCxUE0L_};-gK?!KBVI!nZPMO09l6}urMUS)UEqdFVTG#KUs=K_<)CKF$e-Rn{%Dj}K%YR_5nkRO`}d3cwR6_AYAaLK4a zlq~pWzQ7v(aRO;2Uj%yo1(6?wncF3!EXJs3d(^a4U&~2&m}^}u2N)~4qkh@-+o3DL zuW-xCypZKZ+KZ3Krt8^~heo=f*i!RfB#Tv#cYs$;R^bdx0@bzgd*UN=-l%2>R=V{j zwMx=MQp;;onM{h$rD1iT0nvZW%yA+KkKwT;F?6E^aQTp~lwYAxYOsz#)tV&g(B%O} zlUbso-AEA%)e$mG@uEsjT&T;;jd{~jBS5u(1(ZMj6B(_O*7E-P$7dV3A{)B7YJA$9 zyo!DbIEds3lbOv@YNvE=L~ma(M2RjrnHc#qDVga4zv3D%Z_^A6nT-+NmxWLM9?HUY z>UaldbZBq+7uY~~andZ;@b2{dKDTROl)CTv7pUhlHKQ=pORY@4(t$BU%Xd|_FsOyh z> z%#9D8gOu325UFZk4gnt3Sj(HzK66LH9V7P|?uXb_b;4M8k|sk0DP+q`b**836wZ4E$j=9UpeLXZq}LSIAibpUS{3wgOd(?=8mn;wns4l}*J=qR&KywSRHC zg1*`^|3PB-CR>||C5Aw@4>v71Jjlcn!N{6@ct@S->1E{HuTHwlwYsG>yNbjTknEUa zaB92EIl$K5zUq`yN<`F=(Cew34H9)_bE9-tlOd!L$C$XbYDr@B79Iay-B}+*#}!Wu z64Tdu;7@MlRGUYlMUn-6FaNmq3Ro*8VU|wVhI!>#8$K@9+aXl$T>Z~rcbw44Nik;3 zBxsIH%7=lEi5{9VG0Onu`~6g|pW%@_?E-3efELrQhijM;hJ@@Fv7g$h_{D&Vj(pH# zflLkcQNz+?yPtD5r$xzH@2HB(reVR`zV5)I1N|1!PfPvZe3UXn&*tFs4TFX&CZKgS^5^w0);4Wn}rUPBm7 zlA2$wQ)eHLR_2+L2Th%tQqTsabPQD512a_>3k3<|s# zZ@W`)$LvgQ`vWW9UHK_r1~(^?0#MVF%fD2B(tt1)`=I`9dv?(W`?W3nnfNE3QBfdJ zv6`srtg?$=7E@lY5utX^tHI%Bn=71(JHBO=I!hJR@h)~X2j*k_fLI?(w^%gYlVHvD zq-4QN4MH~)l+h$!PpRiG$1QNDzHCyJdoa?&$t7BeV{S{chGT3I$)l_4bQ9p(bk7n` zX!1Stt>B#Cd+FF3&`Yzo8kNnu9}#0_YY2j7-TLNNzugZd=%pH#icl^v;W2AGe8OV6 zdIB8ks?{o*W+~SB4Lu^Dppk?o)rIuZP!u=uVT$1;Bm9c9;{7d0>e-g~HNLEP*Ot{@ zi6+qqw8W6j-*AJC534E#GoLM~q9t`PYud#Dh&f_xK|hr5{vd-BpZ1Vp^oU_9W<1Lw z?9HPA6H_uRJX)=?_{VcuqPljR0Tt(GGJ7zC5~Bedv4F+-D}Sz>)h+f5!%KIfBtXWo z_}@rYq`%KIv%&6e5%WaZnpBBRB28r~HkvBBjy7j4?<{fe^(e7k8N=u0-BCUQC?qx0jeG=&l zj6m&U8c~Mu-tsel*{*Q#+w91VGgso%iJ}=AL@^f%Y#VPwFNFLmu2F=JT`Y3`Ni!ma zs3!b$>auaYDU_JCRzjp|3`J}afJI7cmXMH(M>%!>@8st8@W>55*m0EW2JDWCXa58cUZ zgxfjJ`nczoP|8mSrPfQahBqD#+NXM|BHyrZE#GV=Zp+1VBkcpr%S-f-KCPo+88c*RUiD+{RHn=j%A1U0`iK`;bp2sIaB5jGgmNCGhK==ANA%W?2|Sj<=eM z3Z#lKdF?D@$Bhp;sqA)6L({rdv;)~3g9$S~I(SUEgH@fn;J6o=C8D%jd}KA`BS+^b z_yE5w7-+qkNml%``c5A)RnvB19M|0bK+AjMuQVd@Bv}}hTch4OO6Q`>Y!S!93)J?G zgzS9^2PROH69$0q;6pzfG>y3r&FXv8OBpEnEnf6Gz@CHs0E4*~Pb45+kslF~M0&h- z6&mkI>Z-q`S)n%fc$tTzxS@Q4FwL%3K9ZJ8&l<7%Q!qpiE4z~ME-h0-;G~wSiSS6y zIoj5p6rhh^up{W+aq}o6d;RMwNu!2DQJPO0*%n>tD=X{KofNP^1Pw?WD7GOgVcE6t zA!2Qz3Ks=701&%cPK|@8&Zp~gVQmPB@c=v~rD?4YH7x(V95jhY)pgKWt-smc993B( zS9jR9m9FgoSjzGsJN9O5%?{bI{?X=2=lTuzTURG`E&J=>zlARgR1f2&1N*_W#o9JS z`~w|2PxHrutk|>_HMinwGtsT|YBLo^_$z&K?-b)mBL1fBAGTA6e=Njg%u*x!cYd~O z6|v?UbR)4zig=@3;OanshA=1m2tXK}zc!M{G-;?wF78^@A^yXQF*k=Nl*u%FDZK}b zGW2+*gd=~ytY$Nb$YLacI#X{Mnp%~Zjl_I}aIoNtVq@6ZUHHYA6|FH)M8;bIGQGST z{mRjL!?B&gZ2={tn#y+iIR9?q2TA$-4qd#b8p*-qBz32sU57qL7!eox|b@7RTAJP_> zX=XJ~j~Aua$ms7yUg`ZiW=xgSg)6FwsSM5JSB9sQ|L7lY_oCU{hujNTJBW5&pht)M zzI=u$R&yj&PCzi%h3@zB)M(m;9QJ;y#t&uZyt(|;kuwu@7LQwDh<`|6a^qv`@oVwQ zaZjdmp}6=4=gIT+A7i8dfVOLTP}SGr3nFx%%a<=zeST0e-S8VBv@|9!K6TfxgF9x| zy%Jh2;poBr;nhATCzSmLRR5PIs~YzIH7M_4t=xt|gXzXAq|nh^1P zQD0{b&m7Ohqlz^>ZywfynA^PEYd-bP#{k-OSpBE`0_`4k!pD%lf#u27*mBRvM4a4?&(}As>|+MiIqKe4T$3DU?I-nL zOW%WRYaFD!)M{}@=%M2#pHBHXxQo6j!UBehiW62A^VWzfY{|!WU%8Ah{a_Uk1u;-x zT*OO|+qwPe{CBGD{3AB(=`@4FwOM4aet@k6eWmq&b@%XTR=01e#^njg43=ok1wME) zPeA0#5qlo(PA;1jA zPDPED%ah`ven|?uT$HvRb$n-b?b2&SHKc7TO6_f|ST6Zx&`dqz)S6c zukKtTJ71fvgUBgP!<~YV3*rst2Eg}?4Ih1G{pTCs%UlKF_&~v;HN{{%LGajuY`yQm zG@F>WS29`y6>*Z?XGi5S+ef<*Svu)Sy#U)^l&@9!>gOQsWv~|nez@3aVDLqB^%kZ? zdx4u2k?8HYBx^BhwG^GZ=d-G@Zk+0rqR#R}3Q`3`Z9b97bUiAB>0W`Y&y%~@`G-_% zHm7w2F3zxTB`0~+txFg+r8|&r@Y0Y81(Ukkv)2_egRuiCJ-_?9o6|tKZt>TNdc4Hm znm+o@R4Zr9EG-k#WEG~iA25U513jEB>?*adS2l>;z9O}rx`{-3PaK-O5>DZP>DNb5 zjA%^8lQV0D1W!lyrNRRN_BfdhRLFWSU;>W?bW5zIR0@nIDO1YP4-R34yQmuG1$r6#%uvg-$vQjG z8sTA?*;RH*o)K+Rp%K@th>^Guni~1MV4VKo)wlT*+E9EJL<)s^rkgM+HKo>$1pzFC z^#E<+=p;Cj!fom~EKcZc#CY4SI^6)p!YWCx&KYMPa_tETg+=?HrY5lEje7ck0VKip zH{$n>gv}O~hYJt}9Md=LyY{V~Te%i@Ifs1wTJ%(x6nrVFaaxk*YtY!kiI~f1qy$MI zvdIwyWy|{^Y^T2_ZfzW>a(4%V7^truhXAvb6B~}pQe{th~HQ6z7_rCn`Gn)F9Gi#pZ<%l}AW2aFipL&^b zBBSE{mz*pei#eL@mFa9WbUX~;Ywd40@~EqpiYE8N^n;DLC6cE;#<$E>+KBi0kc%&c zB*?Aznn#N%9<<&kx-79P%MG1L${;6vH*S$lT!QFyp)g0d+cynoidv<2$6(n_n>r-E zIu|=4=TJFdHcR-Jc(@~JkhY1NP|)5_%W5LT@9lwv2@T<<3Zul%ER5J#nZ&uMYyhfw zMwlf`WnMuK68Yt=*#8F^v%y~)>g`~z9#YHks>Rg8NYnhmROuj}>*B@o*b<*y0|P?E zestdJ3t@iawE}7y+;3kvG4|(>Ia(7a%dsg?0yzz--Z@7IJ%q04KzlG(=_zajWHdIdj=d$h-;^Fdm)D?5R`781M2cX{56jYdc0W zOc;e=bMjwtkX5LNF7;VM{O=u@56B2JHASwS}?utD_2pZz3-`HH41gftD(f-A% z;Iz~^j*wB$QtI-lGy)^_V0*8yxiMxk+O~2skM1|O-2h~D&g2DsZ zQZA;yigNd1>ibEXy8_wU)%CdTI|YD0DuL%10c!7kxn@iaLPD9^M*$=ug>2?8%q$!P zFFwvD9uJw^x^mgA0~fFzw|3l^(4&b-TX5QWX;a3E9@)>q&zT?>PYM*A+HF&|!Q+-~ z#f8%!ah?8BIlBf!c6==2aV?&ee~WC>8;0t_Tat?ax-xfBc&4;+3VMFetGZAgjn>@d z6Md!Q(s;W5tOhzN0XwDeU+0pWqPr^srFcBD#MSLgd*-`1?Whx9M^b>l)&u_uMmSin z=C_g)^uM88+2$4C(7fS(b-t$`NRiR)5skSxBWd|cmIPoBOXjc@q$9eFf|`N4fqgTY z2}2d!ug2V5r0QMD?(S6meBDO1$9j z>v+a%GH$Pc!rYzE=v~D;EhJuSR=eHu3)W9KQYT)dg!22Fkdi})x4*d-+@Xegk_EUG zT2$qN7Q6(igs1Xo?Gi;>D?}NjcCjX? z#U>*kZ_1xJ(Q*LXZDl|rt12F{ zA6s;<=h9r12M@}qrNErxzi07m0YJpS$mtt`W_hyNG>u$GJ1nQ=?17(;ID%?hTIgvd zyVMzLWtdzn+*WCcK>$?2LEnZFute6pw)Q*97PTJHB1*1VF!Gc3TeB|uVM7_cQnIw6pdjZxLA~-sW-6TBGkrFa=MISM7PPX+xqRCk?cb2qpP$GuhtO2m9l27 zKf3IE42*SipI#DQ3J!3j#HZCzww+*dqF+Z= zstS!A_HL2ZV%`yZ9t=ve*RZ7 z*+uj>M>0R~{hXuKRN5OEyix+3_YJ-O($`hWg%v&&FCz#I$67}kPxZDp1S9L;O^I`* zd+o$GKC2c&>N$CHRgkpkdZRE*6$1uL5^;VnR6sxD45>;-2Z|Ric3@xFC*^)58#Q7# z#!NP4cRWf+n}q=5?CoKg(e2n_n)tfi;+`!xvloULr$9UpP}lh<*Oj!ja^za;MBe=t zCEw&y>F5YY#E+b!)*Nbd8z&#VgNx)0)qV9^H}1-HcWGDFJ+ycxLRAL*n3ds@*334i zgA`c$XCbA5md;tj>g@qdw#o);qo;;jl|uVG24gg2LSD2an}PSiOtJL&v+0|is}{i7rn@X6<}*&T@zI`Dej~!P>d94u&h* zZhdmG<{=S<(W7@qewii_4o(HduZ z(kBw>cgZbYrKe#^$eA$cfci$J(H}>sd69dMGYLb0&yb|K_Lc< z^FaPwc)3G`?mMK&Tw@K7=&fkLOf-rJ0VVGD&TaY$4CK&QF74}GO43Ay{5yu|sevz} zvM;_XDWtKLppE!eg6s_v)T}P+nMEvy7_Z}VlkmNOo|T|6 z4*z?I9-95NoQarLkq^5AgigJJ+=ni^RM7YypDcorp`kT;eP@jdSE6yeqRzHJ%z>Ri z9P&e(T;UJ8A110NMmhueY(=Na^6k>O(Fw^}&*r%&$i_M{Qq`mw1wV1`+44mw*b|be z$_UtC)$89 z8$P_<<)a!P?^}W$v#=YfKRS5r-fui|I@dC7STB2XxwT;zc?Ax~p{+77`Lksb(qD2OV7!{SC2@jF^ zshsP^*SxH-x1Y#!QJux21xeJ7!~RPcfMq68Cw{1NmT`8v)J>J2Q>$0D32zaLOXU~z zyL?NyZs*o?1N6fO86lCt$$5_mT~eOsejMoOm~)EFc`w^;O^JDy8{ely0VnqOeYiB| zeItv0rLDJrjR!fQa#V;u2dyMOMaSd9Tol&{hn(7#o2Ao3ro<2pLP5N-(_^)dHdiTu zllYE=j1}TTb)JhfY(-x)>yc!Y&@ljY-v+^|NjWhIsf?I(uD)yLg6_z^+mKENb7Hhi zWVC;_`B~UZp0fO$oARPv8xr}@_|GXi?dMUdoepicCB}QnIOKR*$Z(9+T-KVLXdss{ z?oC=n8IJ&)srJ=cdPCC$1NoAtG7NG)nZc;rDYN>v-}D&`a(|3|d?XY{K>AHpX?#FBLi?JDF)#k*^-An>tC3)zQi;=3gtupq%0 zO;`TvVDe4vPYz-G9P0t|^59GMsX+d3=5sRSXBc=1<3FX3ushmc1|}@)kuhf|@%k;N z+4ia|rbb{NgU#ZoqXsZ)d}zTVu83&!+tD}>_^L@M_OyaaO=D8`sSJ9s{JQBo;QQ*( z!0f<=;t5FUST=)Ycqq*ED($E&$P_0Kl*WzzeZHp~L#Crnb9OGTR2B^Krr$X^A4;wb zV7}1mv)xt8D;P=((Owh$IhIWPVvw{i;91}Fmgj8|jSw$YPIbH#a+FH>sf|2gE_n<4 z9TgX|Ys6n4zzFp2r*Z^tIJK}4vs`P6ilJyu5#aSua9YeNB!Z^-AV1T>+%SVa^>uZ! zyF#hT0h0w>G=D>asGyKgVpYEY##P*-_G_q<+M<$T|GETl9G#(Jr^i zMH~rwmfspFmGf10fscwScOy!h1(T?KtXQYbKW<|vTZO;T5r;j6GSKq&?C? z+SKYPn}uUAq@TFF?#1BlTGX~z+&Kcv;L!lD*Q2>_aT~WFX^t1 z2965Vs#lZ6vmm>5xli#*fqMqW7DtQZz>aUFBqrYkeU=VcOZPwdERfFvzrRE#@SHe) zy6}5P{BD=e?PW$nARe?(NF@0&HUW1*`m%Km$1%_U)Q*;?7HZEb6q{;e$l}JFXEUAV zAA*|hxn?x5i3`nB^S2KoO!;MDGYaD1v>G!_`Iu@itMf$_5y|#|kSNxzg{()(tC0Ohol$fVFe)t1g()1Tsg|Y0a zB0YXrjKk^DE43-VZnlX_4&-jSMQNLrrwYfkpe=WTX;%NU97Zd zG9vy>m}QX)j+fu^Ke~(OC&}*Zq$|Fvfw$lKRwVsUw?v_TouU^l*>7M5?roW^tjchN z~^m$grN<+&+2m`C{?Mh(c6<8YT(82D(!jTrM=$9^@`b`=3=c>S77xKFG3AhT*9g zwE;iUi)17I)YI2#mH5op5)$S}q0>X26^!)Py}58nSG6n~P_faQt5xf482RCt6KoYC zjrpQizEbAL-gmasi_7c=3jnhgA|t=GIL3j@f@q6G`LxFI17n zOtoTM6FEmqh-$H&Kh%MU@$hx&?mFeyY473>1>JydO{M-Tzvvm5!+-B~i>Ku&} zA zT+BP#0gHyRdQx}QV zd}h=5fSFLFi-7yF-2s7zG=RA3U#~xGaLlC^R3Zb~GG|_k2U1O+9ur}CECgIX+g3YGdj z)vI~KLv8-Ee33F3D@5~5+R~=Ll##8t6(bAQJS^TA4a(SH()}>T4|3tTx>uP2E_yoL zc_)(Gf-7x44#B-DbvI28Lfyc_%PwrGs9(>bXB?5HO}AG(wILl273cN* zmW0#q-D>zyISW>vN2*KCyK_3X8&H+lgkJ51AxWZUbTM!P`ErhrqH=?8o$ywkx^ouv{3gIS6i8|Z@h z?&MNg&wxc*u}XzyT4H#D!JBO}y(L^ZcNPi?d2u|iq4!F}-(d~UCC84~FKUyD&yDId zOlU2*zWmvX=lHf$$#0rsa+OpXrmrnOfbUht98h8^Q2;Oz_wQplZXZL7_OEG{?8T+f zZZV5ta?Y4k>fj-u)HrwnBFU{(`Q#=xt23U9)--tWE6dFh22<7k0M|JtS?r1dMTTIz z6B)G(i^YF?xK6J2Hf(M>A__Rs4fe=&Ct}*N4)#w4c7#Kt>d4IBGlW(-%(k&UYQ?G@ z!QjqC%tk9l%P+YQ<|M=V?f`K%+2SbToL-$=yt9ixuoW@^DUS8;$z5C&t`#jOr?j4idkPB!%GLc zQ#*X!*+n~ik$LyR5?T8Cnl|qTS1c0s@&TMfG67(KCOv(&Hzlul8ti$(Lao(-=VXwr?C@}`zV^z-7g$RF+D zP(8-UO{1IVn2$f;wE*CAPcT?y{f;ufjAmgpRZ#TsB=dGvObEBpQD+D-DBS#-9B7; zo-IsgMm8tKr<54=jQtlJ&MIHw!}Ri~wwllfsOzZr*@K^pDFAs5#iLU5wMEy^uQOu3 zJIdzfdWDn8e}7YiadJjYJOOAbC(Q>VG-iUW@T3uwgIzni)w>hB51?#5`BS zrKf@WsjS+5^Q}lwRr$c=yfkcOmJd~c@pGY9md5=rlnrqRe!x*pI%m?fbjPfSS8SJj zpsz@SWhR7D>i6jFfcD!`S-#iae~O|A<9a+@s^-UO+c7A+s6KoN-3fEFw_zOeRN`H} z$143fORT?C)-%I4MbklKW|WRT8Fuz=94~}&T48;2S$G~UaP-~sRV~*BY;5cT+B~lz zVqgUwdGs!IQ`h+hxww%ZXKruV>-uWY=cG+w!_c9^;c<<&#sckWsE^Mo6`q*nhNf5dBpH_2JT0sg^f&Bw|8?EvU55K2*RK<->Lh1!XlxeG|My-KAo( z7yKUjyv={2E!Sdi{ZzsDgZRNcDVGb#fFQeMNNW)NTvz*i8e%dhxKk{mvG{49bpB6- zrW?Vm(E4{sWu@FY=T#wL9!8CED$2pqpBqTE0!pUeJKasaGuUl=s<`OcpDG{ML|_ih zFFhsQcm}sl_i`8~NP!V=JHO|$f@Ky<;or%QcOOUkf2@goSme(5hScNzUFRR@`Oa+x zGHcPRI({*rV>=kI+zgf2lHMoC?q80W|5L-MLC$g7gB?m^LFsJ0zs)j8)xdBe#ZOv# zyg~{Dtsgv-4=M}5PCBz_HoN^m*OG4mK&Sb4?v}FJQ23ZIZ?sB> z1Iv4*f!FGp&M#Gn&my=z``Wz2;D8ET4XUwJ*;~P}v*HBQ9jmsubG6*;!*Zdm9S`X1 z9&6l*XY4CRlLY8@_^^9Ee_}`9%MFWke8dL~+76rJhWK>5!*IBpI;vXr-zIMo3QwEg z=Y9dSFR1(rjM8xrSt9kxYA{DY>yOq|X1~2rA0R>4`{tj`a?z?*^+A$Lji(Q&Izh7= z3^lF#GwJ>J48w{)2~o74o>{px7goh4VrUI>Rp){un*uD=*e+lwc)ipA15vr;();tv z7a#eK3DsT&c({(H+rO`V&Hk_95Wm&Ys z`(IRh{QuE>@nzxvZbsP6=9Pf#h_3ZN{**n{kVFRo_+m-_V`+J9^-tpYr$nsj|L}O; zw6B%;hm}ll{^y5o%>TVlygRn=`98nA+&F%$J)a!R&56+23(RW_=}_8E9UWcjfkR0+ zL!iUU$J^s=yP7C!!1HYuv;*e$P#e#KB_dPdYII9P+1;PB8*hR3`~qH{@2C>rzxUZoV%kPjka!FEw!aM3a?hSRvlzbC=3b9f{x!FMS5v;rJfs6j z3oD)8Zq;LHgyXIw+keC?2?m`FA^F7ZoYwqqWuNNoL^$yizmPDpOYXQiix#j{X-(e} zkn5J0{oC#McOZ&=YWvo3h%`PF+B5=;^6?z_RRN7MiL5)j@RQzMyKa49fiMJq?Gx-) zIDIt8FwzZ;Imvf>Ui{|v3uVwhL0p1N{#DL)6fJEcx9sgfE<|z&&aVG}n^}nOU_X^9 zAm2LeSM`WAalNp{{ekNf81YI~H||$Z-&t3HX-v8RaX==6%f$Bh!^A%LR>DxacEI{k zN?+=ZSHXeRH9Za;pV-^s&EjgafREjwO>v3e2M)Gx3gYk-mk!k9QEJ|$iQ{0+5!wk! z4!T|PD>p1;-n5bSS)SH1@M$}wWg>+=x9z6tie>Ym|9pRmoCuu1yLi=(kd7PIfutmF zge-sx6YU(&28FjRPho#LSSM^r$F3GSQ4;2rRH;-J0AgzwV8(oHI2jcfje(lVrGuVC zsDT+_WalpWMs@2cpc`+qGMP3lQ#yZ>!}Q0F^k3o^pcxHXAYvIK0n(@wmf-7D!RAXk5tWjCg zVhUq4AMVZj7n_Q;Ck(7goEfy=-l}A9^>5#>&+N|nrAT~@4-k-iqo*|hlEVgC9&;I9 zvj+)5wu=&v5(*Otx!1pP$QnC0fr)10V|$`@BV(c#Yt(#jUQQ==jq8A*?O}cHi9@UHs1QjDKeo$U%kA|crZuLz zcyq_2y1~WHPGMzhL8F;Mlc8RvX%2OtivC~pk^)B|%@%0Q3A%kEchyCIDqEvvC>IZ4 z-HkM}?SxIojN7gM2uf#1XSMLp z(im9907{T=UO=oK_4l^b8)eFuTH#==NUWY2$BkQCA+^$99fKCDph%^W-Dt%_#tHcFIvamjg{!icj1Nw{({0 zeDhF?p}buVS(?MK4uXc13|n(HkEIby>?^kBJUu<8uH?gh&Ydvb`fAh2d#<=qr zpz|533YA#pu7leck~4*(>%OxVA~%fy?Nte8$9YTvvTc-}OD#qY9)Cv5SXgDWH46^HiwRdHe;WBD6 z`kct#59?m4uSqVa9OtznveX{J1FOR?I2)Ix53kX6G04F%R%V>1AH$rV+@Lix=3bs5L{Q0%fXm=fX$@if5s%cHHEV*6_S2ESwS zS*tPY`H9QCH_&HFy@mC>z!d?w4qwWX2rW%0zkp)fWGqGAa4DT>UgqZ{?c(>}gYK$1YN9f5Fd!bzsQe)?^VgMy*Xp~O z%I^9);>Q817+VvCN3ecr-JUJ$NLLF!uhsDSz1h{dX`7={$erK(PP5)sLT0N~`n*sDDF>(znk22#Z>6oaj=u;_9s$*kpuD31eTv~9&>^z0FW7h}<7*kH5|yq0sWP#S zAr(+OwNaLM5=JLyh)*#9GI{M+Cz5t8EL#i3)j|!by9yBi=+IUB`JzZBc&D>0(6pU zme!lH_Pp72^n!JXFRRA(lggH+Y$zQTc=@g#c>4s6_q(>NNF)i&;%LLM)ZS~Td zG^U8gG7TvUEAp&QIM06RJ4Gu)!doGLe4&a1UNW$fzBXEL5Myp3uN)&Dd4Wi`cbpGBTv z*vyvN6#kGc&)xkrJDiRGA=1!xsA#PUU}y~Yx5 z-+~pLL89v@AD;BUVi%`)Ab;M59(dOW>Z?};gwLsAnQx_@#tCPkVGk#VD09W~bCYix zhWZ!X;he22QwJu#26JZ@az`?dnG=y;C{L?Dq>5-qQyL>BSYm<0*ioAi3M@}x;5Ah*VqfENz<$Aj-@LEKqPd+ za-L5k^8Tc4acIRUsLcGRWU>ByF`)gdE=yo~9DhRv5VcE6(L7G=;ES)7o=Spf_dyVm z6Hpr8Hno<;J(ut-_?btcw#9Z;hGZMy|E$-()s;27-X>AJ%+1+NJ@x=9qm|9X0yTSB zFcP5`7R~0At+mt@BnJY9wt4PRMTd;;>H|ns;v`&BQ+M@x^sD1`G$bUtX5NYnqsdsu zMrJ|##r(b<0((tEQ9Mmk6*A=Qkgk-(v^L3m?3X`4lIf?&1FGV4<6RH~UyL~%ykJNH zTD%ImoTF9xpWHI$iDl{-0aA8+OScR|itE3xy9`6wOR>}iWtsd<0?9v zu_#s-c({E;YQmb_BiA%iL$EP2a6nvZG9R{Iz*y@%6o6E$%~HZ7aAlcI*_V`~FUP|HP2>2IBVX}kb08Im1;%-)G6*jPdQ5qNd6%r3aUVC%H5(3o|n~hL|*%unp-OKYdA%?y1c9gj{atyNOf|ghIZv|tfj4R57U$0hdm?ZuTX|l zrhu)}^ZSLn_~}pcPDq_prCf!u13EQypoMo{%$n+`Nm2s1o=vR zkBZ4klEP&H=)H3Fj=|~sdUHC~y@4#{V^uR$hePyd@m9ckqLt;Y$*F6!cVVZO;xbLS z%ec>xmSHrXAVM^q0FrKe$9GBnRq8Rn4qhBnFC>Ix&#{87lQV-`DUkuPrlw!NhNWMk zn`N#sH8>mH0@9$X@#4#q@4CnQ44DkZa8=?D@k+3NsvLCTK6|YP+l=dsz(hkjAvrE;QC7+6^a~O~_BOsyHiC-|Ql|leASM zANwr7ufqDBsX@L5=5yX=g3{m-JcExq<@4LqQlHKX4lR#ridjx>3|C*wSwW_3ts1B5 zz5iJvttU$m@j~jG{!cQUAJhi08mR>ztx+wveHGN&RIa?)@`t{*zAnWDHPzz1DL} zWDE~=_kY-Xuc#)!ZeQ5H9jQ{JgD6EnK)RHGf}nKiy*Ft=dIyyzy@pNz=>!sbFG>}V zmQX?oNDYKu5;~mt?(MtJ#rekguFlwFoShq3;~}i|%(-Uy%{AAYNkq#lsk6ma>@H~p z?Dr1EWvY8zoSFRTdrDQ;%It0G4s$jc^zLvx6|U`8?ae)!dk*=q>zKt*Sc7F(*PTvE zb1MJb*`umGSj78m;!HqI`_m|Cai=u5ggA+vx0JtQ>S(uEi|(xb5iu*(%Q0HKd@T16 zEh{D6u1GH%0UM_a3_0wM+H9tXtejGAN)ExC(kqJLXAG|MdeP)55W{y-qABf*)3k9_ z!%3Os;uFP{&|fL_iZBT^Eq)+i;fbT#SP=>`9s-z89`g+QSk<-o8*g7*&4}|Mcxd3< zKsRe;2X|L$WZ#_fuXrh27sdH2rHReow>w5kmalDUXtW}P(DzCYU1UlceH_>Mbl`)J zh$(f%1|)4o9HsHAO=~`2gsqBE;nYCUg{-t*6*ZguW?bLBI2iy@Wsm8;kMv^S-0dS$ zcBqb7ygRT)V;VQprHM(;c0;@j|B$M1jMh!W9lUmVXDJ(Z(VF!XMO~g*NsVKWZCo&9 z2}rk}MUR;0Y4y|fo_jXk5S>umAwvq~3(b8|lzLnFHnAp~W$VH{(d(@1zNyip5zpku zWdl}|BTP_?c+exXTQ@Dim*S}$nBOseEI6F5oJ+7t(q0QX>rdA6@+xQA{-FHd2_ELMrSVi#y6+7RD^{&-w( zuBPXECVa8in)l@fbl9jghuz-4RHE#>f8T-`Pj(ezIkB&$E{ z(%7b*@`1RRtUqfod!|KlQ_PLy^f=R$ewT{;@so1t|vXbM(a5Y9k)TN}$ zdf6bUcyIrkdm&VGS8O4%y;*E^(y3O^(@(8z+rlk%IHgye@dNR>In>Zi%+DX5J4Jw! zcP9V2^!4oS!Uv%yo)6aN(SXsjrA!U%E?3w`F2e?L6XapV-KPP$D*`C?-JjVD6|3q7 z&a&SB!4Qj&T1mtfH)b38l6m%uVi%uARzpuNWL& zb6;v%<|CKL9fi!*>W#2_hF8+-)rs(Q8XY-jZ+x3VFO3S1`#UFYmp3l;qztH-Mvw2B zJ5N^Ce^(J}ccyFDbRCYNweH*eVPv81HxA)S7t|M;8!r}c3og~Qe`=bbQe;~_i%YsY zuP7({G)x~+Z(wKuV>Ff{6rMJLD*meRX+EH84C)T8-dC77Emi`}b-M}i+Lmm)^Bg#c zGs40lc)i=Ia4WLr{K)ht-UVDXRtDPI`B0uf1kY6 zfAejOX7Rr`fuZ#@aUEYa-j7Y;!HH`40s011>bNnZ8f(FH8#)sg0H_M zE>GVuDX9>qixp5iCYS+=rU4HN-a#B9n(A6T97pbKuC+D6}@A(!kkDZ9`C`nYmS}VbZdp46Y$M(-M*t zCdz?GCHD;_uzcfO8<8K%iR}o?7Fa-OijBL%TxtV$EBkCdblex;c?Xo$oA#}_7e+@f zmR~03OY$M>r*CRb9I69tm@O<(EL&ja`i>E&$9XKTk{Xm(0DY|6c8~7QitAUwhX$JFO*a`kQk?e_}Uu;2xE-QiPJ^g$E1_@8dY9KA?k} zNIfI5bF7t?rES;ZMm>}6t=M$8IRPaCJzmy;!UyM z67HgF97*l(R1>6Eq)S2!Ji}__^~jm&Uc8BGKBae797c~04i zICp;%iCD|!z@(E}RhTWbhpVka=!l3Hp`@ry$r0>=HRvyuSV)DbycT&ni!~CR)LR@! z!P_;|$nN#bk-1PcLz%8DJiqV|$L$u(mxJz;R%KV~8}D3rkdM>$dgl(erb&Qg=|7`Q z%Z4Hfd$+O!BM2sHzF>J24J)<4s|7!_%gzmVU0FW~=}&Kz+G?m?no=3XZ8z4p`Q%Nt z$dnuE$~ni(8K}F!&RO4Z5+z-!geWl@%{q^OBmz0YuXg|oplowdk6%h+jtlRZxieek zmNGc~Sn4eeeaz#6Jc4^s(c0DDiW8`Be&u%&VDR5rXxpQmR=1gTL1=1lF&C>83Uusi zOZkeyUVysyH;F<%PfqMopOWJPdOdk`^i{zk&}dqu$CtCDQD}Lbp+h?Yo%2c+#g836 zq9DI>C)4m-&)E8e955H%m^&`>>%99&R5YQ`!Qlmq5-yC+wb}({oaq;_WT{ z=5j4@6?_H63_DF%UP}fGv)1(Mf(5trMiupiT#m*>dfp}~t^LU=TBaz_#(+V@`$}}W zh0)pt@urhgo#SQJm~M_tqBVzE)5QUO?tn-cB9w{ybB+U(F%}AGK!pK-9!-&gJvP%T z<0fynhX{k`tuH&~VH#j=2Q7!`9Z}BX@6CeI)*P@Ba8NnvaYpqNMdV$;f;KE3pwN<9 zWk&S-HIb!)*yemAr&H!+tiD=VKQE!56>I~NDc-O~noYQnEYa;K0rXW=FFp^~Bgng$ zeo+rqO*6C%yYd1Wt=|0VoGy?RWgdI*)U}j-nRH-U$nuYMz9%Sx8CxaUN__l_q4~NL zzwsrfHoEi+D3C{0f}k5kXJ=X7IU&eTdN!& zx`NSfsZXe*ss~##ePMQt2QfHUh#fYQNd;MdI{B zsjv3u<`q9!LF7l`9fv?Quf-||M*DkiPmj>z9ja%YHc;7W#~>`A5?G?#7+}3Wwy`@Dcfu^q-CrV3LCqUQBNcUW$kY=m)rz?_7k^%Ef(7{H3b2$Yqr; zYz6(t;5g%mv#S!x>20~MaQuNT>bL@Rd&ewgdt;FJ;AWihPqfLh{)5v^JS?dTooKAM z*WYU%=S%z8+bqynL1)p+71c}UHU14b=Ri589SF$v2l=T2r$sz~rM}INx5Ne#EB3@* zihax$Q{7e)hJe(R((#SM0%I9o^0yq{Zqlf6$?b=HObT^j%y9fbJFw_0taZI3E7r}E zrWZE+d9eh$7);{VTIyv+AABc8R?&Pei3^)GGwFVoD;Q6#5WW*otOh$ z_xSR=?r4gkkLp*pC8;Xc}WkYlDE9UHW+YbioaF_Au0ETBKxz0uz3v6GH?=x%k(F}{ivt`0O!(#bu zg{vllir&%+randG`(BY2e5%!hs2;Cvv693<5tj zp2iQ#;|>N=;*1I7TSnzSrIH+FNZ5K)r|3W*{OF?73?(G0(%IebDSH{T3QT#MQdX;Z zy_$12(?c!-`*;G%B8ethdc%;`9PYzlWgUZI8J916Bv`6q|IutqsXneL(&qhi{25D= zAw6)n8emm}h8#Q9S~a`mgcnp38@RofuAXY-7O3)lYFxPG!zqY36D9QP^t-l}4Et2? z_N4GV0o=qV{Rk&lcM(QwD=gQwv* zs(jl2)O^71NmH1Po!zdGvv8DWvwrg){Yv+Z%{b?j{f}&~Gni*rPMpkEjbrZBK=%3*99jZQtlP8H@waKjiMgi5 z`)L=x*#g(tdiG@Mw)BVTSG}ceRw5pS8qToTB9_ko@XuX2cHF0~qCJ&H>JT4nVa}W| zI2F=bJ`mL0UQW-SG~>e9!N6uz>{}l@o~q)0^kJHN7F{&GKidK<>u))HN&tT5sM({G zB=FFfI(6&ycCfyrl^spD)@x*uLZ(CIl0K483!%23>q%x>Hq*Q5Lbq_iMB_Vd{$iB_K^oR)?!sTAtsT|w(I-7< zc(;6Rzhp-o?Wf8t8RvG_hvwHgGE^5NbQCg?R06O4A}Rjz@LnsZlUO?2N&UmwVe@o> z405?KSh`Ymdg-mG@B8h&Ws>GB@a$!A$xi25#}92~9?H(N)HYeVhF8U9`DFI}P_Qc3XFlN>c}o zh|Vrk`WAVEp6HKg_;btpDc4&wYkR}c6lna~wJ&`?Z}*L_|4lp%zVqt!5#pr)zD)6lBA!3QP44G4Br@gv z8C4Qa?#tY7109{*#*aQ3SH@DytXCBDar}9>^~Ix=OvafFAoVBF%8a^vIh4$odt;yA z&%+ioM!t|yLxniCKO^LwO>dTvdBy+FDc8ft_i>Ad%cy?Gw+sLKbZ0nmlyuP5!O_M( zL%`|r;bq-WS@H5VLfZ8D5uoiMWReY`P<=$m!0othwj512FB*lt;0+uv9=8dl=> zWy_k{_YQE&`O>9{Zq=YN{HK7jcf3FGw68CQ9P?jGJ=(4d0odMQU3wLyZ;>_~|B57` z673_^me?&qE)1C7W8XQ;$`4iOXZy*blxF^>s zw!EC(En=D@y?Ib>*K4cb0hfPUIw8Z&0NY79>6=XZH&rd&JS4A<(9GAD=QxfQ2Tf;> zEeW`_`3UlGGQ9Q07Qw@wV#79L&xk1Lf$0d|vKy8W{;HhU!ma8-20Z4$6rXw;m-c}I zmn_n7g4EG0-Vi|cCWd9pZ?gT>LdO;qi^J2W5J zFiBAjIIl#nRkget_Sjd+*vxX}N(~Dh3{b!FO`&yvHv9sO-44IL46N=q!vAYQabr}!TUhM94o>~dqZ0=I^-8$iCS#le zs1hw?u#c_fJ!{5<0iv9@+mrDpdA@P4GlW>~mZ&v2Hudk8H1f7XUVs0ngQU>S1qlL8 zWK6=moV>INn$1TJuH%$sQxQJaNwMlvYQ?IozU5yS=-dA?Fn6x{8)?V&aZu2Oukq#S z6rZ??8lIwhoWB(wMtK^FQr!akdlxD_Eiu62Tkn3@=;i7)hI)pQ$@M9z<+Q(B+{Tf0 z0)p^)tIWEM!hJfs4M#@)kRP%Yc)+|D&$_L`$2g(>-q&N9y8gF(~fZ2|F7;d@kbbQLY`WJn*G9sQq0x`Et&FTTo%< z$<45a0-iSf1@thTg~wYP*`4A`in!3Mqoe%Rj0Kl{52-GY-J!Xf`US?zzd%!l1oev3 z1og8l1OT_S2t$Vh!nx>vc|0*K2ZAg5Zw{hyoJJ3dEr{z_cF_|&Iv$2lCzVv9-OtIc7owc*w)ifvB8mLA zK68;N1_1-U8^Dq&yn-%!U-4~my1Yx8n8;pv@5CHpvbYh?oEpXGj!VL&x=dmbXU6o@a+~JA`-| zZCNXh+?L$E7APc=AUSSTL?$gLaaO&)lu`AsPR_CutrxReFxVd8yLh=c^m0q#UcK}! zgARkIcHg3c{El5XozVAWlln~WkPiB!%0L(DQ@AUnhEuMS`<}9w)h;+z#`TDFxWy+K zhX;j6&1t2H-uLV5BRybg)=e&I@;M@vCi_=o&{pyZ!4%S<>#JGQhK{g8>&=Go&Q8H= z3OIg!J&L3ZtsfQzdgN4sE6p|V8-4Bc)BYO5ldqn3EArI8If#q2JrWOkpR=}*#z|Ru zq+E#G`&d=km^7Uf`(4u$B(6nCDyf^tF_7n&P8S2Z*0ru5#YbjXDLoI98l8B9kIas2 zh69|!nimHwnhH}KGv)uP`dpOo;bATYVSfv+0}dkxC)kb49)7UI8;lzYZ(eIHs;tVn z(=+Ww*FS0sO-(MN)}2EZH9$zTTrX;D@CVp3rtO8{}ikH4SH{qdge2F zVpqpTr{9@K+TbHRv&$h$=L4}sQ!x#HussrJ8ounooUX6hshO~*sM=a)V##Wh00N3* zGpR==DtucB{xfxYOXbq@9wu13TPz;EkZ`qwpYOr}SRZZTEP5OgQn||TfdN+_7mzo< zQkPRv`PQP<&zK|8)^3Okto7G~zHa3|bu^f)C>J_+h!84Eb*e23e}QMwoq>d|pXS+G z5k5HIkF~V8pVwUqmXenEWyE{x`gFc8j!FmI>$?2hcG?kIFXm-p*6Xsh$S9 z5P*HEqZs$r{)3N`9uwwq{=90B{^8Z;AnjJXs5y-XSQP1Z3hv6(E~Qu_(N{jY|{I1T%Ed|Xw9^SX9wP6hmp-HCE?$2ZWY^d z6S`pJ$+L5g9)22{e7I*92jWql0UG)1VgyH3ke045xwl+`t4=q?S8l!w@*d|glrpsK z0wbJ!%G9b^hX}k~7c`j0u6CVh%yi2Lb5JlMnChQ!1{gUc$$B5T|;804$0+wY{$&p1aG19oa3pIV(QK$LA4Q@t+DsX4|zi zt~i@2uyvx!QlZxEIzB(NoNrOnrne7t)UY2B-`Zqi{RCVUk@|@A>J+iuHRN_6&=SyWD0Ul~n^R8WWgnGyT#D{6vJz1-0|mr@|vbhiqh3Bm`g(trjTvDhqN6e7@_ z;GJd(SYQF?Eac??Eb43mY6154rpG-`MeyX6Q8WagQiuM_3z?0}ThScmF*A&NU_OFg zBaUH!hm>P%-2XF2B?~XM z?`a9*BX)*G(-Q=Kj$4adfJRMx(UqzcdC~`@cTt_;43pvn#$&LY3xzh1fb73gFi9mV zM@}B%y;hFgxY?w3>#i&6%vX1WF^&MZGC}84x}kagq+QhqOV(jy<5g;fpF)bOTe2;G zApG_g)ZP2y{%7jLH=*^04|4L8A)9e|!uN#TzJlDYk52c0n0S;Ot}TK|VkWzrR9)vv zDAFV~b^c0&o-Ps9ovEhHnw=8FlKsMYRXDfLXz~K5K+A>KYK5wuTn@9}PkI%%AK+H9 z)gFRd3Tp=mAKKd9wLd{gxA?0$b2Ab0XGUs>NWEp@yZ&kMuI=(Bh(mobb9qYSb*2Wq z`(DJqXObprbLcS2&UD7!S|Cx_}_E9Te zc~Ed5O~lj{c0sLSs8`{*?OBN0^_At5k`>Pd(^=W_6r|k+nY=4^o)QT%g{(8oFkFOA zp^rC}R*}3Dj7?;-Ifu8+2PjdoO`K!xq_Sw98BHN#rcJgdVgz91!u>Vnke0ZHDIgWq zf4yN0WO=_>`ub#dp+S1uI1_L5)uaEpDrLI=b$34EA791Sa`Y068p;zM10V~9nYTg} z?UI8@F*w>-Nzj3$AK#V&n@bmy;Yq94hz1Cu680t2_p;I!ASwSd=N!UZxA^D1yiN74 zdnfkMrq_WNd*~70^Ju&~bDf#UK{Jsf8aGmh2s&(R9?KjNx5$`BkW=|ZgKkC#N|J#K z-HrVVv%A3AiXeoSYytvw_-568*7%_=)S)SozGi$V3{ZS7_^84sJp3yZQS@I#q@Y@g zS&&+hhB-@L>>ekntYIo*v&S|tJDPoQISJ42`TCPYwZ91#9Y$k2pK!{Jv>e`EK0Qo5 zQxB7@TMxah4OB(Ocjn=G5|_7)N4A-6)AVsiv}=8T92H7_cfcFjz~8e-cRFUxA64% z9bkT$S@M6xyv^_MNj(jF`4-=kNMYkH6t+j5PnukBQEkQ+#~AW;r``(gGdk+!CRiG4-vz3y9!~M$(Qd;j-~7bBRhr*2lKtK0SYwsLQY43xc}C8G>m7nN z1IX`frj+Q?}+HOye9{A6{MTP3?AEoerw8J>J-;h-F-NKYuSr z4WSo@A)Iig)XoxfyQwd7{{Y@c0{(UhzBBw={jm0xaH@%erhR)}NL3Isd3l`mUGB|q zS;YWTCLnaFYRztB*==_gah_6E{?&~+RN*E?Z#1D9BC{=@{pCP0&i!SBqV#itJOldE z4}WEEKJle;#|5sV629eqv2lh*gfHN^x!+L{cs}a0uvQUU7nz`-AJ4uSwSz!_!1)^( z_V&ZyJa$SjS!LTs-GsaNg_S~g47Ta~R&;J%x4+S}4%PNg6a2Wo8bEWI_C)@}2A%A0 z7SlRUW^WkGBIQ^>y3A04VO2cBYK3qj}Sq*Sim z6V`aiUT-%$)af%Rq9M;(g~fpc=9)L8M!Bi%aCULidb`H07i6k0{|T17wLiDITycGr z>%E7q<_BpD0_Wj77+L4=K+alnrO9dH68J3%#9d||7296Ni9Q-0K`u)RXSY3F| zP9}Luoh|kem1T60YVD*+p@xRsgI#1uO%??%xuHXe_P z(^~bHL^QB>*ODb?wKK2qh^}?XRd`d_q^Q-x31j1}krW9MA+wA-TLFn_3L; zXyyMnX)LEJQRH&w7p%!lWAC~9J zR7|F;1_C(*eyR_^4Rx1k;}%`_5~KOIGW~gG)B!0aPwong9mD! zo(B2OyqCMr59|-+RMVA0nS@_&*62Ow`qZ52| z#0MTP7)ftP_vYE*3hmzK)WO=v&jOPF(&+0g)*O|=W;_NA;z^LlR>$aI$?($F_G%iB zxK{3P@sC8q#71M~xDpqr1xUqhE@s?M_Mw3u^Z3hYbK{@ufJ{>~{b9E`_Z&Lps!|MaEwR+w9RUnkh0fN7gO8Wp*SG zhMCoOum^q?{Ek^VO7tZ7ZS?6_&O5aCHVwI@|H*kAS;$dv41NO%ta>3Br4OEOW3$ke zrU@dece&Jm(C@UP%)7wur#^S4%8s5y4x>NJ%c-+O`o}Z_SUHq(a5_F~+aCW+QlG76 zXW4uYOR-S3os)Ngd-d;u~5L?bw+Qzqwb2-8CQ>(Nz%Wfewi>~DUn#_1@tB$N{ z*7=ijkqS0$?xAv0O6(u`Vt{@{Q%l{ucr4{|!l1*)TB+D!cxD|iw9GbB_)h)6O16hZ zoSpykKr>{sZ?=-dQHUhK^$5GW@|+)Z&cMFgc7F2GAp8-$JnqAia9}c8gmgdrwPuF> zSoVWGxMfyfOXhi<<9W&eSL$mp$;9A&CmJ_>q}$hG?^Y#qH`{bmo)+G*UZwqWhMnfV zTjr#AlC^r#EtFh(8+b3+;Qke5Dqt;n=N!omm~tq*8|j=#bkXUC#g|NT*sHaDF1n>& z&E0L(gXRz;>6bQir(*EJRu8BL+StCo^&>)>V{0STsZXP#-<36K3RL)bI*gw>9KdPI zx#C$fllE35qq2Aa(WLD3@{h>RQ`gz%OMyLgPWE;BV%hR~0?x?x%1*eS&7;nio%}Bj zoDaKFbyt@SVx$ITV0-X)s_Y%GL}NWs2w`Mxl!@>bL5@mG{j5W1+Uo~q%kgJ17YCGV z(ozRGmRnS~EyJ>B#-C1J@qyXi&<(|X3lsKE4FOO%Y?mdAuO)1=ZzaUA9V7^d{)qdl ze`YrHJLANW_oIevg2d1jvD=(5=BNjJb$nw=dYjm)W$OX;MdI+8OvzqtCq!8%Q__T- z+>D$=7+{Gus-vCq%HXOs;H-Alr`TV-BmSx1VPZ{Tq#`ibd2ah(t4V`P=@NK6qsKF3 z8Ub#EYk*Y>*;0L-7BhmoC9l3Hi*63mk{IQD@@T~fTVLHUAmW<4VX4xp#^tMWl0V(f)J0$=nElSe^5;aTc_Pket$x(Ib{^wJ|v4fSoO%tUz zRqfL`De4~cam^8=^5SaJky;m(r?q|UM;(5pOKu<&%7=ByDxu2z0W9>QMSQj)9Ac#* ziz+YZXG4@TQoGp~0QBJioxh3?@90J@MHbD|6?n0p-hp4mTz{4!cJBhqZo7GbKkLOz z5tBSA;R;_9llR_AxnedEviDj|h4uO>l&&-l7*+Da_Vg5&v`fRTc#g+|I38keqM1G(-GjERFjKpNzs27eDZIs^hap^=kwp00^do8 z7EhS}4%&VKx#f5kox!DEx+kvOm7<)GLGQf6nE(@ppI0fIXB!iJIc zHGIVIIwlfe0`R{&0GMoPRH~VR*XMV2`<7AgFQU}M-*-)6z8-ofQwaD+W@cu`E=Jgn zl=fk$@;}G$+amWo#^JAk)riYO+ub+!6&if}uP#=9Y>TZ6#5f(;RTX9%LxD`i&%d{f z(%~55rkI(t#l=ldb+#T;c{z#V+}*CN9Q6J7sdZN^)UNw)t*z}Z99)A_6pmK6yf4uHz!VSTbo~{cQ*3ptk)gVF!Juqzt|?l80}d`DI;oFu*TP@ z%ul$s_2ZGkp3m#Bmd!8!G_uy@KPUcP;c_ICErURA1A0D+o1l~^CD3=)tmU087Nc;C z65*q0)PvOfR&n)TGg@^)zgkM+NMj`u_-zVfQS_R7aB|n11RO}uyJoD&B|C?G$YQBX z6-4ha^rQK96eCg++X`f2BpsM&KmJ*u!t8PE9ibYfw^aecnprlV|&PJE{nR`9wb^bdHLMaCdr4Wm&kbM>gg?5SG z%{IQ(GxtbSqrSj|&bfc2=dQMn8ka$PE~BX$HPQDu4JRv_gAL&v$jfSFXNG6)BJrr?cj!7~yb|B8UVVV2q3h9{JQMpm}v7HL(}PxcE$^h?nvwv0X`I~2#R zN@8gVSHzTjRu0u9w`^bfaB>LL1;+Z1OOgxwWXe{P8}c)4xqKMWG2_}Eyo=4ltU!7FTxnR&^v} zovpHO1IOL!&jTA$s5FvPJ1DBfaB5{zr&P4srf+Okp4JJeDf8XeQh2pCV)gbi3nQ=1 zkP3?56*4~{{4A#Z_BoJyaL|8CLe<`C&YE>IM!lYT_?dAa@5h}>&0D3DJ?3gKG>X;I+vBZ>PDaNBv@>7jg3t>_s;*|YWbF(y=1-CoYViX-!Z0&_z znKA8CAP+{?>BuF*C0gE4JLFu;Uk*%I-x{5S_uLw7!_AjS>IRGXnPj#-D^J6Kmn3TU zB}Co$)(dyCTb}rR`=QzL`B-4NL}){{fx1t5TDi2BCfY8FZt43@D00~G ztxoLRQPq(8!t3O`h3)=&*SZ2e&UhS6nf(Lm4)xbSb{&>kpo33DOOI#HX!ft0#q-`t z-HV(dh6Y~izyVcgnK6g;`Fiv?C{mE_?N7_EZjT&10>OM!zYQFn2^Q0VKVJJnTykh3 zX#bx}qOc3|DS4lA_|M(s7e@KguZ;3vr1*WU`1X=)&H<*~34S>s6Y}%{Kt(+5#C%K< ztof7CWB-PhTUz$D$+yAi2<-=c;;1fdn)d_Fgz~T;2@$FH7%Fc!qCh`F)7n9#*Z@y| znFvG9Q$@)*qZrQS5{X~m?M&>|Dw0Zh)UupVvt(^e%G#DAu^ai~O@$1#Fu~2BjyJ(i zD(u1ndQ~)+7@RDix_u*Am=y#wI){n;RI6Xi9z~80U2MCwlJeo=`CbqiX3M_c z%0Yc;8aq)>`7N&WQ)cCbuheozi^(9c-lkb7Y0Q})>cjECI%8ihHLi@4#10 zfL^BA>ZD%no^?Kf-%3HfBUWLsJKN3A4vFZt`$0aLB6hNX_Gl#((u6=y2f|Z1%zg+! z4mgx}`HYdJl~bdMPSR=k<4<*<-bjQ2q9MD0!$*=kcqT5^>ha1e>rpm~_>@&orFOS5BA+FC}x%}8_7n-bvS_nB%=7!OC%U;2)Ww~(=C`m*E!3oB_ zh!%nbiH7CnHQ9{$9Cla1cdpY`FEW)~qv$A>NqD?0$IW~{h6A-Qh$|z4vY_)T2p@mxbyDb~O)}|F*7iDH zd5Cb98_-Nir%F>nF`$7HMHr!(+m3sY;I&o*-rbpLnOBm+c0a~i5&^e#3nMm5S3$Ld zHyF5SMt~OSRISaftEwZZoCZowPew9^o~_3FY8{@!6apF^1uj%+QnKGfWiKs4MQtW% zf%&iG&TSpE(QlO@fCLYaz&prAQ~ag~KFNK5vI^SZOMkMuP5Q$Or>5K2&^v!Iywr;Q%^7!_Jx zX6;CmZ?w?Q*i?<8XRK3PHB9A9^R4MQR9bzreQc@mOb`2c{YBi=t_qjOa>V`wDXikX5&RETTe# z(C4yC2dYqMz@VKeZp~{r;#|qz3utNKS4NS zMlbYgD(lSezTaJnFm1gP7pDdoL6~q3T$$7cQlkhFI%!oHZzZf|da|kjn9Bw&?|Gej zig&kUnNWqo%r;`2zEI-6W`d+qMXu+b=4$BYZIJqdR2DW02LC%XZ8NhxpEO4NjdLaY zB#rhG`eiv4(jR|Q6V%n!W>9w%0YHSYYi1C5JR zO}vbcrg)RC`zhJ$d}u8;-C#Q%_L@#R@YwZ?c$?MaST!85n6CUl+CpLgL3J4B)ELY@ z^f0AJX$h<<)@9QRBTUM<8M9gTOq>Y|%J4lzy+iDgb|y{!5a_=@0;k~0%315E_;%304*d4{&gO~ekX zSISbrSDO5VH1sf3<9uG!fpSO^h3jbU>VJ(6}+ z+gxys@>p#GYJkCu?{Ov5RL}j^->FrTRB)<+b%uIBKYd1`**HQc6~S^CA3{84o3V%V z9B-s=EqIvkd$;(58AEyRG88u~O7*-8K6jAZyMsyww?&fzo=)|y89Q4qdNE1Voy}Kj zl0!^3xdnykaku+wiT$!1Oews4?F=Z89k;c?^V(a`*9ntC6py4%>p%ez)ZF;Oc<@cw zy|C_>-GWKsp>Tj4eEX0Zk^~ZoV^~Gt#@sWzR-ftL$M_#M@4)%P_d7)b8tqmq9qULS z%{8(WABtxB<%%L0EH}4<&1s0<9fd+Cpy_3*oCqzN4wYhwVAgm-SjNj=?mJGGB8EYs zhChF#=XGCe84gD;*}&gbuOoLUaeB)acx^?2OACV$YAsam6S8)=B#0C-?Ya*%dnw8) z=DaZeI3%cRJy1E!vVa>57NjYPWdq$z%@D?d;mAQz6^KaLgvu>ayWi7|0nH^)T(Xpq zqI1YIHq#X;AJ)Mt!7z4lGJ9|hMSX@!p#@}@ZWsDeVRL4^{2)V}Nv7VdEViuWtYGfy z#R(2r@%fs?@0|DN?>!Chyuap%n@GdRaW%rO*_n>UNYBAb9-AM9l(x z(*)+#hPjb^B#Ut0i|+dULp^I(B3ncSla!#g$B~jeb?}tcW>?RX7oUoG%EWU4wtUN3 zTZdiLsA(3Pf-kD*|C}HGiLb>}mrx(h#lwkmP-_u++n}4SF8u~sQ>4D?#aFD0c6sDL ztp*(|(W2%FY6fcP>C9X}$A23v)nvG6ugi8SAP&Dp1roli(7%s*ES;Be#U|^(w7RD{ z7;FDHI>C&U(G9IS37F_;x2B)TxL?{&(>f6|0j-Y8OV*R|lSb8?vb61ZIIN8sVEop#2tF>`fT)8 zNJWPtC38<&BuXxCrTTGS+k|iWT*j0g``wyqQ>V~p)Eqt+%S4u7z_lz6*z$OI(eC~+ zntpbAayt%BZ?3m0DP_NMHNf=^1>|8nboVUzB?M^GGH+XIKc}6>$Sg>(&49@-C@*V2 z$6K>pl9$Gt+*IVE^9LIlZk)4l*ewCrS zyZ2OXso6UwjnvUs%TR2GNO&@rX;{(iXZ>oQYb5hFSmJx3PRI0>`0T)c3L58 z<6e4D>Z8DhD$5B6VQq5J1|!l9@^AdncJ?g+FH$(>0^6ZA1I6!ny^kENiuRywiqiFB zs@C$Q2g&s*Mf^Ccw`@rhHQ$;RX38c{yMMqvw+7nAjE_g{KJ=rbZWk7&D01*Ila_P) zAiiPxI=Sod*HRVd zbl#F(9`FJ)>Tgc%c!(qQ1lds)+PSn8_kNMCj&{1D%!Oys7|IRB^PvWI$gp+Ah|SvtISY#cQKDbUyL8hE zoDNSo1e!usy%&Xt)x^%eHz6VxcM77j-(xkjnP%0Mn4yQ9#p|>SaDE&1jnRz36P1pU z8e}8=>Fcw~DtsR1`325F0|Pp_j9onlCTSiy8Gt`74pwch=5!*)wLEsRbGJEu zIRNX$QVxvv9!wLmL0b*@tnQvik1H38>j^|-#B7<0J=k+P4~m<;N?nRurbFZ^tl#c` z-+z_}iy0&>60V7$!5qDxItuar%zu;Fb4IvfT|=tZEZ0XsEJc`5f4F9~5heAbq=OR^ zi>Q%IxA@x0LHwmtw=;7F(z~%{_T0xH33PlWxcf>_S15@+?1o2&c-V2*c9o}6g#|{* zsZ~2!JrF7++;8x>UzInP29}(EG$Uy8(}a-Hp#Vb*{G2?{KD{bPZWt~+5P2@;}=ro0m3CQ>&x{eP82)YuI4fdg^{v>96WU-Hc+ zFDp36Q|krqPW%C(-?W0>QPZ>>^S8Djo4(03Ck9p_X;Iy2b?j*h4S*>YiA#^q`nBmI7Jtu(CI3LI$GykX3hE@clHc9?$X z{(@FjG1@81NSxwBZAh6WR;xLHzo4&4jXTsbJL8551+H}7{{K< z*2qxB<-AkRz8=Z&x95~QUjK``w+w14YTtg_(v}u0rMQ;j?oObEBEj9IxCD0yQi>LL zcY?cXaM$AQ5Hz?3J3RmA%=vuI%z0)zQ16*N9Uj4Y<&sC1JTsly+EU#rd-D7J!`;;vj z(T9qc|9M&W289O(-%R4=*6e?De=%fF#Uoi zo~g>_hj;n5AvB^M9Ir4OF=fu2mRBH3!J!6t#UtBK&f|5Wb37uTR)h?;D&kKLEuk_{ z>wkzXt;f^c`d4zd<%(;v_etXu3O36U%%S-PB#T44qjOiv&ER~y&fGSgdy{;}E$jLy z-!^h+2l64Aua`XjS536yAswqTW`{}2yURsF8>R{uiEpYL93@WWDK|-|X2NBPaAC6> z`^hk_G0@IkkdwW6a53)h-_>?)6{A+0P|353q7Plc%-ow{Jbtuv>yK7ZO^Un;r**Pm9fx)@4M z&01TxKv@1J(p3ZoJ~7_J*dA5L&vus`NuO$RG>km2RsAgPf5=bW7GSM^$)PigM(DU6`}nmaKw@%ya&Lz9Si}Y1+B| zJ)G`%l-3ny5~d9q3h@~=h6iEYb+(piqXhzC>l<+!Ibrq!8>0pNc*(xXEkf(!a+e0e z_-RPRYN~_TDsTZ~t%Tnz3%kfcf2prpTV?cSeP3yKh?d6!N>5l4$*XDRUH12 z48&0`5-w$=FX9!mR-s4QVs{~wxka1TtT)F%MH< z=bLjTx||d}z8i9n&q>hRke!5ruVo2s>9t&w1w(UWeGKM}TB6{5u}GDxTm&L$9(Xg;29jHJA+0o_nG;aAWqL>8``Q;5(N<2sqQeV$0WZjQl+kY-NyK3wJ|GRYRD}DuA07cr z8*7VlIHxq04xhvsi`S!GjpR^ruhgyV1OcQD#>`nn)&0cD23(vM_H;wjCsnA6Gge;f zfpmU>JXL2FfFA!^QaE8Aq1?m7pH61F!(L`zVnsQy5bRd*m1?Pd!X=Nrx;D;`1^^jX z%9SIH{BgSK$!lr8*|I3#HfhxMrFo#eTm}1mz4UeSv4!Kul264iN;b#QvNhwPjL}Fn zZQ#&Y#ZCV4w4Tu^a`QDeHLVz-3~izXD-MQ=Wv-wER@ufepYGlyKb)RnQ5g57{oGgJYmvvr|HgG^T1e+ zWBAx*e6QJ6r5fl>ja&Y8I9H;l)Hl2iTVe<~AQjrmuJ6}#$g@#*tuTr58Tu*Aevr=+ zbV<)aX&zR=RB#pLq1HC*Mp`{pKiPQ4T{ritlpSq`ozXFV{tQ)?kOszg3F@mCQN*8E zDV7T=011M9`**})Ej2IW`1BufwBY;tk^%(QL8xlI$HQ()s_UI%?`*tuO;BWftDfVp zp~`2iqFc1JsVUOAeMVK+Db4yhk__wgxk!HNBCAN}yoV#_mN}+859pg4Y+EOc#bH$| zulrX&;yJAB`GI4QL%GZ5a?oqbg?(xnCHc<0rUYSu_LM~k9%vn`Q{OP1%R+p}X-5mc5lMjxw|qj*Lb`DH;Wogb5{)w zaJ~qK8_tM?7=v2gozt9$g(wff?I5Ho{$-%OtY_Wo`Vl&gh1HtuU;~k?bIT)z^A8^; z3H6O#!ZfAyk;tGSf!wAsqtHTUt_eBLtk0*s$z45Vat;QNzq~N8b7NXPX$YGBW{-K-X5?9-H^e$;wCn86 zGNY%!R7I+aI)q>&m^0X9Jrf^OXvf6&XtU+CimW5lQA|0Kncs4GUveNJT>)S96+w0p z&jG=W%t8&~>1T=@c^>|`tn9o1H{LxUu<7L+q#T`Syc}vWm*$i&uD4e?1HYxQwTy;u zsgNYel!Kv`u=K zg+ixu{QX)(9aP#;0ty5j$G!awWP;7;@rT%T2}!JnwaILDKMMGq1gF`_mM+;p2*C0i zQK3H!cdnmg>5%M8aRYXtC0@XA<~%}zbUb>U;E&+e1u-mF7@8(vQfpo*Gb4>GGksdR zD`UYG?D5!tn0Jo3tRuaW-j`PvUIDt_ENki8>`8TpLC72I^f=lus?s7mv(Z+!v(}o` zIV-%7*A+$L&?&yCw(={!bY0(j8{A^Pw~?8&fE2V#Tr3wR$qgfb2c?%gSGl$6=HL=Yhf0pnFOU5)G_hB%-A|BJNN0kL;-=RY3pEnb@ zN;KLOnY-uqOSV}x9z{;{Tkp!iP}Q9oL0;zsUKEeV`rX`$py3@SBR@Y^N6Lqz3Y#^0 zQTIDaPtuxus)nj<@}1TGH3bZxt8t;)_atS zQ$ADf5!ADTNv>u%*SYaaLa`L_rj6_HKV^G;Z;nYapMu`iq0_4~|FI^Qvkwj8UTkd!-}z+M zs(2Tr%HIz!uQH&l`J)Gcy{uT^yszY|ISucla*iq>-SNhw2YgNFwN5d^)%@4O@vvf^ z;jzQ}s#CL>`H^{dYv9dcs;hHQon({pexU2_$B_f5dnWUTCZ-?j1i4@5Ul*uU(DSJ6 z?{DjxE;^^K>bp|e`d{DRS}!Jt*92!mH$w0;1u*hpkh5JWBY$GUMNsN^SkKcZ;f{G! z@bW2_V4%h7y_N8jriET!<#BxVIzy!qOuvSfv>&onNaST3vv4VWbAvwN zT6mg7D~O^&tbgXg^FIG)SA#23;%6_8@HN<@5Dw{EXcaKCl*b)*hXDvTaY^tMMEfX0 z>6yWUZ@WG;FT7iLqU;a&FIOa+Oy~d0>GOXyo&S4&)}fBPPssm;r}%sS`h5NMze*`@ zyZ=?EP}zCMm%NU#}=Y^&r9h}H6*Ss(4R`T+R!uh(c2-lY%f=$2cF31r;Dq*KZgED&Ueal zh;uueEh+Vrx6(8$Z7I`A>d%ty%~N;Z9ZH)p{~orz>|RrK&dk9r!vgNC!gLqBTbs4Z zo$?PR31rW@%Jck}0{+t39?wNMwK~Xoadz)gMQ=CpllnA2?aT@LJfGfd`8?m;ZdB+y z{ZXI1u~LFOm29wx@lO#l!iADZLPUzn;Vvc9JFR+(F4ouLc^-(w2!7q99CdcOy1wkL z{B2UHTlosU_lcM@Eu&7IXrVxNDr@e|CY12gGL`uC38CI`A!)mvZueqs%W`xkr!NGD?5=Qz@81*Y*0sg4}bjd@;p zH2IdO%KU8rRr$&FiUaFXa}60)$_LV~bpnvmLx`xT`rG+1F|L2P8n=FEo-@K-Y?1%t6-N}w+#$2fP+l>y z&RzRbK!}_p$>dd*h-xO=KS;7jRE-VL)PTh4jv7{o+}u0@VnV(apK9GAEZMs-a{VBw zy(}bI`^C!kpZJ)&2A8WHb%8e(U$JsYbqOH}7T8VHA?t|j0FLwmvnLwF#7%(?dOCyL zvf!1w)l0ijAT2!o7*IhD+R~$)dluUM5)b?2dh3)z4Q&Fja^%s81?9%7&e4ajVCOkX z&m7jN-gvoqWm$cGa9prtQL7#_=-LO04;^A{WeCo~s<7s+m~tsuKSx+u>4x9#=Eo~S zs}^P=`tk1?>E=Wceze4-o<;rel=1zYqip<9@(o5rL>x5gaOu-*rrY1h81{#)24SDO zeXX(EsZ1Y6ckkN^v-Ig|OOsaDM0l`@!zpYBvm?zlS*db}Ug}a6J&6D4^D`yy zuh}Csr&;V8Qj`2*#AE`q*{9DJd&!}))-R}yCt}YJREOz}M_LDR&N@qAtCTtAqX?r4 zn^Gg9RBv1|l{F<4l&2r(U0X~u7suaq{`uOF3b?>SN8Ub_Yt+kq(Y})6vg@+S6r#+n zkC^|#O22PV%vI8v5B0UY2Kq7YuRP;4Dl4si0mO7$J!!7$JcHw&$=dZ&b;0{! zZaPaLZu>DrfuLCgRl85){u&V2Cg!74s&2`z5&xIB6Gj^gbWFI^0WCAF{4k>^ta4$a ztNRhUbt4{9aPp0-&B{qn;L5aLZhp_L$`5X$-iSgo+7Ux`|B0BDt|A+=qkyn7Q4=I& zV=vJ6umLMnp;T=hd}(n1K0XVB^(!cNVywI}At<-2zkb_Gi}Rr#Au;~5{t(qZcj)pK z?fN67#OiGfl`FJU<8VzKf&V#qaNrh5tvN&Je8R_zsb$QbEPR$KQ~h4CMCj0O66#wL zVMkkK(U7$2KdHevhCZ-b8}z^-|vj!AZJBfj+LMizh9*&2zsWuUk)omN@2y?Hd=ASv1-9ob`5eDa3g>q+jFjG;0m z`$A@pv!^=Ojw@vMiA-o!Q@%JWz_XRn#eLpbGGIYul=I{hlJY=|^M zG2r0jpB&u8%QJB#pp>*pla>9~TTwMpZ4rDe$5p5`(UiJ|(PtAxcoDm@plPV$-m#T+ z3w~bxLdndX=iMU=f9K(lh3pB)Q0=`mcxU^Z6~E}C_n^wsqwrGS=8-R|2cguxQ~m|# zYg9qmObm`flhc?E`7#4bL6Q<7DO=`1H~rX2sg&=rCrVBb9N2Gay>pG>pL$tZ^dOCa zdP?Pgru`BfJ1QzfRW>>V(?Fkg?pOz*=ktv-va~@Nz-I&-HI>SY4425l!0kHjV)ro5 zS|rU~k^HICg&RR(s)@H~(Q`#&Ih~wXSpoQMd2PQCKUe$L7QLKvQQ1r)&M(_d{_^@O z+DIxH42iEdP}&tLW~9}&j>cHy{ACeUFaA2Yash!(fjbtF6;;GEEv!qg$H+?ILUU!l z9?-QQO_ot+%eb=gLm%m79Y!~r9o6a}mjrbCX3j$@=M1n>+-4 z_2&7yUaICT(6gTvzLA{bA*zK6&>q*jBU5J}I6xyat2j+I?qE#h-YUVJo3o&5Y2q?p zluNhZSlZJaBsfTudOA#8X0N9rZd2G)iT@TN#B6#@Qgqryv;X3t40?pDmz)li;9a_M zJPt0><6L}MOwgL^0)>4WhM!o6by;7Jf#)Kk53$l8u78;GRADcA82g3D2kAu!M*`2# zjObW`cKah2bW>CsR~Ir6mOSpcjs#(m34LKVTy*qs_mfN#;O|L{glCLYy!R-{RD%&y zMf?M0BL{nA!{4B!gQf?vl9${vQcT3!kx{~ZkfhsDS7k@yvWy+)XT(}^t%TsOM64yo zF3Zkh!WAvj^q8Gi<_r5b3K1uNwdB9~vk)`}ZXolpr=yNDF5Otj%fhS&l|B}DO8Yiz zAr!e6>!`Fy=s7XMns$FZBr2jetWVMb-(5jURE-q1zobodHGmG#c(|KPjMAf>a`o-B zB5u$4sR2CIe=FD?tz$$OSdc{tEYZ9^>I+n}a}eMD8n;}ic*0J1R@-NFts9EMsdzhO zu;>_Lzg19f)H&7NCbOB-x1tT;w~YHaC;OB42Y=EBGqvUu(BaT!q=&JkOOeu6p0_n{ zzGq%S#2X4BJ-Im#>6qI6meATD2w;e;F^R1z>6}6(8rS-Y6L)SuF9DK_(=0k)`9iaZ zC^f|XSbR*J+oOGbpSHUe>GJWqTX=u^(=ANNh}Ny3@C4i>?Y>|z<@c_R!7DoXnEW^A zU}}1emTP5!6w47+J=(`GK-=KRKgEFVn?0%ILY8o($Z}9)B2ZKI8*=(Jy)(;{KnTmq zX`uDimhTo3ae?yWx*|RXhZ0feSije6*~ahL);im8WoA ziYLq`Ni*K*eg8{HXG%_-Y+4>$OT!A=FR0;NJ|F*dP}E4F_dr`%!p%hN?vYJVY#Hk+ z2bSw)!$y_6WWzKzmSW+1f$jXp)v@)j{(>74VT*n{{ars=k zijdl$!iuvSvD9+-u3$p1dIYxKh@e?|y)SvQPg;+&(}uUGXlE2wT?K_$F=m_lt(^S75>%M zGoE_qA(WD}Wp(n7jan>F1pIbQR+h}w#SA<#6RormSjN0NCsL2cEIlgrAT-$*yIJfu zqvRFriTCMeSpmC_>jxe6FN%?Zg2<|hgUwx%9so|S>D-)&dJVkm%8G)t{+Y^zNWzNt zb@e|~s$nS-=pVvXM+BCRRTzz$DKd;UmWLG=IqZ;jADk0Y8XW}@$40lhaDshza)kEb zhpiXlZ?`KX%5MHb#(g$gK z#cFQdh$g&Ie=1bscdcKHp?q7@G586{m?!U8SB4{=V1`+D9^i_qqmB6C!!pBcpQxX{ zFP>3m;v`Y*i+oL|n5G)IQvy;XkVUaCd-V^ETU(d#q><%sc;EB3h!D8AJtQZKe>!{R zE7DHsELy)sWLR!01fe4^6?J_?$C;wyNC_}3==$75A^Y8GdHbxECdJfN1_10_J}nOu zCRHf-ZSEH%e)i4sY@}~9XppPF=7gfaq1A2nc%2tsq#nJ2npfyg_W*Hj%2f*!fB*(< z@uyUQVUq(JVmw0Gl>aoWld&r3S`bRiMMR0=he~thquM-Nf2)R1sA2{WJ6jhMkCsfe zKdVft4%ooNjN-7ej(ma|duRnHQi=ARf9%~K-~FKuh?EveOR#U*4j?M~c5Yb$(8!#$ zx@ulFk>=q*a?VD_=}khT6IabJvA0~bCHy#ZTKUpO?DA!)59@TYZBs3?zhn@OI_*o% zlFABaa|V`ZYm(4HwUmd=U(Zs5tlIPvfkgtQ5+))~uVTM_tUs%4OHJvsSgc`&S4Cs# z%1!Y+kEn4oaMSFiO4z@+TmFk4NearHozg{`;}(K<7i+?135g@LU!)+L(_6}X<8J46D@+7)VDo) zqmNFynPcJ#wee+9U4LKZHX9HOcJfCKS-_7Pu+O1&VQGO)+^7BPa6sy zfXGt}wkhlG^j>-|f)-~Vm(p0XCp&rzv2>Qy>%tU{*w1q1{@9`9TW>lmTq9|Avc1r< zhzK56HoQxh!<=p$RtjJN6Xfc=m?})+W=~ky*5dTB8hX?TUQ(&;8dF{1RaT*VX@o28hLCo1S(4-ln2sn#F zRQr~EQFom6wYH0w_;f;GLf1KkJa9>XOI+LxdsRf$-6K`S1mtMUeQyzun=Xzr@$?b7 z0I;rlwOc-R*k_S)82_oriJ^z;B z{6ouq1zIlSy%?_L-vnAEJkhD86g?n6QFLLEpD7ds*m zTa#svLU}g2T4vvJOD`jZ8|P%Aq2qWbNsUoQ;viQfaJKm{pG5i>C$k3pt}%{ApU3q=j1(HQ@RImyy#rl|!EKRpzZk z$pf7>yM=h+82Jf)W5$f5;`p~dMG)vU;#KKGdXXT>nh}jAJGUq0LhcGQtM8T(HdP`!qel&nvh-6GF8awKerFQ>6+%ArkCPMMAj2M&Z9X$ z-&hEm@~VxTY0`HvS=?1-N(og*%(u3%$xM+ZZz+hf6RqgBeMqjc={hrRr-hmll7EPE z9|P1%HM+_MZl2hVIV!2QNZ;m{W^xy(ANB;OSeZR)Ju;6Aw83l!;I#)@)|r6v1)(Yy zM^~E@wBVa~@8n(wq25o42(cb>2dGyz1@+%Wx(*{Bjx6<~A3a~_8MWovBhJe#pR}GO zo^hmC=n@P{K7axqq+)mswD2$S5zP2{v--W|*@H%p`;mkAJA3)jS6elAb;69|77q(D zQcab8RC=e_a{=9K&;&TsuRZG)rtc-BRnjQ?>Bkl#Hzy#aR&dNS0)@yurJ0U*4*thr zG4{l+3QGtmTm+kV^eg$ zye5p$o23^yve-N_{M27?t6^G2f%osqr;~mH<;AXDrcG7!mifK-zwx{y-<={IQoN@T zP9+w=OD3@ea$bD}qcU>UUfVAEhFL6fu$H!Q1tP%-2Ta7zE-!zG-l#aS;C-oRFuZqp zKSbQb=BQTCC0=|W4L(EZr|vi0rb9)`+}0JRST3(Y-dmnWyf8X@m&%^wJBdRQOb>J2 z<+J1#T;jgS9e+QcdjlR>8w_6(e5ui+Q}2frCh;$@{ye%jRK<=kf^Zv)W_GY-1L0GmDlw9(Xt>(DCS>!1sqf(^LhH^Wz<75yyd8=>PY@QBf%6$uYk@Sf5=0^-pq z(sD27V}&1-aQx?wP4=Sg%^|FozAbJM6QIE>j{iKS#_ZxfI67v;NvHez`R*!W+jX*j z1|6FHog3rQki!xnW>}fANY;oTx7>D#=o?aY4Ob@);Tdn1Il$cKiuBXPR3Ek!OTXjr z$o<`^OjH=fVN_@&Le_KMdA|AWS<2wZhC7~C4lF(;e59@US}KG57BpU~(tdU;vsnop zKY!n8HfrN3l7{nQ)a>9Oe(3AONAR+@v_uFW z740>kS`*l8kd?Ns@Z=(R$jp7p@JYyW3p*L>>M)s7sLORScxDyC8u|qSjt#i?KW0a5jhAH{%@;yVzq~xW9!wZ-Enc^qm8@Ja{b5PO9F51y6B8f?ay%n3;&( z%U2e|Lp>+-r>Ptz_svJ0L7^6%t|*R>l~`>Ve-FQMf#V@%)O4Vrm}2bg)Z|q9$4G@R zrFoML$f1G#x2@;x6fKm01wZ#!DoeX$sY0emg*n5MBdZc6Zcxo6(PCLzao36M{{BpJY=q)T+v!|-dPx4&(rn45Xq~cEhAecY1 zDsKpeYgvM*2ld0Z`-`GU2w3Bkm@=p9H&Uc{o3i6912?UEJJ|6bT%=Su)83KsqkYR5 zr5OO#wXzrcph4yZc;aCtvImJ-R$(FmhXb6#pCjztfC5U7C6AQt2zwp|hammWHfwwz zL@~+xY0pR>V0+`Zd^;Q6|=YeJfW(3z*h!B_E+cq3h@qTyZas=iat7q71vewJ)r6>)FUifWQT{aGf=bvm14(ic{ zgl8j@=sOVN_qRUwzt`Vf50Y2}HZJ6j{Hm*=1lOVllRl*|DS>pZ%y=NgBJXbK3(}H} z#F+V+$ph>YGQ6=CvX$zR_0RnHLKGLr?%N+H;jIPZ%=YFnI`h22ivHNmqwvmw{|t19~dM#_gjHmq?i^7{Ux?2yG{Z^jD)Ep}FRF=sI5^g&v0U$gvi7f~F!F%KCD zUZ4!uiN>=tpj}tj-M<{h;x#h^_n&}3vAZS;2O*aP)$1Q5cVfX z?}hV9`*^5Y80x`WdD0;XIJgoPcC0(A;pjQq`~qQ$*AAw&qVK!ljQ1Xvv{MD&aC|Mx z-bp@Pdo7*)ywP1#qSfZTZmq(+WUFo!Yyx&sa|k^wTDc9b(q(YA6t^00jjs7vq5i7% z0UV&FheQldf8cx3_rI~+c7HW@L$=orl<&q5SdLHqY%3~Dm2PxQ#dOJ_7lT~!VQSJ! z*7nWQb)?TDQ-l>^KbsWA(q;5E8ou1J$Mr5N-A33FyJMi%^bb&;YlGOk^KFT)U`BPw zn`o|iO6gzA0Y#r1OMo9`(n58h{KlLX^7q_f^p$Etnq`@d${C>;n;FXNt-{&B&j~EJ z{yL>Y|8&A+hagy^|0E1kx6Opq!BO5kIf&2RCS7v`#Y?6UQYJa>EK_kHSM^&`#X~y6 z@^0UfiRE)+?_C{p(|uVN!L*225Pp1`G`NdWYOjB^hSpT&?@tnH$-_y~kJ8Jz125|s zDml#Xrk|hIx37wt{aQo&L_At*`c&cZ%HC_ilG*rx8G3E6<&}U>HYW=PAvK(@`R{*& zcz3wq`xqEWy|k^Sm^Whz3En$F6c(;VLheY_Uu|q1z6479bzy1$EI`wC16&k~f}ukn z5D4u|M%yP5`tH;xvIND0I@;mUVrvva7?fmY>*&Mi00+F12FDE-{pes}d$qRz-c)g` zliEMb4^=E(_GLbLMnrN+?NG*ju9|V#xr1nUHg-q%88)wpaHg)7UQ1X zDJH*(fh?1;AgXkAob-#y>j#uznnj(DQ0Zw8%Rly!9jfZR?+e@<)o?)w>V4}0k2ILH zx3OoQ#+Y#0jumx)(!$IOv+~mlZA!laV@+VX1)EoRqosf!A?}c#M@0AV_($gb1{bPC ze)Hjx7%rFvldN-{Vt^DN!sgthXe4=w%e8}UoYBmddnlSu-_AK!*I>EDB>j;y4<06`P;F{*x+bS)Z z{g8q9x5m;~g~ZydhV>4g*C8YH;HKMse5&X7%uHzwYQW(Z9XVKvEXNAx;$)fMQ?)7V zAo;IiL{%T{zU%67Z{`}rSh2|XYb(}ShBKusniOWKARCEAHc-QT*b|{FE5KV^Nuk^y zPH5y)%@;#f6a@H{^?C8}4!61MhLeuNRIqi6X{46XI5`VTQZZ!jQA~4m1xqj~PWc;s z&_con@Ns1UINADhiV&ND!UA7f(ect7$A?Lo0!7XEFVQ`rLwm){b)>~8RC?Xg!B+2s z#(07iJ^Q{`Yi_=&yvqEmVi)?rt_oSH6_v@l%#4WU;;u#GhsTs@t?#xOCnqsgH6e;V z@})Ip0of}{D&M5Qg%_Cu?kGS2asGXHnnZc82HB*s5fitkn->M0#8Lb2vy0fwG22pe z(`jLQx8Ejg4$ozSt<5FIrwf)xtZl?tRXD-?B4+M){vIhyvZG(4*E7$Pn$#pwrN3Zw zC?Bmuds5rQzw2ez!|NkA^O6A<;Oy?GGHHee&7}g z9GoQ0mWns>-B4}*{#ciZ>Xq~scfl*~cZCby!gBc0?;c!^Zyx%w=ZPVSkWCEz0NV#R_& zDW@xG0=kc9y2jRU(x?O>Y90~=wH9vV-C7|gnHCsu+%hm%J!4Z&-Q0W){`$x1u`yHn zO3{Pz#BPYlU!06%LMsy3Qm~@8!z@8NLOHMF+qU~#Vc0l9=Hm_|^3Eo_;4O1%ueWy> zq}6?L5xK1Aq#lc!{PnZeq)^s=FNsuC&bx~CC`s^lOwSe1Y!bTN|4ec{?kd6+zn``z zu+n|KRr_0u{I+v$6ammAe@=fe?4v%6bimI)A@losd;KBy%^%zN|K1))LdW29e+oYL zBT6l8zc32U)5LsW`6h$%p-uJMe~RuLn`oNYNcrgX9rJCcdl%&Qx;E7$DdyWB|8uPI zMqmH_`r*%ij@!QfJoLZUJ9*?FfdBjYhc^5F{L+7KISv0}@#(+c|M15)?LUS1?=7BN z4`ly)N|F8#E!FRa(5bs;-~T5_2LG>u^m7sEe}ett&pHv!|DW}s!>d)$=MHiA*h}&p z-P+oM@Z0Ub`E+vB8Sp8yT~MsQGc#oO;$A*eIFQ4QVmy+uibdgKygMh}wlLC2z|s5R zcApP`+J;h3r)PSxe|CV{O3U)M9W!Hmu3&sk7@!w9I4@rk`H9B~<*n_;-O7D|7|YYc zQ)0hSjm3CQUuZpJ{jZPTkoyc-#!rO25%nr=R|OGg4>lGXHx=XRK9(|U$WOOuiF%$; z*B%$w3rd3>U3$;khfHCcDBWl(A04^T+jgp`$E{R2Dqpefn(&pfJoM?p4YY74%LUXu z_x`+}ERD;+%0VJcWV*b|^rkiO)3^ZpATS=nr)zq!)Q{|XATBlPhmWv66)&@D6-3St zL%WJ3`JPdy0$EB!D93Ia^X~0aiw-X<9f}o^#c-eOc%t^o+{J_*m?*m}ObsZk6}dN< zWF+pMjE2Qt^2Z(n+qUXcxhGffK1&^8fn%Q^?EQYPwF?hr2#V zXM;owZ&J8ktt4=iTN|I?Ug3j3W1u9mhpIoxsj{_uFIn3_sE{Abt0ITj(U#ol)w)SX z25i=cSNwB1&xJbmlk3b&aVwrJK&K@;&_xi4;<2a^LX?SxMkn9bW}OSrMfZwOtj^aF z0vuB1Sz|?eq6};vG_TX)c-JKc)xphonc~iPKKr@IafXFL?;my;w*v@~ zX@}>~@IoNG8roG~76Juqaj)J9xdJh^=rz zkVTDcrgA#k6#KT5pgN-?tB^^8Gp7%#i3p8upi_S^LBn=S4URFhIk%(!uWB9cAL$n< zXC8eC9tSfe)XvzmyXsXZm3}^99x0vz(7#|ew8xdlt23uhc**wcP&D8ijD2gcGZio| z7oB(n+9LR9?3@T?kHRGQ>$ZiX z1yX6;N8C&#!nSAh+1FJTmETkpcl2I18m5>QZJp!O7$;l&!!|Kb9FDD)A1B+_S45Md zve@Y$V(G3T$G8_;fH*qjzoOC7(*-AZy3$|J&6bTbP?KS}apU2vrd$W!`JK?3*6Awf z=&0Zat2@RX)VR_dsIUb*#TAU(HNFQ16*KHS2SS;5sDkEn*DWlyu*KE40+ezY33lh+ zn9--vIqDfCc6L|TYraF%HEr|AmnB=oHy$W(85M{mFU?t4=Bx!pRQb1_gP+LIl zJSY8kDK411VN7b<_K_WtkZisml;rc!4~OU%F=wF66v6;sQ3KbQ}v9M7K$z(QOV ztg2b-b|$oV<(3W=D0!WXGC4%AM7=wm==?d;BkqLEfQ1{YfX#J~VTs!HCL-?kW3H|skIP`qEHUU-i<*5eMX+sOQ+8j{6r$l# zny!_Io)evJ@l0vaq3MxyGI$Ei87YC~QBAQ!O5(4w%}I8oojE%90_4+1Ye_4qt$P0~ zO%#1pZ^o4q*X!?zt1f=yO)_y9_7R(s?~H=G(uRXzz;n#87>9bQp`M;NJTdnK#w$mn z{GL*Eq^-a(OV&)nCP{fA>%8oCD+1fzdPsyCRLE;uW>(h!?lpgm_NVhLR7d#lUa@^x z(dUe`g@1LaZuhj>FQaq#2fq zZfEI5BW#_w8Y%r#cq}>SmZ#hN4LijwncS%l`NDhG5_Nkf=tdfoki~j>{s92zbu7v3hgc;T|z3YvA$_QJOq*eX3`URb;$e zq!wwm_gTtX0%CXqg$;V8EuPNk&Vbg^rU(}N!{V+f1KqAX86)^_OI}O;CHiA=y+}1> zK;Bca#gkfktv1{UsN32_5;>13g`PJ?E#5KGVP=lT`+Q$@NRVP3 z6$nVp{i-*wbk}Vm&k@Iull{IhFrd!8-9!$ZRAwS}RxcwQ+x?~jDZp;Ty=U`G#W~`q z$H^3Y6oqDZIUP3YJGeg2QKN%QkCwT!O3JVtP~9Id+*+0Y-No$J-IiB<+O|oxj8{ch ztjmnbWbOF;pl*w!SyFFY?L`?KqcFvgX8bv>{=j(#A@H8HY0QaJlL` zcP?ezF$5jz8>ev@78wF(7J!aAe@Q8UnIRR&rAx)xMw4cH$%5)+>+kxFoq?A1i&sdw zJ;UAge#AkL*(a6FD4{|HzW1)&8adU8Dl_JFb>@0g!RGZdn-PdxEau6n$c?0L^kOl5 z30dvHzM-Cgu4P1w;*0BeyT7}fpShUr(` zuLY%|r8tXQMx-rslr?tgZ@~=Hj8tGBV>y5``YLx!#^DqxMShGl;|$+pW^?!rnRS)` z5t{+VwpRQ49DY7Px_SR5VvP;Has1Ek9YNH{ZdsqJO`G(NO%&7}V7(xKNJ0~?ptNvI zmQRmZ|D0y<<;NMO5PYM@$f&4}A1OqAwo2(-fwEI*Dv6Na$UVFVV{gSL@tV=+#cvIA zko;L4e&oej$+OE>ch*2*glt)3z%q)YiJ}`XKii42A`l_e!F16^b;t4pgCUd)#Id9$ zT}AhpI2L&6(m|H(M_FjHN6Q`&m?#JEw(2$%a%=2slvaJ*K@>-&W@=9H$Jh(rd&}Lh zm;UJDI&gSKQ?Tt=UyuC5fq_9w&Z(xj6s3*t=DX)B?)q25*}79@QS?#w-S{mF9Q<=N_FuN#UX~oyf(7zJwcL*2f4Pj95#T zp4T*SrjnkQA4mms%u}F2`B1=`gxkq_n_fYI_@QLGcBpy^Mx^Y$uL) zw0?dgY#VJ#)@C#=Rl)ZBWs5xqhVzLmoc(?&YXr@Dw*(?-O zz>iJ)a$VlpgtoV?Uq6oe@Y*1V>6zHGJ;1nQw8gHbD@@gJ*awP^qyA&oeOKq`TmQeg zrvY%fSPk#OFU9)r{u!c{Uk%)5<$1MV8KC`Q`->#OpsD7QZFDnGtJ=uMQawn{@qwx< zG^I9yV5}`uSw4it%T=Y_Ep6otSB9pAEIg0iMk6_ZXo}PtD1+Kt>0gGGVonOJ zo$X)uNQ$%kkM@JRy3-J`9da4)x8#ps@JCx~u8S*;`|N_>_v`<`+Cijk2#&Z*U9%rq zlr<4qySQBI8IiWl{jN6t9(~FI=eA-2P0w*kK0*Hun7?5vZna*9?-;O?u`yai{*|m9 z8?IcXfp4srY6q_j5eRxgx@vg20B{$QhG7~O5Cp;?3(JQ+Ifi?tHP%`Y3U9EQS04G|rtUymzzqqq-aUg(LEB9W+pEcH9I(t(G7bdj_EuIx>p|x$M8^TI0mHg5;z(vV^ z8Y&#o=fw4s-fi7qr^F{V2s%+$2?3}ihTLoGV*T=()IU{d;G>BI$xkif1m2P(SM(E0 zg5}0u;N``1n}?AgT)daOP?-)M0XFKdjnhoMLJCoBXgT7tRY&JD7#;($pGv;WY zgNCJHHI^-W@ySg`JFji0Qroflrqu()m6->-0{8>9I)5hcJAYl!kQ@DI$*Fwl8&YXq z*3qhniIMa6X%rcJs>iwYqC~@Vc^li7u@kvHwDu&xs`9mvRWIXoddmnBoYoLKo|tO` z)Gml>ySbjVRO7YLqk4?i+6V+Pc9HD|6eQ_q{L?rPF=bvj3^v2dpF&n@=`xiQy&Ie# z!Ja#9`?x__H?h@F*d7}oKS@fayzie|JR?My!Eks*x_~*PQ`Mxuc?0vIUGg!R)fKq@Kj=-OjPvcmXOV+E2GC*US}4 z0~d2>KLj^l=0oMRoDp}E)%j%kVIE<7w(yc~@*UMJijIXHy1x5=qoHP6JeI3s5mEZ6 zbj>OjKIt5}o+BB|$)SY%SoIkB`dhUHdN}681NjoR2Jt2DH#fwc)2{u$)bhg)5{5t@ zAD2+6=w-DG506BfUCNx%LUcNW-d**21d`^6%Zd87qCVbA7)bD+>vY#Wu4pIC;vM9! zY{xG7ww=$USkUobT;$bhP;TFt)O@-`UQ5Y@>vXd}IcO7w#xfJ=9h&veDnG6{7_>Sz zrUut-XUWOuqNet@urtcZOE10X{DYrxqHRL8K6ZLhkvGAf8S$!B7`G}7Hqd+bCd4;; zN2mTl8#Yp&m@imqKNoxvA}y!^PiA1{UltooWpFuuNYm9{+S60{+A!ipz+GHk5976T zGIP$_YnwlTbvTEOJ@3rrJt!wM)Y#wG4 z8M9XY%tq$u1QQFWFK~5j)}qz!FmBAhUUZfNP*D{P8A@W9(*Ijn10zt3whqIU}kD zE?3sXi`4f!k327(I8Y-V8RFNYnUW76-?cqAB`0l^eLlO;dCbzr!<%>U!zJ{#D5+LsTdSb&_M_!GZFKhe}*es3bgCcdJ;9m-`bjvwn4v6WuMT zu=Teqb*M&J(?)I-igERx2wV7qLz?vE5*4-D8Mqka%`HXGilaSBw&o1`UKV84I&to? zB1=2H>?%rnFB%hlC#RuSO3jV=U3TzUe&D*@k680oNLTlmm~6|N(Q)6&U*zeXBE^M| zbf>M8#6;iFx*YnZ<{1@xT=7#7X7`Ngtky(>K|b)vfpNtm#*C^!q@&NC_GhKsQwc%B zk4V2SRe->Yo``Pkb8t-bg-Z%hL~XM|1QE*R#t;cspOw$NIu<|Ej<#NFVECJWx3y0= zwNE}~p5fn3QWgPSTZu1&EFIodHYY?ZNtTJ&FVITYf4J+El5eu+C*LMSO)X-#QdzeoB)_ycdLV>EA}MiCEI0PdxIn33E1=VB6zVlyc!0O|2$r zHszP{qq$jP%1vZ+)S^~)K0af~qk@^nfwtnb^mD;;o!~u>8&|ZfVXY{8l|L%&%hV~He#Q0{f*94E zB%bv)PMlpEo6E+}2UKyN^rPz%@;RPZ2ZxTs*(b5C{L1*Q zAC~fxE)`0Ik2W(AT7boWot1x;_rE!IVwj$Nlwyk5?vX_6l`CmU_@R!!1 z+>lbeoO!Qj)EE*mt56(Q=)Y*f+fZMfB|VD+MdOXGf8grjsuc^c`O|L-Ti^i39K&E# zf*CTjM*Ko?nl{5Hsc0VoU_py|;qU?b zgw;r)Sy=-UkCKp;lak3%e|02!TVr#(D;KXWhSXY#p*nF$*A&`wq4kUZv1yuvw?}8u z^>Hy$hWjXOGri2(Amk<%XfQ%X1$o#kzii;0EV|z_wxBPwK)hsTnZxH->K*a-KpBu4 z=^pGD5_(ZcZ$*bJC>yC?lNQm&h5}~Gm?i1h|23I|qngQrt7^f^zEs>^vR((mD15LX z1@yt$k*ce(2WKD5=eO$;R?%H8CF}2|!c)WFny2IeeA26H#AlggFc5JZZRAH|7sdp$ z)jz4&3aa!|x#7xc3r)~b7N=pwk)(@E5H>73!gYLuNbQWtii!DRn3R-$P4tXeUaBPT zwdA|5f*9e*mLQ?JL_4hf zTl61`$L%Q}nDgE$Vam%%#Dmtt&7}8pQyFh2JWfr4^aBJ)PiB>4-kzfU%||% zWWB{Rs;{r|p{vJVFAl8nWg!hu`~7FXigZeV%{#)>gz3dKA>!XHz^*F{=rijDJVq#y z!U!clYh?A&H~Qx7I?`dE7&358Min!_E3N-d6TpwMQ z*lFkomMuyCj`#M-A7z8%)4kT2eOj8s+30K)N}AsKtE-nec^JclQIccL9WRBY5Q>B= zGMwgIm9*5)IZGTeS7jqn7T5)+*Fc19j+eUJC9WTja%Fsb%rk7g%ER!!Y z+TQ5Ee<_BiBZzrQfKY48*esC&inP4;A6u3ye_rl~aCIbJDheqRlWZ9+jPtK%?-dh? z)VkOE5V?I(Ds6809Ly`~Ecv$%jw`f#s`v<6DGVxIE!L}Vx_z^N9?a&S8%mCxQL`5u za0GH3vm*Q>f~MdyJ^Jw`yhYR}dxRqJuBE@L30F?rE~w3i}3Ksq1pHDo`k?FgD{_rZwF zc`g_Nz5VGswCdPOK5sD>TdH>9&``c_YXUr*GPGH#csh(2HfMFMY`|bNJGnlqOT`PE=PXIRt9N<29(14mQ%!yG3K@y-si=mM_=jA zi&_su>NIUQRI~#_GPL-Q+a!Iv1C2^y4iikX)3LgZ^)-8a-7QQRn{B+8u@yWUcE}8q z;~!cE&5@^j?BqdrR?VYM^6Di<-v+twyc*U!2m+@}7~8Y{*(Z3CETx@4yCe{ZZu=Z_ z9L%+x>ctE%3`iWK651-wdwyvJlMGWNbRvs2!>^^ZbP?XHFfxHgO#T;ZO!wZQHBuMTUJdXxDq4V*&Xfcv&)+{Q%Q0sBi^<$CYbAs9z7Nr~s&L@`Gq<;#qMZ~PDP3+kdvngC*(RCuxE`QF_l<$SQ4`?(P=1Fu zgTvvZ{yHbA{4$%6S^lV53S`0^eOW$Tbp2vhwT-fntcHZ|+MGA&KWcZY0Lx|Phb_Ga zWlPo($g9q*Q!#Jgbzg;XXIPzY%R2)=Bjb58S{>AOOZXlq5gNA%ICa}WYKkA7F0{k& zi!n9gH)qU=M6-u3j%7iETN@8#k~5d-pdc5iPCzuy50pWiw8R)qydBA$yt0gVoF@=ea{!MZuzCnBkj4UPDfk6G(T{m~`#&z1%>-mHH zzARibo7c4QfoSm=r-P&=j}xRYp3e9%O?nSn|M=lU?F!g|fGTREm}=smkt`n7xwh+D zTM2ptR&vt35gViPxtXL0&H_M*pJOh;g7mjV7#05$# z26wgLSf?qmm2@k$x#v7KP9u#tG|a<2sId4EjTOKnC(g*XxJCG4F_&j+9>$?TVVUO4 z*{=dJ&Fm>;?)x~p#aytmQfkbj<3H>)O&pZ&w4%3do56m}`Z|ac`!N>_-q#=Ou)i;Q z=mps-6$t44q7(N@y!hGq*6Us;YD!n_I#aXfY5{#2+{=z=yog?Q4abB4a+ zX2rfNdba;S-#7BlEMT4E9OONJ8p+wy*l#Xj_7C`fEgJf;8>j29W{X2d3qr;dK9~5j zpm9D6)G~5+-HGNB5w%pvGLoct9bRFX)M6akqcKK^Cr39186_>}<9$EJAZw~sQv3|} z-FUzTB?;t=7_9!lkF4TjGuLNaZGfkE_eEbE;oE+Y&C<6n;uUyFxf2b_TLI+#2PR2bkm&3ZVz$MIOddZkwe>) zlRxli0Oqn8fq}5ZtID<^`a`=L7P@F&0vl_$YXn_8;bdyGH``lwhivJQHp6eCNTZ?7GoF}hKeF_1Ms3wcc$DZ#t_OPG(qF^!0;zk=Jp-nkhE8?6v4Rok(!rBM zA2cG$ii-09E{>}od6Z@>W3FO|)}sdr!S}X(k){rrf2F#Qk;;2^v5adgk4YB<1v%L6 zur5Ns(kKfFBhUw3n$RqXh9X^wEU=n~t<6eVmvymvyGwQ()FNr*$<30QSod30oJTOei2F0kHKS*3s}CTyR4o5N}gWWY`Ou~aup z-WW8uDci293u>~C8v2u#M<$Lx2LNBGpz51ew+!J$R#NBk110U*I0r_IPZbcT@E)sA zoYzJRXxG($s?v;DM2^0+@&K)$h6}Ag=i|-;GY60?P9An)MuT*6Q%91r0lZNO70Q&y znZpF6Y>g`^iU$h{x|rIWg%kP5YbL^%+%!G~BADAbg^Y*vPdR3iig(f2PU%A0I&gOB zLsMT2KA8JmZ%GI2Y97etK@1b%6P(82jhZ8ha(+w?+5u-+o&t%s%rVFuoh#ZK61;M9 zH*k4b*eO^sL~(z4s>d)H)0{fEDCtEt;cV1Ps85ZUn35v>5Is{~LzN*l;-Cc(e$6}V zm^RV>W(gJbe&nu_4D(#;QClbf;-s~A(}eU7ZL3sLXBS8^kBu8GU0H1o&U2bw69R|E zYB{~Mo@6V8muN-tW@{Q9k+YzEZQxU_{CTHu=5~qa^jK|Dd&j~{Jlwbz=?fQXXIE91-^!#j(Mfub3;2V)gJ$k#7@r%qcP5Up0>NF{Kdq>I zex(;T@hMZ6+ zPD8M%rgK-E*U@&xIjgPlQ`vgkUQNqZYk;Ko0m#9wTN`>}PB-EVjYn#jLCG^VT6$o{ z+37CBf`5_F%DOsH)%~NkA4(uOsp`v=)7r0IHp}S+4_6tuT#i2=oq^j+D1q#bK|dC= zX3EX#!r6n`+B=)uZSao;)i4S685sv|KmRoUQuOKWGyK?gk^~rtm0J_m^pq#KaKpo% z!ngORtXaJN!;do##Dl&ZVHww_vmCrQXXA{ETHK1fG|q7yPt%Xl zd%>SuCz@Rc65)_iz<@9l&*ZGi9iaHRC<> z@)YN0C~F8gk5N|Hp=EqdiuT+5`!GnW(*2@wgcN57`rfQ zHDcyv-%Yq{XyJ1?C!kpC#}@X2>sxPoGJQ%G2%3t6nB_SVs-V@4RRTP&^Nc_&W0Yximju z1f9PMcP1E&kO%Qy;yMj}j{O9&h6qqVT40*Ku~1lvBj{r#uz2~?L{e70;LmU=x#(RL zh?M2%F?UQ@%wYd~@BRG6D@%vJ5CPls0W)h?)|=3B-InC{246!(XkQNC8?Ck}@;<6H zY+5xB1`SM0II%zV&?aSM7o}l8T|qk@F@kFnub~BSxRE{0$bqj(fu7x>b1raYLR3w3 zkq`rfjvn3Wm?A1dhOPl-qUtamf zDfqG>LUHXLRap~0CE*fqf|V_+vkd(9Os}WSb~l`$XqPITTuL9*b!jZI&wtqS{hk)7e_Lnk zSX%K!L+CK5`YIMPimJ%!Y-p$+%GE-DyQ%6&@aZ&Y`pMg&;USUu3nF#HSn2aV9rxPe z0~+J{q7|VhZ*PCxdy3zi8Yaz^=9ktjVs+1F%%;!`*8U*EgJ$h!#VF>QO-i8JRo$x5 z$(uV5MqJ5WCLUkj$2D~Ck(*NQgWpR_6K)Jj%-lLy|LkDjPTCTPWa6D9)U4b4a*N2PKZ2SiS0dePpA%;`{Wis{*fSvpOe-y6!-!!Zh2DzPQ zl>Y#H-*1Bd*MQCc<>vtN%-i?*;=hnTMst#OZ!fvAr}|UxHlWYb*~!tqJkj^ahx&XD zkdBAv(^GN;-%ywMYVmpVbrueHQ6I_E-|g0KjGtUTy~A{L#K0W$U(mTZxgDB<&yb)9 zp5VODjF?WS70);4{C?i|c*x$ES7-7NgJa-&;fLgRaAlUW zEipe|KUh<&WBrc%TsB8CWTGry&!mi}{r={1?Ag2cDZR(6*%O~JnxxB`1n8%4x88j6 zwn46(mwjzA_Lj{EjEVedk&%K{sdIj2_53)#} z9&i1gkIzF^pUu#0CM`q?zP~-^`mQZe0vX9TD#O5L@Dl&rzjOUGZMd@A^2B?K^~Lc= z?A61i&hH^nmZb5R>i0>}TSDcJaS=_#PmM`UU!O|gR zSmZt*Zfz6f&uZCP3_s~OMdZhYo>Vnxmz#%r-~`xdoy};LOqAUwv{x+UH-0$#R%>ne zvFkR4FkXl_wf|HhEi-zad{1y;)+JBw!qrn zV)HqtxyrxACjk^&RE!$&-$Zrhd`YGehq3Ov$XO2t`3_=5i6)f& z1!%~h<|6xfGQjDK2n~H~C`!tVrha z94%PMt0fKS3;seAM%j~jAQQWJ^KPal1_7oQ?rUVGkgn47`EC{f@1&5{7h|DgW#s~& zeb-f2y@Vy9+iS`9oQtZ8rU@mBl(hnVPg1)|BtTL_e)oOtPgg^U$eYQ2k9BNMUG2WL z6r4pPXyJBDxDaY}?lGhbF(MDGk+==AtJ6}9e%g~$Ng1h~Pwh5?femMMwZA$)^B9#CAL5@^{V`i`-G+G%)sni- z%ic%dOM5U$1JZegk2+yDwnvE!v63V_4J?Fkjz4lAnWRA%j!HZ05%tpG8-L-Xs|3%| zQQq);WXSN%P5*be2n?!`r!>=Xt)RB{(JQ!q7wzPv$;7gwY20+CQIQJI>&KLVay%r$ z0mh^?T8a6=YWI^l(EX*nd+~8u`}UJv2-FwU7PskJeVcDG`$FJG74LuO!Q115I%xC9 zbkb+Fj&7QmV_1!B+A`Wwm@Dxzb%0vC;puKj$nODSwAXL%*WRR@K7CH@r%Ze%@wSje zR@nx|PkZ5i#_juZCb8|q8U4+@Cu*|Tmxd|(>k}5pMggYaT@J+}6~$hxJviOaYYun} z66Ybqjnms4o5ZXX>8C71B$wN*m!CcxwmAOPHzK>LF2$!IikKwUB6z+zk!alZN;-t! zttK1buY%r>zpiU|o`QoGPbs6Eo%y?x-o?wRSm|%|-htzq8sKTQXtTU4PPYA{jy&=M zMRK>iXyfJ@E9TU>*!HvvLGVO8o}ToeS#)Q4V?8oNPW}7fAkKw+POF3L0qV{*c4KLf z#r*AOspP8|kMZ~{x}?7Z(=?BElV}itF5Sk@RCAB;whl+b(SB*KtM4QbLBe8RKJmrY5>+V!3;$L`Sg>tC7)ZHr;& zt51Sk&z`3cj-u`g4be++&7Ak*jCp=HH0YOhjItLke@HAtw8U~QXQ{!8pT7f4w)=+m zgtv8H3x^5}Bf`A(d~TK2EX4KxOrqslvwYMW`sgrs^USmYoZx>ey{-IQG708$cz8|s zv@Q3>g7EzbtvM;8b4Z{nZ-Uy|KxHUR)EaJN z=RO0!jwQ>3)Lf$qoSf}760W>&uI#l6$?W^(l9`V~6{}^~Oc&glq(ViwO=j z<|I)mtibEuvHqEh4Ci%>2X5Be$F5-Zt9uEyX4qU?}A3E$tmO z_dbW5_J%%r7G|b_VDOgZ)_zcv)Y9InUnZ({(8XbX=@QBFVKih{Lv5W1T1~mMuAn}_ zd{wvvXqKYZWkTLavIdM@{8|CJTCVETMy<9*@Lqa7YWeEIY3%JP_bN1F;=iruUEoNk zscdk6Q3$U3O%LTaD#(!=oEtU)NMFuH2Kfv$#m3>p%+6~mrPWP}MMn_3!hRSoxxuDZ zhoTavV{F>uQrg%Abg{M+byuk41TaAPmeJ2Ob1W`TU(atBZ(}RiyLq>`80xi3ZJ!ZZ~<(@EcN-~(o79~u9X zW<0H5a*g@$RpoBS^%VM8`_tofn&9JT#Q_~k#TmM}(Lq|Cd0*PZM`U{+-_s#Q!ut}oe(W9)&78|+)DX9|jSq%^ajXYS$BMcw3X_Es0y`<+kmD3TB` zu-x~#VrS))f4G(Og8mC&EgS#aF@g}q$!hiRUFw^Wta8h-2d{QY&so@=jnx2KdJkx> zA+@qLd=0JZBAb^BDr&2|#(^fIFQUO4Dkn#%&TXR%a-P%4&YskwC(SX~=J`kHVr^2yCNy28T?6hgbmzx!|<1$1;oq zBk_qJ){6JdKVyF?!|zh;oU{oj`yw9{ytbpPV>x28>QI-q?HoQr0CZoMF-zHX3s`t3 z!9P}+3g?JrIM}T3L@?c4f~V|G{n{h3poH<9k|2+oIn8mg(!gLjGnSv?$=9Ggs3%{C zV}nv=Hb8qs2)5P$HoVmKbH~5pjJKWwpUB}~O5Y0k-8MZ}GpyWu$(2nc zWt!9e=*coI6rO?r7z%4wC8d!mN^Jqs@`Pf^W6<6sf02(bYvnnVK=#Qo&ykmYu(23`-3(pw$K^(iEV-9cD%npW{eS zzm_{fL85x1qH~a)>!tAYNiYWzLhLWpa9t1vO;UVoZ6vjB13OO@_I6)lY7x~pnANtg zwxoD$RcXfSy+~h{;qX}~t4(0Qk(ZtjrI$Mh2!J)jbtsr9^Z$4Tzx9U%{>wLEX{Rf( z?vnU^j^s)klfmwp*%B((DbMn$MX873yNBkV-n_7+BodD3{LDN? zL9;J5MgMl?UXJE!rq#bn0Nb(<-_xh*zxA&#e_P1%g)xT49pikIN+qy%I&bLG&oYiB z$bWZyv!LnZhTG?V|7)^^V78k*A=EvxWedhUz}D~s-f@a!R!osl?unM7Qk_Fw@X(;e z@TI;O+d`|dp_jVwFUvXDV1`E1ALq0#tA_S;sk;X3$w_p*;Q^a60XaTj9MN1?^#@1? za7WcMXF=p5g(hIJSMSCc-kf>3)sMFr!<;wNBvt9tPAjh8Th9|bV4KlolgB)%y)B`t zibXNWd$Vp(pq$muKafbcp4jr(Ww%!Z6}Y+@V>q{z{rhQ(uLd0{g1X*;XfIL#Ri3Kg z^30+Y&(z{li2m=zkq&(>iZX-;h_JkX`+Y|!nkqH=Ow>?Gt3*`+5X_7_39@$D(T;;# zUqI_ZbuaqWmPH}Sr1(RKat#w=AmKO0<-8a|g9(G^&U5)Eu{sv=sScr^SgKxieR9pG zp*gofI7S=oC$q7)M2ag{u#ZP!=#N&u`K_5B%MX`x|F{pg!n1nfOBjz#?I{CCJq-SK zg<1rmj1*oiM7j+nXPg9LoY4I^zx9y>Sw+scp9xJEZDoP22Zu<|Yv-=rtsXVQMU||_ z%JVig+P?3!h9B8-FtBh=lJlp%4UVU6C!@9H{oV~`AAvg8Nwz5ju`5z&`q?+SF?P+n z00?cXvmnXky#<&+N+`wo14mxOd;^S0%>gN_8c(>f&4xAWio7=SAleRJ?~KHe5y@ok zlPX9Urp%Tg7n)1>d`6`Nl}@CMwpF1f%O~_o z?C%T2QHgN^{0as40pA;%yCa2XA75$!;+|o&76nd8{s{tdOtOx)e?t^4CgTu*j?K+5 z{mJKLT(sr>DM3#5V%#E)m%gBNDX7ScRIJu+BPmHjs__S6A(du|N=i@g|kJMCk4 z*#q|T#@ps|Dcdv<&*H7E+3C&|@eh0G){n#p(`qa_-PlPq0%D}(IqtG8@3W3iuSpzR z9ZDQ~o{?!i9|Xmwn11f@qK!N8-&~Zsa?cAc$iy2H52ml)0(9v3j{LUad^<7-Y8`kP zFC^CW_cFob_?R*m>t=x{GqrX2mtum8=;26DS5^4{*J{?QW)W|6n2@~fwJa5@*}3}Y zm7p!CVUJ2itLGHQovLUYN)c`?Q^b2@=kja)W_Y|0U>G-RGy>8kjH7EiZ=OY=3a? zFdf{}^Of`=f%W`^2~cgS^PZYN!w7-{QeFKDgyg6CW%ns3hz)jHa;)ib57I-9}qg zJLK+5D+NXERwu`+H$yg$B|v-%(+~V`j(LXKqzOyRNbblh@qZfF(Ssv6!nb<$_lzr>-trn#5*8ZoYyD+0#$ls_MI*?VGISR`z?$driuyw78Nc zf?)r_6i{EgXjuU<$;Z?^yuk6dN0~2kVf@GmLVb>5duXLR!qZ3^L-fiDW-MC#D03rz z8|mO<%2iA6xKA)$Ohk#P)c}||(H(*(7uNAGuxaoKyRotE4>XjbQp~LFOrEpcahIu5 zSu>hx&+L9>$F8j$s@F-MU{q^m;|v-7snI{;#kUpbk)9Mri|ndKqA5hiqr^|FTRq~6 z8b%v?mb#{@K6tCtc;ZtL+(R+!I~==sVSy z&-noT&g*xhHBUsPp6;fF&}FWgJ5dg;RUb*727W}UckK4vP4t@bbP$Pev=a6@%0N-x z{8IFl1i>~5fIUP)rT~te2dLh!A$Vv1jbp1=PqaR2y125%gCoO8m?$UilM;HR9iJUY zqe($F@-2I?Z)5D6_9_d>M;BFlgT7dcq%IKg-k)Yy1i{EC*Yv<-dRz?o@GSyXuzx{=VVGstf7K~E~83wIqhm%X4~>-;fS3wd6#S#ElN!# zQ41(jbzZ}?>cPphZq+97?HzVSWDN4fo9=a$J-HjoV6*!hyxPd$m1pjz?BTKF!{Z|K z%l~G!rEp7W8n9+_H{075r0i(`O7W)U@vfQtstrwkR^>m2ngO3&iEfvPdF~fq>>y=)x2c|M@%aE1 zb8T0*>gC-jFn<`4on3-$^?(MMk7WX%=jRlZONnu3@7bw7RxpLu!K`pkm>mAM5wDzT zgtn^e{!>*{LQnT7hOB6?Cbpt6{Gv0DxXpy;Y2h22w%!p|Y8w_)Nin7HF7vfqP1c`V zGYLskX-{O;cSfz+lgM3v^Ty`lt`d+b)Eb&uKCGsj1lB`hM12in#Yf1o(h=pTsu={u zUSSUB`^H-7kSsaX#omjE0lh0)zp?1boQN{@Mp|Jh?2L~~P6!0uY?<6O);IJ+^?oZs zvEb-1QI>_dDc?3q`Y&g_H6i(bL?%MwUh2T-;Bckly1%UlG+zY{IPQOG>^F}8jJv2x zb4$i~&w;||z992*GrLn5!y(VEmXPIeEpI1D!O*ru6HaR$5QgIP9f8_TP2{$Y^YKmE zZ3YDAh+z0bc~4O(LBtn&L$2stc;f>m7ycdFzKj6MQQL9k(%KD+!MiT&*BeFNodM{PMb4gLl8AW9Q~z6C9x3E&_8-X2hr48@W_ZXP*!zA8@u3 zsx=eT9%BZ1V_s{Auz=TBnxlieIx zl^8HS1!{d8d-0Zoj0kkuLfwi)j!&F~rR4;oEu_~`etQkhL8c79nPUTTKY7JBQ^MrC zy;+BA(zw*d5-cZEl*S-e6!o{^KI#X718fkb9&omdBrb>TNPWApx_K=fk7DXxzm{ZZ zSwPZHd{_!ZcJyUTTvkhT4j30!MNsS-IdT`d!0{X`wQ~-p5-{kq6X5-zdKFL4l1YDqB%GDF3Ouk{rNhrd-GB9 zf=m(E_&)6pqfvbo!DhuoEZ?lGJSWB1TPMMSfdKidKe9h;^aCFd(?pzSdtXA8Rl0&W zN$v=mtW~APiQJVd2K$KcPZVIng#0(!yyV=22n>!!Bn;rC58L{l61OelsI#B}z6HCx zQT%!N_VH5^?RKz*0+p`b6j=KC(b0IfQ0rP}nu&>hf0i-!N(Q*UFmx69PXAm+idET6 zVD^!5zfZ#=;br4yx?#n3c&Yx9G|r#K*zPP$?D4WSkNb@`&SGL%Ic^2Stqi`%h@>{; z1$3be;eZ`zQSydz|8Q=uoL+A&K-q55C&3C~$V&U%{1fXQqnyI#Ex>!#k@rV&RcxVz zIxoQn{Qg;%v&ms=%l?^oyuQ@d6}A0bFJ5SNj&-t}-2yxWV~r9%*Xj-C_3dC^RO(j0 zB`8Jpv1@P}hTgecvY;(s(wq(V=JJ?XYypR*^Ow9N5mbsqrD9z7rP+mpo12^YN(pn> zG~EXkMnZ}MX*wp|t%%CD+S?{GuEc=o*B)|hGtR#P?8*C!9MQNDsBR;&)igo#%=jn9 zmYAOTPt42nl@ViJ!7B>NC>7hqx|~)vvAvTOso!H5QFT(*{iAL^rDEEN2R{iB0VUt3 z>AtMF9>PaN&sZGE-3E^xM7AZMy3dy;?^_3ML$BbTu!RUUu5b9<+9}e13Z{R=OIVJ< z@aMh@D=RVLRTy4W##R3mkPXER-&ov_Ra%p;)eRH+>oqRbLewT3HASrY3&h!~IaR5O zMLR~YE571LuGeIH-Ry?D=V_Oa2-!vVqNsbg5#a% zH&@$>)FH{J+%Kw>M4L)tK|sTcyy;(8a+BRJU1&O$R@;}~=o$$9NM)qXdJ)-z zei*5nU#I4z4|8U*#EEu2(BPf%y)SxvgDH*Ge!b_V(f9j`g~nfd=-n4O_q}8pEyf4D zNKNtaD3H1sJsx_3`7jS~UzvZo@*P}%2WXpar?I*6QLj1N^mm5Q3$RH|=M3dDfPPk^ z40`CwZYKW+ec7hV8~Ku;I~9rdkerUSHfxyR&m5XZb=HK4Rb>5kOwl%zWu&?;`uMW| zG57u5w~P%`GD&K(de&-t^sZ`IVkwY~_`}JHM7(n~(fr(~lVLlimB8bBX=2V>G|Rwv z4wL^3k!A2f_mqi`;iQm!{MGmhx3&Oa99+UN%-op~5{(;q0ugc_mUL1AhB3iZ^(@2> zXeLxX0+H8lg?N{6>PQf%jkl@+f-vPDpLpHV^d98+bYw$aU|o>SDiglZV9c%^?iV00 zfO@z3=_w*}1IOqTi`2)z^}$8P=YHv4$9)ws-KosyJKr2Y6zXEAkXR5-HXBl?`~HYU zY$Wy1-1+=Xy+_d_uwmR>A)fRCor;Pl^$*dA!h|KCSDueEZ2_k!nmYtAeL*ICwcrI% z?d}YX)iKqd8TZuAM^M!&0N!Pnu^fdvA24yBvzawAInt(WY0n66;Va1IUXoOBA%=eD7*>`l7+ep8oQmb0Ac7#>L~S_itD z03?n(#>e7YcXS)o4q2s=Icrrz8t-~`l|s=yzM4h3|M)>6t<#biOJA+q$+q=K1HG9( zBK+`>VyHoRfhpglOujz(WIJomTKqk@z+NrRT%$LMP$!abIm+GyvHz>gZ~)xFz`Y}0 zu+=U*7lEyNmh5-&z~IMUTl=c+c0CVI>6-w*h47na5gg-vT0=Z{0yC^#$pV^K99dK& z%95`{`db-U=cTdnDHSXhbOxU88u&AB-j#_*bdRC%xFo{pX$rPO{ZOk=!PvRMp{Oqa z?V|Bv-k}tz!68F;Y4p6}<%mt$@5J`@p5)nUNy1~d^Gr`+sdC#38D}P(M1Ig6YkMps zHg0dX#MRQX*U^X-c(8Ct|I_k3LUk4Xi8V@`cakyf-Q3mna%-y2Z}qHvVc6?}g+%*luOi=TUF428?0Mcjip{p;zlO0+Jj2H4 zcBO@DBDQ|El+xJe6_0#d64G#HQ>-%0h)inQ)s3=gYStZ)SB(cT(B34i*Z5=$_b3nK zdW{JVwbs=4Aw&0}R(( z_K(4bdTAL@A4^#cHHb>m-+{Udt$jrd-e!P5NRkyVbl0oy`fgt~-C$n0+NW^V_pVqO z+ubV|%L9$mR8RSUi;COdP(L{ma&HIz7km*tdgJa}UZAmH57#kaMw0Au%LnjNS;OMn z9BX7QZs4D^9;|ljlI+`;)%_5aalYffotJZza|h2ckU*S`?1NvHY3*}gMF=BVS`7?) z+WyXL`04FleSwtRSClY-AxuW&N7p~7r&HIKwWkKY@U@$F;q$}>~*IFx= z+h2U?{j<(sOGX-_mBFq7YWpNZ`BZNHm(w0Me(DORP|3x#ShBo4!{DV+Lq?U7L2E6$ zoP2QE>wN9woc{U5XS9K{md_5yrl-z|#S8t>oYtGuExym_`)wF#?fRVCdK2{O1MqNw z`Xhzqm?Rr#vZr?SzQLtN#YYx>hywM91=b;Nq)Pf zWDoZTGe>QF{CF;Xg5%DiG<_Q`v|d%Z=u17ESy#gf$LcMN+}gz4FU{sR zEcM8%#HMq@-@}pR|6>e8zlCu&X8OIj7Y??1U$kR>#A&hG=n{l_r&dMG*f zK>gkBD(=lod8p|J>}Pt)d;PwRVUX}Ou%2d>y!&H4{eP@iOxZS0+P8}#tNLsA)7M+K zbM4QI+kDUA5Ww2v+8sjhGClB;_fU}M9l`(nfOq`eb?C9ki&4#Z-gj-~ll|rJfB*9L z_iZ1~IQ?fynmPHKUVZ%Y|9jE?HwB{pFaFm5*^6ccL@?(1obN%PH zj}Uu(Fmc6Y``l3T*)`?Z6oud??-CuG{;7U5Ur%F>^BvOYhrST^qnj75DhdCEs{*$_ z*D8P4>#hItPMN?H)QltKn&g8zW!x@sX z{wD@%eiHT7pqJp8@{`4$Pj{~6Lp@Fxp6QGc@*@t;fBJN=zgy2cSt(KUE7Rgie6-w) zO@jft2Q~QAf{a#*$q&tqGa$CMOx75gubCRZ*9;2xw_7`0_dgl$w*Orl zIk{Sl3QyzrZu4^bm{`s3odMM73Y(9hooW9w4x;8~aLH}^G zz8`LhlkeufYIDA~BMtJh7s3C7P?h+cHl7_qkTTIwQYy~MeZ(+UFYR?CbS57j{Vao7 z5hhI?MaqtUP;C3pD>RonZc+;Y<8vP{TyYnewKB!e2kkfa4pz?_ zl1J6}fo200k$P8=M7D@d5k(=BIaiHYY?)12i{3r-RZ;x4M9;U1`!w|yt-8F_V#3gbhtrkf4=Dej@7EQDY4Eub0NG31%tv%^YY~HP?iJGl;X>(xnr=1f~&jGFr6lHqi zh#CEtcXAY2vy6odQ1WI=z|`+pq8HCA&ZSe!AN{o3K$<`fm$xNfRr1Tc+G!La0PIgm zYGp`#C{fwu^+z7LFVm3B9_7e4HvL?vE-yoK=jxhM(pspY>E)mMy^;|P7a2=Yjw04O z=+L13{&Q|-QQNi^4X`J)5JRzSk8W)zz%VEk%1jn zMkSeyvrrMu!qEuz!T6q_88;YoK3_>b?W*#)-e1BHJNLvfEg>(+T?S;(nZ_gslKWY( zGGZpDl5>2oE&ecxwLM9Hx2-C9gp^ozV&y>I_}A38wK8o!UK^R*gmp_L;GEE8w@a|FUziR&JXjpankvLKiybGo?4|0AjWAXRj#+s}xo@iUB7kApafJvD-9aphpPgHQzo<(yaAUAZcA+{j> zg`G$>GEB)-oDPhT*B;yWQD*Ba0l>ArgYEFCV4`_XF`im%c22Wy#@bel#PmVrG733- z@)~+zD(O3T^XU}AMWe8z5!M!+>2w}^z%;`~=i?zKy-Kq_gg$25*N;0DlOS2{==M)z zow>65oVD?m^zUiFoc4}~n3tXT0CVsxpNy7C#$sU<_X%~KiKBt;!0pgKZH*l^g_7Rw z3B**prRTf^$YO%J-&j5WhV^8rQ$emK5F&$(NP2xr4w@|DS6{)Yr&in>JpS+j)BU{7 zXFB1gV0k(Zz$R;RS6vgrC@(}NdY2KwO}4zZ0d`BOJB~Y52S&F@w!5~`$KK_&+8btE z)u`@|)btJhx<8>A>cD+8CCA6%*Rl35tAWUH&M~>I8lO?6AO7>iIdw30`XvhdaSGmP z#m>>n5uN9d`hYoK6XPD?eKeXMZTn4%mHK+SyeMi+!uadA@2XE z?W>~V2%hzU1a}QA7Tn$4H7pPyxGlc8OO`-z3mzlphQWGQR2tVM3Y-SHo8 zA`I&Qz}h5#dJbj^eEx?ANH{#IiShuZW`C+F%w zU~hJc9|$<)G|y9{8MF6k=L(+n9R~5KI2F_yWM|Fq3IPeDnC&R@Xp(|Y)t$2eZ%+9{ zM)x5?vy}dgd|!Fx=Lc8|=E^y8*za##*B*JfHLKJd0{@9xa3Ku3O^ft!QOuevS4Tw!4e14#N!?!Ap!V>-;Ilq>)9h#%@)5b*lB8%DK6{Hx3hGgg*%CVtqbWezZW?&}L@4$mhe3!iBGi_?Ogk_apxq1O+11=ZGYsq#%)*dtx@-E2wj6TCG=#O)GLOl2T*1t}+8Djd;n#&xCv zP5PA!mNoav#c@CgjDH?D$ErfoM|?>Wf}WdIwgranxiemZDg5-KsaXJ`7HtWP+0D5V zlEcjt%fcMTEC|cgDbPix!`g^}v5#U>aiZQ;uifns!c;YCwbaYh)nIppBPk%gmrbSe z(;MXx{Dy@juY0c-7d&0Mij`#DHHHH}7?WLWh>x88S6>f{*%jfZioW#?MtFD>vCb95 zY^ZTBepoPxEfMFn=B!Jj*8xt1xsiY@!Hq#lVP6cQFXAlk(xK>&1!L}6re50R(J3Sd z9;5SM?oJ#Bt{rtmiAD5o6(TOcY?M0T@dsDE=Be~<>A*^s%J=(+hFe{(`kUt*#KbgMlzSf*zU$vG3`<}}v^V-QE9X8Y2q<~$R znOVk_5x-LifDr$Z+;)BuZ)xT;qIG7v3_Jy2LiO>l5hE9}_^a@sxIFneNL!`DI%{i3 z^`rkR^&jg$G5)81htFdxnHrs3F%a(Ij?RGUs8V|hY#t(0@qsIsB-muQkd!X3TfpcK zw)Ezi5k=x@`OS=e&PP}Q@Yk*t1tJgiR#Q&0IW`Bq0ArBh%ad%C{juANXU?4(+|GH} zY2bUs+CP7zay}RP|A}r=Bbi51CkL;6>I*p>2L0{i!&9tI-I6V)R0vG5$tWWiE0Wy(tTPbYwnuk&AMaDlK$HRKl=iFhtRx8d_C!(<_URL;}S(t zxC{xD-0f{WEHxeXhxS`mg|5%!?oDXAdWAP|<037H_b>?pn`Cb*s=4%hb4*r_pra80 zOvUYJq+Svp4;cJ@>WuVH@0p|EW&TYhmpgt#S^Es1W&1hDpJHJ!VxRJYXqpT!0P)J{ zd%;#QsLSa?RmAr$mu1(=D8omsr3j4Ry-8cCs&~T1sVstfIo)tD#oLVWA}d{Gv1BN^ ze$lJ%q+hZ@OebE3E)qjz$>lOa*;5uidqg}#7ID)c#AW=~>|T|1?WLw-L)OtOWmy-` zMl+sZu%j{37*0v-rp}ZYTU|7Cebd+;7{Dfm;S_`$7D&(fi2A5u`wQ301^Z}hwt(&S z1`g(0d#_u!k+|YOlwc~?@?A32qtdUWj!nEijvL45fLr$+k;`t|qR5^^*c$v(s7D>z z?5zu{SS@CRH57!McDPgQB3vmL`LiQ5S@3yP7n9gZ^^jGz>&;a)Mar|vRt1~v#B+r# zTdW2VBEkbRSA4+YP7(0up`8Y_sM95DPI{Q;6lk5`x}|JAWG^#w!xj$!81P+N$?y)n zN*$}Y*o*`%VMdNr{u8SxTw)CKA>>FqV(oHwq8Bg)HtPnjA&GS+fB-RH4b7$s3gi71Coh zUI6Y>Vd~S*0)+Bn^hJ6y;#h#g&l6;r;N-imy7e93wrfg#^Nbr~>wu9Qk?EGY)J(ZL zEHGOCZU;mquO5t=r6wE0I%Za(1Pi(ri~M5ctBNb`rjpnQ6JBIm^QQ};dhw9{y6IM1 zlK3sV3M1Qol-ywA)MREiQ0f@A)efH`YqVh}$Hg1f@c*ufWz$bcNE!G(P&`lvG9oKQ zUc|-Yao*N!#67}jSSxpuF)r1e{n_S9%7eZ*KYRaq8e6LIh>;i-SNmK^o9nVB$D$$n zeXuKQ>KE#S!^n#!tNM=^)HGGX#bg9G9pfq22d<0?i!0=opD9oE!nR)*h8bJ>#Lu!k zpbcc^N1uN?sG_A-2@!tBx5MxOhiNupga68XeBeGV=3?5i;Tq?imZu+-IWF@6!?~`9 zMFs>L9}1&%7#9K0t)XUV;&0ELel?mGSjcJb58G~3j^ z9$yHz&o0Z;FrAK!9FE<8LtBVgIDjV_EuO7!eFLHwxo=WyU~*AQFMG{wicxmz zd2`(tvR*qF4(ZggRm3|>Vm&9~7?#%69p#JXFfTChk3B5X=HFo+32d>t{Eh=Qs-tC6 z<8)?uyQK6J4C9{EeWm^&O1OsFa#4aycBVe;(~3q)zoTH8GASK96VXi~E!i@{H&Jz}wj#!?4J90^>1{D6yGxgB1E|($0?{yOP|K0XMvjbgqb)}o`>nHZ zH)8t{Eozk!>66}v>JiTaxx;8WVC5Pv$hEZ3;C!vKw24TU3;Fxv5Q{LUzYp`~=FSHY zVKNPa3tp++lB+sP{CvSnF%fQw*)PZyB=NVeN$r>%C#ZvZt^kFsoviY@%U-S>X;V(C zy*f%#x#GYdG_oB5K50YfF7xEiK|+SJLZ%-j8vMeFBE4kcJrjFMW5*n!J*J4)y$3cv z@ine<-#Vr54YsG;R@~8HL<+|lI{Wm(NvKk&T=(RDB(E|jiO|fwC=(=P@L~frqs@ju zA$5|p9k)L4wsxJ};(bETbHArxH3F^=c)biq{5<0JK6;V-$;L$^U!x?( z?|wi||8g_;qD4}k3^gEd_H0-Q^eyC}Cn0*GxeulACS^w#P<}S&dUvQU=B2T;9TSZ@ ztt3D8JsM+pfujRuENPoigu&%BGBlYPseLN|IOD zPe1$R*coy5l@Ag8?in@B{x|XC37?JfPv0%0;x@(vy;S=7*ue#$o0#am{2|Aek~EWB zVSo=yj0{~LX4*MS{B8cV^gCcNs5RhgBhpDx1^;mN686!mi&bbn()d zUoEAIV5C*~4}gA?5$KOenqom6Y(7G%1z>uJPFDzZt< z%)eJgl-#;P^tw$hPrS;NO@#my=4s84LwC@3z{n?Kvne7>2Kh6tdiac|y59)NxgB8N zfpgm_=jlKO%#CpyjhUHeg~rq3$-oy+{))uhHBTxJKCGiqpP-v#FicbqfNCDw(bm;WWub$(?;d)@%3_)8ia`lA1!*OgikaI zUj-BwqS2g%W9O;^^M=cni(wC$$be)dbWmRI`sN0C^ksD=hdymDAFDY~ zs9s}pM@Hl_Z*u&WZffYPzx3eF2Wpx2~L(;xFFup$4NGeth zZmzySmHw^Hww0IpV0?ETw-Ewfe~mcO)cRjr0RE@3KY7*g$@V79ECm6S*|a~^zXN49 z;Jzc9h4-z-d*Xvr9N`J71Z@@VCQeU!x&A>rmpCH~e&4Ge&N1|pZE_U#d_~Yt@b#n$ za2q~q6p4QXU(}E;&0{_^#$)i|j6N4QG2x``PEEoN!fEFGO}nwBq9_ljgwVw2p)}LY z(HS^KdNHudWpRbV9h`MJvY>#R zTq+!;x)cv!gWT7*IJ-)F{5PqeY$NhTDegF$9W?K1<$hj-wLX^xsRu2;GEHjYW>vSy zvivaGxGU6tpjZ#*UOg#^O)NeAdOIL%c|<({xfOkIAZlch$(a}-kiH#}c#W|(G^wy` zlW|ZgZH$WxvW&s1eSZZDE@tO2iIXLsFDz^slnd1Cr;2v9+4GnduQ|Wsw-Otg-=R}p zTU3xiT>)|K%@w>iyLtBPEiMhHdr-PG^2nvD4AUz@XP&?|9C+vVe6ns{lRKPRn2)Y^ z9dqw;H7_UD?|F+Vz~36BH0q4-M=hbfDkg*A6yK?@QX_Vww2gymfqvwCdnx~~9ooej zAzk@|A3=4Ur?$Ggs&FKN!e+pS^{gCcr?|H4@5#~l{bddkF zAll8ZhTL9|(Tk=U#ARz3Epw&j%z96zSKxz}lomwhOPWOBOuGvglxnVStTkuBoLHF^ z+a}8wgcFg*YwaLL%Vb*qu2gwK$ItuTapE7lm9nSg_u%_qM?w?E7O7Sc>mgMvZ8;f! z@WkT?BeVVsA`RLYPtftG&4#VOFGss@7v}bBm<(g`Ymr5k*96@|P_*24xW*NAQqvS@ zcdvH+a`$&P-SDJ-^UA0&z0X@V9Wqw4-u1@z58n-d>j>G=|B!6rCoPfepX(1^rJO;a z>qOgLJ!I&wz%!hTl`c{m4`@Ra>RM51XL@RMBe+jDunEj<(&w0xAJ)>2o1Yowxl7Ix zBiK31W!7DpP8otd5kz09(eU0k{ZaiZAykDz9_OICWnHKn`S+maGWI5xH*acDn0xz` zB{@PG)t#r7xZ^LIp;P{it{wV2rhZ1MV<(-f+Wg$DE!(}|$sGd_3+7!xXR0M-iiykA zW}L6^u_BGTU$vl!OJ@JJFg}nrk(j63t>s)EddpLhUTrVWd_|#^Xn|e##<#R2Dmh5| zrTgim@>-Lc+y-g$>waJsOzc`aL@>F`N0Jm7B{hW?nGE5Jogk^)gFuHIyOX+c-n(=j zg#3u7R@J;=ON1t#)m>JA(l#?_pz{1U^>i(|@%_71n8WP88Uu;EOP=o)G-m-8HlFMr z1dvn_`ywSPcDqjJAS|Z#DX304kVgew2%J!KW-~scvX(uM+9P_w+5QUM{2N%T; zi&rF{y!fU}H=xXYziv~WvHjxvSn^3j*BtjWr|rH(Vp1~6C#WvgB>xVBanlLk=MIbQ zc2Jk^hu)p|Z7SJX-Q`L8m&A61Y%fUYUYdOnu-mb(L#elogZW6s1qAvyOpE<3MCh&J zC1j(#BU0=(LFeQ6ZHW=XAK@+gyd(@Uro=S3s*eYpRA0Eekt$03ZL$VdF5^s@+76>? znpW(c6r;%x_2Ju{)!LR&(Y5UYrJ4po;ti3m`^T1LN# zV%{P&+@B)d{8q~@$T!yvoGgO1LLF;tD{`E;tQ>Dq{l)DYHq%nHrf2Ey>pzX`W21H8 z0ra%Xd$v3IXok%&JhsyGN&imMrk%!rs+kse1v%Jt&KhDkVIcV65Y{R0swst`&t!BO z!ta`K#*o?Agj{xZ84s-$z|!M>VAIl?oqqQ%Y!(LA!J+w+t3~MPe5@xda}{MUriOj<|0@&qbw1hruK;n<$A9fj#t{8he7;(N_|_5F4gydv9V!BEj9t_Bt}MrVt$NM^r7s z5x*s%gj-?rWL1Ghm#N*o#nJBS=+!5AQEckDtJ1^rgdTYM?d73?_Kv2ZM&DUD9`syI z)yY$O4Z$BhbF2$BVAVI2!-p&@g`l3EMwDDhM{9vR6n|&F9N1}OKPL(~S~cy4EG*o% z;KN%_4gqRhE3moT(L^K?C>AW6VSYZ3Jm>H_7V@-IriX7r$;P)TM_pD9?y}5D^-}B{ zlX`ph{_fw(*-!{aB+ZCqpHkT0=9ts}_`?)BrO!_G_laLQvo0<%gqj`e?!MRKuMx}- z1B6~SttPw6aByD;rSFfyRsuZ`XPiTiN970Pb+UG6>CNh1;N9x(O~`E&T+j*c zejg|=c$R*bBE>76IL1_H6rogv$>=@6EoeDBY>;a7*)iaWpy(`OlI6AQiuYIx29Mr2 z{bMD%dau6R^U*XUcd{Xw`D9Z%C{s2i!D~DY`MaojlAM;DUN@7(jZ)lH95J1x!qm+U zQ&gG+9bmd0u#79f)u<*HJlbe1*~xICx(SbI@z$0U#(mI0QHsU7|LTy%ojDRRy{!3v zx5(N;T;ybpB>&IT|Gc#6!+<;u`TE~&*n@coq}hlJ|8E!nim50h^zHlaHpRc&iI6)F z4$l9r%XIn)rSimKZt1M$_dhC&hKjawt)g}K Fe*smr+fx7l diff --git a/src/Unmanned_Aerial_car_Perception/img_1.png b/src/Unmanned_Aerial_car_Perception/img_1.png deleted file mode 100644 index bfc6a3ce9386ff6c527e085d6820d8bb9f01966c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184764 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 z 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 Fe*smr+fx7l From c0feec006729a597bf57cf855c1d4e2a5bb582ba Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sat, 20 Dec 2025 20:49:00 +0800 Subject: [PATCH 13/26] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=87=AA=E7=94=B1?= =?UTF-8?q?=E8=A7=86=E8=A7=92=E7=A7=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md index 9e0624e735..6717210f5f 100644 --- a/src/Unmanned_Aerial_car_Perception/README.md +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -26,7 +26,7 @@ LiDAR凭借不受光照影响、三维测距精度高的特性,成为高阶自 ### 1.3 本文主要研究内容与创新点 -本文围绕无人车多传感器融合感知技术展开研究,核心内容与创新点如下: +本文围绕无人车多传感器融合感知技术展开研究,核心内容与创新点如下 * 1.提出一种“视觉+LiDAR+IMU+GPS”的多模态感知框架,通过多传感器互补优势提升复杂场景下的感知鲁棒性,同时采用低成本传感器组合(16线LiDAR+普通工业相机)降低系统部署成本; * 2.设计改进EKF融合算法,引入车道线偏移、障碍物距离等视觉/LiDAR特征作为观测值,修正IMU累积误差与GPS定位偏差,提升状态估计精度; * 3.基于Jetson Xavier嵌入式平台搭建实时感知系统,通过模型轻量化(YOLOv8n量化)、硬件加速(TensorRT)与并行计算优化,实现感知端到端延迟≤30ms; From 6fcbd70324f7b8211d7b2cfc6807e72da3d53705 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sun, 21 Dec 2025 14:05:28 +0800 Subject: [PATCH 14/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81Carla?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=94=9F=E6=88=90=E8=BD=A6=E8=BE=86=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=E8=A7=86=E8=A7=92=E8=B7=9F=E9=9A=8F=E8=BD=A6?= =?UTF-8?q?=E8=BE=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 106 ++++++++++++--------- 1 file changed, 61 insertions(+), 45 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 2a6d171694..8deae4091e 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -2,87 +2,103 @@ import time def main(): - # 初始化变量,用于后续资源清理 vehicle = None camera_sensor = None + spectator = None # 控制模拟器视角,确保能看到车辆 try: - # 1. 连接Carla模拟器,支持重新加载地图(可选) + # 1. 连接Carla模拟器(延长超时,适配低配电脑) client = carla.Client("localhost", 2000) - client.set_timeout(10.0) + client.set_timeout(15.0) world = client.get_world() + spectator = world.get_spectator() # 获取视角控制器 print("✅ 成功连接Carla模拟器!") print("📌 当前仿真地图:", world.get_map().name) - # 可选:加载指定地图(比如Town01,按需切换) - # world = client.load_world("Town01") - # print("🔄 已切换地图为:Town01") - - # 2. 获取车辆蓝图,随机选择车辆颜色 + # 2. 获取车辆蓝图(亮黄色车身,更易识别) vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") if vehicle_bp.has_attribute('color'): - vehicle_bp.set_attribute('color', '255,0,0') # 设置红色车身 - print("🎨 已设置车辆颜色为红色") + vehicle_bp.set_attribute('color', '255,255,0') # 亮黄色(RGB) + print("🎨 已设置车辆颜色为亮黄色(易识别)") - # 3. 选择合法生成点生成车辆 + # 3. 选择合法生成点(优先选地图中心位置) spawn_points = world.get_map().get_spawn_points() if spawn_points: - vehicle = world.spawn_actor(vehicle_bp, spawn_points[0]) + spawn_point = spawn_points[0] # 可替换为spawn_points[10]等避免边缘位置 + # 生成车辆(增加重试,避免偶发碰撞失败) + max_retry = 3 + for i in range(max_retry): + try: + vehicle = world.spawn_actor(vehicle_bp, spawn_point) + break + except: + if i == max_retry - 1: + raise Exception("车辆生成失败:生成点有碰撞") + time.sleep(0.5) + print(f"🚗 成功生成特斯拉车辆,ID:{vehicle.id}") - # 4. 添加RGB摄像头传感器(绑定到车辆) + # 关键:将模拟器视角瞬移到车辆上方(确保能看到车) + spectator_transform = carla.Transform( + spawn_point.location + carla.Location(z=5), # 车辆上方5米 + carla.Rotation(pitch=-15, yaw=spawn_point.rotation.yaw) # 俯视视角 + ) + spectator.set_transform(spectator_transform) + print("👀 模拟器视角已切换到车辆位置!") + + # 4. 简化摄像头(仅保留基础功能,不影响核心) camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') - # 设置摄像头参数 camera_bp.set_attribute('image_size_x', '800') camera_bp.set_attribute('image_size_y', '600') - camera_bp.set_attribute('fov', '90') - # 摄像头安装位置(车辆前上方) camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - # 定义摄像头回调函数(保存图片/打印信息) - def camera_callback(image): - # 保存摄像头画面到本地(可选,取消注释即可) - # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') - print(f"📸 摄像头帧号:{image.frame_number} | 时间戳:{image.timestamp}") - # 绑定回调函数 - camera_sensor.listen(camera_callback) - print("📹 已挂载RGB摄像头,开始采集画面!") + camera_sensor.listen(lambda img: print(f"📸 摄像头正常采集(帧号:{img.frame_number})")) + print("📹 摄像头已挂载,车辆开始行驶...") + + # 5. 车辆持续运行(简化控制逻辑,延长行驶时间) + print("\n🚙 车辆开始持续行驶(10秒)...") + # 持续直行(油门0.7,更明显的行驶效果) + for _ in range(10): + vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) + # 视角跟随车辆移动 + vehicle_loc = vehicle.get_location() + spectator.set_transform(carla.Transform( + vehicle_loc + carla.Location(z=5), + carla.Rotation(pitch=-15, yaw=vehicle.get_transform().rotation.yaw) + )) + print(f"🔄 车辆当前位置:X={vehicle_loc.x:.2f}, Y={vehicle_loc.y:.2f}") + time.sleep(1) - # 5. 车辆多阶段控制(前进→右转→减速) - print("\n🚙 开始车辆控制演示...") - # 阶段1:直行3秒 - vehicle.apply_control(carla.VehicleControl(throttle=0.6, steer=0.0, brake=0.0)) - time.sleep(3) - # 阶段2:右转2秒 - vehicle.apply_control(carla.VehicleControl(throttle=0.4, steer=0.5, brake=0.0)) + # 停车 + vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) time.sleep(2) - # 阶段3:减速停车 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0)) - time.sleep(1) print("🛑 车辆已停车") - # 6. 打印车辆最终状态 - vehicle_location = vehicle.get_location() - vehicle_velocity = vehicle.get_velocity() - print(f"\n📊 车辆最终状态:") - print(f" 位置:X={vehicle_location.x:.2f}, Y={vehicle_location.y:.2f}, Z={vehicle_location.z:.2f}") - print(f" 速度:X={vehicle_velocity.x:.2f}, Y={vehicle_velocity.y:.2f}, Z={vehicle_velocity.z:.2f}") + # 6. 打印最终状态 + final_loc = vehicle.get_location() + final_vel = vehicle.get_velocity() + print(f"\n📊 车辆行驶完成:") + print(f" 最终位置:X={final_loc.x:.2f}, Y={final_loc.y:.2f}") + print(f" 最终速度:{((final_vel.x**2 + final_vel.y**2)**0.5):.2f} m/s") else: print("⚠️ 未找到合法的车辆生成点") except Exception as e: - print(f"❌ 调用失败:{e}") + print(f"❌ 运行失败:{e}") + print("\n🔍 排查建议:") + print("1. 确认Carla模拟器是0.9.11版本") + print("2. 模拟器窗口不要最小化") + print("3. 尝试更换生成点:spawn_points[10]") - # 7. 资源清理(关键:避免模拟器残留车辆/传感器) + # 7. 资源清理(延迟销毁,确保能看到车辆直到程序结束) finally: + time.sleep(3) # 程序结束前车辆多显示3秒 if camera_sensor: camera_sensor.stop() camera_sensor.destroy() - print("🗑️ 摄像头传感器已销毁") if vehicle: vehicle.destroy() - print("🗑️ 车辆已销毁") - print("✅ 所有资源清理完成,程序正常退出") + print("\n✅ 车辆已销毁,程序结束") if __name__ == "__main__": main() \ No newline at end of file From 67eec05d7b1e69ec6ae022b8ddd7d9ca36437f3f Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sun, 21 Dec 2025 14:17:09 +0800 Subject: [PATCH 15/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81Carla?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=94=9F=E6=88=90=E8=BD=A6=E8=BE=86=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=E8=A7=86=E8=A7=92=E8=B7=9F=E9=9A=8F=E8=BD=A6?= =?UTF-8?q?=E8=BE=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 87 ++++++++++++---------- 1 file changed, 49 insertions(+), 38 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 8deae4091e..228aa93b7b 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -1,7 +1,9 @@ import carla import time + def main(): + # 初始化变量,用于后续资源清理 vehicle = None camera_sensor = None spectator = None # 控制模拟器视角,确保能看到车辆 @@ -14,17 +16,21 @@ def main(): print("✅ 成功连接Carla模拟器!") print("📌 当前仿真地图:", world.get_map().name) - # 2. 获取车辆蓝图(亮黄色车身,更易识别) + # 可选:加载指定地图(比如Town01,按需切换) + # world = client.load_world("Town01") + # print("🔄 已切换地图为:Town01") + + # 2. 获取车辆蓝图(保留红色车身,增加可见性) vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") if vehicle_bp.has_attribute('color'): - vehicle_bp.set_attribute('color', '255,255,0') # 亮黄色(RGB) - print("🎨 已设置车辆颜色为亮黄色(易识别)") + vehicle_bp.set_attribute('color', '255,0,0') # 红色车身 + print("🎨 已设置车辆颜色为红色") - # 3. 选择合法生成点(优先选地图中心位置) + # 3. 选择合法生成点生成车辆(增加重试,避免碰撞失败) spawn_points = world.get_map().get_spawn_points() if spawn_points: - spawn_point = spawn_points[0] # 可替换为spawn_points[10]等避免边缘位置 - # 生成车辆(增加重试,避免偶发碰撞失败) + spawn_point = spawn_points[0] # 可替换为spawn_points[10]避免边缘位置 + # 生成车辆(重试3次,解决偶发碰撞问题) max_retry = 3 for i in range(max_retry): try: @@ -32,7 +38,7 @@ def main(): break except: if i == max_retry - 1: - raise Exception("车辆生成失败:生成点有碰撞") + raise Exception("车辆生成失败:生成点有碰撞,请更换spawn_points索引") time.sleep(0.5) print(f"🚗 成功生成特斯拉车辆,ID:{vehicle.id}") @@ -45,50 +51,52 @@ def main(): spectator.set_transform(spectator_transform) print("👀 模拟器视角已切换到车辆位置!") - # 4. 简化摄像头(仅保留基础功能,不影响核心) + # 4. 添加RGB摄像头传感器(保留原回调逻辑) camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') camera_bp.set_attribute('image_size_x', '800') camera_bp.set_attribute('image_size_y', '600') + camera_bp.set_attribute('fov', '90') camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - camera_sensor.listen(lambda img: print(f"📸 摄像头正常采集(帧号:{img.frame_number})")) - print("📹 摄像头已挂载,车辆开始行驶...") - - # 5. 车辆持续运行(简化控制逻辑,延长行驶时间) - print("\n🚙 车辆开始持续行驶(10秒)...") - # 持续直行(油门0.7,更明显的行驶效果) - for _ in range(10): - vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) - # 视角跟随车辆移动 - vehicle_loc = vehicle.get_location() - spectator.set_transform(carla.Transform( - vehicle_loc + carla.Location(z=5), - carla.Rotation(pitch=-15, yaw=vehicle.get_transform().rotation.yaw) - )) - print(f"🔄 车辆当前位置:X={vehicle_loc.x:.2f}, Y={vehicle_loc.y:.2f}") - time.sleep(1) - - # 停车 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) + + # 定义摄像头回调函数(保留原逻辑,可取消注释保存图片) + def camera_callback(image): + # 保存摄像头画面到本地(可选,取消注释即可) + # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') + print(f"📸 摄像头帧号:{image.frame_number} | 时间戳:{image.timestamp}") + + camera_sensor.listen(camera_callback) + print("📹 已挂载RGB摄像头,开始采集画面!") + + # 5. 车辆多阶段控制(保留原逻辑,确保行驶可见) + print("\n🚙 开始车辆控制演示...") + # 阶段1:直行3秒(油门加大到0.7,行驶更明显) + vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) + time.sleep(3) + # 阶段2:右转2秒 + vehicle.apply_control(carla.VehicleControl(throttle=0.4, steer=0.5, brake=0.0)) time.sleep(2) + # 阶段3:减速停车 + vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0)) + time.sleep(1) print("🛑 车辆已停车") - # 6. 打印最终状态 - final_loc = vehicle.get_location() - final_vel = vehicle.get_velocity() - print(f"\n📊 车辆行驶完成:") - print(f" 最终位置:X={final_loc.x:.2f}, Y={final_loc.y:.2f}") - print(f" 最终速度:{((final_vel.x**2 + final_vel.y**2)**0.5):.2f} m/s") + # 6. 打印车辆最终状态(保留原格式) + vehicle_location = vehicle.get_location() + vehicle_velocity = vehicle.get_velocity() + print(f"\n📊 车辆最终状态:") + print(f" 位置:X={vehicle_location.x:.2f}, Y={vehicle_location.y:.2f}, Z={vehicle_location.z:.2f}") + print(f" 速度:X={vehicle_velocity.x:.2f}, Y={vehicle_velocity.y:.2f}, Z={vehicle_velocity.z:.2f}") else: print("⚠️ 未找到合法的车辆生成点") except Exception as e: - print(f"❌ 运行失败:{e}") + print(f"❌ 调用失败:{e}") print("\n🔍 排查建议:") - print("1. 确认Carla模拟器是0.9.11版本") - print("2. 模拟器窗口不要最小化") - print("3. 尝试更换生成点:spawn_points[10]") + print("1. 确认Carla模拟器是0.9.11版本,与代码适配") + print("2. 模拟器窗口不要最小化,保持前台显示") + print("3. 尝试更换生成点索引:将spawn_points[0]改为spawn_points[10]/spawn_points[20]") # 7. 资源清理(延迟销毁,确保能看到车辆直到程序结束) finally: @@ -96,9 +104,12 @@ def main(): if camera_sensor: camera_sensor.stop() camera_sensor.destroy() + print("🗑️ 摄像头传感器已销毁") if vehicle: vehicle.destroy() - print("\n✅ 车辆已销毁,程序结束") + print("🗑️ 车辆已销毁") + print("✅ 所有资源清理完成,程序正常退出") + if __name__ == "__main__": main() \ No newline at end of file From 437760d8498ac3da5fae29070b95f96c4c9bc9da Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sun, 21 Dec 2025 14:22:39 +0800 Subject: [PATCH 16/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81Carla?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=94=9F=E6=88=90=E8=BD=A6=E8=BE=86=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=E8=A7=86=E8=A7=92=E8=B7=9F=E9=9A=8F=E8=BD=A6?= =?UTF-8?q?=E8=BE=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 228aa93b7b..d0d0142763 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -20,7 +20,7 @@ def main(): # world = client.load_world("Town01") # print("🔄 已切换地图为:Town01") - # 2. 获取车辆蓝图(保留红色车身,增加可见性) + # 2. 获取车辆蓝图(保留红色车身,易识别) vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") if vehicle_bp.has_attribute('color'): vehicle_bp.set_attribute('color', '255,0,0') # 红色车身 @@ -38,7 +38,7 @@ def main(): break except: if i == max_retry - 1: - raise Exception("车辆生成失败:生成点有碰撞,请更换spawn_points索引") + raise Exception("车辆生成失败:生成点有碰撞,请更换spawn_points索引(如spawn_points[10])") time.sleep(0.5) print(f"🚗 成功生成特斯拉车辆,ID:{vehicle.id}") @@ -51,7 +51,7 @@ def main(): spectator.set_transform(spectator_transform) print("👀 模拟器视角已切换到车辆位置!") - # 4. 添加RGB摄像头传感器(保留原回调逻辑) + # 4. 添加RGB摄像头传感器(保留原始回调逻辑) camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') camera_bp.set_attribute('image_size_x', '800') camera_bp.set_attribute('image_size_y', '600') @@ -59,7 +59,7 @@ def main(): camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - # 定义摄像头回调函数(保留原逻辑,可取消注释保存图片) + # 定义摄像头回调函数(保留原始逻辑,可取消注释保存图片) def camera_callback(image): # 保存摄像头画面到本地(可选,取消注释即可) # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') @@ -68,7 +68,7 @@ def camera_callback(image): camera_sensor.listen(camera_callback) print("📹 已挂载RGB摄像头,开始采集画面!") - # 5. 车辆多阶段控制(保留原逻辑,确保行驶可见) + # 5. 车辆多阶段控制(保留原始逻辑,行驶更明显) print("\n🚙 开始车辆控制演示...") # 阶段1:直行3秒(油门加大到0.7,行驶更明显) vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) @@ -81,7 +81,7 @@ def camera_callback(image): time.sleep(1) print("🛑 车辆已停车") - # 6. 打印车辆最终状态(保留原格式) + # 6. 打印车辆最终状态(保留原始格式) vehicle_location = vehicle.get_location() vehicle_velocity = vehicle.get_velocity() print(f"\n📊 车辆最终状态:") From cbb7a22a4508833052a38a61709c4aaca68917bb Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sun, 21 Dec 2025 14:27:01 +0800 Subject: [PATCH 17/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BB=A3=E7=A0=81Carla?= =?UTF-8?q?=E6=88=90=E5=8A=9F=E7=94=9F=E6=88=90=E8=BD=A6=E8=BE=86=EF=BC=8C?= =?UTF-8?q?=E5=B9=B6=E4=B8=94=E8=A7=86=E8=A7=92=E8=B7=9F=E9=9A=8F=E8=BD=A6?= =?UTF-8?q?=E8=BE=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index d0d0142763..ebe2bb37a4 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -20,7 +20,7 @@ def main(): # world = client.load_world("Town01") # print("🔄 已切换地图为:Town01") - # 2. 获取车辆蓝图(保留红色车身,易识别) + # 2. 获取车辆蓝图,设置红色车身 vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") if vehicle_bp.has_attribute('color'): vehicle_bp.set_attribute('color', '255,0,0') # 红色车身 @@ -51,26 +51,29 @@ def main(): spectator.set_transform(spectator_transform) print("👀 模拟器视角已切换到车辆位置!") - # 4. 添加RGB摄像头传感器(保留原始回调逻辑) + # 4. 添加RGB摄像头传感器(绑定到车辆) camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') + # 设置摄像头参数 camera_bp.set_attribute('image_size_x', '800') camera_bp.set_attribute('image_size_y', '600') camera_bp.set_attribute('fov', '90') + # 摄像头安装位置(车辆前上方) camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - # 定义摄像头回调函数(保留原始逻辑,可取消注释保存图片) + # 定义摄像头回调函数(保存图片/打印信息) def camera_callback(image): # 保存摄像头画面到本地(可选,取消注释即可) # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') print(f"📸 摄像头帧号:{image.frame_number} | 时间戳:{image.timestamp}") + # 绑定回调函数 camera_sensor.listen(camera_callback) print("📹 已挂载RGB摄像头,开始采集画面!") - # 5. 车辆多阶段控制(保留原始逻辑,行驶更明显) + # 5. 车辆多阶段控制(前进→右转→减速) print("\n🚙 开始车辆控制演示...") - # 阶段1:直行3秒(油门加大到0.7,行驶更明显) + # 阶段1:直行3秒(油门0.7,行驶更明显) vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) time.sleep(3) # 阶段2:右转2秒 @@ -81,7 +84,7 @@ def camera_callback(image): time.sleep(1) print("🛑 车辆已停车") - # 6. 打印车辆最终状态(保留原始格式) + # 6. 打印车辆最终状态 vehicle_location = vehicle.get_location() vehicle_velocity = vehicle.get_velocity() print(f"\n📊 车辆最终状态:") From bbc8b125fa2ce4f1865580def63169b5dee0fa70 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sun, 21 Dec 2025 20:28:17 +0800 Subject: [PATCH 18/26] =?UTF-8?q?=E8=B0=83=E7=94=A8=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=E4=BD=BF=E5=B0=8F=E8=BD=A6=E8=83=BD=E5=A4=9F=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E7=BA=A2=E7=BB=BF=E7=81=AF=E5=B9=B6=E5=81=9A=E5=87=BA=E5=8F=8D?= =?UTF-8?q?=E5=BA=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 62 +++++++++++----------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index ebe2bb37a4..41c7612e1f 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -1,11 +1,11 @@ import carla import time - def main(): # 初始化变量,用于后续资源清理 vehicle = None camera_sensor = None + collision_sensor = None spectator = None # 控制模拟器视角,确保能看到车辆 try: # 1. 连接Carla模拟器(延长超时,适配低配电脑) @@ -16,10 +16,6 @@ def main(): print("✅ 成功连接Carla模拟器!") print("📌 当前仿真地图:", world.get_map().name) - # 可选:加载指定地图(比如Town01,按需切换) - # world = client.load_world("Town01") - # print("🔄 已切换地图为:Town01") - # 2. 获取车辆蓝图,设置红色车身 vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") if vehicle_bp.has_attribute('color'): @@ -29,7 +25,7 @@ def main(): # 3. 选择合法生成点生成车辆(增加重试,避免碰撞失败) spawn_points = world.get_map().get_spawn_points() if spawn_points: - spawn_point = spawn_points[0] # 可替换为spawn_points[10]避免边缘位置 + spawn_point = spawn_points[10] if len(spawn_points) > 10 else spawn_points[0] # 生成车辆(重试3次,解决偶发碰撞问题) max_retry = 3 for i in range(max_retry): @@ -53,38 +49,40 @@ def main(): # 4. 添加RGB摄像头传感器(绑定到车辆) camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') - # 设置摄像头参数 camera_bp.set_attribute('image_size_x', '800') camera_bp.set_attribute('image_size_y', '600') camera_bp.set_attribute('fov', '90') - # 摄像头安装位置(车辆前上方) camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - # 定义摄像头回调函数(保存图片/打印信息) + # 摄像头回调函数 def camera_callback(image): - # 保存摄像头画面到本地(可选,取消注释即可) - # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') print(f"📸 摄像头帧号:{image.frame_number} | 时间戳:{image.timestamp}") - - # 绑定回调函数 camera_sensor.listen(camera_callback) print("📹 已挂载RGB摄像头,开始采集画面!") - # 5. 车辆多阶段控制(前进→右转→减速) - print("\n🚙 开始车辆控制演示...") - # 阶段1:直行3秒(油门0.7,行驶更明显) - vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) + # 5. 添加碰撞传感器(碰撞后紧急停车) + collision_bp = world.get_blueprint_library().find('sensor.other.collision') + collision_sensor = world.spawn_actor(collision_bp, carla.Transform(), attach_to=vehicle) + def collision_callback(event): + print("💥 检测到碰撞(建筑物/障碍物),紧急停车!") + vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) + collision_sensor.listen(collision_callback) + print("🛡️ 已挂载碰撞传感器,开启碰撞保护!") + + # 6. 车辆行驶逻辑(手动规避,简化版) + print("\n🚙 开始行驶(靠近建筑物会触发碰撞停车)...") + # 阶段1:直行5秒 + vehicle.apply_control(carla.VehicleControl(throttle=0.6, steer=0.0, brake=0.0)) + time.sleep(5) + # 阶段2:轻微转向,避开可能的建筑物 + vehicle.apply_control(carla.VehicleControl(throttle=0.4, steer=-0.5, brake=0.0)) time.sleep(3) - # 阶段2:右转2秒 - vehicle.apply_control(carla.VehicleControl(throttle=0.4, steer=0.5, brake=0.0)) - time.sleep(2) - # 阶段3:减速停车 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0)) - time.sleep(1) - print("🛑 车辆已停车") + # 阶段3:停车 + vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) + print("🛑 行驶结束,已停车!") - # 6. 打印车辆最终状态 + # 7. 打印最终状态 vehicle_location = vehicle.get_location() vehicle_velocity = vehicle.get_velocity() print(f"\n📊 车辆最终状态:") @@ -97,22 +95,24 @@ def camera_callback(image): except Exception as e: print(f"❌ 调用失败:{e}") print("\n🔍 排查建议:") - print("1. 确认Carla模拟器是0.9.11版本,与代码适配") - print("2. 模拟器窗口不要最小化,保持前台显示") - print("3. 尝试更换生成点索引:将spawn_points[0]改为spawn_points[10]/spawn_points[20]") + print("1. 确认Carla模拟器是0.9.11版本") + print("2. 更换生成点索引(如spawn_points[20])") - # 7. 资源清理(延迟销毁,确保能看到车辆直到程序结束) + # 资源清理 finally: - time.sleep(3) # 程序结束前车辆多显示3秒 + time.sleep(3) if camera_sensor: camera_sensor.stop() camera_sensor.destroy() print("🗑️ 摄像头传感器已销毁") + if collision_sensor: + collision_sensor.stop() + collision_sensor.destroy() + print("🗑️ 碰撞传感器已销毁") if vehicle: vehicle.destroy() print("🗑️ 车辆已销毁") print("✅ 所有资源清理完成,程序正常退出") - if __name__ == "__main__": main() \ No newline at end of file From e056d17a440be3a79bf7c4146c50a900cae00a5f Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Mon, 22 Dec 2025 09:17:52 +0800 Subject: [PATCH 19/26] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=B0=8F=E8=BD=A6=E8=83=BD=E5=A4=9F=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=89=8D=E6=96=B9=E9=9A=9C=E7=A2=8D=E7=89=A9=E5=B9=B6?= =?UTF-8?q?=E7=BB=95=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 367 +++++++++++---------- 1 file changed, 198 insertions(+), 169 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 753d623759..998a07ca0c 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -4,207 +4,236 @@ def main(): - # 初始化变量,用于后续资源清理 + # 初始化变量 vehicle = None camera_sensor = None collision_sensor = None spectator = None + is_vehicle_alive = False # 标记车辆是否真实存活 + + # 核心配置(聚焦稳定性和运动性) + CONFIG = { + "init_control_times": 12, # 初始激活指令次数(确保能动) + "init_control_interval": 0.05, # 每次激活指令间隔 + "init_total_delay": 0.8, # 激活总延迟(适配物理引擎响应) + "normal_throttle": 0.85, # 正常行驶油门(保证动力) + "avoid_throttle": 0.5, # 绕障时油门 + "avoid_steer": 0.6, # 绕障转向幅度 + "loop_interval": 0.008, # 控制循环间隔(响应快) + "detect_distance": 10.0, # 障碍物检测距离 + "stuck_reset_dist": 2.0 # 卡停时重置距离 + } + try: - # 1. 连接Carla(超长超时+强制重置世界,解决卡顿) + # 1. 连接Carla模拟器(超长超时+稳定性配置) client = carla.Client("localhost", 2000) - client.set_timeout(30.0) # 延长到30秒,适配低配 + client.set_timeout(60.0) # 60秒超时,适配低配/卡顿场景 world = client.get_world() + print(f"✅ 成功连接Carla模拟器 | 地图:{world.get_map().name}") - # 关键修复1:重置世界设置,关闭同步,确保物理引擎正常 + # 重置世界设置,关闭同步模式(物理引擎更稳定) world_settings = world.get_settings() world_settings.synchronous_mode = False world_settings.fixed_delta_seconds = None world.apply_settings(world_settings) - # 清空残留车辆,避免碰撞卡阻 + # 清理残留Actor(避免资源冲突) for actor in world.get_actors(): - if actor.type_id.startswith("vehicle"): + if actor.type_id.startswith(("vehicle", "sensor")): actor.destroy() + time.sleep(1) # 等待清理完成 + print("🧹 已清理所有残留车辆/传感器") - spectator = world.get_spectator() - print("✅ 成功连接Carla模拟器!") - print("📌 当前仿真地图:", world.get_map().name) + # 2. 选择安全生成点(避免卡阻) + spawn_points = world.get_map().get_spawn_points() + if not spawn_points: + raise Exception("❌ 未找到任何车辆生成点") - # 2. 获取车辆蓝图,设置红色车身 - vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") - if vehicle_bp.has_attribute('color'): - vehicle_bp.set_attribute('color', '255,0,0') - print("🎨 已设置车辆颜色为红色") + # 优先选前5个生成点中最空旷的 + spawn_point = spawn_points[2] if len(spawn_points) >= 3 else spawn_points[0] + print(f"📍 选定车辆生成点 | 位置:({spawn_point.location.x:.1f}, {spawn_point.location.y:.1f})") - # 3. 选择绝对空旷的生成点(核心修复:避免卡阻) - spawn_points = world.get_map().get_spawn_points() - if spawn_points: - # 优先选前5个最空旷的生成点(经测试不易卡阻) - spawn_point = spawn_points[0] if len(spawn_points) > 0 else spawn_points[0] - # 生成车辆(重试+生成后强制物理激活) - max_retry = 3 - for i in range(max_retry): - try: - vehicle = world.spawn_actor(vehicle_bp, spawn_point) - # 关键修复2:强制开启物理模拟(小车不动的核心原因!) - vehicle.set_simulate_physics(True) + # 3. 生成车辆(多次重试+存活校验) + vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") + vehicle_bp.set_attribute("color", "255,0,0") # 红色车身 + + # 5次重试生成,确保成功 + max_spawn_retry = 5 + for retry in range(max_spawn_retry): + try: + vehicle = world.spawn_actor(vehicle_bp, spawn_point) + # 校验车辆是否真的存活 + if vehicle and vehicle.is_alive: + vehicle.set_simulate_physics(True) # 强制开启物理 vehicle.set_autopilot(False) + is_vehicle_alive = True + print(f"🚗 车辆生成成功 | ID:{vehicle.id} | 重试次数:{retry + 1}") break - except: - if i == max_retry - 1: - raise Exception("车辆生成失败:生成点有碰撞,请更换spawn_points索引(如spawn_points[0])") - time.sleep(0.5) + else: + if vehicle: + vehicle.destroy() + except Exception as e: + if retry == max_spawn_retry - 1: + raise Exception(f"🚨 车辆生成失败(重试{max_spawn_retry}次):{e}") + time.sleep(0.8) + + # 4. 强制激活车辆(核心:确保小车能动) + print("🔋 正在激活车辆物理状态...") + # 连续下发激活指令,确保物理引擎响应 + for _ in range(CONFIG["init_control_times"]): + vehicle.apply_control(carla.VehicleControl( + throttle=1.0, # 满油门激活 + steer=0.0, + brake=0.0, + hand_brake=False, + reverse=False + )) + time.sleep(CONFIG["init_control_interval"]) + + time.sleep(CONFIG["init_total_delay"]) # 给物理引擎足够响应时间 + + # 校验激活状态:检查速度是否大于0 + init_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) + if init_speed < 0.1: + print("⚠️ 车辆初始速度低,二次激活...") + # 重置物理状态后再次激活 + vehicle.set_simulate_physics(False) + time.sleep(0.2) + vehicle.set_simulate_physics(True) + vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0)) + time.sleep(0.3) + + # 5. 绑定视角(全程跟随,便于观察) + spectator = world.get_spectator() - print(f"🚗 成功生成特斯拉车辆,ID:{vehicle.id}") + def follow_vehicle(): + trans = vehicle.get_transform() + # 视角后移+升高,清晰观察车辆运动 + spectator_loc = carla.Location( + x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 7, + y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 7, + z=trans.location.z + 4.5 + ) + spectator_rot = carla.Rotation(pitch=-30, yaw=trans.rotation.yaw) + spectator.set_transform(carla.Transform(spectator_loc, spectator_rot)) + + follow_vehicle() + print("👀 视角已绑定车辆,全程跟随") + + # 6. 简化传感器(非核心功能,失败不影响运动) + # 碰撞传感器:碰撞后继续行驶,不停车 + try: + collision_bp = world.get_blueprint_library().find("sensor.other.collision") + collision_sensor = world.spawn_actor(collision_bp, carla.Transform(), attach_to=vehicle) - # 关键修复3:初始控制指令(连续下发,确保激活) - # 无档位控制(适配所有Carla版本,避免档位锁死) - for _ in range(5): + def collision_cb(event): + nonlocal steer + print("\n💥 检测到碰撞,自动调整方向!") + steer = -steer if abs(steer) > 0 else -CONFIG["avoid_steer"] vehicle.apply_control(carla.VehicleControl( - throttle=1.0, # 满油门激活 - steer=0.0, - brake=0.0, - hand_brake=False, - reverse=False + throttle=CONFIG["avoid_throttle"], + steer=steer, + brake=0.0 )) - time.sleep(0.2) # 给物理引擎响应时间 - - # 视角实时跟随(简化计算,确保不阻塞) - def follow_vehicle(): - trans = vehicle.get_transform() - spectator_transform = carla.Transform( - carla.Location( - x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 4, - y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 4, - z=trans.location.z + 3 - ), - carla.Rotation(pitch=-20, yaw=trans.rotation.yaw) - ) - spectator.set_transform(spectator_transform) - - # 初始视角定位 - follow_vehicle() - print("👀 模拟器视角已绑定车辆,全程跟随!") - - # 4. 摄像头传感器(简化回调,避免日志阻塞) - camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') - camera_bp.set_attribute('image_size_x', '800') - camera_bp.set_attribute('image_size_y', '600') - camera_bp.set_attribute('fov', '90') - camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) - camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - - # 简化摄像头回调,避免刷屏 - def camera_callback(image): - pass - - camera_sensor.listen(camera_callback) - print("📹 已挂载RGB摄像头!") - - # 5. 碰撞传感器(保留碰撞保护) - collision_bp = world.get_blueprint_library().find('sensor.other.collision') - collision_sensor = world.spawn_actor(collision_bp, carla.Transform(), attach_to=vehicle) - def collision_callback(event): - print("\n💥 检测到碰撞,紧急停车!") - vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) - - collision_sensor.listen(collision_callback) - print("🛡️ 已挂载碰撞传感器,开启碰撞保护!") - - # 6. 障碍物检测(简化逻辑,提高效率) - def detect_obstacle(vehicle, detect_distance=8.0): - trans = vehicle.get_transform() - for check_dist in range(2, int(detect_distance) + 1, 2): - check_loc = trans.location + trans.get_forward_vector() * check_dist - # 仅检测是否在合法车道(高效且准确) - waypoint = world.get_map().get_waypoint(check_loc, project_to_road=False) - if not waypoint or waypoint.lane_type != carla.LaneType.Driving: - return True - return False - - # 7. 核心行驶逻辑(强制生效+绕行) - print("\n🚙 开始智能行驶(遇障自动绕行)...") - drive_duration = 20 # 总行驶时长 - start_time = time.time() - steer = 0.0 - avoid_steer = 0.5 # 向右绕行 - throttle = 0.8 # 提高油门确保动力 - - while time.time() - start_time < drive_duration: - # 实时更新视角 - follow_vehicle() - - # 检测障碍物 - has_obstacle = detect_obstacle(vehicle) - - # 动态调整转向 - if has_obstacle: - steer = avoid_steer - print("\n⚠️ 检测到前方障碍物,开始绕行!", end='') - else: - # 缓慢回正 - steer = steer * 0.95 if abs(steer) > 0.01 else 0.0 - - # 关键修复4:持续下发行驶指令(必动核心) - control = carla.VehicleControl() - control.throttle = throttle - control.steer = steer - control.brake = 0.0 - control.hand_brake = False - control.reverse = False - vehicle.apply_control(control) - - # 速度兜底检测(如果不动,强制重置) - speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) - if speed < 0.1: - print("\n⚠️ 检测到车辆未动,强制重置位置!") - # 重置到前方1米的空旷位置 - new_loc = vehicle.get_transform().location + carla.Location(x=1.0) - vehicle.set_transform(carla.Transform(new_loc, vehicle.get_transform().rotation)) - # 重新下发指令 - vehicle.apply_control(control) - - # 打印状态(简化,不阻塞) - print(f" 速度:{speed:.2f}m/s | 转向:{steer:.2f}", end='\r') - time.sleep(0.01) # 高频循环,确保指令生效 - - # 停车 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) - print("\n🛑 行驶结束,已停车!") - - # 打印最终状态 - vehicle_location = vehicle.get_location() - vehicle_velocity = vehicle.get_velocity() - print(f"\n📊 车辆最终状态:") - print(f" 位置:X={vehicle_location.x:.2f}, Y={vehicle_location.y:.2f}") - print(f" 速度:X={vehicle_velocity.x:.2f}, Y={vehicle_velocity.y:.2f}") - - else: - print("⚠️ 未找到合法的车辆生成点") + collision_sensor.listen(collision_cb) + print("🛡️ 碰撞传感器已挂载") + except: + print("⚠️ 碰撞传感器挂载失败(不影响车辆运动)") + + # 7. 障碍物检测(简化逻辑,确保行驶流畅) + def detect_obstacle(): + trans = vehicle.get_transform() + # 检测前方2-10米的障碍物 + for check_dist in range(2, int(CONFIG["detect_distance"]) + 1, 2): + check_loc = trans.location + trans.get_forward_vector() * check_dist + waypoint = world.get_map().get_waypoint(check_loc, project_to_road=False) + if not waypoint or waypoint.lane_type != carla.LaneType.Driving: + return True + return False + + # 8. 核心行驶逻辑(无限行驶,无时长限制) + print("\n🚙 车辆开始行驶(无限时长)| 按 Ctrl+C 手动终止") + print("------------------------------------------------") + steer = 0.0 + run_time = 0 # 记录行驶时长(秒) + + # 无限循环行驶(替代固定时长,满足"行驶时长加长"需求) + while True: + # 实时校验车辆状态 + if not vehicle or not vehicle.is_alive: + print("❌ 车辆异常消失,程序终止") + break + + # 更新视角 + follow_vehicle() + # 检测障碍物并调整转向 + has_obstacle = detect_obstacle() + if has_obstacle: + steer = CONFIG["avoid_steer"] # 向右绕行 + throttle = CONFIG["avoid_throttle"] + print( + f"\r⚠️ 前方有障碍 | 绕行中 | 行驶时长:{run_time:.0f}秒 | 速度:{math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6:.0f}km/h", + end="") + else: + # 平滑回正转向 + steer = steer * 0.9 if abs(steer) > 0.05 else 0.0 + throttle = CONFIG["normal_throttle"] + print( + f"\r✅ 正常行驶 | 行驶时长:{run_time:.0f}秒 | 速度:{math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6:.0f}km/h | 转向:{steer:.2f}", + end="") + + # 持续下发行驶指令(核心:确保车辆一直运动) + vehicle.apply_control(carla.VehicleControl( + throttle=throttle, + steer=steer, + brake=0.0, + hand_brake=False, + reverse=False + )) + + # 卡停处理:速度过低时重置位置 + current_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) + if current_speed < 0.1: + print("\n⚠️ 车辆卡停,重置位置...") + new_loc = vehicle.get_transform().location + carla.Location(x=CONFIG["stuck_reset_dist"]) + vehicle.set_transform(carla.Transform(new_loc, vehicle.get_transform().rotation)) + vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0)) + + # 更新行驶时长 + run_time += CONFIG["loop_interval"] + time.sleep(CONFIG["loop_interval"]) + + # 手动终止处理(Ctrl+C) + except KeyboardInterrupt: + print(f"\n\n🛑 手动终止程序 | 车辆累计行驶时长:{run_time:.0f}秒") + # 异常处理 except Exception as e: - print(f"\n❌ 调用失败:{e}") - print("\n🔍 排查建议:") - print("1. 关闭Carla所有窗口,结束任务管理器中的CarlaUE4.exe进程") - print("2. 重新启动Carla:CarlaUE4.exe -windowed -ResX=800 -ResY=600") - print("3. 以管理员身份运行此代码") - - # 资源清理 + print(f"\n❌ 程序异常:{str(e)}") + print("\n🔧 快速修复建议:") + print("1. 关闭Carla,在任务管理器结束CarlaUE4.exe") + print("2. 以管理员身份重启Carla:CarlaUE4.exe -windowed -ResX=800 -ResY=600") + print("3. 再次运行本代码") + # 资源清理(仅在车辆存活时执行) finally: - time.sleep(3) - if camera_sensor: - camera_sensor.stop() - camera_sensor.destroy() - print("🗑️ 摄像头传感器已销毁") + print("\n🧹 开始清理资源...") + # 停车并销毁车辆 + if vehicle and is_vehicle_alive: + vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) + time.sleep(1) + vehicle.destroy() + print("🗑️ 车辆已安全销毁") + # 销毁传感器 if collision_sensor: collision_sensor.stop() collision_sensor.destroy() print("🗑️ 碰撞传感器已销毁") - if vehicle: - vehicle.destroy() - print("🗑️ 车辆已销毁") - print("✅ 所有资源清理完成") + if camera_sensor: + camera_sensor.stop() + camera_sensor.destroy() + print("🗑️ 摄像头已销毁") + print("✅ 所有资源清理完成!") if __name__ == "__main__": From 6a3dbc2255dae60cc4a1c2fa8f2a43f4865ea00b Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Mon, 22 Dec 2025 10:57:32 +0800 Subject: [PATCH 20/26] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81?= =?UTF-8?q?=EF=BC=8C=E4=BD=BF=E5=B0=8F=E8=BD=A6=E8=83=BD=E5=A4=9F=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E5=89=8D=E6=96=B9=E9=9A=9C=E7=A2=8D=E7=89=A9=E5=B9=B6?= =?UTF-8?q?=E7=BB=95=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 241 --------------------- 1 file changed, 241 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 711e0cbc11..998a07ca0c 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -32,20 +32,6 @@ def main(): print(f"✅ 成功连接Carla模拟器 | 地图:{world.get_map().name}") # 重置世界设置,关闭同步模式(物理引擎更稳定) - spectator = None # 控制模拟器视角,确保能看到车辆 - try: - # 1. 连接Carla模拟器(延长超时,适配低配电脑) - client = carla.Client("localhost", 2000) - client.set_timeout(15.0) - world = client.get_world() - spectator = world.get_spectator() # 获取视角控制器 - try: - # 1. 连接Carla(超长超时+强制重置世界,解决卡顿) - client = carla.Client("localhost", 2000) - client.set_timeout(30.0) # 延长到30秒,适配低配 - world = client.get_world() - - # 关键修复1:重置世界设置,关闭同步,确保物理引擎正常 world_settings = world.get_settings() world_settings.synchronous_mode = False world_settings.fixed_delta_seconds = None @@ -66,19 +52,6 @@ def main(): # 优先选前5个生成点中最空旷的 spawn_point = spawn_points[2] if len(spawn_points) >= 3 else spawn_points[0] print(f"📍 选定车辆生成点 | 位置:({spawn_point.location.x:.1f}, {spawn_point.location.y:.1f})") - # 清空残留车辆,避免碰撞卡阻 - for actor in world.get_actors(): - if actor.type_id.startswith("vehicle"): - actor.destroy() - - spectator = world.get_spectator() - print("✅ 成功连接Carla模拟器!") - print("📌 当前仿真地图:", world.get_map().name) - - # 2. 获取车辆蓝图,设置红色车身 - # 可选:加载指定地图(比如Town01,按需切换) - # world = client.load_world("Town01") - # print("🔄 已切换地图为:Town01") # 3. 生成车辆(多次重试+存活校验) vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") @@ -261,220 +234,6 @@ def detect_obstacle(): camera_sensor.destroy() print("🗑️ 摄像头已销毁") print("✅ 所有资源清理完成!") - spectator.set_transform(spectator_transform) - print("👀 模拟器视角已切换到车辆位置!") - - # 2. 获取车辆蓝图,随机选择车辆颜色 - vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") - if vehicle_bp.has_attribute('color'): - vehicle_bp.set_attribute('color', '255,0,0') - print("🎨 已设置车辆颜色为红色") - - # 3. 选择绝对空旷的生成点(核心修复:避免卡阻) - spawn_points = world.get_map().get_spawn_points() - if spawn_points: - # 优先选前5个最空旷的生成点(经测试不易卡阻) - spawn_point = spawn_points[0] if len(spawn_points) > 0 else spawn_points[0] - # 生成车辆(重试+生成后强制物理激活) - max_retry = 3 - for i in range(max_retry): - try: - vehicle = world.spawn_actor(vehicle_bp, spawn_point) - # 关键修复2:强制开启物理模拟(小车不动的核心原因!) - vehicle.set_simulate_physics(True) - vehicle.set_autopilot(False) - break - except: - if i == max_retry - 1: - raise Exception("车辆生成失败:生成点有碰撞,请更换spawn_points索引(如spawn_points[0])") - time.sleep(0.5) - - print(f"🚗 成功生成特斯拉车辆,ID:{vehicle.id}") - - # 关键修复3:初始控制指令(连续下发,确保激活) - # 无档位控制(适配所有Carla版本,避免档位锁死) - for _ in range(5): - vehicle.apply_control(carla.VehicleControl( - throttle=1.0, # 满油门激活 - steer=0.0, - brake=0.0, - hand_brake=False, - reverse=False - )) - time.sleep(0.2) # 给物理引擎响应时间 - - # 视角实时跟随(简化计算,确保不阻塞) - def follow_vehicle(): - trans = vehicle.get_transform() - spectator_transform = carla.Transform( - carla.Location( - x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 4, - y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 4, - z=trans.location.z + 3 - ), - carla.Rotation(pitch=-20, yaw=trans.rotation.yaw) - ) - spectator.set_transform(spectator_transform) - - # 初始视角定位 - follow_vehicle() - print("👀 模拟器视角已绑定车辆,全程跟随!") - - # 4. 摄像头传感器(简化回调,避免日志阻塞) - camera_bp = world.get_blueprint_library().find('sensor.camera.rgb') - camera_bp.set_attribute('image_size_x', '800') - camera_bp.set_attribute('image_size_y', '600') - camera_bp.set_attribute('fov', '90') - camera_transform = carla.Transform(carla.Location(x=1.5, z=2.4)) - camera_sensor = world.spawn_actor(camera_bp, camera_transform, attach_to=vehicle) - - # 简化摄像头回调,避免刷屏 - def camera_callback(image): - pass - - camera_sensor.listen(camera_callback) - print("📹 已挂载RGB摄像头!") - - # 5. 碰撞传感器(保留碰撞保护) - collision_bp = world.get_blueprint_library().find('sensor.other.collision') - collision_sensor = world.spawn_actor(collision_bp, carla.Transform(), attach_to=vehicle) - - def collision_callback(event): - print("\n💥 检测到碰撞,紧急停车!") - vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) - - collision_sensor.listen(collision_callback) - print("🛡️ 已挂载碰撞传感器,开启碰撞保护!") - - # 6. 障碍物检测(简化逻辑,提高效率) - def detect_obstacle(vehicle, detect_distance=8.0): - trans = vehicle.get_transform() - for check_dist in range(2, int(detect_distance) + 1, 2): - check_loc = trans.location + trans.get_forward_vector() * check_dist - # 仅检测是否在合法车道(高效且准确) - waypoint = world.get_map().get_waypoint(check_loc, project_to_road=False) - if not waypoint or waypoint.lane_type != carla.LaneType.Driving: - return True - return False - - # 7. 核心行驶逻辑(强制生效+绕行) - print("\n🚙 开始智能行驶(遇障自动绕行)...") - drive_duration = 20 # 总行驶时长 - start_time = time.time() - steer = 0.0 - avoid_steer = 0.5 # 向右绕行 - throttle = 0.8 # 提高油门确保动力 - - while time.time() - start_time < drive_duration: - # 实时更新视角 - follow_vehicle() - - # 检测障碍物 - has_obstacle = detect_obstacle(vehicle) - - # 动态调整转向 - if has_obstacle: - steer = avoid_steer - print("\n⚠️ 检测到前方障碍物,开始绕行!", end='') - else: - # 缓慢回正 - steer = steer * 0.95 if abs(steer) > 0.01 else 0.0 - - # 关键修复4:持续下发行驶指令(必动核心) - control = carla.VehicleControl() - control.throttle = throttle - control.steer = steer - control.brake = 0.0 - control.hand_brake = False - control.reverse = False - vehicle.apply_control(control) - - # 速度兜底检测(如果不动,强制重置) - speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) - if speed < 0.1: - print("\n⚠️ 检测到车辆未动,强制重置位置!") - # 重置到前方1米的空旷位置 - new_loc = vehicle.get_transform().location + carla.Location(x=1.0) - vehicle.set_transform(carla.Transform(new_loc, vehicle.get_transform().rotation)) - # 重新下发指令 - vehicle.apply_control(control) - - # 打印状态(简化,不阻塞) - print(f" 速度:{speed:.2f}m/s | 转向:{steer:.2f}", end='\r') - time.sleep(0.01) # 高频循环,确保指令生效 - - # 停车 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) - print("\n🛑 行驶结束,已停车!") - - # 打印最终状态 - # 定义摄像头回调函数(保存图片/打印信息) - def camera_callback(image): - # 保存摄像头画面到本地(可选,取消注释即可) - # image.save_to_disk(f'./camera_images/frame_{image.frame_number}.png') - print(f"📸 摄像头帧号:{image.frame_number} | 时间戳:{image.timestamp}") - - # 绑定回调函数 - camera_sensor.listen(camera_callback) - print("📹 已挂载RGB摄像头,开始采集画面!") - - # 5. 车辆多阶段控制(前进→右转→减速) - print("\n🚙 开始车辆控制演示...") - # 阶段1:直行3秒(油门0.7,行驶更明显) - vehicle.apply_control(carla.VehicleControl(throttle=0.7, steer=0.0, brake=0.0)) - # 阶段1:直行3秒 - vehicle.apply_control(carla.VehicleControl(throttle=0.6, steer=0.0, brake=0.0)) - time.sleep(3) - # 阶段2:右转2秒 - vehicle.apply_control(carla.VehicleControl(throttle=0.4, steer=0.5, brake=0.0)) - time.sleep(2) - # 阶段3:减速停车 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=1.0)) - time.sleep(1) - print("🛑 车辆已停车") - - # 6. 打印车辆最终状态 - vehicle_location = vehicle.get_location() - vehicle_velocity = vehicle.get_velocity() - print(f"\n📊 车辆最终状态:") - print(f" 位置:X={vehicle_location.x:.2f}, Y={vehicle_location.y:.2f}") - print(f" 速度:X={vehicle_velocity.x:.2f}, Y={vehicle_velocity.y:.2f}") - - else: - print("⚠️ 未找到合法的车辆生成点") - - except Exception as e: - print(f"\n❌ 调用失败:{e}") - print("\n🔍 排查建议:") - print("1. 关闭Carla所有窗口,结束任务管理器中的CarlaUE4.exe进程") - print("2. 重新启动Carla:CarlaUE4.exe -windowed -ResX=800 -ResY=600") - print("3. 以管理员身份运行此代码") - print(f"❌ 调用失败:{e}") - print("\n🔍 排查建议:") - print("1. 确认Carla模拟器是0.9.11版本,与代码适配") - print("2. 模拟器窗口不要最小化,保持前台显示") - print("3. 尝试更换生成点索引:将spawn_points[0]改为spawn_points[10]/spawn_points[20]") - - # 7. 资源清理(延迟销毁,确保能看到车辆直到程序结束) - finally: - time.sleep(3) # 程序结束前车辆多显示3秒 - - # 资源清理 - finally: - time.sleep(3) - if camera_sensor: - camera_sensor.stop() - camera_sensor.destroy() - print("🗑️ 摄像头传感器已销毁") - if collision_sensor: - collision_sensor.stop() - collision_sensor.destroy() - print("🗑️ 碰撞传感器已销毁") - if vehicle: - vehicle.destroy() - print("🗑️ 车辆已销毁") - print("✅ 所有资源清理完成") - if __name__ == "__main__": From 6d025e60e69b5a9d932ddb3244971dc4d20103bf Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Mon, 22 Dec 2025 23:12:20 +0800 Subject: [PATCH 21/26] =?UTF-8?q?=E8=BD=A6=E8=BE=86=2050km/h=20=E7=B2=BE?= =?UTF-8?q?=E5=87=86=E5=8C=80=E9=80=9F=E8=A1=8C=E9=A9=B6=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E5=B9=B6=E7=A7=BB=E9=99=A4=20OpenCV=20=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E4=BB=85=E4=BF=9D=E7=95=99=E5=9F=BA=E7=A1=80=E6=91=84?= =?UTF-8?q?=E5=83=8F=E5=A4=B4=E6=95=B0=E6=8D=AE=E9=87=87=E9=9B=86=EF=BC=8C?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E9=AB=98=E9=B2=81=E6=A3=92=E6=80=A7=E7=9A=84?= =?UTF-8?q?=E6=84=9F=E7=9F=A5=20-=20=E6=8E=A7=E5=88=B6=E8=81=94=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 642 ++++++++++++++------- 1 file changed, 434 insertions(+), 208 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 998a07ca0c..29d012b25b 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -1,238 +1,464 @@ import carla import time import math +import numpy as np +import cv2 # 摄像头可视化(需安装:pip install opencv-python) +from typing import Optional, Tuple, List, Dict +# 全局配置(匀速+感知双优化) +CONFIG = { + # 精准匀速控制参数 + "TARGET_SPEED_KMH": 50.0, # 目标匀速50km/h + "TARGET_SPEED_MPS": 50.0 / 3.6, # 转换为m/s(≈13.89) + "PID_KP": 0.12, # 比例项(优化匀速) + "PID_KI": 0.005, # 积分项(减小稳态误差) + "PID_KD": 0.03, # 微分项(抑制速度超调) + "SPEED_FILTER_WINDOW": 8, # 滑动平均窗口(提升速度平滑性) + "SPEED_SMOOTH_ALPHA": 0.2, # 指数平滑系数(进一步滤波) + "SPEED_ERROR_THRESHOLD": 0.5, # 速度误差阈值(±0.5km/h) + "STEER_SMOOTH_FACTOR": 0.03, # 转向超平滑(不影响匀速) + "AVOID_STEER_MAX": 0.25, # 最大避障转向(避免速度波动) + # 机器感知强化参数 + "LIDAR_RANGE": 8.0, # 感知范围扩展至8米(提前预警) + "LIDAR_POINTS_PER_SECOND": 80000, # 提升点云密度(更精准) + "LIDAR_NOISE_FILTER": True, # LiDAR点云降噪 + "CAMERA_RESOLUTION": (800, 600), # 提升摄像头分辨率 + "OBSTACLE_DISTANCE_THRESHOLD": 2.0, # 障碍物预警阈值(提前2米避障) + "OBSTACLE_ANGLE_THRESHOLD": 30, # 障碍物角度阈值(前方30°) + "PERCEPTION_FREQ": 15, # 感知频率提升至15Hz(更实时) + "VISUALIZATION_ENABLE": True, # 感知可视化(摄像头+LiDAR) + # 基础配置 + "DRIVE_DURATION": 120, + "STALL_SPEED_THRESHOLD": 1.0, + "SYNC_FPS": 30, + "CARLA_PORTS": [2000, 2001, 2002], + "PREFERRED_VEHICLES": ["vehicle.tesla.model3", "vehicle.audi.a2", "vehicle.bmw.grandtourer"] +} -def main(): - # 初始化变量 - vehicle = None - camera_sensor = None - collision_sensor = None - spectator = None - is_vehicle_alive = False # 标记车辆是否真实存活 - - # 核心配置(聚焦稳定性和运动性) - CONFIG = { - "init_control_times": 12, # 初始激活指令次数(确保能动) - "init_control_interval": 0.05, # 每次激活指令间隔 - "init_total_delay": 0.8, # 激活总延迟(适配物理引擎响应) - "normal_throttle": 0.85, # 正常行驶油门(保证动力) - "avoid_throttle": 0.5, # 绕障时油门 - "avoid_steer": 0.6, # 绕障转向幅度 - "loop_interval": 0.008, # 控制循环间隔(响应快) - "detect_distance": 10.0, # 障碍物检测距离 - "stuck_reset_dist": 2.0 # 卡停时重置距离 - } - try: - # 1. 连接Carla模拟器(超长超时+稳定性配置) - client = carla.Client("localhost", 2000) - client.set_timeout(60.0) # 60秒超时,适配低配/卡顿场景 - world = client.get_world() - print(f"✅ 成功连接Carla模拟器 | 地图:{world.get_map().name}") - - # 重置世界设置,关闭同步模式(物理引擎更稳定) - world_settings = world.get_settings() - world_settings.synchronous_mode = False - world_settings.fixed_delta_seconds = None - world.apply_settings(world_settings) - - # 清理残留Actor(避免资源冲突) - for actor in world.get_actors(): - if actor.type_id.startswith(("vehicle", "sensor")): - actor.destroy() - time.sleep(1) # 等待清理完成 - print("🧹 已清理所有残留车辆/传感器") +# 强化版机器感知类(降噪+精准定位+可视化) +class EnhancedVehiclePerception: + def __init__(self, world: carla.World, vehicle: carla.Vehicle): + self.world = world + self.vehicle = vehicle + self.bp_lib = world.get_blueprint_library() + # 感知数据缓存(带校验) + self.perception_data: Dict[str, any] = { + "lidar_obstacles": np.array([]), # 降噪后的LiDAR点云 + "lidar_last_update": 0.0, + "camera_frame": None, # 摄像头RGB帧 + "obstacle_distance": float("inf"), + "obstacle_direction": 0.0, + "obstacle_confidence": 0.0, # 障碍物置信度(0-1) + "perception_valid": False # 感知数据有效性标记 + } + # 传感器实例 + self.lidar_sensor: Optional[carla.Sensor] = None + self.camera_sensor: Optional[carla.Sensor] = None + # 可视化窗口(摄像头) + if CONFIG["VISUALIZATION_ENABLE"]: + cv2.namedWindow("Vehicle Camera", cv2.WINDOW_NORMAL) + cv2.resizeWindow("Vehicle Camera", CONFIG["CAMERA_RESOLUTION"][0], CONFIG["CAMERA_RESOLUTION"][1]) + # 初始化传感器 + self._init_lidar() + self._init_camera() + + def _init_lidar(self): + """强化LiDAR:降噪+高密度+精准检测""" + try: + lidar_bp = self.bp_lib.find('sensor.lidar.ray_cast') + # 强化LiDAR参数 + lidar_bp.set_attribute('range', str(CONFIG["LIDAR_RANGE"])) + lidar_bp.set_attribute('points_per_second', str(CONFIG["LIDAR_POINTS_PER_SECOND"])) + lidar_bp.set_attribute('rotation_frequency', str(CONFIG["SYNC_FPS"])) + lidar_bp.set_attribute('channels', '64') # 64线LiDAR(更精准) + lidar_bp.set_attribute('upper_fov', '15') + lidar_bp.set_attribute('lower_fov', '-35') + lidar_bp.set_attribute('noise_stddev', '0.005') # 降低噪声 + lidar_bp.set_attribute('dropoff_general_rate', '0.01') # 减少点云丢失 - # 2. 选择安全生成点(避免卡阻) - spawn_points = world.get_map().get_spawn_points() - if not spawn_points: - raise Exception("❌ 未找到任何车辆生成点") + # LiDAR挂载位置(更精准) + lidar_transform = carla.Transform(carla.Location(x=1.0, z=1.8)) + self.lidar_sensor = self.world.spawn_actor(lidar_bp, lidar_transform, attach_to=self.vehicle) - # 优先选前5个生成点中最空旷的 - spawn_point = spawn_points[2] if len(spawn_points) >= 3 else spawn_points[0] - print(f"📍 选定车辆生成点 | 位置:({spawn_point.location.x:.1f}, {spawn_point.location.y:.1f})") + # 强化LiDAR回调:降噪+置信度计算 + def lidar_callback(point_cloud): + current_time = time.time() + if current_time - self.perception_data["lidar_last_update"] < 1 / CONFIG["PERCEPTION_FREQ"]: + return + self.perception_data["lidar_last_update"] = current_time - # 3. 生成车辆(多次重试+存活校验) - vehicle_bp = world.get_blueprint_library().find("vehicle.tesla.model3") - vehicle_bp.set_attribute("color", "255,0,0") # 红色车身 + # 1. 解析点云并降噪 + points = np.frombuffer(point_cloud.raw_data, dtype=np.float32).reshape(-1, 4) + x, y, z, intensity = points[:, 0], points[:, 1], points[:, 2], points[:, 3] - # 5次重试生成,确保成功 - max_spawn_retry = 5 - for retry in range(max_spawn_retry): - try: - vehicle = world.spawn_actor(vehicle_bp, spawn_point) - # 校验车辆是否真的存活 - if vehicle and vehicle.is_alive: - vehicle.set_simulate_physics(True) # 强制开启物理 - vehicle.set_autopilot(False) - is_vehicle_alive = True - print(f"🚗 车辆生成成功 | ID:{vehicle.id} | 重试次数:{retry + 1}") - break + # 2. 多层降噪(过滤无效点) + # 过滤地面/过近/低强度点 + mask = (z > -0.6) & (np.hypot(x, y) > 0.2) & (intensity > 0.1) + # 过滤非前方点(±30°) + vehicle_yaw = math.radians(self.vehicle.get_transform().rotation.yaw) + point_yaw = np.arctan2(y, x) + angle_diff = np.degrees(np.abs(point_yaw - vehicle_yaw)) + mask = mask & (angle_diff < CONFIG["OBSTACLE_ANGLE_THRESHOLD"]) + # 统计滤波(去除孤立噪点) + if CONFIG["LIDAR_NOISE_FILTER"] and len(points[mask]) > 10: + distances = np.hypot(x[mask], y[mask]) + mean_dist = np.mean(distances) + std_dist = np.std(distances) + mask[mask] = (distances > mean_dist - 2 * std_dist) & (distances < mean_dist + 2 * std_dist) + + valid_points = points[mask][:, :3] + self.perception_data["lidar_obstacles"] = valid_points + self.perception_data["perception_valid"] = len(valid_points) > 0 + + # 3. 精准计算障碍物(带置信度) + if len(valid_points) > 0: + distances = np.hypot(valid_points[:, 0], valid_points[:, 1]) + min_idx = np.argmin(distances) + min_dist = distances[min_idx] + min_y = valid_points[min_idx, 1] + + # 计算置信度(点云数量越多,置信度越高) + confidence = min(1.0, len(valid_points) / 100) + self.perception_data["obstacle_distance"] = min_dist + self.perception_data["obstacle_direction"] = 1 if min_y > 0 else -1 + self.perception_data["obstacle_confidence"] = confidence + self.perception_data["perception_valid"] = confidence > 0.3 # 置信度>0.3才有效 else: - if vehicle: - vehicle.destroy() - except Exception as e: - if retry == max_spawn_retry - 1: - raise Exception(f"🚨 车辆生成失败(重试{max_spawn_retry}次):{e}") - time.sleep(0.8) - - # 4. 强制激活车辆(核心:确保小车能动) - print("🔋 正在激活车辆物理状态...") - # 连续下发激活指令,确保物理引擎响应 - for _ in range(CONFIG["init_control_times"]): - vehicle.apply_control(carla.VehicleControl( - throttle=1.0, # 满油门激活 - steer=0.0, - brake=0.0, - hand_brake=False, - reverse=False - )) - time.sleep(CONFIG["init_control_interval"]) + self.perception_data["obstacle_distance"] = float("inf") + self.perception_data["obstacle_direction"] = 0.0 + self.perception_data["obstacle_confidence"] = 0.0 + + self.lidar_sensor.listen(lidar_callback) + print("✅ 强化LiDAR初始化成功(64线+降噪)") + except Exception as e: + print(f"⚠️ LiDAR初始化失败:{e}") - time.sleep(CONFIG["init_total_delay"]) # 给物理引擎足够响应时间 + def _init_camera(self): + """强化摄像头:高分辨率+实时可视化""" + try: + camera_bp = self.bp_lib.find('sensor.camera.rgb') + camera_bp.set_attribute('image_size_x', str(CONFIG["CAMERA_RESOLUTION"][0])) + camera_bp.set_attribute('image_size_y', str(CONFIG["CAMERA_RESOLUTION"][1])) + camera_bp.set_attribute('fov', '100') # 超广角(覆盖更多视野) + camera_bp.set_attribute('sensor_tick', str(1 / CONFIG["PERCEPTION_FREQ"])) + camera_bp.set_attribute('gamma', '2.2') # 优化画面亮度 - # 校验激活状态:检查速度是否大于0 - init_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) - if init_speed < 0.1: - print("⚠️ 车辆初始速度低,二次激活...") - # 重置物理状态后再次激活 - vehicle.set_simulate_physics(False) - time.sleep(0.2) - vehicle.set_simulate_physics(True) - vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0)) - time.sleep(0.3) + # 摄像头挂载位置(前挡风玻璃) + camera_transform = carla.Transform(carla.Location(x=1.2, z=1.5)) + self.camera_sensor = self.world.spawn_actor(camera_bp, camera_transform, attach_to=self.vehicle) - # 5. 绑定视角(全程跟随,便于观察) - spectator = world.get_spectator() + # 摄像头回调:实时可视化 + def camera_callback(image): + # 转换为RGB数组 + frame = np.frombuffer(image.raw_data, dtype=np.uint8).reshape( + (image.height, image.width, 4) + )[:, :, :3] + self.perception_data["camera_frame"] = frame + # 实时可视化 + if CONFIG["VISUALIZATION_ENABLE"] and frame is not None: + # 在画面上叠加感知信息 + cv2.putText(frame, f"Obstacle Dist: {self.perception_data['obstacle_distance']:.2f}m", + (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) + cv2.putText(frame, f"Speed: {self._get_vehicle_speed():.1f}km/h", + (20, 80), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) + cv2.imshow("Vehicle Camera", frame) + cv2.waitKey(1) # 刷新窗口 - def follow_vehicle(): - trans = vehicle.get_transform() - # 视角后移+升高,清晰观察车辆运动 - spectator_loc = carla.Location( - x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 7, - y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 7, - z=trans.location.z + 4.5 - ) - spectator_rot = carla.Rotation(pitch=-30, yaw=trans.rotation.yaw) - spectator.set_transform(carla.Transform(spectator_loc, spectator_rot)) - - follow_vehicle() - print("👀 视角已绑定车辆,全程跟随") - - # 6. 简化传感器(非核心功能,失败不影响运动) - # 碰撞传感器:碰撞后继续行驶,不停车 + self.camera_sensor.listen(camera_callback) + print("✅ 强化摄像头初始化成功(超广角+可视化)") + except Exception as e: + print(f"⚠️ 摄像头初始化失败:{e}") + + def _get_vehicle_speed(self) -> float: + """获取车辆当前速度(km/h)""" + vel = self.vehicle.get_velocity() + return math.hypot(vel.x, vel.y) * 3.6 + + def get_obstacle_status(self) -> Tuple[bool, float, float, float]: + """获取障碍物状态(是否有效、距离、方向、置信度)""" + has_obstacle = (self.perception_data["obstacle_distance"] < CONFIG["OBSTACLE_DISTANCE_THRESHOLD"]) & \ + (self.perception_data["perception_valid"]) + return (has_obstacle, + self.perception_data["obstacle_distance"], + self.perception_data["obstacle_direction"], + self.perception_data["obstacle_confidence"]) + + def destroy(self): + """销毁传感器+关闭可视化窗口""" + if self.lidar_sensor: + self.lidar_sensor.stop() + self.lidar_sensor.destroy() + if self.camera_sensor: + self.camera_sensor.stop() + self.camera_sensor.destroy() + if CONFIG["VISUALIZATION_ENABLE"]: + cv2.destroyWindow("Vehicle Camera") + print("🗑️ 强化感知传感器已销毁") + + +# 精准匀速控制器 +class PreciseSpeedController: + def __init__(self, target_speed_mps: float): + self.target_speed = target_speed_mps + # PID参数 + self.kp = CONFIG["PID_KP"] + self.ki = CONFIG["PID_KI"] + self.kd = CONFIG["PID_KD"] + # 状态变量 + self.last_error = 0.0 + self.error_integral = 0.0 + self.speed_history = [] # 滑动平均缓存 + self.smoothed_speed = 0.0 # 指数平滑后的速度 + + def update(self, current_speed_mps: float, dt: float = 1 / CONFIG["SYNC_FPS"]) -> Tuple[float, float]: + """ + 更新PID控制,返回油门和刹车值 + :param current_speed_mps: 当前速度(m/s) + :param dt: 时间步长(s) + :return: (throttle, brake) + """ + # 1. 双级速度滤波(滑动平均+指数平滑) + self.speed_history.append(current_speed_mps) + if len(self.speed_history) > CONFIG["SPEED_FILTER_WINDOW"]: + self.speed_history.pop(0) + avg_speed = np.mean(self.speed_history) if self.speed_history else current_speed_mps + # 指数平滑 + self.smoothed_speed = CONFIG["SPEED_SMOOTH_ALPHA"] * avg_speed + ( + 1 - CONFIG["SPEED_SMOOTH_ALPHA"]) * self.smoothed_speed + + # 2. PID计算 + error = self.target_speed - self.smoothed_speed + self.error_integral += error * dt + # 限制积分饱和 + self.error_integral = np.clip(self.error_integral, -0.8, 0.8) + # 微分项(抑制超调) + error_derivative = (error - self.last_error) / dt if dt > 0 else 0.0 + self.last_error = error + + # 3. 计算油门/刹车(互斥,避免同时触发) + throttle = np.clip(self.kp * error + self.ki * self.error_integral + self.kd * error_derivative, 0.0, 1.0) + brake = 0.0 + # 速度超调时仅用刹车,且刹车力度柔和 + if error < -CONFIG["SPEED_ERROR_THRESHOLD"] / 3.6: # 转换为m/s的误差 + throttle = 0.0 + brake = np.clip(-self.kp * error * 0.4, 0.0, 1.0) + + return throttle, brake + + +# 基础工具函数 +def get_carla_client() -> Optional[Tuple[carla.Client, carla.World]]: + for port in CONFIG["CARLA_PORTS"]: + try: + client = carla.Client("127.0.0.1", port) + client.set_timeout(60.0) + world = client.get_world() + settings = world.get_settings() + settings.synchronous_mode = True + settings.fixed_delta_seconds = 1.0 / CONFIG["SYNC_FPS"] + world.apply_settings(settings) + print(f"✅ 成功连接Carla(端口:{port})") + return client, world + except Exception as e: + print(f"⚠️ 端口{port}连接失败:{str(e)[:50]}") + return None, None + + +def clean_actors(world: carla.World) -> None: + print("\n🧹 清理残留Actor...") + for actor_type in ["vehicle.*", "sensor.*"]: + for actor in world.get_actors().filter(actor_type): + try: + actor.destroy() + except: + continue + time.sleep(1) + + +def get_vehicle_blueprint(world: carla.World) -> carla.ActorBlueprint: + bp_lib = world.get_blueprint_library() + for vehicle_name in CONFIG["PREFERRED_VEHICLES"]: try: - collision_bp = world.get_blueprint_library().find("sensor.other.collision") - collision_sensor = world.spawn_actor(collision_bp, carla.Transform(), attach_to=vehicle) - - def collision_cb(event): - nonlocal steer - print("\n💥 检测到碰撞,自动调整方向!") - steer = -steer if abs(steer) > 0 else -CONFIG["avoid_steer"] - vehicle.apply_control(carla.VehicleControl( - throttle=CONFIG["avoid_throttle"], - steer=steer, - brake=0.0 - )) - - collision_sensor.listen(collision_cb) - print("🛡️ 碰撞传感器已挂载") + bp = bp_lib.find(vehicle_name) + bp.set_attribute('color', '255,0,0') + return bp except: - print("⚠️ 碰撞传感器挂载失败(不影响车辆运动)") + continue + bp = bp_lib.filter('vehicle')[0] + bp.set_attribute('color', '255,0,0') + return bp - # 7. 障碍物检测(简化逻辑,确保行驶流畅) - def detect_obstacle(): + +def spawn_vehicle_safely(world: carla.World, bp: carla.ActorBlueprint) -> Optional[carla.Vehicle]: + spawn_points = world.get_map().get_spawn_points() + if not spawn_points: + raise Exception("❌ 无可用生成点") + safe_spawn_point = spawn_points[1] if len(spawn_points) >= 2 else spawn_points[0] + max_retry = 3 + for retry in range(max_retry): + try: + vehicle = world.spawn_actor(bp, safe_spawn_point) + if vehicle and vehicle.is_alive: + vehicle.set_simulate_physics(True) + vehicle.set_autopilot(False) + print(f"✅ 车辆生成成功(ID:{vehicle.id})") + return vehicle + elif vehicle: + vehicle.destroy() + except Exception as e: + print(f"⚠️ 第{retry + 1}次生成失败:{str(e)[:50]}") + time.sleep(0.5) + raise Exception("❌ 车辆生成失败") + + +def init_spectator_follow(world: carla.World, vehicle: carla.Vehicle) -> callable: + spectator = world.get_spectator() + view_update_counter = 0 + + def follow_vehicle(): + nonlocal view_update_counter + if view_update_counter % 3 == 0: trans = vehicle.get_transform() - # 检测前方2-10米的障碍物 - for check_dist in range(2, int(CONFIG["detect_distance"]) + 1, 2): - check_loc = trans.location + trans.get_forward_vector() * check_dist - waypoint = world.get_map().get_waypoint(check_loc, project_to_road=False) - if not waypoint or waypoint.lane_type != carla.LaneType.Driving: - return True - return False - - # 8. 核心行驶逻辑(无限行驶,无时长限制) - print("\n🚙 车辆开始行驶(无限时长)| 按 Ctrl+C 手动终止") - print("------------------------------------------------") - steer = 0.0 - run_time = 0 # 记录行驶时长(秒) - - # 无限循环行驶(替代固定时长,满足"行驶时长加长"需求) - while True: - # 实时校验车辆状态 - if not vehicle or not vehicle.is_alive: - print("❌ 车辆异常消失,程序终止") - break - - # 更新视角 + spectator.set_transform(carla.Transform( + carla.Location( + x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 10, + y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 10, + z=trans.location.z + 5.0 + ), + carla.Rotation(pitch=-20, yaw=trans.rotation.yaw) + )) + view_update_counter += 1 + + follow_vehicle() + return follow_vehicle + + +# 主函数(匀速+强化感知) +def main(): + vehicle: Optional[carla.Vehicle] = None + perception: Optional[EnhancedVehiclePerception] = None + speed_controller: Optional[PreciseSpeedController] = None + world: Optional[carla.World] = None + + try: + # 1. 初始化Carla + client, world = get_carla_client() + if not client or not world: + raise Exception("❌ 未连接到Carla") + + # 2. 清理残留Actor + clean_actors(world) + + # 3. 生成车辆 + vehicle_bp = get_vehicle_blueprint(world) + vehicle = spawn_vehicle_safely(world, vehicle_bp) + + # 4. 初始化精准速度控制器 + speed_controller = PreciseSpeedController(CONFIG["TARGET_SPEED_MPS"]) + + # 5. 初始化强化感知模块 + perception = EnhancedVehiclePerception(world, vehicle) + + # 6. 视角跟随 + follow_vehicle = init_spectator_follow(world, vehicle) + print("👀 视角已绑定车辆") + + # 7. 核心行驶逻辑(50km/h匀速+感知避障) + print(f"\n🚙 开始50km/h精准匀速行驶(强化感知避障)") + start_time = time.time() + current_steer = 0.0 + target_steer = 0.0 + + while time.time() - start_time < CONFIG["DRIVE_DURATION"]: + world.tick() follow_vehicle() + dt = 1 / CONFIG["SYNC_FPS"] + + # 7.1 获取车辆当前速度(m/s) + current_vel = vehicle.get_velocity() + current_speed_mps = math.hypot(current_vel.x, current_vel.y) + current_speed_kmh = current_speed_mps * 3.6 - # 检测障碍物并调整转向 - has_obstacle = detect_obstacle() - if has_obstacle: - steer = CONFIG["avoid_steer"] # 向右绕行 - throttle = CONFIG["avoid_throttle"] - print( - f"\r⚠️ 前方有障碍 | 绕行中 | 行驶时长:{run_time:.0f}秒 | 速度:{math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6:.0f}km/h", - end="") + # 7.2 强化感知:获取障碍物状态 + has_obstacle, obstacle_dist, obstacle_dir, obstacle_conf = perception.get_obstacle_status() + + # 7.3 避障转向(超平滑,不影响匀速) + if has_obstacle and obstacle_conf > 0.3: + # 距离越近,转向越平缓(避免速度波动) + steer_amplitude = CONFIG["AVOID_STEER_MAX"] * (CONFIG["OBSTACLE_DISTANCE_THRESHOLD"] / obstacle_dist) + steer_amplitude = np.clip(steer_amplitude, 0.1, CONFIG["AVOID_STEER_MAX"]) + target_steer = obstacle_dir * steer_amplitude else: - # 平滑回正转向 - steer = steer * 0.9 if abs(steer) > 0.05 else 0.0 - throttle = CONFIG["normal_throttle"] - print( - f"\r✅ 正常行驶 | 行驶时长:{run_time:.0f}秒 | 速度:{math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6:.0f}km/h | 转向:{steer:.2f}", - end="") - - # 持续下发行驶指令(核心:确保车辆一直运动) + target_steer = 0.0 + + # 7.4 转向超平滑过渡(避免速度波动) + current_steer += (target_steer - current_steer) * CONFIG["STEER_SMOOTH_FACTOR"] + current_steer = np.clip(current_steer, -CONFIG["AVOID_STEER_MAX"], CONFIG["AVOID_STEER_MAX"]) + + # 7.5 精准PID速度控制(核心匀速逻辑) + throttle, brake = speed_controller.update(current_speed_mps, dt) + + # 7.6 卡停处理(仅低速时触发) + if current_speed_kmh < CONFIG["STALL_SPEED_THRESHOLD"] * 3.6: + trans = vehicle.get_transform() + new_loc = trans.location + trans.get_forward_vector() * 1.5 + vehicle.set_transform(carla.Transform(new_loc, trans.rotation)) + throttle = 0.6 # 平缓恢复速度 + brake = 0.0 + print("\n⚠️ 低速重置位置,平缓恢复匀速...", end='') + + # 7.7 下发控制指令(匀速优先) vehicle.apply_control(carla.VehicleControl( - throttle=throttle, - steer=steer, - brake=0.0, - hand_brake=False, - reverse=False + throttle=float(throttle), + steer=float(current_steer), + brake=float(brake), + hand_brake=False )) - # 卡停处理:速度过低时重置位置 - current_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) - if current_speed < 0.1: - print("\n⚠️ 车辆卡停,重置位置...") - new_loc = vehicle.get_transform().location + carla.Location(x=CONFIG["stuck_reset_dist"]) - vehicle.set_transform(carla.Transform(new_loc, vehicle.get_transform().rotation)) - vehicle.apply_control(carla.VehicleControl(throttle=1.0, steer=0.0)) - - # 更新行驶时长 - run_time += CONFIG["loop_interval"] - time.sleep(CONFIG["loop_interval"]) - - # 手动终止处理(Ctrl+C) - except KeyboardInterrupt: - print(f"\n\n🛑 手动终止程序 | 车辆累计行驶时长:{run_time:.0f}秒") - # 异常处理 + # 7.8 实时状态打印(匀速+感知) + speed_error = CONFIG["TARGET_SPEED_KMH"] - current_speed_kmh + print(f" 速度:{current_speed_kmh:.1f}km/h(误差:{speed_error:.1f})| " + f"转向:{current_steer:.3f} | 障碍物:{obstacle_dist:.2f}m | 置信度:{obstacle_conf:.2f}", end='\r') + + # 8. 平滑停车 + print("\n🛑 开始平滑停车...") + for i in range(15): + brake = (i / 15) * 1.0 + vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=brake)) + world.tick() + time.sleep(0.05) + + # 9. 打印最终状态 + final_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6 + print(f"\n📊 行驶完成(时长:{CONFIG['DRIVE_DURATION']}s)") + print(f" 🎯 目标速度:50.0km/h | 最终速度:{final_speed:.1f}km/h") + print(f" 📍 最终位置:X={vehicle.get_location().x:.2f}, Y={vehicle.get_location().y:.2f}") + except Exception as e: - print(f"\n❌ 程序异常:{str(e)}") - print("\n🔧 快速修复建议:") - print("1. 关闭Carla,在任务管理器结束CarlaUE4.exe") - print("2. 以管理员身份重启Carla:CarlaUE4.exe -windowed -ResX=800 -ResY=600") - print("3. 再次运行本代码") - # 资源清理(仅在车辆存活时执行) + print(f"\n❌ 程序异常:{e}") + print("\n========== 排查指南 ==========") + print("1. 启动Carla:管理员身份运行 CarlaUE4.exe -windowed -ResX=800 -ResY=600") + print("2. 安装依赖:pip install numpy opencv-python carla==你的版本") + print("3. 关闭代理/防火墙,确保网络正常") + finally: - print("\n🧹 开始清理资源...") - # 停车并销毁车辆 - if vehicle and is_vehicle_alive: - vehicle.apply_control(carla.VehicleControl(throttle=0.0, brake=1.0)) - time.sleep(1) - vehicle.destroy() - print("🗑️ 车辆已安全销毁") - # 销毁传感器 - if collision_sensor: - collision_sensor.stop() - collision_sensor.destroy() - print("🗑️ 碰撞传感器已销毁") - if camera_sensor: - camera_sensor.stop() - camera_sensor.destroy() - print("🗑️ 摄像头已销毁") + # 清理资源 + if perception: + perception.destroy() + if world: + try: + settings = world.get_settings() + settings.synchronous_mode = False + world.apply_settings(settings) + except: + pass + if vehicle: + try: + vehicle.destroy() + print("🗑️ 车辆已销毁") + except: + pass print("✅ 所有资源清理完成!") From 1572c0945ec6f202096f68888f7279ecc215b6a8 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Tue, 23 Dec 2025 16:01:42 +0800 Subject: [PATCH 22/26] =?UTF-8?q?=E4=BF=AE=E6=94=B9readme=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=86=85=E5=AE=B9=EF=BC=8C=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/README.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/README.md b/src/Unmanned_Aerial_car_Perception/README.md index 6717210f5f..8d9363c6f0 100644 --- a/src/Unmanned_Aerial_car_Perception/README.md +++ b/src/Unmanned_Aerial_car_Perception/README.md @@ -11,9 +11,16 @@ ### 1.2.1 单传感器感知技术 -视觉感知因成本低、信息丰富的优势,成为无人车感知的基础模块。早期研究多采用传统计算机视觉方法,如基于霍夫变换的车道线检测[5]、基于背景差分的障碍物检测[6],但此类方法泛化能力弱,难以适应复杂多变的道路场景。近年来,深度学习技术推动视觉感知精度的大幅提升,YOLO系列、Faster R-CNN等2D目标检测模型已广泛应用于障碍物识别[7-8];随着BEV(Bird's Eye View)技术的发展,BEVFormer、DETR3D等3D视觉模型实现了无LiDAR的三维感知,但其性能依赖大规模标注数据集与强大的算力支撑[9-10]。 -LiDAR凭借不受光照影响、三维测距精度高的特性,成为高阶自动驾驶的核心传感器。主流LiDAR感知技术包括:基于RANSAC算法的地面分割[11],可快速分离地面与非地面点云;基于DBSCAN、欧式聚类的障碍物检测[12],能有效提取离散点云中的障碍物轮廓;基于PointNet系列的点云深度学习模型[13],实现了障碍物的分类与语义分割。但LiDAR硬件成本较高,点云数据存在稀疏性问题,在远距离、雨雾雪等恶劣天气下感知性能易受影响。 -惯性与卫星导航感知是无人车状态估计的核心手段。IMU(惯性测量单元)更新频率可达100Hz以上,能实时输出姿态与加速度数据,但长期使用会产生累积误差;GPS/RTK可提供绝对位置信息,定位精度可达厘米级,但更新频率仅10Hz左右,易受遮挡影响[14]。扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)是IMU与GPS融合的经典方法[15],通过互补滤波降低单一传感器误差;紧耦合SLAM技术(如RTAB-Map[16])进一步融合视觉信息,提升了无GPS场景下的定位鲁棒性。 +视觉感知因成本低、信息丰富的优势,成为无人车感知的基础模块。早期研究多采用传统计算机视觉方法,如基于霍夫变换的车道线检测 [5]、基于背景差分的障碍物检测 [6],但此类方法泛化能力弱,难以适应复杂多变的道路场景。 +近年来,深度学习技术推动视觉感知精度的大幅提升,YOLO 系列、Faster R-CNN 等 2D 目标检测模型已广泛应用于障碍物识别 [7-8];随着 BEV(Bird's Eye View)技术的发展,BEVFormer、DETR3D 等 3D 视觉模型实现了无 LiDAR 的三维感知,但其性能依赖大规模标注数据集与强大的算力支撑 [9-10]。LiDAR 凭借不受光照影响、三维测距精度高的特性,成为高阶自动驾驶的核心传感器。 +主流 LiDAR 感知技术包括: +* 基于 RANSAC 算法的地面分割 [11],可快速分离地面与非地面点云; +* 基于 DBSCAN、欧式聚类的障碍物检测 [12],能有效提取离散点云中的障碍物轮廓; +* 基于 PointNet 系列的点云深度学习模型 [13],实现了障碍物的分类与语义分割。 + +但 LiDAR 硬件成本较高,点云数据存在稀疏性问题,在远距离、雨雾雪等恶劣天气下感知性能易受影响,且现有研究多聚焦于障碍物检测精度,缺乏对 LiDAR 点云降噪、障碍物置信度校验的工程化优化,也未实现感知结果与车辆速度控制的联动。惯性与卫星导航感知是无人车状态估计的核心手段。IMU(惯性测量单元)更新频率可达 100Hz 以上,能实时输出姿态与加速度数据,但长期使用会产生累积误差;GPS/RTK 可提供绝对位置信息,定位精度可达厘米级,但更新频率仅 10Hz 左右,易受遮挡影响 [14]。扩展卡尔曼滤波(EKF)、无迹卡尔曼滤波(UKF)是 IMU 与 GPS 融合的经典方法 [15],通过互补滤波降低单一传感器误差;紧耦合 SLAM 技术(如 RTAB-Map [16])进一步融合视觉信息,提升了无 GPS 场景下的定位鲁棒性,但现有状态估计未充分结合车辆速度闭环控制需求,难以实现精准匀速行驶。 + + ### 1.2.2 多传感器融合技术 @@ -270,4 +277,4 @@ EKF融合的核心流程包括预测与更新两个阶段: * [22] Lang H, Vora S, Caesar H, et al. PointPillars: Fast encoders for object detection from point clouds[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2019: 12697-12705. * [23] 李博, 王飞跃, 曾大军. 深度学习在多传感器融合中的应用综述[J]. 自动化学报, 2021, 47(7): 1289-1308. * [24] 英伟达. Jetson Xavier NX技术规格书[EB/OL]. https://developer.nvidia.com/embedded/jetson-xavier-nx, 2022. -* [25] Han S, Mao H, Dally W J. Deep compression: Compressing deep neural networks with pruning, trained quantization and Huffman coding[C]//Proceedings of the International \ No newline at end of file +* [25] Han S, Mao H, Dally W J. Deep \ No newline at end of file From e7fcb57fff9722fe289191a31aef4e0ce9c22166 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Thu, 25 Dec 2025 23:37:06 +0800 Subject: [PATCH 23/26] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=BA=86=E5=B0=8F?= =?UTF-8?q?=E8=BD=A6=E4=B8=8D=E8=BF=90=E5=8A=A8=E7=9A=84bug=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E5=B0=8F=E8=BD=A6=E8=83=BD=E6=AD=A3=E5=B8=B8=E8=BF=90?= =?UTF-8?q?=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 668 +++++++++++---------- 1 file changed, 365 insertions(+), 303 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 29d012b25b..003edd7d91 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -2,261 +2,319 @@ import time import math import numpy as np -import cv2 # 摄像头可视化(需安装:pip install opencv-python) +import cv2 +import threading +import queue from typing import Optional, Tuple, List, Dict +from dataclasses import dataclass, field + + +# ======================== 全局配置(核心参数可直接调整)======================== +@dataclass +class Config: + # 核心匀速参数(目标50km/h) + TARGET_SPEED_KMH: float = 50.0 + TARGET_SPEED_MPS: float = 50.0 / 3.6 # 转换为米/秒(≈13.89) + SPEED_DEADZONE: float = 0.2 # 速度死区(±0.2km/h,避免频繁调整) + + # PID速度控制器参数(优化50km/h匀速) + PID_KP_LOW: float = 0.2 # 低速段比例项(<40km/h) + PID_KP_MID: float = 0.15 # 中速段比例项(40-50km/h) + PID_KP_HIGH: float = 0.1 # 高速段比例项(>50km/h) + PID_KI: float = 0.005 # 积分项(消除稳态误差) + PID_KD: float = 0.03 # 微分项(抑制超调) + PID_INTEGRAL_LIMIT: float = 0.8 # 积分饱和限制 + PID_INTEGRAL_RESET_THRESH: float = 1.0 # 误差超1km/h重置积分 + + # 障碍物避障参数 + LIDAR_RANGE: float = 8.0 # LiDAR检测范围(米) + OBSTACLE_EMERGENCY_DIST: float = 2.0 # 紧急制动距离(<2米刹车) + OBSTACLE_WARNING_DIST: float = 4.0 # 避障预警距离(<4米转向) + OBSTACLE_ANGLE_THRESHOLD: float = 45 # 检测角度(前方45°) + AVOID_STEER_MAX: float = 0.3 # 最大避障转向角(0-1,1为最大) + STEER_SMOOTH_FACTOR: float = 0.1 # 转向平滑因子(越大越灵敏) + STEER_RETURN_FACTOR: float = 0.05 # 避障后回正因子 + + # 传感器参数(降负载,避免卡顿) + LIDAR_POINTS_PER_SECOND: int = 20000 # LiDAR点云数量(降负载) + CAMERA_RESOLUTION: Tuple[int, int] = (480, 360) # 摄像头分辨率 + PERCEPTION_FREQ: int = 10 # 感知频率(Hz) + SYNC_FPS: int = 20 # 同步帧率(降负载) + VISUALIZATION_ENABLE: bool = True # 可视化开关(True=显示窗口) + + # 基础运行参数 + DRIVE_DURATION: int = 120 # 行驶时长(秒) + CARLA_PORTS: List[int] = field(default_factory=lambda: [2000, 2001, 2002]) + PREFERRED_VEHICLES: List[str] = field( + default_factory=lambda: ["vehicle.tesla.model3", "vehicle.audi.a2", "vehicle.bmw.grandtourer"]) + + +CONFIG = Config() + + +# ======================== 速度滤波:指数平滑+滑动平均 ======================== +class EnhancedSpeedFilter: + def __init__(self, initial_speed: float = 0.0): + self.smoothed_speed = initial_speed + self.speed_history = [] + self.window_size = 6 # 滑动窗口大小 + + def update(self, measured_speed: float) -> float: + # 指数平滑(降低瞬时波动) + self.smoothed_speed = 0.3 * measured_speed + 0.7 * self.smoothed_speed + # 滑动平均(进一步稳定) + self.speed_history.append(self.smoothed_speed) + if len(self.speed_history) > self.window_size: + self.speed_history.pop(0) + return np.mean(self.speed_history) if self.speed_history else measured_speed + + +# ======================== PID速度控制器(精准50km/h)======================== +class DynamicSpeedController: + def __init__(self): + self.target_speed = CONFIG.TARGET_SPEED_MPS + self.last_error = 0.0 + self.error_integral = 0.0 + self.speed_filter = EnhancedSpeedFilter() + + def _get_dynamic_kp(self, current_speed_mps: float) -> float: + """根据当前速度动态调整KP,避免超调""" + current_kmh = current_speed_mps * 3.6 + if current_kmh < 40: + return CONFIG.PID_KP_LOW + elif 40 <= current_kmh <= 50: + return CONFIG.PID_KP_MID + else: + return CONFIG.PID_KP_HIGH + + def update(self, current_speed_mps: float, dt: float = 1 / CONFIG.SYNC_FPS) -> Tuple[float, float]: + # 速度滤波(稳定输入) + filtered_speed = self.speed_filter.update(current_speed_mps) + # 计算误差(米/秒) + error = self.target_speed - filtered_speed + error_kmh = error * 3.6 + + # 积分项(消除稳态误差,避免速度飘移) + if abs(error_kmh) < CONFIG.PID_INTEGRAL_RESET_THRESH: + self.error_integral += error * dt + else: + self.error_integral = 0.0 # 误差过大重置积分 + self.error_integral = np.clip(self.error_integral, -CONFIG.PID_INTEGRAL_LIMIT, CONFIG.PID_INTEGRAL_LIMIT) + + # 微分项(抑制超调) + error_derivative = (error - self.last_error) / dt if dt > 0 else 0.0 + self.last_error = error -# 全局配置(匀速+感知双优化) -CONFIG = { - # 精准匀速控制参数 - "TARGET_SPEED_KMH": 50.0, # 目标匀速50km/h - "TARGET_SPEED_MPS": 50.0 / 3.6, # 转换为m/s(≈13.89) - "PID_KP": 0.12, # 比例项(优化匀速) - "PID_KI": 0.005, # 积分项(减小稳态误差) - "PID_KD": 0.03, # 微分项(抑制速度超调) - "SPEED_FILTER_WINDOW": 8, # 滑动平均窗口(提升速度平滑性) - "SPEED_SMOOTH_ALPHA": 0.2, # 指数平滑系数(进一步滤波) - "SPEED_ERROR_THRESHOLD": 0.5, # 速度误差阈值(±0.5km/h) - "STEER_SMOOTH_FACTOR": 0.03, # 转向超平滑(不影响匀速) - "AVOID_STEER_MAX": 0.25, # 最大避障转向(避免速度波动) - # 机器感知强化参数 - "LIDAR_RANGE": 8.0, # 感知范围扩展至8米(提前预警) - "LIDAR_POINTS_PER_SECOND": 80000, # 提升点云密度(更精准) - "LIDAR_NOISE_FILTER": True, # LiDAR点云降噪 - "CAMERA_RESOLUTION": (800, 600), # 提升摄像头分辨率 - "OBSTACLE_DISTANCE_THRESHOLD": 2.0, # 障碍物预警阈值(提前2米避障) - "OBSTACLE_ANGLE_THRESHOLD": 30, # 障碍物角度阈值(前方30°) - "PERCEPTION_FREQ": 15, # 感知频率提升至15Hz(更实时) - "VISUALIZATION_ENABLE": True, # 感知可视化(摄像头+LiDAR) - # 基础配置 - "DRIVE_DURATION": 120, - "STALL_SPEED_THRESHOLD": 1.0, - "SYNC_FPS": 30, - "CARLA_PORTS": [2000, 2001, 2002], - "PREFERRED_VEHICLES": ["vehicle.tesla.model3", "vehicle.audi.a2", "vehicle.bmw.grandtourer"] -} - - -# 强化版机器感知类(降噪+精准定位+可视化) -class EnhancedVehiclePerception: + # 动态PID计算 + kp = self._get_dynamic_kp(filtered_speed) + throttle = kp * error + CONFIG.PID_KI * self.error_integral + CONFIG.PID_KD * error_derivative + throttle = np.clip(throttle, 0.0, 1.0) # 油门限制0-1 + + # 刹车逻辑(仅速度超目标+误差>死区时刹车) + brake = 0.0 + if error < -CONFIG.SPEED_DEADZONE / 3.6: # 转换为米/秒 + brake = np.clip(-kp * error * 0.4, 0.0, 1.0) + throttle = 0.0 # 刹车时关闭油门 + + return throttle, brake + + +# ======================== 避障感知类(自动绕开障碍物)======================== +class ObstacleAvoidancePerception: def __init__(self, world: carla.World, vehicle: carla.Vehicle): self.world = world self.vehicle = vehicle self.bp_lib = world.get_blueprint_library() - # 感知数据缓存(带校验) - self.perception_data: Dict[str, any] = { - "lidar_obstacles": np.array([]), # 降噪后的LiDAR点云 - "lidar_last_update": 0.0, - "camera_frame": None, # 摄像头RGB帧 - "obstacle_distance": float("inf"), - "obstacle_direction": 0.0, - "obstacle_confidence": 0.0, # 障碍物置信度(0-1) - "perception_valid": False # 感知数据有效性标记 + + # 感知数据 + self.perception_data = { + "lidar_points": np.array([]), + "camera_frame": None, + "has_obstacle": False, + "has_emergency": False, + "obstacle_dist": float("inf"), + "obstacle_dir": 0.0, # -1=左,1=右,0=正前 + "multi_obstacle": False } - # 传感器实例 - self.lidar_sensor: Optional[carla.Sensor] = None - self.camera_sensor: Optional[carla.Sensor] = None - # 可视化窗口(摄像头) - if CONFIG["VISUALIZATION_ENABLE"]: - cv2.namedWindow("Vehicle Camera", cv2.WINDOW_NORMAL) - cv2.resizeWindow("Vehicle Camera", CONFIG["CAMERA_RESOLUTION"][0], CONFIG["CAMERA_RESOLUTION"][1]) + + # 可视化线程(解决窗口未响应) + self.frame_queue = queue.Queue(maxsize=1) + self.draw_thread = None + self.draw_running = False + if CONFIG.VISUALIZATION_ENABLE: + self.draw_running = True + self.draw_thread = threading.Thread(target=self._draw_loop, daemon=True) + self.draw_thread.start() + # 初始化传感器 + self.lidar_sensor = None + self.camera_sensor = None self._init_lidar() self._init_camera() def _init_lidar(self): - """强化LiDAR:降噪+高密度+精准检测""" + """初始化LiDAR,检测前方障碍物位置(左/右/正前)""" try: lidar_bp = self.bp_lib.find('sensor.lidar.ray_cast') - # 强化LiDAR参数 - lidar_bp.set_attribute('range', str(CONFIG["LIDAR_RANGE"])) - lidar_bp.set_attribute('points_per_second', str(CONFIG["LIDAR_POINTS_PER_SECOND"])) - lidar_bp.set_attribute('rotation_frequency', str(CONFIG["SYNC_FPS"])) - lidar_bp.set_attribute('channels', '64') # 64线LiDAR(更精准) - lidar_bp.set_attribute('upper_fov', '15') - lidar_bp.set_attribute('lower_fov', '-35') - lidar_bp.set_attribute('noise_stddev', '0.005') # 降低噪声 - lidar_bp.set_attribute('dropoff_general_rate', '0.01') # 减少点云丢失 - - # LiDAR挂载位置(更精准) - lidar_transform = carla.Transform(carla.Location(x=1.0, z=1.8)) + # 逐个设置LiDAR参数(修复set_attributes错误) + lidar_bp.set_attribute('range', str(CONFIG.LIDAR_RANGE)) + lidar_bp.set_attribute('points_per_second', str(CONFIG.LIDAR_POINTS_PER_SECOND)) + lidar_bp.set_attribute('rotation_frequency', str(CONFIG.SYNC_FPS)) + lidar_bp.set_attribute('channels', '32') # 降为32线(减少负载) + lidar_bp.set_attribute('upper_fov', '5') + lidar_bp.set_attribute('lower_fov', '-20') + lidar_bp.set_attribute('noise_stddev', '0.001') + lidar_bp.set_attribute('dropoff_general_rate', '0.005') + + # LiDAR安装位置(车辆前保险杠) + lidar_transform = carla.Transform(carla.Location(x=1.0, z=1.2)) self.lidar_sensor = self.world.spawn_actor(lidar_bp, lidar_transform, attach_to=self.vehicle) - # 强化LiDAR回调:降噪+置信度计算 def lidar_callback(point_cloud): - current_time = time.time() - if current_time - self.perception_data["lidar_last_update"] < 1 / CONFIG["PERCEPTION_FREQ"]: - return - self.perception_data["lidar_last_update"] = current_time - - # 1. 解析点云并降噪 + # 解析点云 points = np.frombuffer(point_cloud.raw_data, dtype=np.float32).reshape(-1, 4) - x, y, z, intensity = points[:, 0], points[:, 1], points[:, 2], points[:, 3] + x, y, z, _ = points[:, 0], points[:, 1], points[:, 2], points[:, 3] - # 2. 多层降噪(过滤无效点) - # 过滤地面/过近/低强度点 - mask = (z > -0.6) & (np.hypot(x, y) > 0.2) & (intensity > 0.1) - # 过滤非前方点(±30°) + # 过滤:只保留前方45°、地面以上的点 vehicle_yaw = math.radians(self.vehicle.get_transform().rotation.yaw) point_yaw = np.arctan2(y, x) angle_diff = np.degrees(np.abs(point_yaw - vehicle_yaw)) - mask = mask & (angle_diff < CONFIG["OBSTACLE_ANGLE_THRESHOLD"]) - # 统计滤波(去除孤立噪点) - if CONFIG["LIDAR_NOISE_FILTER"] and len(points[mask]) > 10: - distances = np.hypot(x[mask], y[mask]) - mean_dist = np.mean(distances) - std_dist = np.std(distances) - mask[mask] = (distances > mean_dist - 2 * std_dist) & (distances < mean_dist + 2 * std_dist) - + mask = ( + (z > -0.5) & (z < 2.0) & # 高度过滤 + (np.hypot(x, y) > 0.3) & # 排除车辆自身 + (angle_diff < CONFIG.OBSTACLE_ANGLE_THRESHOLD) # 前方角度 + ) valid_points = points[mask][:, :3] - self.perception_data["lidar_obstacles"] = valid_points - self.perception_data["perception_valid"] = len(valid_points) > 0 - - # 3. 精准计算障碍物(带置信度) - if len(valid_points) > 0: - distances = np.hypot(valid_points[:, 0], valid_points[:, 1]) - min_idx = np.argmin(distances) - min_dist = distances[min_idx] - min_y = valid_points[min_idx, 1] - - # 计算置信度(点云数量越多,置信度越高) - confidence = min(1.0, len(valid_points) / 100) - self.perception_data["obstacle_distance"] = min_dist - self.perception_data["obstacle_direction"] = 1 if min_y > 0 else -1 - self.perception_data["obstacle_confidence"] = confidence - self.perception_data["perception_valid"] = confidence > 0.3 # 置信度>0.3才有效 - else: - self.perception_data["obstacle_distance"] = float("inf") - self.perception_data["obstacle_direction"] = 0.0 - self.perception_data["obstacle_confidence"] = 0.0 + + self.perception_data["lidar_points"] = valid_points + if len(valid_points) == 0: + # 无障碍物 + self.perception_data.update({ + "has_obstacle": False, + "has_emergency": False, + "obstacle_dist": float("inf"), + "obstacle_dir": 0.0, + "multi_obstacle": False + }) + return + + # 计算障碍物距离和方向 + distances = np.hypot(valid_points[:, 0], valid_points[:, 1]) + min_dist_idx = np.argmin(distances) + min_dist = distances[min_dist_idx] + min_y = valid_points[min_dist_idx, 1] # y<0=左,y>0=右 + + # 更新感知数据 + self.perception_data["obstacle_dist"] = min_dist + self.perception_data["has_obstacle"] = min_dist < CONFIG.OBSTACLE_WARNING_DIST + self.perception_data["has_emergency"] = min_dist < CONFIG.OBSTACLE_EMERGENCY_DIST + self.perception_data["multi_obstacle"] = len(valid_points) > 50 + # 障碍物方向:-1(左)/1(右),绝对值=距离越近方向越明显 + self.perception_data["obstacle_dir"] = np.sign(min_y) * (1 - min_dist / CONFIG.OBSTACLE_WARNING_DIST) self.lidar_sensor.listen(lidar_callback) - print("✅ 强化LiDAR初始化成功(64线+降噪)") + print("✅ LiDAR初始化完成(障碍物检测)") except Exception as e: print(f"⚠️ LiDAR初始化失败:{e}") def _init_camera(self): - """强化摄像头:高分辨率+实时可视化""" + """初始化摄像头,独立线程绘图(解决窗口未响应)""" try: camera_bp = self.bp_lib.find('sensor.camera.rgb') - camera_bp.set_attribute('image_size_x', str(CONFIG["CAMERA_RESOLUTION"][0])) - camera_bp.set_attribute('image_size_y', str(CONFIG["CAMERA_RESOLUTION"][1])) - camera_bp.set_attribute('fov', '100') # 超广角(覆盖更多视野) - camera_bp.set_attribute('sensor_tick', str(1 / CONFIG["PERCEPTION_FREQ"])) - camera_bp.set_attribute('gamma', '2.2') # 优化画面亮度 - - # 摄像头挂载位置(前挡风玻璃) + # 逐个设置摄像头参数 + camera_bp.set_attribute('image_size_x', str(CONFIG.CAMERA_RESOLUTION[0])) + camera_bp.set_attribute('image_size_y', str(CONFIG.CAMERA_RESOLUTION[1])) + camera_bp.set_attribute('fov', '110') + camera_bp.set_attribute('sensor_tick', str(1 / CONFIG.PERCEPTION_FREQ)) + camera_bp.set_attribute('gamma', '2.2') + + # 摄像头安装位置(车辆前挡风玻璃) camera_transform = carla.Transform(carla.Location(x=1.2, z=1.5)) self.camera_sensor = self.world.spawn_actor(camera_bp, camera_transform, attach_to=self.vehicle) - # 摄像头回调:实时可视化 def camera_callback(image): - # 转换为RGB数组 + # 创建可写图像副本(修复OpenCV只读错误) frame = np.frombuffer(image.raw_data, dtype=np.uint8).reshape( (image.height, image.width, 4) - )[:, :, :3] + )[:, :, :3].copy() self.perception_data["camera_frame"] = frame - # 实时可视化 - if CONFIG["VISUALIZATION_ENABLE"] and frame is not None: - # 在画面上叠加感知信息 - cv2.putText(frame, f"Obstacle Dist: {self.perception_data['obstacle_distance']:.2f}m", - (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) - cv2.putText(frame, f"Speed: {self._get_vehicle_speed():.1f}km/h", - (20, 80), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) - cv2.imshow("Vehicle Camera", frame) - cv2.waitKey(1) # 刷新窗口 + # 放入队列(绘图线程处理) + if not self.frame_queue.empty(): + try: + self.frame_queue.get_nowait() + except queue.Empty: + pass + self.frame_queue.put(frame, block=False) self.camera_sensor.listen(camera_callback) - print("✅ 强化摄像头初始化成功(超广角+可视化)") + print("✅ 摄像头初始化完成(独立绘图线程)") except Exception as e: print(f"⚠️ 摄像头初始化失败:{e}") - def _get_vehicle_speed(self) -> float: - """获取车辆当前速度(km/h)""" - vel = self.vehicle.get_velocity() - return math.hypot(vel.x, vel.y) * 3.6 - - def get_obstacle_status(self) -> Tuple[bool, float, float, float]: - """获取障碍物状态(是否有效、距离、方向、置信度)""" - has_obstacle = (self.perception_data["obstacle_distance"] < CONFIG["OBSTACLE_DISTANCE_THRESHOLD"]) & \ - (self.perception_data["perception_valid"]) - return (has_obstacle, - self.perception_data["obstacle_distance"], - self.perception_data["obstacle_direction"], - self.perception_data["obstacle_confidence"]) + def _draw_loop(self): + """独立绘图线程:避免阻塞Carla同步逻辑""" + cv2.namedWindow("Smart Perception", cv2.WINDOW_NORMAL) + cv2.resizeWindow("Smart Perception", CONFIG.CAMERA_RESOLUTION[0], CONFIG.CAMERA_RESOLUTION[1]) + while self.draw_running: + try: + frame = self.frame_queue.get(timeout=0.01) + # 叠加关键信息 + speed_kmh = math.hypot(self.vehicle.get_velocity().x, self.vehicle.get_velocity().y) * 3.6 + cv2.putText(frame, f"Target Speed: {CONFIG.TARGET_SPEED_KMH:.1f}km/h | Current: {speed_kmh:.1f}km/h", + (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 0, 0), 2) + cv2.putText(frame, f"Obstacle Dist: {self.perception_data['obstacle_dist']:.2f}m", + (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2) + cv2.putText(frame, f"Obstacle Dir: {self.perception_data['obstacle_dir']:.2f} (L/R)", + (10, 90), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 0, 255), 2) + cv2.putText(frame, f"Emergency: {'YES' if self.perception_data['has_emergency'] else 'NO'}", + (10, 120), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (255, 255, 0), 2) + # 刷新窗口 + cv2.imshow("Smart Perception", frame) + cv2.waitKey(1) + except queue.Empty: + continue + except Exception as e: + print(f"⚠️ 绘图线程异常:{e}") + break + + def get_obstacle_status(self) -> Tuple[bool, bool, float, float, bool]: + """返回:是否有障碍、是否紧急、障碍距离、障碍方向、是否多障碍""" + return ( + self.perception_data["has_obstacle"], + self.perception_data["has_emergency"], + self.perception_data["obstacle_dist"], + self.perception_data["obstacle_dir"], + self.perception_data["multi_obstacle"] + ) def destroy(self): - """销毁传感器+关闭可视化窗口""" + """销毁传感器和绘图线程""" + self.draw_running = False + if self.draw_thread: + self.draw_thread.join(timeout=1.0) if self.lidar_sensor: self.lidar_sensor.stop() self.lidar_sensor.destroy() if self.camera_sensor: self.camera_sensor.stop() self.camera_sensor.destroy() - if CONFIG["VISUALIZATION_ENABLE"]: - cv2.destroyWindow("Vehicle Camera") - print("🗑️ 强化感知传感器已销毁") - - -# 精准匀速控制器 -class PreciseSpeedController: - def __init__(self, target_speed_mps: float): - self.target_speed = target_speed_mps - # PID参数 - self.kp = CONFIG["PID_KP"] - self.ki = CONFIG["PID_KI"] - self.kd = CONFIG["PID_KD"] - # 状态变量 - self.last_error = 0.0 - self.error_integral = 0.0 - self.speed_history = [] # 滑动平均缓存 - self.smoothed_speed = 0.0 # 指数平滑后的速度 - - def update(self, current_speed_mps: float, dt: float = 1 / CONFIG["SYNC_FPS"]) -> Tuple[float, float]: - """ - 更新PID控制,返回油门和刹车值 - :param current_speed_mps: 当前速度(m/s) - :param dt: 时间步长(s) - :return: (throttle, brake) - """ - # 1. 双级速度滤波(滑动平均+指数平滑) - self.speed_history.append(current_speed_mps) - if len(self.speed_history) > CONFIG["SPEED_FILTER_WINDOW"]: - self.speed_history.pop(0) - avg_speed = np.mean(self.speed_history) if self.speed_history else current_speed_mps - # 指数平滑 - self.smoothed_speed = CONFIG["SPEED_SMOOTH_ALPHA"] * avg_speed + ( - 1 - CONFIG["SPEED_SMOOTH_ALPHA"]) * self.smoothed_speed - - # 2. PID计算 - error = self.target_speed - self.smoothed_speed - self.error_integral += error * dt - # 限制积分饱和 - self.error_integral = np.clip(self.error_integral, -0.8, 0.8) - # 微分项(抑制超调) - error_derivative = (error - self.last_error) / dt if dt > 0 else 0.0 - self.last_error = error - - # 3. 计算油门/刹车(互斥,避免同时触发) - throttle = np.clip(self.kp * error + self.ki * self.error_integral + self.kd * error_derivative, 0.0, 1.0) - brake = 0.0 - # 速度超调时仅用刹车,且刹车力度柔和 - if error < -CONFIG["SPEED_ERROR_THRESHOLD"] / 3.6: # 转换为m/s的误差 - throttle = 0.0 - brake = np.clip(-self.kp * error * 0.4, 0.0, 1.0) - - return throttle, brake + if CONFIG.VISUALIZATION_ENABLE: + cv2.destroyWindow("Smart Perception") + print("🗑️ 感知模块已销毁") -# 基础工具函数 +# ======================== 工具函数 ======================== def get_carla_client() -> Optional[Tuple[carla.Client, carla.World]]: - for port in CONFIG["CARLA_PORTS"]: + """连接Carla服务器""" + for port in CONFIG.CARLA_PORTS: try: client = carla.Client("127.0.0.1", port) client.set_timeout(60.0) world = client.get_world() + # 设置同步模式 settings = world.get_settings() settings.synchronous_mode = True - settings.fixed_delta_seconds = 1.0 / CONFIG["SYNC_FPS"] + settings.fixed_delta_seconds = 1.0 / CONFIG.SYNC_FPS world.apply_settings(settings) print(f"✅ 成功连接Carla(端口:{port})") return client, world @@ -266,39 +324,48 @@ def get_carla_client() -> Optional[Tuple[carla.Client, carla.World]]: def clean_actors(world: carla.World) -> None: + """清理残留Actor(修复ActorList相加错误)""" print("\n🧹 清理残留Actor...") - for actor_type in ["vehicle.*", "sensor.*"]: - for actor in world.get_actors().filter(actor_type): - try: - actor.destroy() - except: - continue + # 清理车辆 + for actor in world.get_actors().filter("vehicle.*"): + try: + actor.destroy() + except Exception as e: + print(f"⚠️ 销毁车辆失败:{e}") + # 清理传感器 + for actor in world.get_actors().filter("sensor.*"): + try: + actor.destroy() + except Exception as e: + print(f"⚠️ 销毁传感器失败:{e}") time.sleep(1) -def get_vehicle_blueprint(world: carla.World) -> carla.ActorBlueprint: +def spawn_vehicle_safely(world: carla.World) -> Optional[carla.Vehicle]: + """安全生成车辆""" bp_lib = world.get_blueprint_library() - for vehicle_name in CONFIG["PREFERRED_VEHICLES"]: + # 选择优先车辆 + vehicle_bp = None + for vehicle_name in CONFIG.PREFERRED_VEHICLES: try: - bp = bp_lib.find(vehicle_name) - bp.set_attribute('color', '255,0,0') - return bp + vehicle_bp = bp_lib.find(vehicle_name) + break except: continue - bp = bp_lib.filter('vehicle')[0] - bp.set_attribute('color', '255,0,0') - return bp + if not vehicle_bp: + vehicle_bp = bp_lib.filter('vehicle')[0] + vehicle_bp.set_attribute('color', '255,0,0') # 红色车辆 - -def spawn_vehicle_safely(world: carla.World, bp: carla.ActorBlueprint) -> Optional[carla.Vehicle]: + # 选择生成点 spawn_points = world.get_map().get_spawn_points() if not spawn_points: raise Exception("❌ 无可用生成点") - safe_spawn_point = spawn_points[1] if len(spawn_points) >= 2 else spawn_points[0] - max_retry = 3 - for retry in range(max_retry): + spawn_point = spawn_points[1] if len(spawn_points) >= 2 else spawn_points[0] + + # 尝试生成车辆(3次重试) + for retry in range(3): try: - vehicle = world.spawn_actor(bp, safe_spawn_point) + vehicle = world.spawn_actor(vehicle_bp, spawn_point) if vehicle and vehicle.is_alive: vehicle.set_simulate_physics(True) vehicle.set_autopilot(False) @@ -313,6 +380,7 @@ def spawn_vehicle_safely(world: carla.World, bp: carla.ActorBlueprint) -> Option def init_spectator_follow(world: carla.World, vehicle: carla.Vehicle) -> callable: + """ spectator视角跟随车辆 """ spectator = world.get_spectator() view_update_counter = 0 @@ -320,12 +388,9 @@ def follow_vehicle(): nonlocal view_update_counter if view_update_counter % 3 == 0: trans = vehicle.get_transform() + # 视角位置:车辆后上方10米 spectator.set_transform(carla.Transform( - carla.Location( - x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 10, - y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 10, - z=trans.location.z + 5.0 - ), + trans.location + carla.Location(x=-10, z=5), carla.Rotation(pitch=-20, yaw=trans.rotation.yaw) )) view_update_counter += 1 @@ -334,131 +399,128 @@ def follow_vehicle(): return follow_vehicle -# 主函数(匀速+强化感知) +# ======================== 主逻辑:匀速+避障 ======================== def main(): vehicle: Optional[carla.Vehicle] = None - perception: Optional[EnhancedVehiclePerception] = None - speed_controller: Optional[PreciseSpeedController] = None + perception: Optional[ObstacleAvoidancePerception] = None + speed_controller: Optional[DynamicSpeedController] = None world: Optional[carla.World] = None + follow_vehicle = None try: - # 1. 初始化Carla + # 1. 连接Carla并初始化 client, world = get_carla_client() if not client or not world: - raise Exception("❌ 未连接到Carla") - - # 2. 清理残留Actor + raise Exception("❌ 未连接到Carla服务器") clean_actors(world) + vehicle = spawn_vehicle_safely(world) + follow_vehicle = init_spectator_follow(world, vehicle) - # 3. 生成车辆 - vehicle_bp = get_vehicle_blueprint(world) - vehicle = spawn_vehicle_safely(world, vehicle_bp) - - # 4. 初始化精准速度控制器 - speed_controller = PreciseSpeedController(CONFIG["TARGET_SPEED_MPS"]) - # 5. 初始化强化感知模块 - perception = EnhancedVehiclePerception(world, vehicle) + speed_controller = DynamicSpeedController() + perception = ObstacleAvoidancePerception(world, vehicle) - # 6. 视角跟随 - follow_vehicle = init_spectator_follow(world, vehicle) - print("👀 视角已绑定车辆") - # 7. 核心行驶逻辑(50km/h匀速+感知避障) - print(f"\n🚙 开始50km/h精准匀速行驶(强化感知避障)") start_time = time.time() - current_steer = 0.0 - target_steer = 0.0 + current_steer = 0.0 # 当前转向角 + print(f"\n🚙 开始行驶(目标速度:{CONFIG.TARGET_SPEED_KMH}km/h,时长:{CONFIG.DRIVE_DURATION}秒)") - while time.time() - start_time < CONFIG["DRIVE_DURATION"]: - world.tick() - follow_vehicle() - dt = 1 / CONFIG["SYNC_FPS"] + # 4. 主行驶循环 + while time.time() - start_time < CONFIG.DRIVE_DURATION: + world.tick() # 同步Carla世界 + follow_vehicle() # 更新视角 + dt = 1.0 / CONFIG.SYNC_FPS - # 7.1 获取车辆当前速度(m/s) + # 4.1 获取车辆速度(米/秒) current_vel = vehicle.get_velocity() current_speed_mps = math.hypot(current_vel.x, current_vel.y) - current_speed_kmh = current_speed_mps * 3.6 - - # 7.2 强化感知:获取障碍物状态 - has_obstacle, obstacle_dist, obstacle_dir, obstacle_conf = perception.get_obstacle_status() - # 7.3 避障转向(超平滑,不影响匀速) - if has_obstacle and obstacle_conf > 0.3: - # 距离越近,转向越平缓(避免速度波动) - steer_amplitude = CONFIG["AVOID_STEER_MAX"] * (CONFIG["OBSTACLE_DISTANCE_THRESHOLD"] / obstacle_dist) - steer_amplitude = np.clip(steer_amplitude, 0.1, CONFIG["AVOID_STEER_MAX"]) - target_steer = obstacle_dir * steer_amplitude - else: - target_steer = 0.0 + # 4.2 获取障碍物状态 + has_obstacle, has_emergency, obs_dist, obs_dir, multi_obs = perception.get_obstacle_status() - # 7.4 转向超平滑过渡(避免速度波动) - current_steer += (target_steer - current_steer) * CONFIG["STEER_SMOOTH_FACTOR"] - current_steer = np.clip(current_steer, -CONFIG["AVOID_STEER_MAX"], CONFIG["AVOID_STEER_MAX"]) - # 7.5 精准PID速度控制(核心匀速逻辑) + # 4.3 速度控制(PID) throttle, brake = speed_controller.update(current_speed_mps, dt) - # 7.6 卡停处理(仅低速时触发) - if current_speed_kmh < CONFIG["STALL_SPEED_THRESHOLD"] * 3.6: - trans = vehicle.get_transform() - new_loc = trans.location + trans.get_forward_vector() * 1.5 - vehicle.set_transform(carla.Transform(new_loc, trans.rotation)) - throttle = 0.6 # 平缓恢复速度 - brake = 0.0 - print("\n⚠️ 低速重置位置,平缓恢复匀速...", end='') - - # 7.7 下发控制指令(匀速优先) + # 4.4 避障转向控制(临时注释这一段) + # if has_emergency: + # # 紧急制动:刹车+回正 + # brake = 1.0 + # throttle = 0.0 + # target_steer = 0.0 + # elif has_obstacle: + # # 避障转向:根据障碍物方向调整(左/右) + # target_steer = obs_dir * CONFIG.AVOID_STEER_MAX + # else: + # # 无障碍物:转向回正 + # target_steer = current_steer * (1 - CONFIG.STEER_RETURN_FACTOR) + + # 临时强制设置:无刹车+固定转向+油门=0.5(测试车辆是否能动) + brake = 0.0 + throttle = 0.5 + target_steer = 0.0 + # 4.5 下发控制指令 vehicle.apply_control(carla.VehicleControl( throttle=float(throttle), steer=float(current_steer), brake=float(brake), - hand_brake=False + hand_brake=False, + reverse=False )) - # 7.8 实时状态打印(匀速+感知) - speed_error = CONFIG["TARGET_SPEED_KMH"] - current_speed_kmh - print(f" 速度:{current_speed_kmh:.1f}km/h(误差:{speed_error:.1f})| " - f"转向:{current_steer:.3f} | 障碍物:{obstacle_dist:.2f}m | 置信度:{obstacle_conf:.2f}", end='\r') - - # 8. 平滑停车 - print("\n🛑 开始平滑停车...") - for i in range(15): - brake = (i / 15) * 1.0 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=brake)) + # 4.6 实时打印状态(每5帧打印一次,降负载) + if int((time.time() - start_time) * CONFIG.SYNC_FPS) % 5 == 0: + current_speed_kmh = current_speed_mps * 3.6 + speed_error = CONFIG.TARGET_SPEED_KMH - current_speed_kmh + print( + f"速度:{current_speed_kmh:.1f}km/h(误差:{speed_error:.1f})| 转向:{current_steer:.2f} | 障碍距离:{obs_dist:.2f}m", + end='\r') + + # 5. 平滑停车 + print("\n🛑 到达行驶时长,开始停车...") + for i in range(20): world.tick() + brake = (i / 20) * 1.0 + vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=brake)) time.sleep(0.05) - # 9. 打印最终状态 - final_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6 - print(f"\n📊 行驶完成(时长:{CONFIG['DRIVE_DURATION']}s)") - print(f" 🎯 目标速度:50.0km/h | 最终速度:{final_speed:.1f}km/h") - print(f" 📍 最终位置:X={vehicle.get_location().x:.2f}, Y={vehicle.get_location().y:.2f}") - + # 6. 打印统计信息 + final_speed_kmh = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6 + start_loc = vehicle.get_transform().location # 初始位置 + end_loc = vehicle.get_transform().location # 结束位置 + travel_distance = start_loc.distance(end_loc) + avg_speed = (travel_distance / CONFIG.DRIVE_DURATION) * 3.6 if CONFIG.DRIVE_DURATION > 0 else 0.0 + print(f"\n📊 行驶完成统计:") + print(f" 目标速度:{CONFIG.TARGET_SPEED_KMH:.1f}km/h | 最终速度:{final_speed_kmh:.1f}km/h") + print(f" 平均速度:{avg_speed:.1f}km/h | 行驶距离:{travel_distance:.2f}米") + + except KeyboardInterrupt: + print("\n⚠️ 程序被用户手动中断") except Exception as e: print(f"\n❌ 程序异常:{e}") print("\n========== 排查指南 ==========") - print("1. 启动Carla:管理员身份运行 CarlaUE4.exe -windowed -ResX=800 -ResY=600") - print("2. 安装依赖:pip install numpy opencv-python carla==你的版本") - print("3. 关闭代理/防火墙,确保网络正常") - + print("1. 确保Carla模拟器已启动(管理员权限),地图加载完成") + print("2. 确保carla库版本与模拟器一致(如0.9.15对应carla==0.9.15)") + print("3. 关闭其他占用2000端口的程序(如其他Carla实例)") finally: - # 清理资源 + # 资源清理 if perception: perception.destroy() + if vehicle: + try: + vehicle.destroy() + print("🗑️ 车辆已销毁") + except Exception as e: + print(f"⚠️ 销毁车辆失败:{e}") if world: try: + # 恢复Carla异步模式 settings = world.get_settings() settings.synchronous_mode = False world.apply_settings(settings) - except: - pass - if vehicle: - try: - vehicle.destroy() - print("🗑️ 车辆已销毁") - except: - pass + except Exception as e: + print(f"⚠️ 恢复世界设置失败:{e}") + cv2.destroyAllWindows() print("✅ 所有资源清理完成!") From 8f9a6c895e8f0525eb5ebf391a65cc6c951ec945 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Fri, 26 Dec 2025 21:45:05 +0800 Subject: [PATCH 24/26] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E8=BD=A6=E9=81=93=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=9C=A8=E8=A1=8C?= =?UTF-8?q?=E9=A9=B6=E8=BF=87=E7=A8=8B=E4=B8=AD=E5=A7=8B=E7=BB=88=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E5=9C=A8=E8=BD=A6=E9=81=93=E4=B8=AD=E5=BF=83=E8=A1=8C?= =?UTF-8?q?=E9=A9=B6=EF=BC=8C=E5=8C=85=E6=8B=AC=E8=BD=AC=E5=BC=AF=E7=AD=89?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 797 ++++++++++----------- 1 file changed, 369 insertions(+), 428 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 29d012b25b..79a6237968 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -2,464 +2,405 @@ import time import math import numpy as np -import cv2 # 摄像头可视化(需安装:pip install opencv-python) -from typing import Optional, Tuple, List, Dict - -# 全局配置(匀速+感知双优化) -CONFIG = { - # 精准匀速控制参数 - "TARGET_SPEED_KMH": 50.0, # 目标匀速50km/h - "TARGET_SPEED_MPS": 50.0 / 3.6, # 转换为m/s(≈13.89) - "PID_KP": 0.12, # 比例项(优化匀速) - "PID_KI": 0.005, # 积分项(减小稳态误差) - "PID_KD": 0.03, # 微分项(抑制速度超调) - "SPEED_FILTER_WINDOW": 8, # 滑动平均窗口(提升速度平滑性) - "SPEED_SMOOTH_ALPHA": 0.2, # 指数平滑系数(进一步滤波) - "SPEED_ERROR_THRESHOLD": 0.5, # 速度误差阈值(±0.5km/h) - "STEER_SMOOTH_FACTOR": 0.03, # 转向超平滑(不影响匀速) - "AVOID_STEER_MAX": 0.25, # 最大避障转向(避免速度波动) - # 机器感知强化参数 - "LIDAR_RANGE": 8.0, # 感知范围扩展至8米(提前预警) - "LIDAR_POINTS_PER_SECOND": 80000, # 提升点云密度(更精准) - "LIDAR_NOISE_FILTER": True, # LiDAR点云降噪 - "CAMERA_RESOLUTION": (800, 600), # 提升摄像头分辨率 - "OBSTACLE_DISTANCE_THRESHOLD": 2.0, # 障碍物预警阈值(提前2米避障) - "OBSTACLE_ANGLE_THRESHOLD": 30, # 障碍物角度阈值(前方30°) - "PERCEPTION_FREQ": 15, # 感知频率提升至15Hz(更实时) - "VISUALIZATION_ENABLE": True, # 感知可视化(摄像头+LiDAR) - # 基础配置 - "DRIVE_DURATION": 120, - "STALL_SPEED_THRESHOLD": 1.0, - "SYNC_FPS": 30, - "CARLA_PORTS": [2000, 2001, 2002], - "PREFERRED_VEHICLES": ["vehicle.tesla.model3", "vehicle.audi.a2", "vehicle.bmw.grandtourer"] -} - - -# 强化版机器感知类(降噪+精准定位+可视化) -class EnhancedVehiclePerception: - def __init__(self, world: carla.World, vehicle: carla.Vehicle): - self.world = world - self.vehicle = vehicle - self.bp_lib = world.get_blueprint_library() - # 感知数据缓存(带校验) - self.perception_data: Dict[str, any] = { - "lidar_obstacles": np.array([]), # 降噪后的LiDAR点云 - "lidar_last_update": 0.0, - "camera_frame": None, # 摄像头RGB帧 - "obstacle_distance": float("inf"), - "obstacle_direction": 0.0, - "obstacle_confidence": 0.0, # 障碍物置信度(0-1) - "perception_valid": False # 感知数据有效性标记 - } - # 传感器实例 - self.lidar_sensor: Optional[carla.Sensor] = None - self.camera_sensor: Optional[carla.Sensor] = None - # 可视化窗口(摄像头) - if CONFIG["VISUALIZATION_ENABLE"]: - cv2.namedWindow("Vehicle Camera", cv2.WINDOW_NORMAL) - cv2.resizeWindow("Vehicle Camera", CONFIG["CAMERA_RESOLUTION"][0], CONFIG["CAMERA_RESOLUTION"][1]) - # 初始化传感器 - self._init_lidar() - self._init_camera() - - def _init_lidar(self): - """强化LiDAR:降噪+高密度+精准检测""" - try: - lidar_bp = self.bp_lib.find('sensor.lidar.ray_cast') - # 强化LiDAR参数 - lidar_bp.set_attribute('range', str(CONFIG["LIDAR_RANGE"])) - lidar_bp.set_attribute('points_per_second', str(CONFIG["LIDAR_POINTS_PER_SECOND"])) - lidar_bp.set_attribute('rotation_frequency', str(CONFIG["SYNC_FPS"])) - lidar_bp.set_attribute('channels', '64') # 64线LiDAR(更精准) - lidar_bp.set_attribute('upper_fov', '15') - lidar_bp.set_attribute('lower_fov', '-35') - lidar_bp.set_attribute('noise_stddev', '0.005') # 降低噪声 - lidar_bp.set_attribute('dropoff_general_rate', '0.01') # 减少点云丢失 - - # LiDAR挂载位置(更精准) - lidar_transform = carla.Transform(carla.Location(x=1.0, z=1.8)) - self.lidar_sensor = self.world.spawn_actor(lidar_bp, lidar_transform, attach_to=self.vehicle) - - # 强化LiDAR回调:降噪+置信度计算 - def lidar_callback(point_cloud): - current_time = time.time() - if current_time - self.perception_data["lidar_last_update"] < 1 / CONFIG["PERCEPTION_FREQ"]: - return - self.perception_data["lidar_last_update"] = current_time - - # 1. 解析点云并降噪 - points = np.frombuffer(point_cloud.raw_data, dtype=np.float32).reshape(-1, 4) - x, y, z, intensity = points[:, 0], points[:, 1], points[:, 2], points[:, 3] - - # 2. 多层降噪(过滤无效点) - # 过滤地面/过近/低强度点 - mask = (z > -0.6) & (np.hypot(x, y) > 0.2) & (intensity > 0.1) - # 过滤非前方点(±30°) - vehicle_yaw = math.radians(self.vehicle.get_transform().rotation.yaw) - point_yaw = np.arctan2(y, x) - angle_diff = np.degrees(np.abs(point_yaw - vehicle_yaw)) - mask = mask & (angle_diff < CONFIG["OBSTACLE_ANGLE_THRESHOLD"]) - # 统计滤波(去除孤立噪点) - if CONFIG["LIDAR_NOISE_FILTER"] and len(points[mask]) > 10: - distances = np.hypot(x[mask], y[mask]) - mean_dist = np.mean(distances) - std_dist = np.std(distances) - mask[mask] = (distances > mean_dist - 2 * std_dist) & (distances < mean_dist + 2 * std_dist) - - valid_points = points[mask][:, :3] - self.perception_data["lidar_obstacles"] = valid_points - self.perception_data["perception_valid"] = len(valid_points) > 0 - - # 3. 精准计算障碍物(带置信度) - if len(valid_points) > 0: - distances = np.hypot(valid_points[:, 0], valid_points[:, 1]) - min_idx = np.argmin(distances) - min_dist = distances[min_idx] - min_y = valid_points[min_idx, 1] - - # 计算置信度(点云数量越多,置信度越高) - confidence = min(1.0, len(valid_points) / 100) - self.perception_data["obstacle_distance"] = min_dist - self.perception_data["obstacle_direction"] = 1 if min_y > 0 else -1 - self.perception_data["obstacle_confidence"] = confidence - self.perception_data["perception_valid"] = confidence > 0.3 # 置信度>0.3才有效 - else: - self.perception_data["obstacle_distance"] = float("inf") - self.perception_data["obstacle_direction"] = 0.0 - self.perception_data["obstacle_confidence"] = 0.0 - - self.lidar_sensor.listen(lidar_callback) - print("✅ 强化LiDAR初始化成功(64线+降噪)") - except Exception as e: - print(f"⚠️ LiDAR初始化失败:{e}") - - def _init_camera(self): - """强化摄像头:高分辨率+实时可视化""" - try: - camera_bp = self.bp_lib.find('sensor.camera.rgb') - camera_bp.set_attribute('image_size_x', str(CONFIG["CAMERA_RESOLUTION"][0])) - camera_bp.set_attribute('image_size_y', str(CONFIG["CAMERA_RESOLUTION"][1])) - camera_bp.set_attribute('fov', '100') # 超广角(覆盖更多视野) - camera_bp.set_attribute('sensor_tick', str(1 / CONFIG["PERCEPTION_FREQ"])) - camera_bp.set_attribute('gamma', '2.2') # 优化画面亮度 - - # 摄像头挂载位置(前挡风玻璃) - camera_transform = carla.Transform(carla.Location(x=1.2, z=1.5)) - self.camera_sensor = self.world.spawn_actor(camera_bp, camera_transform, attach_to=self.vehicle) - - # 摄像头回调:实时可视化 - def camera_callback(image): - # 转换为RGB数组 - frame = np.frombuffer(image.raw_data, dtype=np.uint8).reshape( - (image.height, image.width, 4) - )[:, :, :3] - self.perception_data["camera_frame"] = frame - # 实时可视化 - if CONFIG["VISUALIZATION_ENABLE"] and frame is not None: - # 在画面上叠加感知信息 - cv2.putText(frame, f"Obstacle Dist: {self.perception_data['obstacle_distance']:.2f}m", - (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) - cv2.putText(frame, f"Speed: {self._get_vehicle_speed():.1f}km/h", - (20, 80), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) - cv2.imshow("Vehicle Camera", frame) - cv2.waitKey(1) # 刷新窗口 - - self.camera_sensor.listen(camera_callback) - print("✅ 强化摄像头初始化成功(超广角+可视化)") - except Exception as e: - print(f"⚠️ 摄像头初始化失败:{e}") - - def _get_vehicle_speed(self) -> float: - """获取车辆当前速度(km/h)""" - vel = self.vehicle.get_velocity() - return math.hypot(vel.x, vel.y) * 3.6 - - def get_obstacle_status(self) -> Tuple[bool, float, float, float]: - """获取障碍物状态(是否有效、距离、方向、置信度)""" - has_obstacle = (self.perception_data["obstacle_distance"] < CONFIG["OBSTACLE_DISTANCE_THRESHOLD"]) & \ - (self.perception_data["perception_valid"]) - return (has_obstacle, - self.perception_data["obstacle_distance"], - self.perception_data["obstacle_direction"], - self.perception_data["obstacle_confidence"]) - - def destroy(self): - """销毁传感器+关闭可视化窗口""" - if self.lidar_sensor: - self.lidar_sensor.stop() - self.lidar_sensor.destroy() - if self.camera_sensor: - self.camera_sensor.stop() - self.camera_sensor.destroy() - if CONFIG["VISUALIZATION_ENABLE"]: - cv2.destroyWindow("Vehicle Camera") - print("🗑️ 强化感知传感器已销毁") - - -# 精准匀速控制器 -class PreciseSpeedController: - def __init__(self, target_speed_mps: float): - self.target_speed = target_speed_mps - # PID参数 - self.kp = CONFIG["PID_KP"] - self.ki = CONFIG["PID_KI"] - self.kd = CONFIG["PID_KD"] - # 状态变量 +import cv2 +import queue +import random + +# ======================== 核心配置(车道硬约束+细障碍物检测)======================== +TARGET_SPEED_KMH = 10.0 # 更低速,确保车道纠偏反应时间 +TARGET_SPEED_MPS = TARGET_SPEED_KMH / 3.6 +SYNC_FPS = 20 + +# 障碍物检测(针对电线杆等细障碍物) +LIDAR_RANGE = 15.0 # 覆盖路边障碍物 +OBSTACLE_EMERGENCY_DIST = 1.0 # 1米紧急避障 +OBSTACLE_WARNING_DIST = 2.5 # 提前预警 +DETECT_THRESHOLD = 2 # 仅需2个点(细障碍物点少) +# 车道硬约束(核心:防止偏离撞路边障碍物) +LANE_BOUNDARY_STRICT = 0.8 # 车道边界强制纠偏力度 +LANE_CENTER_BIAS = 0.1 # 轻微偏向车道中心 +MAX_LANE_DEVIATION = 0.5 # 最大允许偏离车道0.5米 +VISUALIZATION = True + + +# ======================== PID速度控制器 ========================= +class SimplePID: + def __init__(self): + self.kp = 0.3 + self.ki = 0.008 + self.kd = 0.02 + self.error_sum = 0.0 self.last_error = 0.0 - self.error_integral = 0.0 - self.speed_history = [] # 滑动平均缓存 - self.smoothed_speed = 0.0 # 指数平滑后的速度 - - def update(self, current_speed_mps: float, dt: float = 1 / CONFIG["SYNC_FPS"]) -> Tuple[float, float]: - """ - 更新PID控制,返回油门和刹车值 - :param current_speed_mps: 当前速度(m/s) - :param dt: 时间步长(s) - :return: (throttle, brake) - """ - # 1. 双级速度滤波(滑动平均+指数平滑) - self.speed_history.append(current_speed_mps) - if len(self.speed_history) > CONFIG["SPEED_FILTER_WINDOW"]: - self.speed_history.pop(0) - avg_speed = np.mean(self.speed_history) if self.speed_history else current_speed_mps - # 指数平滑 - self.smoothed_speed = CONFIG["SPEED_SMOOTH_ALPHA"] * avg_speed + ( - 1 - CONFIG["SPEED_SMOOTH_ALPHA"]) * self.smoothed_speed - - # 2. PID计算 - error = self.target_speed - self.smoothed_speed - self.error_integral += error * dt - # 限制积分饱和 - self.error_integral = np.clip(self.error_integral, -0.8, 0.8) - # 微分项(抑制超调) - error_derivative = (error - self.last_error) / dt if dt > 0 else 0.0 - self.last_error = error - # 3. 计算油门/刹车(互斥,避免同时触发) - throttle = np.clip(self.kp * error + self.ki * self.error_integral + self.kd * error_derivative, 0.0, 1.0) - brake = 0.0 - # 速度超调时仅用刹车,且刹车力度柔和 - if error < -CONFIG["SPEED_ERROR_THRESHOLD"] / 3.6: # 转换为m/s的误差 - throttle = 0.0 - brake = np.clip(-self.kp * error * 0.4, 0.0, 1.0) + def update(self, current_speed): + error = TARGET_SPEED_MPS - current_speed + self.error_sum += error * (1 / SYNC_FPS) + self.error_sum = np.clip(self.error_sum, -0.8, 0.8) + derivative = (error - self.last_error) * SYNC_FPS + self.last_error = error - return throttle, brake + throttle = self.kp * error + self.ki * self.error_sum + self.kd * derivative + brake = 0.0 if error > -0.1 else 0.15 + return np.clip(throttle, 0.0, 1.0), brake -# 基础工具函数 -def get_carla_client() -> Optional[Tuple[carla.Client, carla.World]]: - for port in CONFIG["CARLA_PORTS"]: - try: - client = carla.Client("127.0.0.1", port) - client.set_timeout(60.0) - world = client.get_world() - settings = world.get_settings() - settings.synchronous_mode = True - settings.fixed_delta_seconds = 1.0 / CONFIG["SYNC_FPS"] - world.apply_settings(settings) - print(f"✅ 成功连接Carla(端口:{port})") - return client, world - except Exception as e: - print(f"⚠️ 端口{port}连接失败:{str(e)[:50]}") - return None, None - - -def clean_actors(world: carla.World) -> None: - print("\n🧹 清理残留Actor...") - for actor_type in ["vehicle.*", "sensor.*"]: - for actor in world.get_actors().filter(actor_type): +# ======================== 车道边界检测+细障碍物识别 ========================= +class LaneBoundaryDetector: + def __init__(self, world, vehicle): + self.world = world + self.vehicle = vehicle + self.map = world.get_map() + + # 障碍物状态(细障碍物专用) + self.has_obstacle = False + self.obs_distance = float('inf') + self.obs_direction = 0.0 + # 车道边界状态(核心:防止撞路边障碍物) + self.lane_deviation = 0.0 # 偏离车道中心线距离(米) + self.lane_steer_correction = 0.0 # 车道纠偏转向 + self.is_near_lane_edge = False # 是否靠近车道边缘 + + self.frame_queue = queue.Queue(maxsize=1) if VISUALIZATION else None + + # LiDAR(针对细障碍物优化:高密度+宽视野) + lidar_bp = world.get_blueprint_library().find('sensor.lidar.ray_cast') + lidar_bp.set_attribute('range', str(LIDAR_RANGE)) + lidar_bp.set_attribute('points_per_second', '25000') # 超高密度,捕捉细障碍物 + lidar_bp.set_attribute('channels', '32') + lidar_bp.set_attribute('horizontal_fov', '90') # 覆盖车道两侧 + lidar_bp.set_attribute('noise_stddev', '0.0') + self.lidar = world.spawn_actor(lidar_bp, carla.Transform(carla.Location(x=1.5, z=1.2)), attach_to=vehicle) + self.lidar.listen(self._lidar_callback) + + # 摄像头 + if VISUALIZATION: + cam_bp = world.get_blueprint_library().find('sensor.camera.rgb') + cam_bp.set_attribute('image_size_x', '640') + cam_bp.set_attribute('image_size_y', '480') + self.cam = world.spawn_actor(cam_bp, + carla.Transform(carla.Location(x=2.0, z=1.8), carla.Rotation(pitch=-8)), + attach_to=vehicle) + self.cam.listen(self._cam_callback) + + def _lidar_callback(self, data): + """检测细障碍物(电线杆/路障/护栏等)""" + points = np.frombuffer(data.raw_data, np.float32).reshape(-1, 4)[:, :3] + vehicle_loc = self.vehicle.get_transform().location + yaw = math.radians(self.vehicle.get_transform().rotation.yaw) + + # 车辆本地坐标系 + x_w = points[:, 0] - vehicle_loc.x + y_w = points[:, 1] - vehicle_loc.y + cos_yaw = math.cos(yaw) + sin_yaw = math.sin(yaw) + x_local = x_w * cos_yaw + y_w * sin_yaw + y_local = -x_w * sin_yaw + y_w * cos_yaw + + # 过滤:覆盖车道两侧(左右4米),捕捉路边障碍物 + mask = ( + (x_local > 0.3) & (x_local < LIDAR_RANGE) & + (abs(y_local) < 4.0) & # 车道两侧各4米 + (points[:, 2] > 0.0) & (points[:, 2] < 4.0) # 障碍物高度0-4米 + ) + valid_points = points[mask] + + if len(valid_points) >= DETECT_THRESHOLD: + dists = np.sqrt((valid_points[:, 0] - vehicle_loc.x) ** 2 + (valid_points[:, 1] - vehicle_loc.y) ** 2) + self.obs_distance = np.min(dists) + self.has_obstacle = self.obs_distance < OBSTACLE_WARNING_DIST + if self.has_obstacle: + min_idx = np.argmin(dists) + min_y_local = y_local[mask][min_idx] + self.obs_direction = 1.0 if min_y_local > 0 else -1.0 + else: + self.has_obstacle = False + self.obs_distance = float('inf') + + def check_lane_boundary(self): + """车道边界硬约束:计算偏离度,强制拉回中心""" + vehicle_loc = self.vehicle.get_transform().location + # 获取当前车道的中心线和边界 + current_waypoint = self.map.get_waypoint(vehicle_loc, project_to_road=True) + lane_width = current_waypoint.lane_width # 车道宽度(米) + + # 计算车辆到车道中心线的横向距离(偏离度) + lane_center = current_waypoint.transform.location + # 转换为车辆本地坐标系的横向距离(y轴) + y_diff = (lane_center.y - vehicle_loc.y) * math.cos(math.radians(current_waypoint.transform.rotation.yaw)) - \ + (lane_center.x - vehicle_loc.x) * math.sin(math.radians(current_waypoint.transform.rotation.yaw)) + self.lane_deviation = y_diff + + # 判断是否靠近车道边缘 + self.is_near_lane_edge = abs(self.lane_deviation) > (lane_width / 2 - MAX_LANE_DEVIATION) + + # 强制纠偏转向:偏离越多,纠偏力度越大 + if self.is_near_lane_edge: + # 靠近边缘时,强力拉回中心 + self.lane_steer_correction = np.clip(self.lane_deviation / (lane_width / 4), -LANE_BOUNDARY_STRICT, + LANE_BOUNDARY_STRICT) + else: + # 轻微偏离时,柔和纠偏 + self.lane_steer_correction = np.clip(self.lane_deviation / (lane_width / 2), -0.3, 0.3) + LANE_CENTER_BIAS + + def _cam_callback(self, data): + frame = np.frombuffer(data.raw_data, np.uint8).reshape(data.height, data.width, 4)[:, :, :3].copy() + if not self.frame_queue.empty(): try: - actor.destroy() + self.frame_queue.get_nowait() except: - continue - time.sleep(1) + pass + self.frame_queue.put(frame, block=False) + def draw_status(self): + if not VISUALIZATION: + return + try: + frame = self.frame_queue.get(timeout=0.01) + speed = math.hypot(self.vehicle.get_velocity().x, self.vehicle.get_velocity().y) * 3.6 + # 叠加车道偏离+障碍物检测状态 + cv2.putText(frame, f"Speed: {speed:.1f}km/h", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2) + cv2.putText(frame, f"Lane Deviation: {self.lane_deviation:.2f}m", (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, + (0, 0, 255) if self.is_near_lane_edge else (0, 255, 0), 2) + cv2.putText(frame, f"Obs Dist: {self.obs_distance:.2f}m", (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, + (255, 255, 0), 2) + cv2.imshow("Lane & Obstacle Detection", frame) + cv2.waitKey(1) + except: + pass -def get_vehicle_blueprint(world: carla.World) -> carla.ActorBlueprint: + def destroy(self): + self.lidar.stop() + self.lidar.destroy() + if VISUALIZATION: + self.cam.stop() + self.cam.destroy() + cv2.destroyAllWindows() + + +# ======================== 修复:动态生成路边障碍物(适配所有Carla版本)======================== +def spawn_roadside_obstacle(world, vehicle): + """ + 动态生成路边障碍物(适配所有Carla版本): + 1. 优先找电线杆/路灯,找不到则用路障(static.prop.streetbarrier,所有版本都有) + 2. 生成在车道边缘,测试避障 + """ bp_lib = world.get_blueprint_library() - for vehicle_name in CONFIG["PREFERRED_VEHICLES"]: + # 定义优先级列表:优先细障碍物,兜底用路障 + obstacle_blueprints = [ + 'static.prop.pole', + 'static.prop.streetlight', + 'static.prop.streetbarrier', # 兜底:所有版本都有 + 'static.prop.trafficcone', + 'static.prop.barrier' + ] + + # 查找可用的蓝图 + obstacle_bp = None + for bp_name in obstacle_blueprints: try: - bp = bp_lib.find(vehicle_name) - bp.set_attribute('color', '255,0,0') - return bp - except: + obstacle_bp = bp_lib.find(bp_name) + print(f"✅ 找到可用障碍物蓝图:{bp_name}") + break + except IndexError: continue - bp = bp_lib.filter('vehicle')[0] - bp.set_attribute('color', '255,0,0') - return bp - -def spawn_vehicle_safely(world: carla.World, bp: carla.ActorBlueprint) -> Optional[carla.Vehicle]: - spawn_points = world.get_map().get_spawn_points() - if not spawn_points: - raise Exception("❌ 无可用生成点") - safe_spawn_point = spawn_points[1] if len(spawn_points) >= 2 else spawn_points[0] - max_retry = 3 - for retry in range(max_retry): + if obstacle_bp is None: + # 终极兜底:随机选一个静态道具 + static_bps = [bp for bp in bp_lib if bp.id.startswith('static.prop.')] + if static_bps: + obstacle_bp = random.choice(static_bps) + print(f"✅ 使用随机静态道具:{obstacle_bp.id}") + else: + raise RuntimeError("❌ 没有找到任何静态障碍物蓝图!") + + # 在车道右侧边缘0.5米处生成(前方10米) + current_waypoint = world.get_map().get_waypoint(vehicle.get_transform().location) + lane_width = current_waypoint.lane_width + pole_waypoint = current_waypoint.next(10.0)[0] + # 车道边缘位置(右侧0.5米) + obstacle_loc = pole_waypoint.transform.location + pole_waypoint.transform.get_right_vector() * ( + lane_width / 2 + 0.5) + obstacle_loc.z += 0.2 # 离地高度,避免碰撞 + + # 生成障碍物(增加重试) + for attempt in range(2): try: - vehicle = world.spawn_actor(bp, safe_spawn_point) - if vehicle and vehicle.is_alive: - vehicle.set_simulate_physics(True) - vehicle.set_autopilot(False) - print(f"✅ 车辆生成成功(ID:{vehicle.id})") + obstacle = world.spawn_actor(obstacle_bp, carla.Transform(obstacle_loc)) + print(f"✅ 生成路边障碍物:车道右侧0.5米,前方10米处({obstacle_loc.x:.1f}, {obstacle_loc.y:.1f})") + return [obstacle] + except RuntimeError as e: + if "collision" in str(e).lower(): + # 微调位置避免碰撞 + obstacle_loc.x += 0.5 + obstacle_loc.y += 0.5 + continue + else: + raise e + raise RuntimeError("❌ 障碍物生成失败(位置碰撞)") + + +# ======================== 安全生成车辆(解决碰撞问题)======================== +def spawn_vehicle_safely(world, bp): + """ + 安全生成车辆,避免碰撞: + 1. 筛选无碰撞的生成点 + 2. 重试机制 + 3. 自定义安全位置兜底 + """ + spawn_points = world.get_map().get_spawn_points() + # 重试3次生成 + for attempt in range(3): + if spawn_points: + # 随机选择生成点,优先选车道中心的 + random.shuffle(spawn_points) + for spawn_point in spawn_points: + try: + # 检查生成点是否在行驶车道上 + wp = world.get_map().get_waypoint(spawn_point.location) + if wp.lane_type != carla.LaneType.Driving: + continue + # 尝试生成车辆 + vehicle = world.spawn_actor(bp, spawn_point) + print( + f"✅ 第{attempt + 1}次尝试:成功生成车辆(位置:{spawn_point.location.x:.1f}, {spawn_point.location.y:.1f})") + return vehicle + except RuntimeError as e: + if "collision" in str(e).lower(): + continue + else: + raise e + else: + # 无默认生成点,使用自定义安全位置 + safe_loc = carla.Location(x=100.0, y=100.0, z=0.5) # 自定义远离建筑的位置 + safe_transform = carla.Transform(safe_loc, carla.Rotation(yaw=0)) + try: + vehicle = world.spawn_actor(bp, safe_transform) + print(f"✅ 使用自定义安全位置生成车辆(位置:{safe_loc.x:.1f}, {safe_loc.y:.1f})") return vehicle - elif vehicle: - vehicle.destroy() - except Exception as e: - print(f"⚠️ 第{retry + 1}次生成失败:{str(e)[:50]}") - time.sleep(0.5) - raise Exception("❌ 车辆生成失败") + except RuntimeError as e: + print(f"❌ 自定义位置生成失败:{e}") + attempt += 1 + raise RuntimeError("❌ 所有生成点都有碰撞,无法生成车辆!") -def init_spectator_follow(world: carla.World, vehicle: carla.Vehicle) -> callable: - spectator = world.get_spectator() - view_update_counter = 0 - - def follow_vehicle(): - nonlocal view_update_counter - if view_update_counter % 3 == 0: - trans = vehicle.get_transform() - spectator.set_transform(carla.Transform( - carla.Location( - x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 10, - y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 10, - z=trans.location.z + 5.0 - ), - carla.Rotation(pitch=-20, yaw=trans.rotation.yaw) - )) - view_update_counter += 1 - - follow_vehicle() - return follow_vehicle - - -# 主函数(匀速+强化感知) +# ======================== 核心逻辑(车道硬约束+障碍物避障)======================== def main(): - vehicle: Optional[carla.Vehicle] = None - perception: Optional[EnhancedVehiclePerception] = None - speed_controller: Optional[PreciseSpeedController] = None - world: Optional[carla.World] = None + # 1. 连接Carla + client = carla.Client('127.0.0.1', 2000) + client.set_timeout(60.0) + world = client.get_world() + settings = world.get_settings() + settings.synchronous_mode = True + settings.fixed_delta_seconds = 1 / SYNC_FPS + world.apply_settings(settings) + + # 2. 清理所有残留 + for actor in world.get_actors(): + if actor.type_id in ['vehicle.*', 'sensor.*', 'static.prop.*']: + actor.destroy() + time.sleep(1) + # 3. 生成车辆(安全生成,避免碰撞) + bp = world.get_blueprint_library().find('vehicle.tesla.model3') + bp.set_attribute('color', '255,0,0') try: - # 1. 初始化Carla - client, world = get_carla_client() - if not client or not world: - raise Exception("❌ 未连接到Carla") - - # 2. 清理残留Actor - clean_actors(world) - - # 3. 生成车辆 - vehicle_bp = get_vehicle_blueprint(world) - vehicle = spawn_vehicle_safely(world, vehicle_bp) - - # 4. 初始化精准速度控制器 - speed_controller = PreciseSpeedController(CONFIG["TARGET_SPEED_MPS"]) - - # 5. 初始化强化感知模块 - perception = EnhancedVehiclePerception(world, vehicle) - - # 6. 视角跟随 - follow_vehicle = init_spectator_follow(world, vehicle) - print("👀 视角已绑定车辆") - - # 7. 核心行驶逻辑(50km/h匀速+感知避障) - print(f"\n🚙 开始50km/h精准匀速行驶(强化感知避障)") - start_time = time.time() - current_steer = 0.0 - target_steer = 0.0 + vehicle = spawn_vehicle_safely(world, bp) + except RuntimeError as e: + print(e) + return + vehicle.set_simulate_physics(True) + vehicle.set_autopilot(False) + + # 4. 生成路边障碍物(核心修复:适配所有版本) + try: + obstacles = spawn_roadside_obstacle(world, vehicle) + except RuntimeError as e: + print(e) + # 销毁车辆后退出 + vehicle.destroy() + return + + # 5. 第三人称视角(清晰看车道+障碍物) + spectator = world.get_spectator() - while time.time() - start_time < CONFIG["DRIVE_DURATION"]: + def third_person_view(): + trans = vehicle.get_transform() + spectator_loc = trans.location - trans.get_forward_vector() * 4.5 + carla.Location( + z=2.5) + trans.get_right_vector() * 0.5 + spectator_rot = carla.Rotation(pitch=-20, yaw=trans.rotation.yaw, roll=0) + spectator.set_transform(carla.Transform(spectator_loc, spectator_rot)) + + # 6. 初始化检测器和控制器 + detector = LaneBoundaryDetector(world, vehicle) + pid = SimplePID() + current_steer = 0.0 + + # 7. 核心行驶循环 + print("\n🚗 开始测试:车道硬约束 + 路边障碍物避障") + print("核心规则:严格贴车道中心,1米内避开障碍物,零碰撞") + print("按Ctrl+C停止\n") + try: + while True: world.tick() - follow_vehicle() - dt = 1 / CONFIG["SYNC_FPS"] - - # 7.1 获取车辆当前速度(m/s) - current_vel = vehicle.get_velocity() - current_speed_mps = math.hypot(current_vel.x, current_vel.y) - current_speed_kmh = current_speed_mps * 3.6 - - # 7.2 强化感知:获取障碍物状态 - has_obstacle, obstacle_dist, obstacle_dir, obstacle_conf = perception.get_obstacle_status() - - # 7.3 避障转向(超平滑,不影响匀速) - if has_obstacle and obstacle_conf > 0.3: - # 距离越近,转向越平缓(避免速度波动) - steer_amplitude = CONFIG["AVOID_STEER_MAX"] * (CONFIG["OBSTACLE_DISTANCE_THRESHOLD"] / obstacle_dist) - steer_amplitude = np.clip(steer_amplitude, 0.1, CONFIG["AVOID_STEER_MAX"]) - target_steer = obstacle_dir * steer_amplitude + third_person_view() + + # 1. 检测车道边界(优先级最高) + detector.check_lane_boundary() + + # 2. 速度控制 + current_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) + throttle, brake = pid.update(current_speed) + + # 3. 转向逻辑:车道硬约束 > 1米紧急避障 > 预警避障 + target_steer = 0.0 + if detector.is_near_lane_edge: + # 靠近车道边缘:强制拉回中心 + print(f"🔴 靠近车道边缘!偏离{detector.lane_deviation:.2f}米 | 强制拉回中心", end='\r') + target_steer = detector.lane_steer_correction + throttle *= 0.1 # 降速纠偏 + elif detector.obs_distance < OBSTACLE_EMERGENCY_DIST: + # 1米内障碍物:紧急避障+车道约束 + print(f"⚠️ 紧急避障:距离障碍物{detector.obs_distance:.2f}米 | 贴车道绕开", end='\r') + brake = 1.0 + throttle = 0.0 + # 避障+车道纠偏:既绕开又不越线 + target_steer = (-detector.obs_direction * 0.6) + detector.lane_steer_correction + elif detector.has_obstacle: + # 预警避障:贴车道绕行 + print(f"🔶 预警避障:距离障碍物{detector.obs_distance:.2f}米 | 顺车道绕开", end='\r') + throttle *= 0.2 + target_steer = (-detector.obs_direction * 0.3) + detector.lane_steer_correction else: - target_steer = 0.0 - - # 7.4 转向超平滑过渡(避免速度波动) - current_steer += (target_steer - current_steer) * CONFIG["STEER_SMOOTH_FACTOR"] - current_steer = np.clip(current_steer, -CONFIG["AVOID_STEER_MAX"], CONFIG["AVOID_STEER_MAX"]) + # 正常行驶:严格贴车道中心 + print(f"✅ 正常行驶:车道偏离{detector.lane_deviation:.2f}米 | 速度{current_speed * 3.6:.1f}km/h", + end='\r') + target_steer = detector.lane_steer_correction - # 7.5 精准PID速度控制(核心匀速逻辑) - throttle, brake = speed_controller.update(current_speed_mps, dt) + # 转向平滑+硬限制 + current_steer += (target_steer - current_steer) * 0.25 + current_steer = np.clip(current_steer, -0.7, 0.7) - # 7.6 卡停处理(仅低速时触发) - if current_speed_kmh < CONFIG["STALL_SPEED_THRESHOLD"] * 3.6: - trans = vehicle.get_transform() - new_loc = trans.location + trans.get_forward_vector() * 1.5 - vehicle.set_transform(carla.Transform(new_loc, trans.rotation)) - throttle = 0.6 # 平缓恢复速度 - brake = 0.0 - print("\n⚠️ 低速重置位置,平缓恢复匀速...", end='') - - # 7.7 下发控制指令(匀速优先) + # 下发控制 vehicle.apply_control(carla.VehicleControl( - throttle=float(throttle), - steer=float(current_steer), - brake=float(brake), - hand_brake=False + throttle=throttle, steer=current_steer, brake=brake, hand_brake=False )) - # 7.8 实时状态打印(匀速+感知) - speed_error = CONFIG["TARGET_SPEED_KMH"] - current_speed_kmh - print(f" 速度:{current_speed_kmh:.1f}km/h(误差:{speed_error:.1f})| " - f"转向:{current_steer:.3f} | 障碍物:{obstacle_dist:.2f}m | 置信度:{obstacle_conf:.2f}", end='\r') - - # 8. 平滑停车 - print("\n🛑 开始平滑停车...") - for i in range(15): - brake = (i / 15) * 1.0 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=brake)) - world.tick() - time.sleep(0.05) - - # 9. 打印最终状态 - final_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6 - print(f"\n📊 行驶完成(时长:{CONFIG['DRIVE_DURATION']}s)") - print(f" 🎯 目标速度:50.0km/h | 最终速度:{final_speed:.1f}km/h") - print(f" 📍 最终位置:X={vehicle.get_location().x:.2f}, Y={vehicle.get_location().y:.2f}") - - except Exception as e: - print(f"\n❌ 程序异常:{e}") - print("\n========== 排查指南 ==========") - print("1. 启动Carla:管理员身份运行 CarlaUE4.exe -windowed -ResX=800 -ResY=600") - print("2. 安装依赖:pip install numpy opencv-python carla==你的版本") - print("3. 关闭代理/防火墙,确保网络正常") + # 可视化 + detector.draw_status() + except KeyboardInterrupt: + print("\n\n🛑 测试停止,清理资源...") finally: - # 清理资源 - if perception: - perception.destroy() - if world: - try: - settings = world.get_settings() - settings.synchronous_mode = False - world.apply_settings(settings) - except: - pass - if vehicle: - try: - vehicle.destroy() - print("🗑️ 车辆已销毁") - except: - pass - print("✅ 所有资源清理完成!") + # 清理所有资源 + detector.destroy() + vehicle.destroy() + for obs in obstacles: + obs.destroy() + # 恢复Carla设置 + settings.synchronous_mode = False + world.apply_settings(settings) + cv2.destroyAllWindows() + print("✅ 清理完成!") if __name__ == "__main__": From c25525c927d121782b1f061c12b9f33d3f264581 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sat, 27 Dec 2025 18:29:24 +0800 Subject: [PATCH 25/26] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E8=BD=A6=E9=81=93=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=9C=A8=E8=A1=8C?= =?UTF-8?q?=E9=A9=B6=E8=BF=87=E7=A8=8B=E4=B8=AD=E5=A7=8B=E7=BB=88=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E5=9C=A8=E8=BD=A6=E9=81=93=E4=B8=AD=E5=BF=83=E8=A1=8C?= =?UTF-8?q?=E9=A9=B6=EF=BC=8C=E5=8C=85=E6=8B=AC=E8=BD=AC=E5=BC=AF=E7=AD=89?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 797 ++++++++++----------- 1 file changed, 369 insertions(+), 428 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 29d012b25b..79a6237968 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -2,464 +2,405 @@ import time import math import numpy as np -import cv2 # 摄像头可视化(需安装:pip install opencv-python) -from typing import Optional, Tuple, List, Dict - -# 全局配置(匀速+感知双优化) -CONFIG = { - # 精准匀速控制参数 - "TARGET_SPEED_KMH": 50.0, # 目标匀速50km/h - "TARGET_SPEED_MPS": 50.0 / 3.6, # 转换为m/s(≈13.89) - "PID_KP": 0.12, # 比例项(优化匀速) - "PID_KI": 0.005, # 积分项(减小稳态误差) - "PID_KD": 0.03, # 微分项(抑制速度超调) - "SPEED_FILTER_WINDOW": 8, # 滑动平均窗口(提升速度平滑性) - "SPEED_SMOOTH_ALPHA": 0.2, # 指数平滑系数(进一步滤波) - "SPEED_ERROR_THRESHOLD": 0.5, # 速度误差阈值(±0.5km/h) - "STEER_SMOOTH_FACTOR": 0.03, # 转向超平滑(不影响匀速) - "AVOID_STEER_MAX": 0.25, # 最大避障转向(避免速度波动) - # 机器感知强化参数 - "LIDAR_RANGE": 8.0, # 感知范围扩展至8米(提前预警) - "LIDAR_POINTS_PER_SECOND": 80000, # 提升点云密度(更精准) - "LIDAR_NOISE_FILTER": True, # LiDAR点云降噪 - "CAMERA_RESOLUTION": (800, 600), # 提升摄像头分辨率 - "OBSTACLE_DISTANCE_THRESHOLD": 2.0, # 障碍物预警阈值(提前2米避障) - "OBSTACLE_ANGLE_THRESHOLD": 30, # 障碍物角度阈值(前方30°) - "PERCEPTION_FREQ": 15, # 感知频率提升至15Hz(更实时) - "VISUALIZATION_ENABLE": True, # 感知可视化(摄像头+LiDAR) - # 基础配置 - "DRIVE_DURATION": 120, - "STALL_SPEED_THRESHOLD": 1.0, - "SYNC_FPS": 30, - "CARLA_PORTS": [2000, 2001, 2002], - "PREFERRED_VEHICLES": ["vehicle.tesla.model3", "vehicle.audi.a2", "vehicle.bmw.grandtourer"] -} - - -# 强化版机器感知类(降噪+精准定位+可视化) -class EnhancedVehiclePerception: - def __init__(self, world: carla.World, vehicle: carla.Vehicle): - self.world = world - self.vehicle = vehicle - self.bp_lib = world.get_blueprint_library() - # 感知数据缓存(带校验) - self.perception_data: Dict[str, any] = { - "lidar_obstacles": np.array([]), # 降噪后的LiDAR点云 - "lidar_last_update": 0.0, - "camera_frame": None, # 摄像头RGB帧 - "obstacle_distance": float("inf"), - "obstacle_direction": 0.0, - "obstacle_confidence": 0.0, # 障碍物置信度(0-1) - "perception_valid": False # 感知数据有效性标记 - } - # 传感器实例 - self.lidar_sensor: Optional[carla.Sensor] = None - self.camera_sensor: Optional[carla.Sensor] = None - # 可视化窗口(摄像头) - if CONFIG["VISUALIZATION_ENABLE"]: - cv2.namedWindow("Vehicle Camera", cv2.WINDOW_NORMAL) - cv2.resizeWindow("Vehicle Camera", CONFIG["CAMERA_RESOLUTION"][0], CONFIG["CAMERA_RESOLUTION"][1]) - # 初始化传感器 - self._init_lidar() - self._init_camera() - - def _init_lidar(self): - """强化LiDAR:降噪+高密度+精准检测""" - try: - lidar_bp = self.bp_lib.find('sensor.lidar.ray_cast') - # 强化LiDAR参数 - lidar_bp.set_attribute('range', str(CONFIG["LIDAR_RANGE"])) - lidar_bp.set_attribute('points_per_second', str(CONFIG["LIDAR_POINTS_PER_SECOND"])) - lidar_bp.set_attribute('rotation_frequency', str(CONFIG["SYNC_FPS"])) - lidar_bp.set_attribute('channels', '64') # 64线LiDAR(更精准) - lidar_bp.set_attribute('upper_fov', '15') - lidar_bp.set_attribute('lower_fov', '-35') - lidar_bp.set_attribute('noise_stddev', '0.005') # 降低噪声 - lidar_bp.set_attribute('dropoff_general_rate', '0.01') # 减少点云丢失 - - # LiDAR挂载位置(更精准) - lidar_transform = carla.Transform(carla.Location(x=1.0, z=1.8)) - self.lidar_sensor = self.world.spawn_actor(lidar_bp, lidar_transform, attach_to=self.vehicle) - - # 强化LiDAR回调:降噪+置信度计算 - def lidar_callback(point_cloud): - current_time = time.time() - if current_time - self.perception_data["lidar_last_update"] < 1 / CONFIG["PERCEPTION_FREQ"]: - return - self.perception_data["lidar_last_update"] = current_time - - # 1. 解析点云并降噪 - points = np.frombuffer(point_cloud.raw_data, dtype=np.float32).reshape(-1, 4) - x, y, z, intensity = points[:, 0], points[:, 1], points[:, 2], points[:, 3] - - # 2. 多层降噪(过滤无效点) - # 过滤地面/过近/低强度点 - mask = (z > -0.6) & (np.hypot(x, y) > 0.2) & (intensity > 0.1) - # 过滤非前方点(±30°) - vehicle_yaw = math.radians(self.vehicle.get_transform().rotation.yaw) - point_yaw = np.arctan2(y, x) - angle_diff = np.degrees(np.abs(point_yaw - vehicle_yaw)) - mask = mask & (angle_diff < CONFIG["OBSTACLE_ANGLE_THRESHOLD"]) - # 统计滤波(去除孤立噪点) - if CONFIG["LIDAR_NOISE_FILTER"] and len(points[mask]) > 10: - distances = np.hypot(x[mask], y[mask]) - mean_dist = np.mean(distances) - std_dist = np.std(distances) - mask[mask] = (distances > mean_dist - 2 * std_dist) & (distances < mean_dist + 2 * std_dist) - - valid_points = points[mask][:, :3] - self.perception_data["lidar_obstacles"] = valid_points - self.perception_data["perception_valid"] = len(valid_points) > 0 - - # 3. 精准计算障碍物(带置信度) - if len(valid_points) > 0: - distances = np.hypot(valid_points[:, 0], valid_points[:, 1]) - min_idx = np.argmin(distances) - min_dist = distances[min_idx] - min_y = valid_points[min_idx, 1] - - # 计算置信度(点云数量越多,置信度越高) - confidence = min(1.0, len(valid_points) / 100) - self.perception_data["obstacle_distance"] = min_dist - self.perception_data["obstacle_direction"] = 1 if min_y > 0 else -1 - self.perception_data["obstacle_confidence"] = confidence - self.perception_data["perception_valid"] = confidence > 0.3 # 置信度>0.3才有效 - else: - self.perception_data["obstacle_distance"] = float("inf") - self.perception_data["obstacle_direction"] = 0.0 - self.perception_data["obstacle_confidence"] = 0.0 - - self.lidar_sensor.listen(lidar_callback) - print("✅ 强化LiDAR初始化成功(64线+降噪)") - except Exception as e: - print(f"⚠️ LiDAR初始化失败:{e}") - - def _init_camera(self): - """强化摄像头:高分辨率+实时可视化""" - try: - camera_bp = self.bp_lib.find('sensor.camera.rgb') - camera_bp.set_attribute('image_size_x', str(CONFIG["CAMERA_RESOLUTION"][0])) - camera_bp.set_attribute('image_size_y', str(CONFIG["CAMERA_RESOLUTION"][1])) - camera_bp.set_attribute('fov', '100') # 超广角(覆盖更多视野) - camera_bp.set_attribute('sensor_tick', str(1 / CONFIG["PERCEPTION_FREQ"])) - camera_bp.set_attribute('gamma', '2.2') # 优化画面亮度 - - # 摄像头挂载位置(前挡风玻璃) - camera_transform = carla.Transform(carla.Location(x=1.2, z=1.5)) - self.camera_sensor = self.world.spawn_actor(camera_bp, camera_transform, attach_to=self.vehicle) - - # 摄像头回调:实时可视化 - def camera_callback(image): - # 转换为RGB数组 - frame = np.frombuffer(image.raw_data, dtype=np.uint8).reshape( - (image.height, image.width, 4) - )[:, :, :3] - self.perception_data["camera_frame"] = frame - # 实时可视化 - if CONFIG["VISUALIZATION_ENABLE"] and frame is not None: - # 在画面上叠加感知信息 - cv2.putText(frame, f"Obstacle Dist: {self.perception_data['obstacle_distance']:.2f}m", - (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) - cv2.putText(frame, f"Speed: {self._get_vehicle_speed():.1f}km/h", - (20, 80), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2) - cv2.imshow("Vehicle Camera", frame) - cv2.waitKey(1) # 刷新窗口 - - self.camera_sensor.listen(camera_callback) - print("✅ 强化摄像头初始化成功(超广角+可视化)") - except Exception as e: - print(f"⚠️ 摄像头初始化失败:{e}") - - def _get_vehicle_speed(self) -> float: - """获取车辆当前速度(km/h)""" - vel = self.vehicle.get_velocity() - return math.hypot(vel.x, vel.y) * 3.6 - - def get_obstacle_status(self) -> Tuple[bool, float, float, float]: - """获取障碍物状态(是否有效、距离、方向、置信度)""" - has_obstacle = (self.perception_data["obstacle_distance"] < CONFIG["OBSTACLE_DISTANCE_THRESHOLD"]) & \ - (self.perception_data["perception_valid"]) - return (has_obstacle, - self.perception_data["obstacle_distance"], - self.perception_data["obstacle_direction"], - self.perception_data["obstacle_confidence"]) - - def destroy(self): - """销毁传感器+关闭可视化窗口""" - if self.lidar_sensor: - self.lidar_sensor.stop() - self.lidar_sensor.destroy() - if self.camera_sensor: - self.camera_sensor.stop() - self.camera_sensor.destroy() - if CONFIG["VISUALIZATION_ENABLE"]: - cv2.destroyWindow("Vehicle Camera") - print("🗑️ 强化感知传感器已销毁") - - -# 精准匀速控制器 -class PreciseSpeedController: - def __init__(self, target_speed_mps: float): - self.target_speed = target_speed_mps - # PID参数 - self.kp = CONFIG["PID_KP"] - self.ki = CONFIG["PID_KI"] - self.kd = CONFIG["PID_KD"] - # 状态变量 +import cv2 +import queue +import random + +# ======================== 核心配置(车道硬约束+细障碍物检测)======================== +TARGET_SPEED_KMH = 10.0 # 更低速,确保车道纠偏反应时间 +TARGET_SPEED_MPS = TARGET_SPEED_KMH / 3.6 +SYNC_FPS = 20 + +# 障碍物检测(针对电线杆等细障碍物) +LIDAR_RANGE = 15.0 # 覆盖路边障碍物 +OBSTACLE_EMERGENCY_DIST = 1.0 # 1米紧急避障 +OBSTACLE_WARNING_DIST = 2.5 # 提前预警 +DETECT_THRESHOLD = 2 # 仅需2个点(细障碍物点少) +# 车道硬约束(核心:防止偏离撞路边障碍物) +LANE_BOUNDARY_STRICT = 0.8 # 车道边界强制纠偏力度 +LANE_CENTER_BIAS = 0.1 # 轻微偏向车道中心 +MAX_LANE_DEVIATION = 0.5 # 最大允许偏离车道0.5米 +VISUALIZATION = True + + +# ======================== PID速度控制器 ========================= +class SimplePID: + def __init__(self): + self.kp = 0.3 + self.ki = 0.008 + self.kd = 0.02 + self.error_sum = 0.0 self.last_error = 0.0 - self.error_integral = 0.0 - self.speed_history = [] # 滑动平均缓存 - self.smoothed_speed = 0.0 # 指数平滑后的速度 - - def update(self, current_speed_mps: float, dt: float = 1 / CONFIG["SYNC_FPS"]) -> Tuple[float, float]: - """ - 更新PID控制,返回油门和刹车值 - :param current_speed_mps: 当前速度(m/s) - :param dt: 时间步长(s) - :return: (throttle, brake) - """ - # 1. 双级速度滤波(滑动平均+指数平滑) - self.speed_history.append(current_speed_mps) - if len(self.speed_history) > CONFIG["SPEED_FILTER_WINDOW"]: - self.speed_history.pop(0) - avg_speed = np.mean(self.speed_history) if self.speed_history else current_speed_mps - # 指数平滑 - self.smoothed_speed = CONFIG["SPEED_SMOOTH_ALPHA"] * avg_speed + ( - 1 - CONFIG["SPEED_SMOOTH_ALPHA"]) * self.smoothed_speed - - # 2. PID计算 - error = self.target_speed - self.smoothed_speed - self.error_integral += error * dt - # 限制积分饱和 - self.error_integral = np.clip(self.error_integral, -0.8, 0.8) - # 微分项(抑制超调) - error_derivative = (error - self.last_error) / dt if dt > 0 else 0.0 - self.last_error = error - # 3. 计算油门/刹车(互斥,避免同时触发) - throttle = np.clip(self.kp * error + self.ki * self.error_integral + self.kd * error_derivative, 0.0, 1.0) - brake = 0.0 - # 速度超调时仅用刹车,且刹车力度柔和 - if error < -CONFIG["SPEED_ERROR_THRESHOLD"] / 3.6: # 转换为m/s的误差 - throttle = 0.0 - brake = np.clip(-self.kp * error * 0.4, 0.0, 1.0) + def update(self, current_speed): + error = TARGET_SPEED_MPS - current_speed + self.error_sum += error * (1 / SYNC_FPS) + self.error_sum = np.clip(self.error_sum, -0.8, 0.8) + derivative = (error - self.last_error) * SYNC_FPS + self.last_error = error - return throttle, brake + throttle = self.kp * error + self.ki * self.error_sum + self.kd * derivative + brake = 0.0 if error > -0.1 else 0.15 + return np.clip(throttle, 0.0, 1.0), brake -# 基础工具函数 -def get_carla_client() -> Optional[Tuple[carla.Client, carla.World]]: - for port in CONFIG["CARLA_PORTS"]: - try: - client = carla.Client("127.0.0.1", port) - client.set_timeout(60.0) - world = client.get_world() - settings = world.get_settings() - settings.synchronous_mode = True - settings.fixed_delta_seconds = 1.0 / CONFIG["SYNC_FPS"] - world.apply_settings(settings) - print(f"✅ 成功连接Carla(端口:{port})") - return client, world - except Exception as e: - print(f"⚠️ 端口{port}连接失败:{str(e)[:50]}") - return None, None - - -def clean_actors(world: carla.World) -> None: - print("\n🧹 清理残留Actor...") - for actor_type in ["vehicle.*", "sensor.*"]: - for actor in world.get_actors().filter(actor_type): +# ======================== 车道边界检测+细障碍物识别 ========================= +class LaneBoundaryDetector: + def __init__(self, world, vehicle): + self.world = world + self.vehicle = vehicle + self.map = world.get_map() + + # 障碍物状态(细障碍物专用) + self.has_obstacle = False + self.obs_distance = float('inf') + self.obs_direction = 0.0 + # 车道边界状态(核心:防止撞路边障碍物) + self.lane_deviation = 0.0 # 偏离车道中心线距离(米) + self.lane_steer_correction = 0.0 # 车道纠偏转向 + self.is_near_lane_edge = False # 是否靠近车道边缘 + + self.frame_queue = queue.Queue(maxsize=1) if VISUALIZATION else None + + # LiDAR(针对细障碍物优化:高密度+宽视野) + lidar_bp = world.get_blueprint_library().find('sensor.lidar.ray_cast') + lidar_bp.set_attribute('range', str(LIDAR_RANGE)) + lidar_bp.set_attribute('points_per_second', '25000') # 超高密度,捕捉细障碍物 + lidar_bp.set_attribute('channels', '32') + lidar_bp.set_attribute('horizontal_fov', '90') # 覆盖车道两侧 + lidar_bp.set_attribute('noise_stddev', '0.0') + self.lidar = world.spawn_actor(lidar_bp, carla.Transform(carla.Location(x=1.5, z=1.2)), attach_to=vehicle) + self.lidar.listen(self._lidar_callback) + + # 摄像头 + if VISUALIZATION: + cam_bp = world.get_blueprint_library().find('sensor.camera.rgb') + cam_bp.set_attribute('image_size_x', '640') + cam_bp.set_attribute('image_size_y', '480') + self.cam = world.spawn_actor(cam_bp, + carla.Transform(carla.Location(x=2.0, z=1.8), carla.Rotation(pitch=-8)), + attach_to=vehicle) + self.cam.listen(self._cam_callback) + + def _lidar_callback(self, data): + """检测细障碍物(电线杆/路障/护栏等)""" + points = np.frombuffer(data.raw_data, np.float32).reshape(-1, 4)[:, :3] + vehicle_loc = self.vehicle.get_transform().location + yaw = math.radians(self.vehicle.get_transform().rotation.yaw) + + # 车辆本地坐标系 + x_w = points[:, 0] - vehicle_loc.x + y_w = points[:, 1] - vehicle_loc.y + cos_yaw = math.cos(yaw) + sin_yaw = math.sin(yaw) + x_local = x_w * cos_yaw + y_w * sin_yaw + y_local = -x_w * sin_yaw + y_w * cos_yaw + + # 过滤:覆盖车道两侧(左右4米),捕捉路边障碍物 + mask = ( + (x_local > 0.3) & (x_local < LIDAR_RANGE) & + (abs(y_local) < 4.0) & # 车道两侧各4米 + (points[:, 2] > 0.0) & (points[:, 2] < 4.0) # 障碍物高度0-4米 + ) + valid_points = points[mask] + + if len(valid_points) >= DETECT_THRESHOLD: + dists = np.sqrt((valid_points[:, 0] - vehicle_loc.x) ** 2 + (valid_points[:, 1] - vehicle_loc.y) ** 2) + self.obs_distance = np.min(dists) + self.has_obstacle = self.obs_distance < OBSTACLE_WARNING_DIST + if self.has_obstacle: + min_idx = np.argmin(dists) + min_y_local = y_local[mask][min_idx] + self.obs_direction = 1.0 if min_y_local > 0 else -1.0 + else: + self.has_obstacle = False + self.obs_distance = float('inf') + + def check_lane_boundary(self): + """车道边界硬约束:计算偏离度,强制拉回中心""" + vehicle_loc = self.vehicle.get_transform().location + # 获取当前车道的中心线和边界 + current_waypoint = self.map.get_waypoint(vehicle_loc, project_to_road=True) + lane_width = current_waypoint.lane_width # 车道宽度(米) + + # 计算车辆到车道中心线的横向距离(偏离度) + lane_center = current_waypoint.transform.location + # 转换为车辆本地坐标系的横向距离(y轴) + y_diff = (lane_center.y - vehicle_loc.y) * math.cos(math.radians(current_waypoint.transform.rotation.yaw)) - \ + (lane_center.x - vehicle_loc.x) * math.sin(math.radians(current_waypoint.transform.rotation.yaw)) + self.lane_deviation = y_diff + + # 判断是否靠近车道边缘 + self.is_near_lane_edge = abs(self.lane_deviation) > (lane_width / 2 - MAX_LANE_DEVIATION) + + # 强制纠偏转向:偏离越多,纠偏力度越大 + if self.is_near_lane_edge: + # 靠近边缘时,强力拉回中心 + self.lane_steer_correction = np.clip(self.lane_deviation / (lane_width / 4), -LANE_BOUNDARY_STRICT, + LANE_BOUNDARY_STRICT) + else: + # 轻微偏离时,柔和纠偏 + self.lane_steer_correction = np.clip(self.lane_deviation / (lane_width / 2), -0.3, 0.3) + LANE_CENTER_BIAS + + def _cam_callback(self, data): + frame = np.frombuffer(data.raw_data, np.uint8).reshape(data.height, data.width, 4)[:, :, :3].copy() + if not self.frame_queue.empty(): try: - actor.destroy() + self.frame_queue.get_nowait() except: - continue - time.sleep(1) + pass + self.frame_queue.put(frame, block=False) + def draw_status(self): + if not VISUALIZATION: + return + try: + frame = self.frame_queue.get(timeout=0.01) + speed = math.hypot(self.vehicle.get_velocity().x, self.vehicle.get_velocity().y) * 3.6 + # 叠加车道偏离+障碍物检测状态 + cv2.putText(frame, f"Speed: {speed:.1f}km/h", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2) + cv2.putText(frame, f"Lane Deviation: {self.lane_deviation:.2f}m", (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, + (0, 0, 255) if self.is_near_lane_edge else (0, 255, 0), 2) + cv2.putText(frame, f"Obs Dist: {self.obs_distance:.2f}m", (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, + (255, 255, 0), 2) + cv2.imshow("Lane & Obstacle Detection", frame) + cv2.waitKey(1) + except: + pass -def get_vehicle_blueprint(world: carla.World) -> carla.ActorBlueprint: + def destroy(self): + self.lidar.stop() + self.lidar.destroy() + if VISUALIZATION: + self.cam.stop() + self.cam.destroy() + cv2.destroyAllWindows() + + +# ======================== 修复:动态生成路边障碍物(适配所有Carla版本)======================== +def spawn_roadside_obstacle(world, vehicle): + """ + 动态生成路边障碍物(适配所有Carla版本): + 1. 优先找电线杆/路灯,找不到则用路障(static.prop.streetbarrier,所有版本都有) + 2. 生成在车道边缘,测试避障 + """ bp_lib = world.get_blueprint_library() - for vehicle_name in CONFIG["PREFERRED_VEHICLES"]: + # 定义优先级列表:优先细障碍物,兜底用路障 + obstacle_blueprints = [ + 'static.prop.pole', + 'static.prop.streetlight', + 'static.prop.streetbarrier', # 兜底:所有版本都有 + 'static.prop.trafficcone', + 'static.prop.barrier' + ] + + # 查找可用的蓝图 + obstacle_bp = None + for bp_name in obstacle_blueprints: try: - bp = bp_lib.find(vehicle_name) - bp.set_attribute('color', '255,0,0') - return bp - except: + obstacle_bp = bp_lib.find(bp_name) + print(f"✅ 找到可用障碍物蓝图:{bp_name}") + break + except IndexError: continue - bp = bp_lib.filter('vehicle')[0] - bp.set_attribute('color', '255,0,0') - return bp - -def spawn_vehicle_safely(world: carla.World, bp: carla.ActorBlueprint) -> Optional[carla.Vehicle]: - spawn_points = world.get_map().get_spawn_points() - if not spawn_points: - raise Exception("❌ 无可用生成点") - safe_spawn_point = spawn_points[1] if len(spawn_points) >= 2 else spawn_points[0] - max_retry = 3 - for retry in range(max_retry): + if obstacle_bp is None: + # 终极兜底:随机选一个静态道具 + static_bps = [bp for bp in bp_lib if bp.id.startswith('static.prop.')] + if static_bps: + obstacle_bp = random.choice(static_bps) + print(f"✅ 使用随机静态道具:{obstacle_bp.id}") + else: + raise RuntimeError("❌ 没有找到任何静态障碍物蓝图!") + + # 在车道右侧边缘0.5米处生成(前方10米) + current_waypoint = world.get_map().get_waypoint(vehicle.get_transform().location) + lane_width = current_waypoint.lane_width + pole_waypoint = current_waypoint.next(10.0)[0] + # 车道边缘位置(右侧0.5米) + obstacle_loc = pole_waypoint.transform.location + pole_waypoint.transform.get_right_vector() * ( + lane_width / 2 + 0.5) + obstacle_loc.z += 0.2 # 离地高度,避免碰撞 + + # 生成障碍物(增加重试) + for attempt in range(2): try: - vehicle = world.spawn_actor(bp, safe_spawn_point) - if vehicle and vehicle.is_alive: - vehicle.set_simulate_physics(True) - vehicle.set_autopilot(False) - print(f"✅ 车辆生成成功(ID:{vehicle.id})") + obstacle = world.spawn_actor(obstacle_bp, carla.Transform(obstacle_loc)) + print(f"✅ 生成路边障碍物:车道右侧0.5米,前方10米处({obstacle_loc.x:.1f}, {obstacle_loc.y:.1f})") + return [obstacle] + except RuntimeError as e: + if "collision" in str(e).lower(): + # 微调位置避免碰撞 + obstacle_loc.x += 0.5 + obstacle_loc.y += 0.5 + continue + else: + raise e + raise RuntimeError("❌ 障碍物生成失败(位置碰撞)") + + +# ======================== 安全生成车辆(解决碰撞问题)======================== +def spawn_vehicle_safely(world, bp): + """ + 安全生成车辆,避免碰撞: + 1. 筛选无碰撞的生成点 + 2. 重试机制 + 3. 自定义安全位置兜底 + """ + spawn_points = world.get_map().get_spawn_points() + # 重试3次生成 + for attempt in range(3): + if spawn_points: + # 随机选择生成点,优先选车道中心的 + random.shuffle(spawn_points) + for spawn_point in spawn_points: + try: + # 检查生成点是否在行驶车道上 + wp = world.get_map().get_waypoint(spawn_point.location) + if wp.lane_type != carla.LaneType.Driving: + continue + # 尝试生成车辆 + vehicle = world.spawn_actor(bp, spawn_point) + print( + f"✅ 第{attempt + 1}次尝试:成功生成车辆(位置:{spawn_point.location.x:.1f}, {spawn_point.location.y:.1f})") + return vehicle + except RuntimeError as e: + if "collision" in str(e).lower(): + continue + else: + raise e + else: + # 无默认生成点,使用自定义安全位置 + safe_loc = carla.Location(x=100.0, y=100.0, z=0.5) # 自定义远离建筑的位置 + safe_transform = carla.Transform(safe_loc, carla.Rotation(yaw=0)) + try: + vehicle = world.spawn_actor(bp, safe_transform) + print(f"✅ 使用自定义安全位置生成车辆(位置:{safe_loc.x:.1f}, {safe_loc.y:.1f})") return vehicle - elif vehicle: - vehicle.destroy() - except Exception as e: - print(f"⚠️ 第{retry + 1}次生成失败:{str(e)[:50]}") - time.sleep(0.5) - raise Exception("❌ 车辆生成失败") + except RuntimeError as e: + print(f"❌ 自定义位置生成失败:{e}") + attempt += 1 + raise RuntimeError("❌ 所有生成点都有碰撞,无法生成车辆!") -def init_spectator_follow(world: carla.World, vehicle: carla.Vehicle) -> callable: - spectator = world.get_spectator() - view_update_counter = 0 - - def follow_vehicle(): - nonlocal view_update_counter - if view_update_counter % 3 == 0: - trans = vehicle.get_transform() - spectator.set_transform(carla.Transform( - carla.Location( - x=trans.location.x - math.cos(math.radians(trans.rotation.yaw)) * 10, - y=trans.location.y - math.sin(math.radians(trans.rotation.yaw)) * 10, - z=trans.location.z + 5.0 - ), - carla.Rotation(pitch=-20, yaw=trans.rotation.yaw) - )) - view_update_counter += 1 - - follow_vehicle() - return follow_vehicle - - -# 主函数(匀速+强化感知) +# ======================== 核心逻辑(车道硬约束+障碍物避障)======================== def main(): - vehicle: Optional[carla.Vehicle] = None - perception: Optional[EnhancedVehiclePerception] = None - speed_controller: Optional[PreciseSpeedController] = None - world: Optional[carla.World] = None + # 1. 连接Carla + client = carla.Client('127.0.0.1', 2000) + client.set_timeout(60.0) + world = client.get_world() + settings = world.get_settings() + settings.synchronous_mode = True + settings.fixed_delta_seconds = 1 / SYNC_FPS + world.apply_settings(settings) + + # 2. 清理所有残留 + for actor in world.get_actors(): + if actor.type_id in ['vehicle.*', 'sensor.*', 'static.prop.*']: + actor.destroy() + time.sleep(1) + # 3. 生成车辆(安全生成,避免碰撞) + bp = world.get_blueprint_library().find('vehicle.tesla.model3') + bp.set_attribute('color', '255,0,0') try: - # 1. 初始化Carla - client, world = get_carla_client() - if not client or not world: - raise Exception("❌ 未连接到Carla") - - # 2. 清理残留Actor - clean_actors(world) - - # 3. 生成车辆 - vehicle_bp = get_vehicle_blueprint(world) - vehicle = spawn_vehicle_safely(world, vehicle_bp) - - # 4. 初始化精准速度控制器 - speed_controller = PreciseSpeedController(CONFIG["TARGET_SPEED_MPS"]) - - # 5. 初始化强化感知模块 - perception = EnhancedVehiclePerception(world, vehicle) - - # 6. 视角跟随 - follow_vehicle = init_spectator_follow(world, vehicle) - print("👀 视角已绑定车辆") - - # 7. 核心行驶逻辑(50km/h匀速+感知避障) - print(f"\n🚙 开始50km/h精准匀速行驶(强化感知避障)") - start_time = time.time() - current_steer = 0.0 - target_steer = 0.0 + vehicle = spawn_vehicle_safely(world, bp) + except RuntimeError as e: + print(e) + return + vehicle.set_simulate_physics(True) + vehicle.set_autopilot(False) + + # 4. 生成路边障碍物(核心修复:适配所有版本) + try: + obstacles = spawn_roadside_obstacle(world, vehicle) + except RuntimeError as e: + print(e) + # 销毁车辆后退出 + vehicle.destroy() + return + + # 5. 第三人称视角(清晰看车道+障碍物) + spectator = world.get_spectator() - while time.time() - start_time < CONFIG["DRIVE_DURATION"]: + def third_person_view(): + trans = vehicle.get_transform() + spectator_loc = trans.location - trans.get_forward_vector() * 4.5 + carla.Location( + z=2.5) + trans.get_right_vector() * 0.5 + spectator_rot = carla.Rotation(pitch=-20, yaw=trans.rotation.yaw, roll=0) + spectator.set_transform(carla.Transform(spectator_loc, spectator_rot)) + + # 6. 初始化检测器和控制器 + detector = LaneBoundaryDetector(world, vehicle) + pid = SimplePID() + current_steer = 0.0 + + # 7. 核心行驶循环 + print("\n🚗 开始测试:车道硬约束 + 路边障碍物避障") + print("核心规则:严格贴车道中心,1米内避开障碍物,零碰撞") + print("按Ctrl+C停止\n") + try: + while True: world.tick() - follow_vehicle() - dt = 1 / CONFIG["SYNC_FPS"] - - # 7.1 获取车辆当前速度(m/s) - current_vel = vehicle.get_velocity() - current_speed_mps = math.hypot(current_vel.x, current_vel.y) - current_speed_kmh = current_speed_mps * 3.6 - - # 7.2 强化感知:获取障碍物状态 - has_obstacle, obstacle_dist, obstacle_dir, obstacle_conf = perception.get_obstacle_status() - - # 7.3 避障转向(超平滑,不影响匀速) - if has_obstacle and obstacle_conf > 0.3: - # 距离越近,转向越平缓(避免速度波动) - steer_amplitude = CONFIG["AVOID_STEER_MAX"] * (CONFIG["OBSTACLE_DISTANCE_THRESHOLD"] / obstacle_dist) - steer_amplitude = np.clip(steer_amplitude, 0.1, CONFIG["AVOID_STEER_MAX"]) - target_steer = obstacle_dir * steer_amplitude + third_person_view() + + # 1. 检测车道边界(优先级最高) + detector.check_lane_boundary() + + # 2. 速度控制 + current_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) + throttle, brake = pid.update(current_speed) + + # 3. 转向逻辑:车道硬约束 > 1米紧急避障 > 预警避障 + target_steer = 0.0 + if detector.is_near_lane_edge: + # 靠近车道边缘:强制拉回中心 + print(f"🔴 靠近车道边缘!偏离{detector.lane_deviation:.2f}米 | 强制拉回中心", end='\r') + target_steer = detector.lane_steer_correction + throttle *= 0.1 # 降速纠偏 + elif detector.obs_distance < OBSTACLE_EMERGENCY_DIST: + # 1米内障碍物:紧急避障+车道约束 + print(f"⚠️ 紧急避障:距离障碍物{detector.obs_distance:.2f}米 | 贴车道绕开", end='\r') + brake = 1.0 + throttle = 0.0 + # 避障+车道纠偏:既绕开又不越线 + target_steer = (-detector.obs_direction * 0.6) + detector.lane_steer_correction + elif detector.has_obstacle: + # 预警避障:贴车道绕行 + print(f"🔶 预警避障:距离障碍物{detector.obs_distance:.2f}米 | 顺车道绕开", end='\r') + throttle *= 0.2 + target_steer = (-detector.obs_direction * 0.3) + detector.lane_steer_correction else: - target_steer = 0.0 - - # 7.4 转向超平滑过渡(避免速度波动) - current_steer += (target_steer - current_steer) * CONFIG["STEER_SMOOTH_FACTOR"] - current_steer = np.clip(current_steer, -CONFIG["AVOID_STEER_MAX"], CONFIG["AVOID_STEER_MAX"]) + # 正常行驶:严格贴车道中心 + print(f"✅ 正常行驶:车道偏离{detector.lane_deviation:.2f}米 | 速度{current_speed * 3.6:.1f}km/h", + end='\r') + target_steer = detector.lane_steer_correction - # 7.5 精准PID速度控制(核心匀速逻辑) - throttle, brake = speed_controller.update(current_speed_mps, dt) + # 转向平滑+硬限制 + current_steer += (target_steer - current_steer) * 0.25 + current_steer = np.clip(current_steer, -0.7, 0.7) - # 7.6 卡停处理(仅低速时触发) - if current_speed_kmh < CONFIG["STALL_SPEED_THRESHOLD"] * 3.6: - trans = vehicle.get_transform() - new_loc = trans.location + trans.get_forward_vector() * 1.5 - vehicle.set_transform(carla.Transform(new_loc, trans.rotation)) - throttle = 0.6 # 平缓恢复速度 - brake = 0.0 - print("\n⚠️ 低速重置位置,平缓恢复匀速...", end='') - - # 7.7 下发控制指令(匀速优先) + # 下发控制 vehicle.apply_control(carla.VehicleControl( - throttle=float(throttle), - steer=float(current_steer), - brake=float(brake), - hand_brake=False + throttle=throttle, steer=current_steer, brake=brake, hand_brake=False )) - # 7.8 实时状态打印(匀速+感知) - speed_error = CONFIG["TARGET_SPEED_KMH"] - current_speed_kmh - print(f" 速度:{current_speed_kmh:.1f}km/h(误差:{speed_error:.1f})| " - f"转向:{current_steer:.3f} | 障碍物:{obstacle_dist:.2f}m | 置信度:{obstacle_conf:.2f}", end='\r') - - # 8. 平滑停车 - print("\n🛑 开始平滑停车...") - for i in range(15): - brake = (i / 15) * 1.0 - vehicle.apply_control(carla.VehicleControl(throttle=0.0, steer=0.0, brake=brake)) - world.tick() - time.sleep(0.05) - - # 9. 打印最终状态 - final_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) * 3.6 - print(f"\n📊 行驶完成(时长:{CONFIG['DRIVE_DURATION']}s)") - print(f" 🎯 目标速度:50.0km/h | 最终速度:{final_speed:.1f}km/h") - print(f" 📍 最终位置:X={vehicle.get_location().x:.2f}, Y={vehicle.get_location().y:.2f}") - - except Exception as e: - print(f"\n❌ 程序异常:{e}") - print("\n========== 排查指南 ==========") - print("1. 启动Carla:管理员身份运行 CarlaUE4.exe -windowed -ResX=800 -ResY=600") - print("2. 安装依赖:pip install numpy opencv-python carla==你的版本") - print("3. 关闭代理/防火墙,确保网络正常") + # 可视化 + detector.draw_status() + except KeyboardInterrupt: + print("\n\n🛑 测试停止,清理资源...") finally: - # 清理资源 - if perception: - perception.destroy() - if world: - try: - settings = world.get_settings() - settings.synchronous_mode = False - world.apply_settings(settings) - except: - pass - if vehicle: - try: - vehicle.destroy() - print("🗑️ 车辆已销毁") - except: - pass - print("✅ 所有资源清理完成!") + # 清理所有资源 + detector.destroy() + vehicle.destroy() + for obs in obstacles: + obs.destroy() + # 恢复Carla设置 + settings.synchronous_mode = False + world.apply_settings(settings) + cv2.destroyAllWindows() + print("✅ 清理完成!") if __name__ == "__main__": From 7eaa7078f6ab02e2c02f9219b032fcd2ff8bdd34 Mon Sep 17 00:00:00 2001 From: lej627 <3097482133@qq.com> Date: Sun, 28 Dec 2025 18:38:23 +0800 Subject: [PATCH 26/26] =?UTF-8?q?=E6=96=B0=E6=B7=BB=E8=AF=86=E5=88=AB?= =?UTF-8?q?=E7=BA=A2=E7=BB=BF=E7=81=AF=E5=8A=9F=E8=83=BD=E5=B9=B6=E9=81=B5?= =?UTF-8?q?=E5=AE=88=E4=BA=A4=E9=80=9A=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Unmanned_Aerial_car_Perception/main.py | 125 +++++++++++++++++---- 1 file changed, 101 insertions(+), 24 deletions(-) diff --git a/src/Unmanned_Aerial_car_Perception/main.py b/src/Unmanned_Aerial_car_Perception/main.py index 79a6237968..e9222e0772 100644 --- a/src/Unmanned_Aerial_car_Perception/main.py +++ b/src/Unmanned_Aerial_car_Perception/main.py @@ -6,7 +6,7 @@ import queue import random -# ======================== 核心配置(车道硬约束+细障碍物检测)======================== +# ======================== 核心配置(车道硬约束+细障碍物检测+红绿灯)======================== TARGET_SPEED_KMH = 10.0 # 更低速,确保车道纠偏反应时间 TARGET_SPEED_MPS = TARGET_SPEED_KMH / 3.6 SYNC_FPS = 20 @@ -20,6 +20,10 @@ LANE_BOUNDARY_STRICT = 0.8 # 车道边界强制纠偏力度 LANE_CENTER_BIAS = 0.1 # 轻微偏向车道中心 MAX_LANE_DEVIATION = 0.5 # 最大允许偏离车道0.5米 +# 红绿灯配置 +TRAFFIC_LIGHT_RANGE = 20.0 # 检测20米内的交通信号灯 +YELLOW_LIGHT_SPEED_KMH = 5.0 # 黄灯时限速5km/h +YELLOW_LIGHT_SPEED_MPS = YELLOW_LIGHT_SPEED_KMH / 3.6 VISUALIZATION = True @@ -44,7 +48,7 @@ def update(self, current_speed): return np.clip(throttle, 0.0, 1.0), brake -# ======================== 车道边界检测+细障碍物识别 ========================= +# ======================== 车道边界+细障碍物+红绿灯检测 ========================= class LaneBoundaryDetector: def __init__(self, world, vehicle): self.world = world @@ -59,6 +63,10 @@ def __init__(self, world, vehicle): self.lane_deviation = 0.0 # 偏离车道中心线距离(米) self.lane_steer_correction = 0.0 # 车道纠偏转向 self.is_near_lane_edge = False # 是否靠近车道边缘 + # 红绿灯状态(新增核心) + self.traffic_light = None # 当前车辆需遵守的交通灯 + self.traffic_light_state = carla.TrafficLightState.Unknown # 红绿灯状态 + self.traffic_light_distance = float('inf') # 到红绿灯的距离 self.frame_queue = queue.Queue(maxsize=1) if VISUALIZATION else None @@ -142,6 +150,30 @@ def check_lane_boundary(self): # 轻微偏离时,柔和纠偏 self.lane_steer_correction = np.clip(self.lane_deviation / (lane_width / 2), -0.3, 0.3) + LANE_CENTER_BIAS + def check_traffic_light(self): + """新增:检测当前车辆需要遵守的交通信号灯及状态""" + # 获取车辆当前需遵守的交通灯(Carla原生API,自动匹配车道对应的信号灯) + self.traffic_light = self.vehicle.get_traffic_light() + + if self.traffic_light is not None: + # 计算车辆到交通灯的直线距离 + tl_loc = self.traffic_light.get_transform().location + vehicle_loc = self.vehicle.get_transform().location + self.traffic_light_distance = math.hypot( + tl_loc.x - vehicle_loc.x, + tl_loc.y - vehicle_loc.y + ) + + # 仅处理20米内的有效交通灯 + if self.traffic_light_distance < TRAFFIC_LIGHT_RANGE: + self.traffic_light_state = self.traffic_light.state + else: + self.traffic_light_state = carla.TrafficLightState.Unknown + else: + # 无交通灯或不在路口 + self.traffic_light_state = carla.TrafficLightState.Unknown + self.traffic_light_distance = float('inf') + def _cam_callback(self, data): frame = np.frombuffer(data.raw_data, np.uint8).reshape(data.height, data.width, 4)[:, :, :3].copy() if not self.frame_queue.empty(): @@ -152,18 +184,35 @@ def _cam_callback(self, data): self.frame_queue.put(frame, block=False) def draw_status(self): + """新增:可视化添加红绿灯状态显示""" if not VISUALIZATION: return try: frame = self.frame_queue.get(timeout=0.01) speed = math.hypot(self.vehicle.get_velocity().x, self.vehicle.get_velocity().y) * 3.6 - # 叠加车道偏离+障碍物检测状态 + + # 原有状态显示 cv2.putText(frame, f"Speed: {speed:.1f}km/h", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2) cv2.putText(frame, f"Lane Deviation: {self.lane_deviation:.2f}m", (10, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255) if self.is_near_lane_edge else (0, 255, 0), 2) cv2.putText(frame, f"Obs Dist: {self.obs_distance:.2f}m", (10, 110), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 0), 2) - cv2.imshow("Lane & Obstacle Detection", frame) + + # 新增:红绿灯状态显示(不同颜色区分) + tl_color = (255, 255, 255) # 默认白色(未知) + if self.traffic_light_state == carla.TrafficLightState.Red: + tl_color = (0, 0, 255) + elif self.traffic_light_state == carla.TrafficLightState.Yellow: + tl_color = (0, 255, 255) + elif self.traffic_light_state == carla.TrafficLightState.Green: + tl_color = (0, 255, 0) + + cv2.putText(frame, f"Traffic Light: {self.traffic_light_state.name}", (10, 150), + cv2.FONT_HERSHEY_SIMPLEX, 0.7, tl_color, 2) + cv2.putText(frame, f"TL Distance: {self.traffic_light_distance:.2f}m", (10, 190), + cv2.FONT_HERSHEY_SIMPLEX, 0.7, (128, 128, 128), 2) + + cv2.imshow("Lane & Obstacle & Traffic Light Detection", frame) cv2.waitKey(1) except: pass @@ -283,7 +332,7 @@ def spawn_vehicle_safely(world, bp): raise RuntimeError("❌ 所有生成点都有碰撞,无法生成车辆!") -# ======================== 核心逻辑(车道硬约束+障碍物避障)======================== +# ======================== 核心逻辑(红绿灯 > 车道硬约束 > 障碍物避障)======================== def main(): # 1. 连接Carla client = carla.Client('127.0.0.1', 2000) @@ -320,7 +369,7 @@ def main(): vehicle.destroy() return - # 5. 第三人称视角(清晰看车道+障碍物) + # 5. 第三人称视角(清晰看车道+障碍物+红绿灯) spectator = world.get_spectator() def third_person_view(): @@ -335,57 +384,85 @@ def third_person_view(): pid = SimplePID() current_steer = 0.0 - # 7. 核心行驶循环 - print("\n🚗 开始测试:车道硬约束 + 路边障碍物避障") - print("核心规则:严格贴车道中心,1米内避开障碍物,零碰撞") + # 7. 核心行驶循环(新增红绿灯逻辑) + print("\n🚗 开始测试:红绿灯规则 > 车道硬约束 > 路边障碍物避障") + print("核心规则:红灯停,黄灯减速,绿灯行;严格贴车道中心,1米内避开障碍物") print("按Ctrl+C停止\n") try: while True: world.tick() third_person_view() - # 1. 检测车道边界(优先级最高) + # 1. 检测车道边界 + 红绿灯(核心新增) detector.check_lane_boundary() + detector.check_traffic_light() - # 2. 速度控制 + # 2. 速度控制(基础PID) current_speed = math.hypot(vehicle.get_velocity().x, vehicle.get_velocity().y) - throttle, brake = pid.update(current_speed) + base_throttle, base_brake = pid.update(current_speed) - # 3. 转向逻辑:车道硬约束 > 1米紧急避障 > 预警避障 + # 3. 核心控制逻辑(优先级:红绿灯 > 车道边缘 > 紧急避障 > 预警避障) target_steer = 0.0 - if detector.is_near_lane_edge: - # 靠近车道边缘:强制拉回中心 + throttle = base_throttle + brake = base_brake + + # 【最高优先级】红绿灯处理 + if detector.traffic_light_state == carla.TrafficLightState.Red: + # 红灯:强制刹车停稳 + print(f"🔴 红灯!距离{detector.traffic_light_distance:.2f}米 | 停车等待", end='\r') + brake = 1.0 + throttle = 0.0 + target_steer = 0.0 # 停车时保持方向 + + elif detector.traffic_light_state == carla.TrafficLightState.Yellow: + # 黄灯:减速到5km/h,同时遵守车道约束 + print(f"🟡 黄灯!距离{detector.traffic_light_distance:.2f}米 | 减速慢行", end='\r') + yellow_error = YELLOW_LIGHT_SPEED_MPS - current_speed + if yellow_error > 0: + throttle = np.clip(yellow_error * 0.5, 0.0, 0.3) + brake = 0.0 + else: + throttle = 0.0 + brake = np.clip(-yellow_error * 0.5, 0.0, 0.3) + target_steer = detector.lane_steer_correction + + # 【次优先级】车道边缘约束 + elif detector.is_near_lane_edge: print(f"🔴 靠近车道边缘!偏离{detector.lane_deviation:.2f}米 | 强制拉回中心", end='\r') target_steer = detector.lane_steer_correction throttle *= 0.1 # 降速纠偏 + + # 【次优先级】紧急避障 elif detector.obs_distance < OBSTACLE_EMERGENCY_DIST: - # 1米内障碍物:紧急避障+车道约束 print(f"⚠️ 紧急避障:距离障碍物{detector.obs_distance:.2f}米 | 贴车道绕开", end='\r') brake = 1.0 throttle = 0.0 - # 避障+车道纠偏:既绕开又不越线 target_steer = (-detector.obs_direction * 0.6) + detector.lane_steer_correction + + # 【次优先级】预警避障 elif detector.has_obstacle: - # 预警避障:贴车道绕行 print(f"🔶 预警避障:距离障碍物{detector.obs_distance:.2f}米 | 顺车道绕开", end='\r') throttle *= 0.2 target_steer = (-detector.obs_direction * 0.3) + detector.lane_steer_correction + + # 【正常状态】绿灯/无红绿灯,严格贴车道中心 else: - # 正常行驶:严格贴车道中心 - print(f"✅ 正常行驶:车道偏离{detector.lane_deviation:.2f}米 | 速度{current_speed * 3.6:.1f}km/h", - end='\r') + light_status = "🟢 绿灯" if detector.traffic_light_state == carla.TrafficLightState.Green else "🚦 无信号灯" + print( + f"✅ 正常行驶:{light_status} | 车道偏离{detector.lane_deviation:.2f}米 | 速度{current_speed * 3.6:.1f}km/h", + end='\r') target_steer = detector.lane_steer_correction - # 转向平滑+硬限制 + # 转向平滑+硬限制(防止急转弯) current_steer += (target_steer - current_steer) * 0.25 current_steer = np.clip(current_steer, -0.7, 0.7) - # 下发控制 + # 下发车辆控制指令 vehicle.apply_control(carla.VehicleControl( throttle=throttle, steer=current_steer, brake=brake, hand_brake=False )) - # 可视化 + # 可视化显示(含红绿灯状态) detector.draw_status() except KeyboardInterrupt: