当前位置: 首页 > news >正文

最后100米配送

1. 项目概述

1.1 项目目标

  • 集成无人机与电动车:设计并实现将无人机固定在电动车上,利用电动车的电源进行飞行,实现高楼内部从电动车位置到用户办公/居住地点的最后100米精准配送。
  • 低成本实现:通过利用电动车现有的电源和结构,降低整体系统成本。
  • 高效运营:支持一天约100单的配送需求,确保无人机的高可靠性和高效率。
  • 安全性:确保无人机在高楼内部复杂环境中的安全运行,避免对人群和财产造成损害。

1.2 主要需求

  • 飞行距离:100米。
  • 载重能力:1-2公斤。
  • 导航精度:厘米级定位精度,确保精准降落。
  • 自主飞行与避障:具备自动飞行、避障和返航功能。
  • 低延迟通信:确保实时控制与数据传输。
  • 安全性与稳定性:在高楼内部环境中稳定运行,避免碰撞和干扰。
  • 成本控制:利用现有电动车的电源和结构,降低系统成本。

2. 硬件实现细节

2.1 无人机框架与动力系统

2.1.1 飞行框架
  • 选择:采用轻量化的四旋翼无人机框架,碳纤维或塑料材质,重量控制在500克以内。
  • 尺寸:边长约300mm,适合1-2公斤的载重。
  • 参考型号:DJI F330、自定义轻量化四旋翼框架。
2.1.2 电机与螺旋桨
  • 电机:选择低成本、高效率的电机,如2212型号,约920KV。
    • 推荐型号:Emax MT2212 920KV。
  • 螺旋桨:8英寸或9英寸螺旋桨,平衡推力与效率。
    • 推荐型号:Gemfan 8040或类似规格。
  • 电调(ESC):20A至30A电调,4个。
    • 推荐型号:BLHeli_S ESC 20A。
2.1.3 电池与电源管理
  • 电源来源:利用电动车的电池供电,确保无人机电池与电动车电池的兼容性。
  • 电池类型:轻量化的锂聚合物电池(LiPo),容量根据飞行时间需求选择。
    • 推荐型号:3S或4S LiPo电池,容量在2200mAh至4000mAh之间。
  • 电源分配:使用电源分配板(Power Distribution Board, PDB)将电动车电源分配给无人机各组件。
  • 充电方案:设计电动车与无人机共用充电接口,简化充电过程。
2.1.4 动力系统布线
  • 连接方式:确保所有连接稳固,采用防震设计,避免飞行中松动。
  • 线材选择:使用细而高强度的电缆,减少重量。

2.2 控制系统

2.2.1 飞控板选择
  • 推荐型号:Pixhawk 4或Pixhawk 5X,基于STM32F7或STM32H7系列微控制器,兼容ArduPilot。
  • 功能
    • 多传感器接口(I2C, UART, SPI等)。
    • 支持RTK-GPS和视觉辅助定位。
    • 支持自动飞行、避障和返航功能。
2.2.2 传感器
  • IMU(惯性测量单元):内置于Pixhawk飞控板。
  • RTK-GPS模块:Ublox ZED-F9P,实现厘米级定位精度。
  • 气压计:内置于Pixhawk,用于高度测量。
  • LiDAR模块:如LIDAR Lite v3,用于地面扫描与降落辅助。
  • 视觉传感器:高分辨率摄像头(如Runcam Eagle或Intel RealSense),用于视觉定位与避障。
  • 近距离传感器:额外安装如ToF传感器或红外传感器,提高近距离障碍物检测能力。

2.3 通信系统

2.3.1 无线控制模块
  • 频段:2.4GHz。
  • 模块:基于Wi-Fi(如ESP8266)或LoRa模块,用于地面站与无人机之间的通信。
  • 接口:通过UART或SPI连接到飞控板。
  • 协议:使用ArduPilot支持的MAVLink协议。
2.3.2 FPV系统
  • 摄像头:高清摄像头,如Runcam。
  • 传输模块:5.8GHz无线视频传输模块。
  • 接收设备:配备显示器或使用智能手机进行实时监控。

2.4 配送系统设计

2.4.1 配送盒设计
  • 材质:轻质塑料或ABS材料,具备一定的保温性能。
  • 结构
    • 上盖和下盖,通过铰链连接,支持自动开闭。
    • 内部加装减震垫,保护外卖食品。
  • 重量:控制在200克以内。
2.4.2 自动开舱设计
  • 驱动方式:舵机或电动推杆控制舱门。
    • 推荐型号:SG90舵机或小型电动推杆。
  • 控制逻辑
    1. 接近目标点:无人机到达目标区域,准备降落。
    2. 舱门打开:通过飞控板发送控制信号,驱动舵机打开舱门。
    3. 外卖释放:外卖容器通过机械装置(如滑轨)缓慢释放到地面。
    4. 舱门关闭:外卖释放完成后,舱门自动关闭,准备下次配送。
2.4.3 软着陆系统
  • 减震装置:在无人机底部安装弹性减震器或气囊。
    • 推荐型号:弹性橡胶垫或可充气气囊。
  • 降落策略
    1. 减缓下降速度:逐步降低无人机的下降速度,避免快速坠落。
    2. 软着陆:通过减震装置吸收冲击,保护外卖和无人机自身。

3. 软件实现细节

3.1 系统架构

  • 操作系统:PX4或ArduPilot固件。
  • 模块划分
    • 飞行控制模块:内置于ArduPilot,实现PID控制、姿态稳定和运动控制。
    • 导航与定位模块:处理RTK-GPS和视觉定位数据,规划飞行路径。
    • 通信模块:管理与地面站的双向通信。
    • 避障模块:实时检测并规避障碍物。
    • 配送系统模块:控制配送舱的开闭和外卖释放。
    • 安全与应急模块:监控电池、信号并执行返航或应急降落。

3.2 ArduPilot配置与定制

3.2.1 飞控系统安装
  1. 安装固件
    • 下载最新版本的ArduPilot固件,使用QGroundControl或Mission Planner进行固件安装到Pixhawk飞控板上。
  1. 传感器校准
    • 使用地面站软件进行IMU、气压计、RTK-GPS和LiDAR的校准,确保数据准确性。
  1. 航点设置
    • 在地面站软件中设置起飞点(电动车位置)和目标点(用户地址)的航点,配置自动飞行参数。
3.2.2 高精度定位配置
  • RTK-GPS设置
    1. 基站配置:在固定位置部署RTK基站,连接Ublox ZED-F9P模块。
    2. 无人机端配置:在飞控板上配置RTK-GPS模块,确保与基站实时通信,获取高精度定位数据。
  • 视觉辅助定位
    1. 摄像头集成:将高分辨率摄像头与嵌入式处理单元(如NVIDIA Jetson Nano)连接,进行实时图像处理。
    2. 特征检测与匹配:使用OpenCV库,识别地面标志物或预设的视觉标记(如二维码、AR标记),实现视觉定位。
    3. 数据融合:将视觉定位数据与RTK-GPS数据融合,通过ArduPilot的传感器融合功能,提升定位精度。
    4. 姿态调整:根据视觉反馈,调整无人机的降落姿态,确保平稳降落。
3.2.3 避障与安全功能配置
  • LiDAR避障配置
    1. 传感器集成:将LiDAR模块连接到飞控板的I2C或UART接口。
    2. 配置参数
      • 在地面站软件中启用LiDAR避障功能。
      • 设置安全距离和避障策略,如自动改变航向或高度。
  • 超声波避障配置
    1. 传感器连接:将HC-SR04超声波传感器连接到飞控板的GPIO接口。
    2. 配置参数
      • 在地面站软件中启用超声波避障功能。
      • 设置触发阈值和避障动作。
3.2.4 配送流程控制
  • 舱门控制集成
    1. 舵机连接:将舵机或电动推杆连接到飞控板的PWM输出接口。
    2. 脚本编写:在ArduPilot中编写脚本或使用Lua脚本功能,控制舱门的开闭时机。
    3. 配送逻辑:配置无人机在到达目标航点后自动执行舱门打开、外卖释放和舱门关闭的流程。

3.3 多无人机调度与管理

3.3.1 后端订单管理系统
  • 技术选型
    • 后端框架:Node.js、Django或Spring Boot。
    • 数据库:MySQL、PostgreSQL或MongoDB,存储订单、用户和无人机信息。
  • 功能实现
    1. 订单接收:通过用户端应用(APP或Web)提交订单,后端服务器接收并存储订单信息。
    2. 订单处理:根据订单位置、配送时间等参数,生成配送任务。
    3. 任务分配:将配送任务分配给空闲或最优的无人机,考虑无人机的当前位置、剩余电量、载重等因素。
    4. 状态更新:实时更新无人机的配送状态,供用户和管理系统查看。
3.3.2 任务调度算法
  • 算法选型
    • 贪心算法:快速分配最近的无人机进行配送。
    • 遗传算法粒子群优化(PSO):用于优化复杂的调度问题,如考虑无人机之间的协同和最短路径。
  • 实现步骤
    1. 任务队列:将所有待配送订单放入任务队列。
    2. 无人机状态监控:实时监控所有无人机的状态,包括位置、载重、剩余电量等。
    3. 任务分配:根据调度算法,将订单分配给最合适的无人机。
    4. 路径规划:为每个无人机规划最优的飞行路径,避免无人机之间的路径冲突。
3.3.3 无人机集群管理
  • 实现步骤
    1. 集中控制:通过后端服务器集中管理所有无人机的任务和状态。
    2. 实时通信:确保无人机与服务器之间的实时通信,及时更新状态和任务指令。
    3. 冲突检测与避免:在路径规划时,考虑无人机之间的相对位置,避免飞行冲突。

3.4 能源管理与充电策略

3.4.1 电池管理系统(BMS)
  • 功能
    • 监控无人机电池的电量、温度、电压等参数。
    • 预防过充、过放和过热,确保电池的安全和寿命。
  • 实现步骤
    1. 传感器集成:在无人机上集成电池电量传感器和温度传感器。
    2. 数据监控:通过飞控板读取传感器数据,实时监控电池状态。
    3. 保护机制:在电量低于设定阈值时,自动触发返航或紧急降落功能。
3.4.2 充电站布局与管理
  • 实现步骤
    1. 充电站布局:在配送中心及关键区域(如各楼层的休息区、走廊等)部署充电站,分散无人机的充电负载。
    2. 充电管理系统:后端服务器管理充电站的使用情况,优化充电时间和顺序。
    3. 无人机调度:在无人机电量低时,自动将其调度至最近的充电站进行充电。

3.5 载重与配送优化

3.5.1 载重管理
  • 实现步骤
    1. 订单合并:在可能的情况下,将多个订单合并到同一无人机进行配送,优化载重利用率。
    2. 重量检测:无人机在起飞前,检测配送盒的重量,确保不超载。
3.5.2 配送路线优化
  • 技术选型
    • 室内定位系统:结合RTK-GPS和视觉辅助定位,增强室内定位精度。
    • 地理信息系统(GIS)集成:利用室内GIS数据,分析高楼内部的飞行路线。
    • 最短路径算法:应用A*算法,计算最优飞行路径,避开障碍物。
  • 实现步骤
    1. 室内地图构建:使用SLAM技术或现有的室内地图数据,构建高楼内部的飞行环境模型。
    2. 路径规划:根据订单地址,规划最短且避开障碍物的飞行路径。
    3. 实时调整:根据实时障碍物检测和环境变化,动态调整飞行路径。

3.6 多无人机协同配送

3.6.1 任务分配策略
  • 实现步骤
    1. 负载均衡:确保每架无人机的配送任务均衡,避免某些无人机过载或空闲。
    2. 优先级管理:根据订单的紧急程度或用户需求,优先分配任务。
3.6.2 无人机间通信
  • 实现步骤
    1. 无线通信协议:采用Mesh网络或基于Zigbee的通信协议,实现无人机间的直接通信。
    2. 信息共享:无人机间共享位置信息、任务状态等,提高协同配送的效率。

4. 最后100米导航技术实现细节

4.1 高精度定位系统

4.1.1 RTK-GPS系统
  • 硬件选型
    • 无人机端:Ublox ZED-F9P模块。
    • 基站:部署固定基站在配送中心或附近区域,持续接收卫星信号并计算差分修正数据。
  • 实现步骤
    1. 基站设置:在固定位置部署RTK基站,配置天线和接收器。
    2. 无人机配置:无人机配备RTK接收器,与基站实时通信,获取高精度定位数据。
    3. 数据融合:结合IMU传感器,通过ArduPilot的传感器融合功能,实现高精度的位置估计。
4.1.2 视觉辅助定位
  • 硬件选型
    • 摄像头:高分辨率广角摄像头,如Runcam Eagle或Intel RealSense。
    • 处理单元:集成在无人机上的嵌入式计算平台,如NVIDIA Jetson Nano,用于实时图像处理。
  • 实现步骤
    1. 图像采集:实时获取地面图像,通过摄像头传输到处理单元。
    2. 特征检测与匹配:使用OpenCV或其他计算机视觉库,识别地面标志物或预设的视觉标记(如二维码、AR标记)。
    3. 位置校正:将视觉定位数据与RTK-GPS数据融合,进一步提高定位精度。
    4. 姿态调整:根据视觉反馈,调整无人机的降落姿态,确保平稳降落。

4.2 精准降落技术

4.2.1 视觉辅助降落
  • 实现步骤
    1. 目标识别:在电动车上安装可识别的视觉标记,如带有QR码的降落平台。
    2. 图像处理:无人机通过摄像头实时扫描地面,识别并定位降落标记。
    3. 自动对准:根据识别的标记位置,调整无人机的降落路径,确保垂直对准目标。
    4. 软着陆:结合气压计和视觉数据,控制降落速度,利用减震装置实现软着陆。
4.2.2 LiDAR辅助降落
  • 硬件选型
    • LiDAR模块:如LIDAR Lite v3或RPLIDAR A1。
  • 实现步骤
    1. 地面扫描:在降落前,使用LiDAR模块扫描地面,识别降落区域的高度和障碍物。
    2. 数据处理:实时处理LiDAR数据,计算地面高度和障碍物位置。
    3. 降落控制:根据LiDAR反馈调整降落速度和路径,确保降落区域的安全性。

4.3 最后100米导航流程

  1. 进入最后100米区域
    • 当无人机接近目标位置时(例如剩余飞行距离小于200米),启动高精度定位和视觉辅助定位系统。
  1. 路径微调
    • 使用RTK-GPS和视觉数据对飞行路径进行微调,确保无人机在最后100米内的飞行轨迹精确。
  1. 降落准备
    • 启动降落程序,结合气压计、LiDAR和视觉数据,调整无人机的高度和速度,确保平稳降落。
  1. 精准降落
    • 使用视觉辅助降落技术,将无人机精准对准降落平台,实现安全、稳定的软着陆,并固定回电动车。

5. 高效配送管理支持一天100单

5.1 订单管理系统

5.1.1 后端服务器与数据库
  • 技术选型
    • 后端框架:Node.js、Django或Spring Boot。
    • 数据库:MySQL、PostgreSQL或MongoDB,存储订单、用户和无人机信息。
  • 实现步骤
    1. 订单接收:通过用户端应用(APP或Web)提交订单,后端服务器接收并存储订单信息。
    2. 订单处理:根据订单位置、配送时间等参数,生成配送任务。
    3. 任务分配:将配送任务分配给空闲或最优的无人机,考虑无人机的当前位置、剩余电量、载重等因素。
    4. 状态更新:实时更新无人机的配送状态,供用户和管理系统查看。
5.1.2 用户端应用
  • 功能实现
    • 订单提交:用户通过APP选择餐品、输入配送地址,提交订单。
    • 订单追踪:用户可以实时查看订单状态,包括无人机的位置、预计到达时间等。
    • 通知推送:订单状态变化、无人机到达、配送完成等事件通过推送通知用户。

5.2 任务调度与多无人机协调

5.2.1 调度算法
  • 算法选型
    • 贪心算法:快速分配最近的无人机进行配送。
    • 遗传算法粒子群优化(PSO):用于优化复杂的调度问题,如考虑无人机之间的协同和最短路径。
  • 实现步骤
    1. 任务队列:将所有待配送订单放入任务队列。
    2. 无人机状态监控:实时监控所有无人机的状态,包括位置、载重、剩余电量等。
    3. 任务分配:根据调度算法,将订单分配给最合适的无人机。
    4. 路径规划:为每个无人机规划最优的飞行路径,避免无人机之间的路径冲突。
5.2.2 无人机集群管理
  • 实现步骤
    1. 集中控制:通过后端服务器集中管理所有无人机的任务和状态。
    2. 实时通信:确保无人机与服务器之间的实时通信,及时更新状态和任务指令。
    3. 冲突检测与避免:在路径规划时,考虑无人机之间的相对位置,避免飞行冲突。

5.3 能源管理与充电策略

5.3.1 电池管理系统(BMS)
  • 功能
    • 监控无人机电池的电量、温度、电压等参数。
    • 预防过充、过放和过热,确保电池的安全和寿命。
  • 实现步骤
    1. 传感器集成:在无人机上集成电池电量传感器和温度传感器。
    2. 数据监控:通过飞控板读取传感器数据,实时监控电池状态。
    3. 保护机制:在电量低于设定阈值时,自动触发返航或紧急降落功能。
5.3.2 充电站布局与管理
  • 实现步骤
    1. 充电站布局:在配送中心及高楼各关键区域(如各楼层的公共区域)部署充电站,分散无人机的充电负载。
    2. 充电管理系统:后端服务器管理充电站的使用情况,优化充电时间和顺序。
    3. 无人机调度:在无人机电量低时,自动将其调度至最近的充电站进行充电。

5.4 载重与配送优化

5.4.1 载重管理
  • 实现步骤
    1. 订单合并:在可能的情况下,将多个订单合并到同一无人机进行配送,优化载重利用率。
    2. 重量检测:无人机在起飞前,检测配送盒的重量,确保不超载。
5.4.2 配送路线优化
  • 技术选型
    • 室内定位系统:结合RTK-GPS和视觉辅助定位,增强室内定位精度。
    • 地理信息系统(GIS)集成:利用室内GIS数据,分析高楼内部的飞行路线。
    • 最短路径算法:应用A*算法,计算最优飞行路径,避开障碍物。
  • 实现步骤
    1. 室内地图构建:使用SLAM技术或现有的室内地图数据,构建高楼内部的飞行环境模型。
    2. 路径规划:根据订单地址,规划最短且避开障碍物的飞行路径。
    3. 实时调整:根据实时障碍物检测和环境变化,动态调整飞行路径。

5.5 多无人机协同配送

5.5.1 任务分配策略
  • 实现步骤
    1. 负载均衡:确保每架无人机的配送任务均衡,避免某些无人机过载或空闲。
    2. 优先级管理:根据订单的紧急程度或用户需求,优先分配任务。
5.5.2 无人机间通信
  • 实现步骤
    1. 无线通信协议:采用Mesh网络或基于Zigbee的通信协议,实现无人机间的直接通信。
    2. 信息共享:无人机间共享位置信息、任务状态等,提高协同配送的效率。

6. 系统架构与集成

6.1 系统架构图

+---------------------+
|    用户端应用       |
| (订单提交与追踪)    |
+----------+----------+|v
+----------+----------+
|    后端服务器       |
| (订单管理与调度)    |
+----------+----------+|v
+----------+----------+
|    通信网络层       |
| (无线通信与数据传输)|
+----------+----------+|v
+----------+----------+
|      无人机集群      |
| (导航、飞行控制等)  |
+----------+----------+|v
+----------+----------+
|      电动车平台      |
| (电源与物理集成)    |
+---------------------+

6.2 系统集成步骤

  1. 模块开发与测试
    • 独立开发:各功能模块(订单管理、飞行控制、导航、避障等)独立开发并测试,确保各自功能的稳定性。
    • 接口定义:明确各模块之间的通信接口和数据格式,确保模块间的兼容性。
  1. 硬件集成
    • 无人机与电动车集成:设计无人机固定架,将无人机稳固地安装在电动车上,确保飞行时的稳定性。
    • 电源连接:通过电源分配板将电动车的电池供电给无人机,同时确保电池电量管理系统的独立性和安全性。
  1. 软件集成
    • 飞控系统与导航集成:将ArduPilot飞控系统与高精度定位系统、视觉辅助定位系统集成,确保无人机在最后100米内的高精度导航和精准降落。
    • 订单管理与调度集成:将后端订单管理系统与无人机调度系统集成,实现高效的任务分配和多无人机协调。
  1. 系统调试与优化
    • 功能测试:分别测试飞行控制、导航、避障、配送系统等功能模块,确保每个部分正常工作。
    • 系统调试:进行全系统的飞行测试,调整控制参数,优化系统性能。
  1. 飞行测试
5.1 初步飞行
5.2 定位与导航测试
5.3 避障功能测试
5.4 配送系统测试
    • 室内测试
      • 在室内进行低空飞行测试,验证PID控制器的稳定性。
      • 测试基本飞行指令,如起飞、悬停、降落。
    • RTK-GPS精度验证
      • 在高楼外部开阔区域进行RTK-GPS定位测试,确保定位数据准确。
    • 视觉定位验证
      • 在电动车周围设置视觉标记,测试无人机的视觉定位精度。
    • 航点飞行
      • 设置多个航点,测试无人机沿预定路径飞行的准确性。
    • 超声波避障
      • 在飞行过程中设置障碍物,测试无人机的避障反应。
    • 视觉避障
      • 在高楼内部复杂环境中进行飞行测试,验证视觉避障算法的有效性。
    • 舱门控制
      • 测试舱门的开闭动作,确保可靠性。
    • 外卖释放
      • 进行多次外卖释放测试,验证配送过程的顺利性和安全性。
    • 软着陆
      • 测试减震装置的效果,确保无人机降落平稳。
  1. 优化与迭代
    • 数据分析
      • 收集飞行数据,分析控制算法的表现,进行参数优化。
    • 故障排查
      • 记录测试过程中出现的问题,逐步修复和优化硬件与软件。
    • 功能增强
      • 根据测试结果,添加更多功能,如更高级的避障算法、智能配送路径规划等。
  1. 试点运行与反馈收集
    • 试点部署:在高楼内限定区域进行试点运行,监测系统的实际表现,收集反馈进行改进。
    • 用户反馈:通过用户调查和数据分析,了解用户体验,优化配送流程。
  1. 全面部署与运营
    • 大规模部署:根据试点结果进行全面部署,开始大规模运营,支持一天100单的配送需求。
    • 持续监控:通过后端系统实时监控无人机状态,确保系统的高效运行。

7. 控制算法实现

7.1 飞行控制代码框架

ArduPilot已内置成熟的飞行控制算法,包括PID控制、航点导航、避障等功能。因此,主要的定制工作集中在配送系统的控制逻辑和舱门操作上。

7.1.1 舱门控制脚本

使用ArduPilot的Lua脚本功能,控制配送舱的开闭。

-- delivery_control.luafunction open_delivery_box()-- 设置舵机到打开位置servo_set(6, 2000)  -- 根据舵机的实际PWM范围调整gcs:send_text(6, "Delivery Box Opened")
endfunction close_delivery_box()-- 设置舵机到关闭位置servo_set(6, 1000)  -- 根据舵机的实际PWM范围调整gcs:send_text(6, "Delivery Box Closed")
endfunction manage_delivery()if current_location == target_location thenopen_delivery_box()sleep(2000)  -- 等待外卖释放close_delivery_box()initiate_landing()end
endreturn {main = manage_delivery
}

7.2 航点导航实现

ArduPilot支持自动航点导航,无需额外编写代码。通过地面站软件设置起飞点和目标航点即可。

7.2.1 设置航点
  1. 使用Mission Planner或QGroundControl
    • 连接飞控板,进入航点规划界面。
    • 设置起飞点为电动车当前的位置。
    • 设置目标航点为用户的配送地址。
    • 配置自动飞行参数,如飞行速度、高度等。

7.3 避障功能实现

利用ArduPilot的避障功能,集成LiDAR和超声波传感器,实现实时避障。

7.3.1 LiDAR避障配置
  1. 连接LiDAR模块:将LiDAR模块连接到飞控板的I2C或UART接口。
  2. 配置参数
    • 在地面站软件中启用LiDAR避障功能。
    • 设置安全距离和避障策略,如自动改变航向或高度。
7.3.2 超声波避障配置
  1. 连接超声波传感器:将HC-SR04超声波传感器连接到飞控板的GPIO接口。
  2. 配置参数
    • 在地面站软件中启用超声波避障功能。
    • 设置触发阈值和避障动作。

7.4 安全与应急功能

7.4.1 自动返航
  • 配置参数
    • 设置返航航点为电动车位置。
    • 配置返航触发条件,如电量低、信号丢失等。
7.4.2 紧急降落
  • 实现步骤
    1. 监控系统状态:通过飞控板监控电量、信号强度和避障状态。
    2. 触发降落:在紧急情况下,自动触发降落程序,确保无人机安全降落回电动车。

8. 通信实现细节

8.1 无线通信配置

8.1.1 飞控板与无线模块通信
  • 连接方式
    • VCC:3.3V
    • GND:地
    • TX:连接到飞控板的UART RX
    • RX:连接到飞控板的UART TX
  • 软件配置
    • 在地面站软件中配置无线模块的通信参数。
    • 使用MAVLink协议,实现地面站与飞控板之间的数据传输。

8.2 地面站与无人机通信

8.2.1 地面站软件开发
  • 开发平台:PC或嵌入式设备(如树莓派)。
  • 软件工具:使用Mission Planner、QGroundControl等开源地面站软件进行配置和监控。
  • 功能实现
    • 实时数据接收:接收无人机发送的位置信息、姿态数据、电量状态等。
    • 飞行指令发送:发送起飞、降落、航点设置、返航等指令。
    • 用户界面:显示无人机实时状态、地图位置、飞行路径等。
8.2.2 用户端应用开发
  • 平台:iOS和Android移动设备。
  • 开发工具:React Native、Flutter或原生开发(Swift/Kotlin)。
  • 功能实现
    • 订单提交:用户通过应用提交外卖订单,并自动生成配送任务。
    • 实时追踪:显示无人机的位置和飞行状态,更新预计到达时间。
    • 通知推送:订单状态变化、无人机到达通知等。

9. 避障与安全实现

9.1 超声波传感器驱动

利用超声波传感器实现近距离障碍物检测和避障。

// obstacle.c#include "obstacle.h"void Obstacle_Init(void) {// 配置Trig引脚为输出,Echo引脚为输入GPIO_InitTypeDef GPIO_InitStruct = {0};// Trig引脚GPIO_InitStruct.Pin = TRIG_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(TRIG_PORT, &GPIO_InitStruct);// Echo引脚GPIO_InitStruct.Pin = ECHO_PIN;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(ECHO_PORT, &GPIO_InitStruct);
}float Read_Ultrasonic_Distance(void) {// 发送10us脉冲到TrigHAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_SET);HAL_Delay(1); // 近似10us延时HAL_GPIO_WritePin(TRIG_PORT, TRIG_PIN, GPIO_PIN_RESET);// 读取Echo高电平持续时间uint32_t start_time = Get_Microseconds();while (HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_RESET && (Get_Microseconds() - start_time) < MAX_TIME) {}uint32_t echo_start = Get_Microseconds();while (HAL_GPIO_ReadPin(ECHO_PORT, ECHO_PIN) == GPIO_PIN_SET && (Get_Microseconds() - echo_start) < MAX_TIME) {}uint32_t echo_end = Get_Microseconds();uint32_t duration = echo_end - echo_start;float distance = (duration * 0.0343) / 2.0f; // cmreturn distance;
}Obstacle_Data Read_Obstacle(void) {Obstacle_Data obs;obs.distance = Read_Ultrasonic_Distance();if (obs.distance < SAFE_DISTANCE_CM) {obs.is_obstacle = 1;} else {obs.is_obstacle = 0;}return obs;
}

9.2 视觉避障实现

利用视觉传感器和嵌入式计算单元(如NVIDIA Jetson Nano),实现实时图像处理与障碍物检测。

  • 硬件连接:将高分辨率摄像头连接到NVIDIA Jetson Nano,配置与飞控板的数据通信。
  • 软件流程
    1. 图像采集:实时获取摄像头图像,通过CUDA加速的OpenCV库进行处理。
    2. 目标检测:使用预训练的深度学习模型(如YOLOv3)检测障碍物。
    3. 深度计算:通过双目视觉或LiDAR数据计算障碍物距离。
    4. 避障决策:基于障碍物位置和距离,调整飞行路径或姿态。
  • 通信接口:处理后的避障信息通过MAVLink协议传回飞控板,触发避障动作。

9.3 自动返航功能

利用ArduPilot内置的返航功能,确保在电量低或信号丢失时无人机能够安全返回电动车。

-- safety.luafunction monitor_safety()local battery_level = battery_voltage()local comm_active = communication_status()local obstacle_detected = check_obstacle()if battery_level < LOW_BATTERY_THRESHOLD or not comm_active or obstacle_detected thenreturn_home()end
endfunction return_home()-- 设置返航航点为电动车位置mission.set_return_to_launch()gcs:send_text(6, "Initiating Return Home")
endreturn {main = monitor_safety
}

10. 外卖配送系统实现

10.1 配送舱控制

10.1.1 舱门控制代码

使用ArduPilot的Lua脚本控制舱门的开闭。

-- delivery_control.luafunction open_delivery_box()-- 设置舵机到打开位置servo_set(6, 2000)  -- 根据舵机的实际PWM范围调整gcs:send_text(6, "Delivery Box Opened")
endfunction close_delivery_box()-- 设置舵机到关闭位置servo_set(6, 1000)  -- 根据舵机的实际PWM范围调整gcs:send_text(6, "Delivery Box Closed")
endfunction manage_delivery()if current_location == target_location thenopen_delivery_box()sleep(2000)  -- 等待外卖释放close_delivery_box()initiate_landing()end
endreturn {main = manage_delivery
}

10.2 订单与飞行管理

10.2.1 订单处理
  • 订单接收:通过用户端应用提交订单,系统生成配送任务。
  • 任务分配:根据订单位置、无人机当前位置、剩余电量等参数,分配最合适的无人机进行配送。
  • 航点生成:根据订单地址生成无人机的起飞点(电动车位置)和终点航点(用户地址)。
10.2.2 订单跟踪系统
  • 后端服务器
    • 使用云服务(如AWS、Azure)搭建订单管理系统。
    • 接收、存储订单信息,管理无人机配送任务。
  • 实时数据同步
    • 无人机通过通信模块实时上传位置信息,服务器更新订单状态。
    • 用户端应用通过API获取最新的配送状态和无人机位置。
10.2.3 用户通知系统
  • 通知触发
    • 订单接收确认、配送开始、无人机接近、外卖释放等事件触发通知。
  • 通知方式
    • 推送通知(APP通知、短信、邮件)。
    • 实时地图显示无人机位置和预计到达时间。

11. 安全与应急预案实现

11.1 电池监控与保护

利用飞控系统的电池监控功能,确保无人机电池安全。

-- battery_monitor.luafunction monitor_battery()local voltage = battery_voltage()if voltage < LOW_BATTERY_THRESHOLD_VOLTAGE thenreturn_home()end
endfunction return_home()-- 设置返航航点为电动车位置mission.set_return_to_launch()gcs:send_text(6, "Low Battery: Initiating Return Home")
endreturn {main = monitor_battery
}

11.2 防干扰与失控保护

  • 抗干扰设计
    • 屏蔽电缆:使用屏蔽的通信电缆,减少外界电磁干扰。
    • 滤波电容:在电源输入端添加滤波电容,稳定电压供应。
  • 失控保护模式
    • 信号监控:实时监控通信信号强度,若低于阈值,触发返航。
    • 备用控制:在主要控制系统失效时,启用备用控制路径。

11.3 应急迫降系统

利用ArduPilot的紧急降落功能,确保在系统故障时无人机能够安全降落。

-- emergency_land.luafunction emergency_land()-- 降低飞行高度,减慢速度set_altitude_target(SAFE_LANDING_ALTITUDE)set_speed_target(SAFE_LANDING_SPEED)-- 等待无人机接近地面while current_altitude() > SAFE_LANDING_ALTITUDE do-- 持续调整姿态和速度end-- 触发软着陆activate_soft_landing()-- 关闭电源,停止电机shutdown_motors()
endreturn {main = emergency_land
}

12. 最后100米导航实现细节

12.1 高精度定位系统

12.1.1 RTK-GPS系统
  • 硬件选型
    • 无人机端:Ublox ZED-F9P模块。
    • 基站:部署固定基站在配送中心或附近区域,持续接收卫星信号并计算差分修正数据。
  • 实现步骤
    1. 基站设置:在固定位置部署RTK基站,配置天线和接收器。
    2. 无人机配置:无人机配备RTK接收器,与基站实时通信,获取高精度定位数据。
    3. 数据融合:结合IMU传感器,通过ArduPilot的传感器融合功能,实现高精度的位置估计。
12.1.2 视觉辅助定位
  • 硬件选型
    • 摄像头:高分辨率广角摄像头,如Runcam Eagle或Intel RealSense。
    • 处理单元:集成在无人机上的嵌入式计算平台,如NVIDIA Jetson Nano,用于实时图像处理。
  • 实现步骤
    1. 图像采集:实时获取地面图像,通过摄像头传输到处理单元。
    2. 特征检测与匹配:使用OpenCV或其他计算机视觉库,识别地面标志物或预设的视觉标记(如二维码、AR标记)。
    3. 位置校正:将视觉定位数据与RTK-GPS数据融合,进一步提高定位精度。
    4. 姿态调整:根据视觉反馈,调整无人机的降落姿态,确保平稳降落。

12.2 精准降落技术

12.2.1 视觉辅助降落
  • 实现步骤
    1. 目标识别:在电动车上安装可识别的视觉标记,如带有QR码的降落平台。
    2. 图像处理:无人机通过摄像头实时扫描地面,识别并定位降落标记。
    3. 自动对准:根据识别的标记位置,调整无人机的降落路径,确保垂直对准目标。
    4. 软着陆:结合气压计和视觉数据,控制降落速度,利用减震装置实现软着陆。
12.2.2 LiDAR辅助降落
  • 硬件选型
    • LiDAR模块:如LIDAR Lite v3或RPLIDAR A1。
  • 实现步骤
    1. 地面扫描:在降落前,使用LiDAR模块扫描地面,识别降落区域的高度和障碍物。
    2. 数据处理:实时处理LiDAR数据,计算地面高度和障碍物位置。
    3. 降落控制:根据LiDAR反馈调整降落速度和路径,确保降落区域的安全性。

12.3 最后100米导航流程

  1. 进入最后100米区域
    • 当无人机接近目标位置时(例如剩余飞行距离小于200米),启动高精度定位和视觉辅助定位系统。
  1. 路径微调
    • 使用RTK-GPS和视觉数据对飞行路径进行微调,确保无人机在最后100米内的飞行轨迹精确。
  1. 降落准备
    • 启动降落程序,结合气压计、LiDAR和视觉数据,调整无人机的高度和速度,确保平稳降落。
  1. 精准降落
    • 使用视觉辅助降落技术,将无人机精准对准降落平台,实现安全、稳定的软着陆,并固定回电动车。

13. 测试与调试流程

13.1 硬件测试

  • 电机与螺旋桨测试
    • 检查电机连接是否稳固,确保螺旋桨旋转正常。
    • 测试ESC响应,确保电机速度可控。
  • 传感器校准
    • 校准IMU传感器,确保姿态数据准确。
    • 校准RTK-GPS模块,验证定位精度。
    • 校准气压计和LiDAR,确保高度测量准确。

13.2 软件调试

  • 模块单元测试
    • 分别测试飞行控制模块、导航模块、通信模块、避障模块等功能,确保每个模块独立工作正常。
  • 集成测试
    • 将所有模块集成,进行系统级测试,检查各模块之间的协作是否正常。

13.3 飞行测试

13.3.1 初步飞行
  • 室内测试
    • 在室内进行低空飞行测试,验证PID控制器的稳定性。
    • 测试基本飞行指令,如起飞、悬停、降落。
13.3.2 定位与导航测试
  • RTK-GPS精度验证
    • 在高楼外部开阔区域进行RTK-GPS定位测试,确保定位数据准确。
  • 视觉定位验证
    • 在电动车周围设置视觉标记,测试无人机的视觉定位精度。
  • 航点飞行
    • 设置多个航点,测试无人机沿预定路径飞行的准确性。
13.3.3 避障功能测试
  • 超声波避障
    • 在飞行过程中设置障碍物,测试无人机的避障反应。
  • 视觉避障
    • 在高楼内部复杂环境中进行飞行测试,验证视觉避障算法的有效性。
13.3.4 配送系统测试
  • 舱门控制
    • 测试舱门的开闭动作,确保可靠性。
  • 外卖释放
    • 进行多次外卖释放测试,验证配送过程的顺利性和安全性。
  • 软着陆
    • 测试减震装置的效果,确保无人机降落平稳。

13.4 安全性验证

  • 电池保护
    • 模拟低电量情况,测试自动返航和紧急降落功能。
  • 信号丢失
    • 模拟通信中断,验证无人机的失控保护模式。
  • 紧急迫降
    • 模拟系统故障,测试应急降落系统的可靠性。

13.5 优化与迭代

  • 数据分析
    • 收集飞行数据,分析控制算法的表现,进行参数优化。
  • 故障排查
    • 记录测试过程中出现的问题,逐步修复和优化硬件与软件。
  • 功能增强
    • 根据测试结果,添加更多功能,如更高级的避障算法、智能配送路径规划等。

14. 实施步骤与时间规划

14.1 项目阶段划分

  1. 需求分析与规划(1周)
    • 确定具体需求,制定详细的项目计划和时间表。
  1. 硬件采购与组装(3周)
    • 采购开源飞控板、传感器模块、通信模块等硬件组件。
    • 进行无人机与电动车的组装与初步测试。
  1. 软件安装与配置(4周)
    • 安装ArduPilot飞控固件,进行传感器校准与系统配置。
    • 开发配送舱控制脚本,集成避障与降落逻辑。
  1. 系统集成与调试(5周)
    • 将飞控系统与订单管理系统集成,测试多无人机协同配送。
    • 进行全系统的功能测试,优化飞行控制和调度算法。
  1. 飞行测试与优化(6周)
    • 进行多次飞行测试,验证导航精度、避障功能和配送流程。
    • 根据测试结果调整系统参数,提升性能和可靠性。
  1. 试点运行与反馈收集(4周)
    • 在高楼内限定区域进行试点运行,收集用户反馈和系统运行数据,进行进一步优化。
  1. 全面部署与运营(持续)
    • 根据试点结果进行全面部署,开始大规模运营,支持一天100单的配送需求。
    • 持续监控和优化系统性能,确保高效和安全的运营。

14.2 资源与团队配置

  • 项目经理:负责整体项目规划与进度管理。
  • 硬件工程师:负责无人机与电动车的硬件选型、组装与调试。
  • 嵌入式软件工程师:开发飞行控制、导航、通信等嵌入式系统软件。
  • 后端开发工程师:搭建订单管理、任务调度和数据处理的后端系统。
  • 前端开发工程师:开发用户端应用,实现订单提交与追踪功能。
  • 数据科学家:优化调度算法和导航系统,提升系统智能化水平。
  • 测试工程师:负责系统的全面测试与质量保证。

15. 技术实现代码示例

15.1 Lua脚本控制配送舱

利用ArduPilot的Lua脚本功能,控制配送舱的开闭和配送流程。

-- delivery_control.luafunction open_delivery_box()-- 设置舵机到打开位置servo_set(6, 2000)  -- 根据舵机的实际PWM范围调整gcs:send_text(6, "Delivery Box Opened")
endfunction close_delivery_box()-- 设置舵机到关闭位置servo_set(6, 1000)  -- 根据舵机的实际PWM范围调整gcs:send_text(6, "Delivery Box Closed")
endfunction manage_delivery()if current_location == target_location thenopen_delivery_box()sleep(2000)  -- 等待外卖释放close_delivery_box()initiate_landing()end
endreturn {main = manage_delivery
}

15.2 任务调度与分配

在后端服务器上实现简单的任务调度逻辑,分配订单给最合适的无人机。

# scheduler.pyimport math
from drone import Drone
from order import Orderclass Scheduler:def __init__(self, drones, orders):self.drones = drones  # List of Drone objectsself.orders = orders  # List of Order objectsdef assign_tasks(self):for order in self.orders:best_drone = Nonemin_distance = float('inf')for drone in self.drones:if drone.is_available() and drone.can_carry(order.weight):distance = self.calculate_distance(drone.current_position, order.pickup_location)if distance < min_distance:min_distance = distancebest_drone = droneif best_drone:best_drone.assign_order(order)print(f"Order {order.id} assigned to Drone {best_drone.id}")def calculate_distance(self, pos1, pos2):return math.sqrt((pos1.x - pos2.x)**2 + (pos1.y - pos2.y)**2)

15.3 电池监控与自动返航

利用ArduPilot的电池监控功能,触发自动返航。

-- battery_monitor.luafunction monitor_battery()local voltage = battery_voltage()if voltage < LOW_BATTERY_THRESHOLD_VOLTAGE thenreturn_home()end
endfunction return_home()-- 设置返航航点为电动车位置mission.set_return_to_launch()gcs:send_text(6, "Low Battery: Initiating Return Home")
endreturn {main = monitor_battery
}

相关文章:

最后100米配送

1. 项目概述 1.1 项目目标 集成无人机与电动车&#xff1a;设计并实现将无人机固定在电动车上&#xff0c;利用电动车的电源进行飞行&#xff0c;实现高楼内部从电动车位置到用户办公/居住地点的最后100米精准配送。低成本实现&#xff1a;通过利用电动车现有的电源和结构&am…...

Linux的进程替换以及基础IO

进程替换 上一篇草率的讲完了进程地址空间的组成结构和之间的关系&#xff0c;那么我们接下来了解一下程序的替换。 首先&#xff0c;在进程部分我们提过了&#xff0c;其实文件可以在运行时变成进程&#xff0c;而我们使用的Linux软件其实也是一个进程&#xff0c;所以进一步…...

《计算机网络A》单选题-复习题库

1. 计算机网络最突出的优点是&#xff08;D&#xff09; A、存储容量大B、将计算机技术与通信技术相结合C、集中计算D、资源共享 2. RIP 路由协议的最大跳数是&#xff08;C&#xff09; A、13B、14C、15D、16 3. 下面哪一个网络层次不属于 TCP/IP 体系模型&#xff08;D&a…...

闲谭Scala(2)--安装与环境配置

1. 概述 Java开发环境安装&#xff0c;需要两步&#xff0c;第一安装JDK&#xff0c;第二配置环境变量。 Scala的话&#xff0c;也是两步&#xff0c;第一安装Scale环境&#xff0c;第二配置环境变量。 需要注意的是&#xff0c;配置环境变量&#xff0c;主要是想让windows操…...

Python基于卷积神经网络的车牌识别系统开发与实现

1. 简介 车牌识别是人工智能在交通领域的重要应用&#xff0c;广泛用于高速违章检测、停车场管理和智能交通系统等场景。本系统通过基于卷积神经网络&#xff08;CNN&#xff09;的深度学习算法&#xff0c;结合 Python 和 MySQL 实现车牌的快速识别与管理。 系统特点&#x…...

Spring Boot集成Netty创建一个TCP服务器,接收16进制数据(自定义解码器和编码器)

Netty Netty是一个高性能、异步事件驱动的网络应用程序框架,它提供了对并发和异步编程的抽象,使得开发网络应用程序变得更加简单和高效。 在Netty中,EventLoopGroup是处理I/O操作的多线程事件循环器。在上面的示例中,我们创建了两个EventLoopGroup实例:bossGroup和worker…...

Python 中的 with open:文件操作的最佳实践

在 Python 中&#xff0c;文件操作是最常用的一项任务&#xff0c;无论是读取文件内容&#xff0c;还是将数据写入文件。传统的文件操作方式使用 open() 和 close() 函数来处理文件&#xff0c;但在实际开发中&#xff0c;我们推荐使用 with open() 语句来进行文件操作。本文将…...

哪些框架、软件、中间件使用了netty? 哪些中间件、软件底层使用了epoll?

使用 Netty 的软件、中间件和框架 Netty 是一个异步事件驱动的网络应用框架&#xff0c;广泛应用于构建高性能的网络应用程序。以下是一些使用了 Netty 的知名软件、中间件和框架&#xff1a; 1. Elasticsearch 描述&#xff1a;Elasticsearch 是一个分布式的搜索和分析引擎…...

AI 智能助手对话系统

一个基于 React 和 Tailwind CSS 构建的现代化 AI 对话系统&#xff0c;提供流畅的用户体验和丰富的交互功能。 项目链接&#xff1a;即将开放… 功能特点 &#x1f916; 智能对话&#xff1a;支持与 AI 助手实时对话&#xff0c;流式输出回答&#x1f4c1; 文件处理&#xff…...

2024年秋词法分析作业(满分25分)

【问题描述】 请根据给定的文法设计并实现词法分析程序&#xff0c;从源程序中识别出单词&#xff0c;记录其单词类别和单词值&#xff0c;输入输出及处理要求如下&#xff1a; &#xff08;1&#xff09;数据结构和与语法分析程序的接口请自行定义&#xff1b;类别码需按下表格…...

Docker镜像瘦身:从1.43G到22.4MB

Docker镜像瘦身:从1.43G到22.4MB 背景1、创建项目2、构建第一个镜像3、修改基础镜像4、多级构建5、使用Nginx背景 在使用 Docker 时,镜像大小至关重要。我们从 create-react-app (https://reactjs.org/docs/create-a-new-react-app.html)获得的样板项目通常都超过 1.43 GB…...

前端加解密对抗encrypt-labs

前言 项目地址&#xff1a;https://github.com/SwagXz/encrypt-labs 作者&#xff1a;SwagXz 现在日子越来越不好过了&#xff0c;无论攻防、企业src还是渗透项目&#xff0c;总能看到大量的存在加密的网站&#xff0c;XZ师傅的前端加密靶场还是很值得做一做的&#xff0c;环…...

Android Notification 问题:Invalid notification (no valid small icon)

问题描述与处理策略 1、问题描述 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.notifications/com.my.notifications.MainActivity}: java.lang.IllegalArgumentException: Invalid notification (no valid small icon): Notification(chan…...

Python爬虫教程——7个爬虫小案例(附源码)_爬虫实例

本文介绍了7个Python爬虫小案例&#xff0c;包括爬取豆瓣电影Top250、猫眼电影Top100、全国高校名单、中国天气网、当当网图书、糗事百科段子和新浪微博信息&#xff0c;帮助读者理解并实践Python爬虫基础知识。 包含编程资料、学习路线图、源代码、软件安装包等&#xff01;【…...

Log4j2的Policies详解、SizeBasedTriggeringPolicy、TimeBasedTriggeringPolicy

文章目录 一、Policies二、SizeBasedTriggeringPolicy:基于文件大小的滚动策略2.1、文件达到指定大小就归档 三、TimeBasedTriggeringPolicy&#xff1a;基于时间间隔的滚动策略3.1、验证秒钟归档场景3.2、验证分钟场景3.3、验证小时场景 四、多策略组合使用五、扩展知识5.1、S…...

ES中查询中参数的解析

目录 query中参数match参数match_allmatch:匹配指定参数match_phrase query中其他的参数query_stringprefix前缀查询:wildcard通配符查询:range范围查询&#xff1a;fuzzy 查询: 组合查询bool参数mustmust_notshould条件 其他参数 query中参数 词条查询term:它仅匹配在给定字段…...

学习笔记:使用 pandas 和 Seaborn 绘制柱状图

学习笔记&#xff1a;使用 pandas 和 Seaborn 绘制柱状图 前言 今天在使用 pandas 对数据进行处理并在 Python 中绘制可视化图表时&#xff0c;遇到了一些关于字体设置和 Seaborn 主题覆盖的小问题。这里将学习到的方法和注意事项做个总结&#xff0c;以便之后的项目中可以快…...

【每日学点鸿蒙知识】placement设置top、组件携带自定义参数、主动隐藏输入框、Web设置字体、对话框设置全屏宽

1、popup组件placement设置top没有生效&#xff1f; 可以用offset属性将popup往下边偏移一下 来规避 2、组件携带自定义参数的接口是哪个&#xff1f; 参考链接&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-…...

后端开发-Maven

环境说明&#xff1a; windows系统&#xff1a;11版本 idea版本&#xff1a;2023.3.2 Maven 介绍 Apache Maven 是一个 Java 项目的构建管理和理解工具。Maven 使用一个项目对象模型&#xff08;POM&#xff09;&#xff0c;通过一组构建规则和约定来管理项目的构建&#xf…...

自动化办公-合并多个excel

在日常的办公自动化工作中&#xff0c;尤其是处理大量数据时&#xff0c;合并多个 Excel 表格是一个常见且繁琐的任务。幸运的是&#xff0c;借助 Python 语言中的强大库&#xff0c;我们可以轻松地自动化这个过程。本文将带你了解如何使用 Python 来合并多个 Excel 表格&#…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)

+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...

解析“道作为序位生成器”的核心原理

解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制&#xff0c;重点解析"道作为序位生成器"的核心原理与实现框架&#xff1a; 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

数据库正常,但后端收不到数据原因及解决

从代码和日志来看&#xff0c;后端SQL查询确实返回了数据&#xff0c;但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离&#xff0c;并且ai辅助开发的时候&#xff0c;很容易出现前后端变量名不一致情况&#xff0c;还不报错&#xff0c;只是单…...