从零搭建智能仓储系统,Python+树莓派驱动AGV机器人全流程解析

第一章:智能仓储系统概述与AGV机器人选型

智能仓储系统通过集成自动化设备、物联网技术和智能调度算法,显著提升了仓库的作业效率与空间利用率。其中,自动导引车(AGV)作为核心执行单元,承担着货物搬运、上下架和分拣等关键任务。系统的整体性能在很大程度上取决于AGV的类型选择与部署策略。

智能仓储系统的核心架构

现代智能仓储系统通常由以下几个模块构成:
  • 仓储管理系统(WMS):负责订单处理、库存管理与任务分配
  • 调度控制系统(RCS):实时监控AGV状态并优化路径规划
  • 感知层设备:包括二维码标签、激光雷达、RFID读写器等
  • 执行终端:以AGV为主,配合机械臂、输送线等完成物理操作

AGV机器人选型关键因素

在实际应用中,需根据业务场景从多种AGV类型中进行选择。常见类型及其适用场景如下:
AGV类型导航方式负载能力典型应用场景
潜伏式AGV激光SLAM或二维码500-1000kg整托盘搬运、产线对接
叉车式AGV视觉+惯性导航1.5-3吨高位货架存取、重载运输
辊筒对接式AGV磁条或二维码200-500kg分拣中心、流水线联动

通信接口配置示例

AGV与调度系统通常通过REST API或MQTT协议进行交互。以下为一个基于HTTP的任务请求示例:
{
  "taskId": "TASK_001",
  "source": "A3",        // 起始工位
  "destination": "B7",   // 目标工位
  "priority": 1          // 优先级(1最高)
}
// 发送至调度服务端:POST /api/v1/tasks
graph TD A[任务生成] --> B{路径可用?} B -->|是| C[下发AGV执行] B -->|否| D[重新规划路径] C --> E[任务完成反馈]

第二章:树莓派环境搭建与Python开发配置

2.1 树莓派操作系统安装与基础设置

系统镜像烧录
使用树莓派官方推荐的 Raspberry Pi Imager 工具可快速写入操作系统镜像。选择“Raspberry Pi OS (64-bit)”并指定存储卡,点击“Write”完成烧录。
首次启动配置
首次启动后进入初始化向导,设置地区、语言、密码等基本信息。通过以下命令更新系统软件包:
sudo apt update && sudo apt upgrade -y
该命令首先同步软件源索引,再升级所有可更新的软件包,确保系统处于最新状态。
网络与SSH启用
为便于远程管理,可在烧录系统前在SD卡根目录创建空文件 ssh 以启用SSH服务:
touch /path/to/sd/boot/ssh
此文件存在时,系统启动将自动开启SSH守护进程,允许通过密钥或密码登录。

2.2 Python环境配置与依赖库管理

在Python开发中,合理的环境配置与依赖管理是项目可维护性的基础。推荐使用虚拟环境隔离项目依赖,避免版本冲突。
创建虚拟环境

python -m venv myenv
source myenv/bin/activate  # Linux/Mac
# 或 myenv\Scripts\activate  # Windows
该命令创建名为 `myenv` 的独立环境,激活后所有包将安装至该目录,不影响全局Python环境。
依赖管理工具对比
工具特点适用场景
pip + requirements.txt原生支持,简单直接小型项目或学习用途
pipenv整合pip和virtualenv,自动生成Pipfile注重开发体验的项目
poetry支持依赖锁定、打包发布,功能完整生产级项目或开源库
导出与安装依赖
  • pip freeze > requirements.txt:导出当前环境所有依赖
  • pip install -r requirements.txt:在新环境中批量安装

2.3 GPIO控制原理与硬件通信实践

GPIO(通用输入输出)是嵌入式系统与外部硬件交互的基础接口,通过配置寄存器控制引脚的输入输出模式,实现电平读写。
工作模式配置
每个GPIO引脚需设置方向(输入/输出)、驱动强度和上下拉电阻。常见模式包括推挽、开漏等。
代码控制示例

// 配置PA5为推挽输出
GPIOA->MODER |= GPIO_MODER_MODER5_0;     // 输出模式
GPIOA->OTYPER &= ~GPIO_OTYPER_OT_5;      // 推挽输出
GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR5; // 高速
上述代码通过直接操作STM32的寄存器,设置PA5引脚为高速推挽输出模式,适用于驱动LED或数字信号传输。
硬件通信时序
在与传感器通信时,可通过GPIO模拟I2C时序:
  • 起始信号:SDA由高变低,SCL保持高电平
  • 数据位传输:每比特对应一个SCL周期
  • 应答机制:从设备拉低SDA表示确认

2.4 多线程任务调度在控制中的应用

在实时控制系统中,多线程任务调度能够有效提升响应速度与资源利用率。通过将控制逻辑、数据采集和通信任务分配至独立线程,系统可实现并发执行,降低延迟。
任务优先级划分
合理设置线程优先级是保障控制实时性的关键。通常,闭环控制线程应设为最高优先级,传感器读取次之,日志记录等后台任务则使用低优先级。
  • 高优先级:PID 控制循环(1ms 周期)
  • 中优先级:传感器数据采集(10ms 周期)
  • 低优先级:网络通信与日志输出
代码示例:Go 中的定时控制任务

ticker := time.NewTicker(1 * time.Millisecond)
go func() {
    for range ticker.C {
        mutex.Lock()
        updateControlLoop() // 执行控制算法
        mutex.Unlock()
    }
}()
上述代码创建一个每毫秒触发的定时器,用于驱动控制循环。使用互斥锁确保共享数据安全,避免竞态条件。

2.5 网络通信与远程监控接口实现

在分布式系统中,稳定的网络通信是实现远程监控的基础。本节聚焦于基于HTTP/HTTPS协议的RESTful API设计与WebSocket长连接机制的融合应用。
通信协议选型
采用RESTful风格提供设备状态查询接口,同时通过WebSocket实现实时数据推送:
  • REST API用于配置下发与状态轮询
  • WebSocket维持客户端与服务端双向通道
接口实现示例

// 启动WebSocket服务
func StartMonitorServer(addr string) {
    http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
        conn, _ := upgrader.Upgrade(w, r, nil)
        go handleConnection(conn) // 处理连接
    })
    http.ListenAndServe(addr, nil)
}
上述代码启动一个监听/ws路径的WebSocket服务。upgrader将HTTP协议升级为WebSocket,handleConnection负责消息收发逻辑,实现服务端主动推送监控数据。
数据传输结构
字段类型说明
timestampint64采集时间戳
cpu_usagefloat32CPU使用率
mem_usagefloat32内存占用率

第三章:AGV运动控制算法设计与实现

3.1 差速驱动模型理论解析

差速驱动是移动机器人最常用的运动控制方式之一,适用于两轮独立驱动、对称布局的机器人平台。其核心原理基于左右轮速度差实现前进、转向与原地旋转。
运动学模型构建
机器人的线速度 \( v \) 和角速度 \( \omega \) 由左右轮速度 \( v_l \)、\( v_r \) 共同决定: \[ v = \frac{v_l + v_r}{2}, \quad \omega = \frac{v_r - v_l}{L} \] 其中 \( L \) 为轮距。
控制参数映射
  • 直行:左右轮等速同向
  • 转弯:调整速度差
  • 原地旋转:左右轮反向等速
# 差速驱动速度转换
def differential_drive(v, omega, wheel_base):
    vr = v + (omega * wheel_base) / 2
    vl = v - (omega * wheel_base) / 2
    return vl, vr
该函数将期望的线速度与角速度映射为左右轮实际输出速度,wheel_base 对应轮距参数,直接影响转向灵敏度。

3.2 基于PID的电机速度闭环控制

在电机控制系统中,PID(比例-积分-微分)算法是实现速度闭环控制的核心方法。通过实时采集电机转速,与设定目标值进行比较,控制器动态调整输出PWM信号,使系统快速、稳定地趋近目标速度。
PID控制逻辑实现

// PID参数定义
float Kp = 1.2, Ki = 0.05, Kd = 0.1;
float error, last_error = 0, integral = 0;

// 控制周期执行函数
float pid_control(float setpoint, float feedback) {
    error = setpoint - feedback;               // 计算偏差
    integral += error;                         // 积分项累加
    float derivative = error - last_error;     // 微分项
    float output = Kp * error + Ki * integral + Kd * derivative;
    last_error = error;
    return output;                             // 输出控制量
}
上述代码实现了标准增量式PID算法。Kp影响响应速度,Ki消除稳态误差,Kd抑制超调。参数需根据实际电机惯性和负载特性进行整定。
参数调节策略对比
参数过小影响过大影响
Kp响应迟缓系统振荡
Ki存在稳态误差积分饱和
Kd调节时间延长噪声敏感

3.3 路径跟踪与转向精度优化实践

在自动驾驶系统中,路径跟踪的稳定性直接影响车辆行驶的安全性与舒适性。为提升转向控制精度,常采用纯追踪算法(Pure Pursuit)结合预瞄距离动态调整策略。
纯追踪算法实现
// Pure Pursuit 控制器核心逻辑
double calculateSteering(double lookahead_distance, double current_yaw, Point target_point) {
    double alpha = atan2(target_point.y, target_point.x) - current_yaw;
    double steering = atan2(2.0 * wheelbase * sin(alpha), lookahead_distance);
    return std::clamp(steering, -max_steering_angle, max_steering_angle);
}
该代码通过计算目标点相对于车体的偏角 α,结合轴距(wheelbase)和预瞄距离,输出前轮转角。参数 lookahead_distance 需随车速动态调整,以平衡响应速度与轨迹平滑性。
转向增益调度策略
  • 低速时减小预瞄距离,提升路径跟随灵敏度;
  • 高速时增大预瞄距离,避免过度修正;
  • 引入横向误差反馈环,增强鲁棒性。

第四章:仓储导航系统与任务调度逻辑开发

4.1 基于二维码或红外引导的定位实现

在室内定位系统中,二维码与红外信标因其低成本和高可靠性被广泛应用于引导式定位。通过预先部署带有唯一标识的二维码或红外发射器,移动设备可借助摄像头或红外接收模块读取位置信息,实现精准定位。
二维码定位流程
  • 在关键位置点粘贴编码后的二维码标签
  • 终端设备通过摄像头扫描获取位置编码
  • 解码后查询预存的地图数据库,确定当前坐标
红外引导机制
红外信标周期性广播ID信号,接收端根据信号强度(RSSI)和已知位置匹配实现定位。适用于光线不佳或无法视觉识别的场景。

# 模拟红外信标数据解析
def parse_ir_beacon(data):
    beacon_id = data[:4]        # 前4字节为设备ID
    rssi = int(data[4:6], 16)   # RSSI值(十六进制)
    return {"id": beacon_id, "rssi": rssi, "location": get_position(beacon_id)}
该函数解析接收到的红外数据包,提取设备ID与信号强度,并结合预配置的位置映射表返回实际坐标。

4.2 简易地图构建与路径规划算法

在移动机器人或自动驾驶系统中,简易地图构建通常采用栅格地图(Grid Map)表示环境。每个栅格代表空间中的一个区域,标记为障碍物或自由空间。
栅格地图数据结构
使用二维数组存储地图信息,便于快速访问和更新:
map_grid = [[0 for _ in range(width)] for _ in range(height)]
# 0: 自由区域, 1: 障碍物
该结构支持传感器数据的实时融合,如激光雷达扫描结果可直接投影到对应坐标。
路径规划:A* 算法实现
A* 算法结合了Dijkstra的全局最优性和启发式搜索效率。关键步骤包括开放集维护与代价评估。
  • f(n) = g(n) + h(n),其中g为起点到当前点的实际代价
  • h为曼哈顿或欧几里得启发函数估算剩余距离
参数说明
open_set待探索节点优先队列
closed_set已处理节点集合

4.3 任务队列管理与多AGV协调机制

在自动化物流系统中,任务队列的高效管理是实现多AGV协同作业的核心。系统采用优先级调度算法对任务进行动态排序,确保紧急任务优先执行。
任务队列结构设计
任务队列基于Redis实现,支持持久化与高并发访问。每个任务包含目标位置、优先级和依赖关系等字段:
{
  "task_id": "T001",
  "destination": "A3",
  "priority": 2,
  "dependencies": []
}
该结构便于快速检索与状态更新,priority值越小优先级越高。
多AGV路径协调策略
采用集中式调度器结合冲突检测机制,避免死锁与资源争用。通过时间窗分配法规划AGV通行时段,确保路径互斥。
AGV ID当前任务状态
AGV-01T001运行中
AGV-02T003待命

4.4 故障检测与异常停机保护策略

心跳机制与健康检查
为实现快速故障识别,系统采用周期性心跳检测机制。各节点每3秒向监控中心发送一次状态信号,若连续三次未响应,则判定为异常。
  • 心跳间隔:3s(平衡开销与灵敏度)
  • 超时阈值:9s(3次未响应触发告警)
  • 恢复策略:自动隔离后尝试重启服务
熔断与降级逻辑
通过熔断器模式防止雪崩效应。以下为Go语言实现的核心代码:

func NewCircuitBreaker() *CircuitBreaker {
    return &CircuitBreaker{
        failureCount: 0,
        threshold:    5, // 超过5次失败进入熔断
        state:        Closed,
    }
}
上述代码定义了熔断器初始状态:当错误请求累计达到5次,自动切换至Open状态,暂停服务调用并启动保护机制。此设计有效避免异常扩散,保障核心链路稳定运行。

第五章:系统集成测试与未来扩展方向

集成测试策略设计
在微服务架构下,系统集成测试需覆盖服务间通信、数据一致性及异常容错能力。推荐采用契约测试(Consumer-Driven Contracts)确保服务接口兼容性。例如,使用 Pact 框架定义消费者期望:

// 定义订单服务对库存服务的调用契约
pact.
  Given("库存充足").
  UponReceiving("减少库存请求").
  WithRequest("POST", "/inventory/decrease").
  WillRespondWith(200)
自动化测试流水线集成
将集成测试嵌入 CI/CD 流水线,利用 Docker Compose 启动依赖服务。以下为 GitLab CI 配置片段:
  1. 拉取服务镜像并启动 MySQL、Redis 和消息队列
  2. 运行端到端测试套件,包含跨服务事务验证
  3. 测试通过后触发蓝绿部署流程
测试类型执行频率平均耗时
冒烟测试每次构建3.2 min
全量集成测试每日夜间18.7 min
可扩展性优化路径
为支持千万级用户增长,系统应逐步引入事件溯源(Event Sourcing)模式。通过 Kafka 构建变更日志流,实现读写分离与审计追踪。同时,预留多租户标识字段(tenant_id),便于后续 SaaS 化改造。
扩展架构图

相关推荐

树莓派OpenCV智能小车实现

本文介绍基于树莓派、Python和OpenCV的颜色识别、目标跟随与巡线小车实现方法,涵盖HSV色彩空间处理、形态学操作、P控制算法及电机驱动等关键技术,强调系统在资源受限下的实时性与稳定性优化。

1283

【树莓派+OpenCV+STM32】智能小车巡线_提取线路数据并通过串口通信传输

本博客只是智能巡线小车中视觉的一部分,后续如果时间允许的话会将整个巡线的功能都写下来,同时之后如果有更好的图像处理代码我也会同步在此篇博客中修改。大家如果在配置过程中遇到什么问题或者发现此博客有任何问题,欢迎私信我或者直接在评论里留言言。

m0_73914147的博客 8734

基于ROS的AGV激光雷达导航与SLAM系统毕业设计程序包

简介:本毕业设计聚焦于一个基于ROS(Robot Operating System)的程序包,实现自动导引车(AGV)的激光雷达导航与同时定位与建图(SLAM)功能。项目利用激光雷达进行环境感知,采用Gmapping或Hector SLAM等开源算法实现实时地图构建与机器人定位,并通过C++编写核心节点完成数据处理、路径规划与运动控制。程序包包含完整的ROS结构,如src、launch、config等目录,结合ROS通信机制与调试工具,全面展示AGV自主导航系统的实现流程。

weixin_42577735的博客 1340

基于工业树莓派的ARM+Codesys+AGV机器小车控制系统

随着AGV(Automated Guided Vehicle)产品和技术的不断发展, 生产工序或产线之间可以通过AGV进行高效连接,提高了自动化水平和生产效率,促进了工业柔性生产线、自动化物流系统的实现。随着高可靠性网络的连续覆盖,移动机器人在移动过程中活动区域将不受限,按需到达各个地点,在各种场景中进行不间断工作,平滑地切换工作内容。自动导向小车(AGV)是一种移动机器人,主要用来储运各类物料,为系统柔性化、集成化、高效运行提供了重要保证,在现代制造企业物流系统中占有重要地位。

szxinmai的博客 1990

openTCS AGV调度系统

开源的AGV控制系统,可借鉴其的控制方式,交通管制思路以及路径算法

多AGV调度系统软件

一种多AGV调度软件,使用JAVA开发,适合运行在任意运行JRE的操作系统上。

【C#】某AGV调度系统源码笔记(六)

AGV数据访问类库1. AGV客户端数据访问AGV系统中数据访问层的详细定义和实现:涉及了系统参数处理、程序集配置、AGV档案信息处理、AGV特殊指令处理、地图信息处理、特殊交通管制处理、报表信息处理、坐标体系处理、用户信息处理、区域、物料等简易档案的处理、呼叫器档案处理、任务生成配置处理、特殊线路线段配置、IO模块功能配置以及平板档案处理等方面的内容。为AGV系统提供了底层数据处理和业务逻辑的实...

cxyhjl的博客 2695

开源AGV调度

开源agv调度软件使用手册,开源agv调度软件使用手册开源agv调度软件使用手册,开源agv调度软件使用手册

AGV-WCS调度系统参考源码 功能比较全面的AGV调度系统,源码+数据库+讲义; C#语言

不过要注意_taskQueue.GetOldestValidTask方法的线程安全性,看源码发现他们用了ConcurrentPriorityQueue做底层数据结构,这个选择很合理。整体来说,作为学习材料比很多纸上谈兵的教程实用多了,配合附带的数据库设计文档,能帮新人快速理解AGV调度系统的核心逻辑。如果是计费类日志可能得用同步写入,但调度系统对日志的实时一致性要求不高,这个设计是合理的。这个AGV-WCS系统用C#搭的架子,数据库是SQL Server,关键业务逻辑写得挺有参考价值。

2500_94317971的博客 2188

支持多协议的OpenTCS AGV调度系统,可定制驱动

资源下载链接为: https://pan.quark.cn/s/1f4c69849d87 For additional examples, you can refer to the Python folder. The language may vary, but the underlying principles remain consistent.

AGV WCS控制系统VUE实现

AGV WCS控制系统VUE实现 WebSocketHelp

实现机器人AGV/AMR与多奥智能梯控系统的本地化通信集成,支持MQTT、HTTP、Modbus等多协议交互。核心功能包括实时查询电梯状态(位置/方向/门状态)和召梯控制,通过无源干接点信号模拟人按键

摘要:本方案实现机器人AGV/AMR与多奥智能梯控系统的本地化通信集成,支持MQTT、HTTP、Modbus等多协议交互。核心功能包括实时查询电梯状态(位置/方向/门状态)和召梯控制,通过无源干接点信号模拟物理按钮操作。系统采用LoRa点对点通信(<500m)实现无服务器部署,支持多楼层组网和本地化处理(无云端依赖)。硬件基于多奥主控箱和LoRa模块,软件通过本地API和协议转换实现低延迟(<200ms)控制。方案特别优化了无调度服务器场景下的本地梯控改造,确保系统可靠性和实时性。

智能一卡通硬件、系统、软件、平台解决方案,与合作伙伴开放合作,构筑了研发、生产、销售优势. 693

基于OpenTCS二次开发的 AGV 调度系统源码+项目说明(支持Modbus, Serial协议).zip

基于OpenTCS二次开发的AGV调度系统源码+项目说明(支持Modbus, Serial协议).zip是一个专为学习和研究设计的开源资源。该资源包含完整的源代码和详细的项目说明,帮助开发者理解并掌握AGV调度系统的开发过程。该系统基于著名的开源AGV控制软件OpenTCS进行二次开发,增加了对Modbus和Serial协议的支持,使其能够与更多类型的设备进行通信。通过这一项目,用户可以学习到如何实现运输订单管理、车辆分配、路由分配以及交通管制等核心功能。此资源适合计算机相关专业的学生、教师及企业员工下载学习,也可作为毕业设计、课程设计或项目初期立项的参考。项目经过测试运行,确保功能正常,用户可以放心使用。

Standard Open Arm 100智能仓储:AGV与机械臂协同系统

在现代仓储物流场景中,传统人工分拣面临效率低、错误率高、人力成本上升等痛点。Standard Open Arm 100(简称SO-100)作为一款开源机械臂,通过与AGV(Automated Guided Vehicle,自动导引运输车)的协同作业,可实现仓储环境下货物的自动化抓取、搬运与分拣。本文将从系统架构、硬件集成、3D打印实现和典型应用场景四个维度,详解如何构建一套低成本、高灵活性的智能仓...

gitblog_00997的博客 679

ROS2构建AGV控制系统[代码]

本文详细介绍了基于ROS2框架构建工业AGV控制系统的实战经验。系统采用分层架构设计,包括硬件驱动层、核心算法层和应用逻辑层。通过ROS2的nav2导航栈实现激光雷达SLAM建图与定位,使用Cartographer算法处理点云数据并过滤动态障碍物。路径规划功能基于nav2的全局和局部规划器,采用A*和DWA算法。系统还开发了与上位机的通信接口,采用ROS2的action和服务机制实现任务下发、状态反馈等功能。异常处理机制涵盖传感器故障检测、路径规划重试策略等多级处理方案。在Gazebo中搭建了包含货架、通道等元素的仓储仿真环境,通过URDF模型定义AGV物理特性。整个开发过程在InsCode(快马)平台完成,该平台提供了便捷的ROS2开发环境和一键部署功能,显著提升了开发效率。

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

【亲测免费】 AGV小车调度系统:高效、灵活的自动化解决方案

AGV小车调度系统:高效、灵活的自动化解决方案 【下载地址】AGV小车调度系统源码 本仓库提供了一个AGV(自动导引车)小车调度系统的源码,该系统采用C#编程语言开发,主要功能包括小车的显示和调度等。通过本源码,开发者可以了解和学习AGV小车调度系统的实现细节,并在此基础上进行二次开发和定制。 ...

gitblog_09714的博客 1212

RustDesk网页端远程控制实战:如何用Web Client替代传统客户端(附安全配置建议)

本文详细介绍了RustDesk网页端远程控制的实战应用,包括其核心优势、配置流程及安全加固方案。通过Web Client替代传统客户端,用户可实现跨平台无缝体验和企业级管理效率,特别适合临时协作和移动设备使用。文章还提供了JWT身份验证、LDAP集成等安全配置建议,确保网页端访问的安全性。

weixin_30836759的博客 253

OpenTCS 4.17 Modbus:开源AGV交通控制系统的新选择

OpenTCS 4.17 Modbus:开源AGV交通控制系统的新选择 项目介绍 OpenTCS 4.17 Modbus 是一个开源的交通控制系统,专为自动导引车(AGV)设计。该项目基于OpenTCS 4.17版本,并进行了多项改进,特别是添加了对Modbus协议的支持,使其在工业自动化领域具有更广泛的应用前景。无论是小型工厂还是大型仓储中心,OpenTCS 4.17 Modbus都能提供高效、...

gitblog_00373的博客 726

Java后端开发实战:手把手教你用e签宝API搞定电子合同签署(附完整代码)

本文详细解析了Java后端开发中如何通过e签宝API实现电子合同签署的全流程,包括环境配置、核心架构设计、Token管理、签署流程实现及回调处理等关键环节。通过完整的代码示例和最佳实践,帮助开发者高效集成电子签名服务,提升企业数字化转型效率。

weixin_42662293的博客 530

肖特基二极管选型参数,结构原理,工艺与注意问题总结

肖特基二极管(Schottky Diode)是一种特殊的二极管,也被称为肖特基势垒二极管。它是利用金属与半导体接触形成的金属-半导体结原理制成的。与传统的PN结二极管相比,肖特基二极管具有更低的正向压降、更高的开关速度、更高的反向恢复时间以及更好的温度稳定性等特点。本文对肖特基二极管的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 812
上一篇: 揭秘pytest夹具高级用法:如何优雅地管理复杂测试依赖
下一篇: Python游戏AI路径规划从入门到精通(含10个优化技巧)
codetrick
博客等级 码龄17年 151粉丝 1991原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值