Unity自动驾驶仿真:从感知到控制的完整技术栈实战
1. 项目概述为什么要在Unity里搞自动驾驶如果你是一个游戏开发者或者对Unity3D有一定了解你可能会觉得“自动驾驶”这个词离我们有点远那是特斯拉、Waymo那些大厂花几十亿美金砸出来的东西。但最近几年情况变了。无论是为了制作一款未来题材的赛车游戏还是为了搭建一个用于算法验证的仿真环境在Unity里实现一套逼真的自动驾驶车辆系统已经从一个“酷炫的想法”变成了一个非常实际且有价值的开发需求。我自己在几年前接触这个方向时也以为会涉及到大量高深的机器人学和数学。但实际做下来发现Unity强大的物理引擎和灵活的脚本系统为我们提供了一个绝佳的“沙盒”。我们不需要从零开始造轮子而是可以站在巨人的肩膀上把游戏开发的逻辑思维应用到对现实世界的模拟中。这不仅能做出视觉效果惊艳、交互真实的游戏内容更能为学习自动驾驶的核心概念——感知、决策、规划、控制——提供一个低成本、高自由度的实验平台。简单来说用Unity打造自动驾驶系统核心目标有两个一是为游戏创造智能、可信的NPC车辆让开放世界或赛车游戏的交通系统不再死板二是构建一个高保真的算法仿真测试床用于验证你的控制算法或AI模型而无需担心真车碰撞的风险。无论你属于哪一类这套技术栈都是相通的。接下来我就结合自己的实战经验拆解如何一步步在Unity里搭建起这套系统。2. 核心架构设计像搭积木一样构建你的自动驾驶栈在开始写代码之前我们必须先理清思路。一个完整的自动驾驶系统无论是实车还是仿真都遵循一个经典的模块化流水线在Unity里我们可以将其抽象为四个核心层。2.1 感知层给车辆装上“眼睛和耳朵”在真实世界车辆通过激光雷达、摄像头、毫米波雷达来感知环境。在Unity里我们同样需要模拟这些传感器。1. 射线投射Raycasting模拟简易激光雷达这是最基础、最高效的距离感知方法。你可以从车体向前方、侧方发射多条射线检测与障碍物的碰撞点和距离。// 示例向前发射一条射线检测障碍物 RaycastHit hit; if (Physics.Raycast(transform.position, transform.forward, out hit, maxDetectionRange)) { float distanceToObstacle hit.distance; GameObject obstacle hit.collider.gameObject; // 将距离信息加入感知数据列表 }你可以围绕车辆以特定角度间隔发射一圈射线来模拟一个低分辨率的2D激光雷达。这对于障碍物避让和车道保持已经足够。2. 摄像机渲染纹理Render Texture模拟视觉摄像头这是实现计算机视觉感知的关键。你可以将场景中一个或多个摄像机的画面实时渲染到纹理上然后传递给一个图像处理模块。操作在场景中放置一个或多个Camera将其Target Texture设置为一个Render Texture。后续处理你可以每帧或每隔几帧将Render Texture转换为Texture2D进而得到像素数组byte[]。这个数组可以直接用于屏幕显示作为虚拟的“中控屏”。传入一个本地的机器学习模型如用Unity的Barracuda推理库运行的ONNX模型进行目标检测、车道线识别。输出为图像文件用于制作自动驾驶数据集。3. 触发器Trigger Collider与图层Layer管理这是感知语义信息的高效方式。为不同类型的物体如车道线、交通灯、行人、其他车辆分配不同的Unity Layer。在你的车辆上附加一个或多个Collider设置为Is Trigger true。当其他物体进入触发区域时通过OnTriggerEnter等方法读取该物体的标签Tag或图层Layer就能立刻知道“我旁边5米内有一个行人”或“我压到了车道线”。private void OnTriggerEnter(Collider other) { if (other.gameObject.layer LayerMask.NameToLayer(TrafficLight)) { // 获取交通灯组件并读取其当前状态红、黄、绿 TrafficLight light other.GetComponentTrafficLight(); currentTrafficLightState light.GetCurrentState(); } }实操心得性能与精度的权衡射线数量越多、摄像机分辨率越高感知就越精确但性能开销也越大。在游戏开发中为了维持高帧率通常采用“混合感知”策略用少数关键射线做实时避障用低分辨率摄像头做视觉氛围渲染用触发器处理关键的交互逻辑如红绿灯、停车线。而在算法仿真中则可以开启更高精度的传感器模拟但需要接受更长的仿真时间。2.2 决策与规划层车辆的大脑感知层告诉我们“世界是什么样”决策规划层则要决定“现在该怎么办”。这一层是自动驾驶的灵魂也是我们在Unity里可以大展拳脚的地方。1. 基于有限状态机FSM的决策对于游戏中的NPC车辆FSM是一种直观、可靠的选择。你可以定义几个核心状态如巡航Cruise、跟车Follow、换道ChangeLane、停车Stop、避障Avoid。每个状态内部有固定的行为逻辑状态之间的转换由感知数据触发。public enum VehicleState { Cruise, Follow, ChangeLane, Stop, Avoid } private VehicleState currentState; void Update() { switch (currentState) { case VehicleState.Cruise: // 沿车道中心线行驶保持设定速度 CruiseBehavior(); // 检查前方是否有慢车 if (DetectSlowCarAhead()) { currentState VehicleState.Follow; } // 检查是否有障碍物侵入 if (DetectObstacleOnPath()) { currentState VehicleState.Avoid; } break; case VehicleState.Follow: // 使用ACC自适应巡航逻辑保持与前车的安全距离 FollowBehavior(); // 如果前车加速拉开距离且左侧车道空闲则考虑换道超车 if (CheckLaneChangeCondition()) { currentState VehicleState.ChangeLane; } break; // ... 其他状态 } }2. 局部路径规划Local Planning决策层决定了“要换道”规划层则需要计算出“怎么换过去”。这里最常用的算法是A*算法。你可以将道路网格化每个网格是一个节点A*算法能快速搜索出一条从起点到目标点的最优或次优路径。在Unity中你可以用NavMesh导航网格系统来部分替代这个功能但对于车辆这种对朝向、曲率有严格要求的实体自己实现一个基于路点Waypoint或样条曲线Spline的路径规划器会更灵活。3. 行为树Behavior Tree应对复杂逻辑当交通场景非常复杂如无保护左转、环形路口时FSM可能会变得臃肿不堪。这时可以考虑使用行为树。行为树通过节点选择、序列、并行、条件、动作的组合能以更清晰的方式描述复杂的决策逻辑。Unity Asset Store上有不少优秀的行为树插件如NodeCanvas可以极大地提升开发效率。注意事项规划器的输出是什么规划层的最终输出应该是一条时空轨迹。它不仅包含一系列路径点X, Z坐标还应包含每个点车辆应该到达的时间T和应有的朝向。这个轨迹将被送给下一层——控制层去严格执行。在简单实现中我们常常先忽略时间只规划空间路径。2.3 控制层从规划到执行的桥梁控制层是“手脚”它接收规划层给出的目标轨迹或目标状态如“5秒后到达A点速度60km/h”然后计算出具体的控制指令方向盘应该转多少度转向角油门或刹车应该踩多深加速度。1. PID控制器经典且万能PID比例-积分-微分控制器是工业控制的基石在车辆控制中同样有效。横向控制Lateral Control控制方向盘。误差e通常是车辆当前位置到规划路径的横向距离Cross Track Error, CTE。PID控制器根据CTE计算出需要的转向角。比例项P负责快速响应微分项D能抑制转向过度防止“画龙”积分项I消除静态误差。纵向控制Longitudinal Control控制油门/刹车。误差是当前速度与目标速度的差值。同样使用PID计算出加速度指令。在Unity中实现一个基础的PID控制器并不复杂public class PIDController { public float Kp, Ki, Kd; // 需要调试的参数 private float integral, previousError; public float Calculate(float error, float deltaTime) { integral error * deltaTime; float derivative (error - previousError) / deltaTime; previousError error; return Kp * error Ki * integral Kd * derivative; } } // 使用示例横向控制 PIDController steeringPID new PIDController() { Kp 1.5f, Ki 0.01f, Kd 0.2f }; float cte CalculateCrossTrackError(); // 计算横向误差 float steerAngle steeringPID.Calculate(cte, Time.deltaTime); vehicle.ApplySteering(steerAngle); // 将角度应用到车轮或车辆模型2. 纯追踪算法Pure Pursuit这是更符合车辆运动学的一种路径跟踪算法。它不直接计算横向误差而是在规划路径上找一个“预瞄点”Look-ahead Point然后控制车辆的前轮朝向这个点。预瞄距离是一个关键参数距离短跟踪精度高但可能抖动距离长行驶平滑但可能切弯。这个算法实现简单效果直观非常适用于游戏中的车辆AI。3. 模型预测控制MPC这是更高级的控制方法它会在一个有限的时间窗口内预测车辆未来的多种运动状态并选择一组最优的控制序列如未来10个时间步的转向、油门值。虽然计算量大但在Unity中作为离线仿真或对性能要求不高的场景下完全可以实现。它能更好地处理车辆动力学约束如最大转向角、加速度极限。踩坑记录物理参数的重要性控制算法调参调到头秃很多时候不是算法问题而是你的车辆物理模型太“假”。务必花时间调整Unity WheelCollider车轮碰撞器的参数如质量Mass、转向刚度Stiffness、极惯性矩Inertia等。一个物理特性接近真车的模型会让你的控制算法事半功倍。建议先用一组已知参数让车辆能稳定直线行驶和转弯再接入你的控制器。2.4 环境与车辆模型层世界的基石1. 车辆模型导入与设置你可以从Asset Store购买高质量的车辆模型或者从SolidWorks等CAD软件导出FBX格式模型导入Unity。关键在于**骨骼Rig**的设置。通常需要一个主空物体如CarRoot控制整体位置。四个车轮的空物体作为WheelCollider的视觉模型Mesh的父物体。WheelCollider本身是不可见的碰撞体负责物理计算我们需要用脚本将它的位置和旋转信息同步到可见的车轮模型上。为车体添加Rigidbody和BoxCollider。2. 道路系统手动搭建复杂路网是噩梦。推荐两种方式使用专用插件如“Easy Roads 3D”或“Road Architect”可以快速绘制带有车道线、路肩、交通标志的逼真道路。程序化生成如果你需要大规模的随机道路进行算法测试可以编写脚本程序化生成道路网格和贴图。核心是使用贝塞尔曲线Bezier Curve定义道路中心线然后根据宽度和车道数挤出网格。3. 交通流与NPC车辆一个逼真的自动驾驶仿真环境需要有其他交通参与者。你可以为NPC车辆实现一个简化版的决策控制系统例如只包含跟车和车道保持的FSM。更高效的方法是使用Unity的NavMesh系统为NPC车辆设置导航目标它们就能自动寻路并避开静态障碍物但无法处理动态交互。对于更复杂的交通流模拟可以考虑DOTS面向数据的技术栈来高效管理成千上万辆车的简单逻辑。3. 实战步骤从零搭建一个最小可行系统理论说再多不如动手做一遍。下面我们抛开复杂的模块先搭建一个最核心的“车道保持自动驾驶”系统。3.1 第一步准备场景与车辆创建道路在场景中创建一个长直的平面Plane作为路面。复制几个并排摆放形成一条多车道道路。使用不同颜色的材质区分车道。导入车辆放入一个带Rigidbody和四个WheelCollider的车辆预制体。确保车辆能通过简单的脚本加速和转向。设置感知参考线在每条车道的中心创建一系列的空物体作为路点Waypoint按直线排列。这些点将作为我们车辆跟踪的参考路径。3.2 第二步实现感知模块获取横向误差我们需要知道车辆偏离车道中心有多远。public class LaneDetector : MonoBehaviour { public Transform[] waypoints; // 车道中心的路点数组 private int currentTargetIndex 0; public float lookAheadDistance 10f; // 预瞄距离 // 寻找最近的路点索引 int GetClosestWaypointIndex() { int closestIndex 0; float minDistance float.MaxValue; for (int i 0; i waypoints.Length; i) { float dist Vector3.Distance(transform.position, waypoints[i].position); if (dist minDistance) { minDistance dist; closestIndex i; } } return closestIndex; } // 根据预瞄距离找到目标路点 Transform GetLookAheadPoint() { int closestIdx GetClosestWaypointIndex(); // 从最近点开始向后找直到累计距离超过预瞄距离 float accumulatedDist 0; for (int i closestIdx; i waypoints.Length - 1; i) { accumulatedDist Vector3.Distance(waypoints[i].position, waypoints[i1].position); if (accumulatedDist lookAheadDistance) { currentTargetIndex i 1; return waypoints[currentTargetIndex]; } } // 如果走到头还没达到预瞄距离就返回最后一个点 currentTargetIndex waypoints.Length - 1; return waypoints[currentTargetIndex]; } // 计算横向误差CTE—— 点到线的距离 public float CalculateCTE() { Transform lookAheadPoint GetLookAheadPoint(); // 简化计算将车辆位置投影到目标点与上一个点形成的向量上 if (currentTargetIndex 0) return 0; Vector3 pointA waypoints[currentTargetIndex - 1].position; Vector3 pointB lookAheadPoint.position; Vector3 vehiclePos transform.position; Vector3 AB pointB - pointA; Vector3 AV vehiclePos - pointA; // 计算投影向量 Vector3 projection Vector3.Project(AV, AB); // 最近的点 Vector3 closestPoint pointA projection; // 计算车辆到最近点的向量并取其在道路法线方向的分量作为CTE // 假设道路是水平的法线方向就是AB的垂直方向在XZ平面 Vector3 roadDirection AB.normalized; Vector3 roadNormal new Vector3(-roadDirection.z, 0, roadDirection.x); // 垂直向量 Vector3 toVehicle vehiclePos - closestPoint; float cte Vector3.Dot(toVehicle, roadNormal); // 点积的正负表示偏左还是偏右 // 可视化调试在Scene视图中画线 Debug.DrawLine(closestPoint, vehiclePos, Color.red); Debug.DrawLine(pointA, pointB, Color.green); Gizmos.DrawSphere(closestPoint, 0.5f); return cte; } }3.3 第三步实现控制模块PID控制器将上面实现的PID控制器类挂载到车辆上并在Update中调用。public class AutonomousController : MonoBehaviour { public LaneDetector laneDetector; private PIDController steeringPID; public float maxSteerAngle 30f; // 最大转向角 void Start() { steeringPID new PIDController(); // 这些参数需要根据你的车辆物理特性反复调试 steeringPID.Kp 1.2f; steeringPID.Ki 0.05f; steeringPID.Kd 0.3f; } void Update() { float cte laneDetector.CalculateCTE(); float steerOutput steeringPID.Calculate(cte, Time.deltaTime); // 将输出限制在[-1, 1]之间并映射到实际转向角 steerOutput Mathf.Clamp(steerOutput, -1f, 1f); float appliedSteerAngle steerOutput * maxSteerAngle; // 这里调用你的车辆转向方法例如修改WheelCollider的steerAngle ApplySteering(appliedSteerAngle); // 纵向控制保持一个恒定速度 ApplyThrottle(10f); // 例如保持10米/秒的速度 } void ApplySteering(float angle) { // 假设你的车辆有 leftFrontWheelCollider 和 rightFrontWheelCollider // leftFrontWheelCollider.steerAngle angle; // rightFrontWheelCollider.steerAngle angle; } void ApplyThrottle(float targetSpeed) { // 简单的速度PID控制或直接施加力 // rigidbody.AddForce(transform.forward * throttleForce); } }3.4 第四步调试与优化运行场景将车辆放在路上运行游戏。车辆应该开始加速并试图跟随车道中心线。观察与调试如果车辆像醉汉一样左右剧烈摇摆说明Kp或Kd参数不对。增大Kd微分项可以有效抑制振荡。如果车辆反应迟钝总是偏离很远才纠正说明Kp太小需要增大Kp比例项。如果车辆始终无法准确回到中心线存在一个固定的偏移可以**稍微增大Ki积分项**来消除稳态误差。参数整定口诀“先调P后调D最后再调I”。先把Ki和Kd设为0只调Kp让车辆能对误差有反应但会振荡。然后加入Kd来平息振荡。最后如果还有固定偏差再加入很小的Ki。4. 进阶与扩展让你的系统更强大、更真实完成基础的车道保持后你可以像搭积木一样为这个系统添加更多模块。4.1 引入机器学习与AIUnity的ML-Agents工具包是连接游戏与AI研究的桥梁。强化学习训练决策你可以将感知数据如射线距离、车速、相对位置作为状态State将转向、油门、刹车作为动作Action将安全、舒适、效率设计为奖励Reward。然后让AI agent在虚拟环境中通过试错自我学习驾驶策略。这非常适合训练在复杂、非结构化环境如停车场中行驶的AI。模仿学习如果你已经有一套手动控制的逻辑或者录制了人类玩家的驾驶数据你可以用这些数据来训练一个神经网络让它“模仿”人类的驾驶行为。这样得到的AI行为会更加自然、拟人。4.2 构建复杂的交通场景动态障碍物在场景中添加其他由简单AI控制的车辆或行人。你的自动驾驶车需要能感知它们并做出反应跟车、停车、绕行。交通规则实现交通灯、停车标志、让行规则。这需要在决策层FSM或行为树中加入对应的状态和条件判断。天气与光照系统使用Unity的Post-Processing Stack和天气资源包模拟雨、雪、雾、黑夜。这不仅能提升视觉真实性更重要的是它会极大地影响感知模块。你需要调整射线检测的敏感度或者让基于摄像头的视觉算法适应不同的光照条件这是算法鲁棒性测试的关键。4.3 仿真与数据生成这是Unity在工业领域的一大应用。你可以将你的自动驾驶系统变成一个“数据工厂”。自动化测试编写脚本让车辆在成千上万种随机生成的场景不同天气、不同交通密度、不同突发事件中自动运行记录每次测试的成功/失败情况以及失败的原因撞车、闯红灯等。这可以用来评估算法的安全性边界。生成标注数据集在仿真运行时同步保存每个时间戳下的摄像头图像、激光雷达点云、车辆真值状态位置、速度、以及所有物体的标注信息边界框、类别。这些高质量的标注数据可以用来训练现实世界中的感知模型成本远低于实车采集。5. 常见问题与避坑指南在实际开发中你会遇到各种各样的问题。这里我总结了一些高频坑点和解决思路。问题现象可能原因排查与解决思路车辆物理表现“飘”或“滑”WheelCollider参数设置不当或车辆重心过高。1. 检查Rigidbody的Mass是否合理普通轿车约1500。2. 调整WheelCollider的Suspension Distance悬挂行程和Spring弹簧力。3. 降低车辆重心调整Rigidbody的Center of Mass。PID控制器剧烈振荡Kp值过大或Kd值过小/未起作用。1. 大幅降低Kp。2. 确保在计算微分项时使用了正确的deltaTime。3. 对误差或输出进行低通滤波平滑处理。车辆转弯时翻车转弯速度过快或车辆横向稳定性差。1. 在决策层根据弯道曲率限制速度。2. 实现一个简单的电子稳定程序ESP当检测到侧向加速度过大时轻微施加刹车。感知射线穿墙或漏检射线起点/方向设置错误或LayerMask未正确过滤。1. 在Scene视图用Debug.DrawRay画出所有射线检查其起点和方向。2. 确保Physics.Raycast使用了正确的LayerMask参数排除不需要检测的层如车辆自身。帧率下降严重感知模块如大量射线、高分辨率摄像头或车辆数量过多。1. 优化感知减少射线数量降低摄像头更新频率如每3帧更新一次。2. 使用对象池管理NPC车辆远离摄像头的车辆使用简化的LOD细节层次模型和逻辑。3. 考虑使用DOTSECS进行大规模交通流仿真。导航到目标点后车辆不停抖动到达目标点后由于误差在零点附近波动PID输出仍在微调。设置一个“到达容差”范围。当车辆与目标点的距离小于此容差时清空PID控制器的积分项和历史误差并停止输出控制指令。最后一点个人体会在Unity里做自动驾驶仿真最有魅力的地方在于它的快速迭代和可视化反馈。一个算法想法从代码到在3D场景中看到车辆跑起来可能只需要几分钟。这种即时正反馈是科研和工程中非常宝贵的。不要一开始就追求大而全的系统从一个点开始比如让车沿着圆圈跑把它做稳、做透再慢慢添加新的功能模块。当你看到自己编写的代码驱动着一辆精致的3D模型在风雨交加的虚拟城市中平稳穿行时那种成就感是无与伦比的。这个项目不仅是一套代码更是一个理解复杂系统如何协同工作的绝佳窗口。

相关新闻

猫抓视频嗅探工具:如何三秒破解网页视频下载难题的终极方案

猫抓视频嗅探工具:如何三秒破解网页视频下载难题的终极方案

猫抓视频嗅探工具:如何三秒破解网页视频下载难题的终极方案 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾遇到过这样的困境&…

2026/10/5 16:02:40 阅读更多 →
CefFlashBrowser:终极Flash浏览器解决方案,让经典Flash游戏重获新生!

CefFlashBrowser:终极Flash浏览器解决方案,让经典Flash游戏重获新生!

CefFlashBrowser:终极Flash浏览器解决方案,让经典Flash游戏重获新生! 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 你是否还在为无法重温童年经典Fla…

2026/10/7 3:15:10 阅读更多 →
智能电视必装软件清单:免费无广告,打造家庭影音中心

智能电视必装软件清单:免费无广告,打造家庭影音中心

这次我们来看一个非常实用的电视软件推荐清单。如果你家里有智能电视、电视盒子,或者想在电视上获得更好的观影、投屏、文件管理和系统优化体验,这篇文章可以直接收藏。它不是泛泛而谈,而是聚焦于几款经过长期使用验证、能切实解决痛点的核心…

2026/10/5 2:16:23 阅读更多 →

最新新闻

SuperMap GIS基础产品FAQ集锦:高频问题排查与原理

SuperMap GIS基础产品FAQ集锦:高频问题排查与原理

用“iDesktop打开UDB数据源总是提示被占用”“切片缓存明明生成了,iServer却读不到”——这些几乎每天都会被问到的“老问题”就是这份《SuperMap GIS基础产品FAQ集锦(20260126)》的起点。它既不是官方文档的简单搬运,也不是把几个常见报错列出来就算完事…

2026/10/14 22:37:04 阅读更多 →
多代理系统安全防线:如何阻止AI代理批量越界

多代理系统安全防线:如何阻止AI代理批量越界

如果有一天,你的多代理调度平台一次性下发了几百个任务,其中某个代理读到了一个被污染的文件,于是自动执行了“删除日志、外发数据”这类操作——你会第一时间发现吗?在 LinuxDays 2026 的议题现场,“约 700 个 AI 代理…

2026/10/14 22:37:04 阅读更多 →
ARTEX:可编排、可追溯的渗透测试Agent工作流

ARTEX:可编排、可追溯的渗透测试Agent工作流

1. 从“手动跑命令”到“自动推演”:ARTEX到底在解决什么真问题? 你有没有过这样的经历:凌晨三点,刚做完一轮红队演练,手边摊着七八个终端窗口——一个在跑Nmap扫描,一个在解析子域名,一个在调用…

2026/10/14 22:37:04 阅读更多 →
AI Agent从Demo到落地:拆解工具调用、工作流设计与可靠性评估

AI Agent从Demo到落地:拆解工具调用、工作流设计与可靠性评估

很多新手一上来就在社群里问:为什么别人做的 Agent 项目又智能又赚钱,轮到自己复现就卡在工具调用?说实话,不太好听的话我先放在前面——AI Agent 现在的真实状态,就是“看起来什么都能干,真正敢把决策权交…

2026/10/14 22:37:04 阅读更多 →
插件系统开发全攻略:从边界设计到热更新排坑

插件系统开发全攻略:从边界设计到热更新排坑

开发一个插件系统,跟我最早理解的不太一样。一开始接到这个需求,我脑子里全是动态加载、扩展点、热更新这些词,觉得写个接口、留个目录、把目标文件丢进去就能跑。真正做完才发现,插件系统最耗精力的地方根本不在“加载”那一瞬间…

2026/10/14 22:37:04 阅读更多 →
JWT弱口令风险剖析:弱密钥爆破与Token伪造防御指南

JWT弱口令风险剖析:弱密钥爆破与Token伪造防御指南

“JWT还谈得上弱口令?”第一次听到这话的人多半是这种反应。毕竟在不少开发者眼里,JWT是“签名过的凭证”,是安全的代名词。结果没想到这类“安全凭证”里最常见的问题之一,恰恰是签名密钥太弱。所谓JWT弱口令,更准确地…

2026/10/14 22:36:03 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →