动手学习:路径规划原理及常用算法
一、路径规划的基本原理
路径规划(Path Planning)是机器人导航的核心任务,目标是为机器人找到一条从起点到终点的无碰撞路径,同时满足约束条件(如最短路径、最优能耗、安全性等)。在人形机器人场景中,路径规划需要考虑复杂环境(如障碍物、地形变化)和机器人自身的运动学约束(如步态、关节限制)。
1. 路径规划的核心要素
- 环境建模:将环境表示为可计算的形式(如栅格地图、拓扑图)。
- 搜索空间:定义机器人可移动的区域,通常是二维(2D)或三维(3D)空间。
- 约束条件:
- 运动学约束:人形机器人的关节角度、步幅限制。
- 动态约束:速度、加速度限制。
- 环境约束:避开障碍物,适应地形。
- 优化目标:最短路径、最小能耗、最大安全性等。
2. 路径规划的分类
- 全局路径规划:基于已知环境地图,规划从起点到终点的完整路径。
- 局部路径规划:基于实时传感器数据(如激光雷达、视觉),动态调整路径以避开障碍物。
- 混合路径规划:结合全局和局部规划,适用于复杂动态环境。
二、常用路径规划算法
1. Dijkstra 算法
- 原理:
- Dijkstra 是一种基于图搜索的算法,适用于离散化的环境(如栅格地图)。
- 它通过计算从起点到所有节点的最短路径,找到目标点的最优路径。
- 特点:保证最优解,但计算复杂度较高((O(V^2)) 或 (O(E + V \log V)) 使用优先队列)。
- 实现方案:
- 环境建模:将环境离散化为栅格地图,每个格子为一个节点,相邻格子间有边,边的权重为移动代价(如距离)。
- 算法实现:使用 Python 和优先队列(
heapq
)实现 Dijkstra。import heapqdef dijkstra(grid, start, goal):rows, cols = len(grid), len(grid[0])dist = {(r, c): float('inf') for r in range(rows) for c in range(cols)}dist[start] = 0pq = [(0, start)]came_from = {}while pq:d, (r, c) = heapq.heappop(pq)if (r, c) == goal:breakfor nr, nc in [(r+1, c), (r-1, c), (r, c+1), (r, c-1)]: # 4方向移动if 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 0: # 0表示可通行new_dist = d + 1if new_dist < dist[(nr, nc)]:dist[(nr, nc)] = new_distcame_from[(nr, nc)] = (r, c)heapq.heappush(pq, (new_dist, (nr, nc)))path = []curr = goalwhile curr in came_from:path.append(curr)curr = came_from[curr]path.append(start)return path[::-1]
- 应用到人形机器人:将路径点转换为机器人可执行的步态序列,结合运动学模型调整步伐。
- 避坑指南:
- 计算效率:Dijkstra 适合小规模地图,地图过大(>1000x1000)时会变慢,建议使用 A* 替代。
- 障碍物处理:确保障碍物在地图中正确标记(例如用 1 表示不可通行,0 表示可通行)。
- 参数经验值:栅格分辨率建议为 [0.05m, 0.1m],过小增加计算量,过大丢失细节。
- 扩展资源:
- 论文:《A Formal Basis for the Heuristic Determination of Minimum Cost Paths》(Dijkstra 算法基础)
- 开源实现:Python Robotics(GitHub)
2. A 算法*
- 原理:
- A* 是 Dijkstra 的改进版,引入启发式函数(heuristic function)加速搜索。
- 总代价 (f(n) = g(n) + h(n)),其中 (g(n)) 是起点到当前节点的代价,(h(n)) 是当前节点到目标的估计代价(如欧几里得距离)。
- 特点:比 Dijkstra 更快,适合实时性要求较高的场景。
- 实现方案:
- 启发式函数:使用曼哈顿距离或欧几里得距离作为 (h(n))。
- 算法实现:
def a_star(grid, start, goal):rows, cols = len(grid), len(grid[0])open_set = [(0, start)]g_score = {(r, c): float('inf') for r in range(rows) for c in range(cols)}g_score[start] = 0f_score = {(r, c): float('inf') for r in range(rows) for c in range(cols)}f_score[start] = abs(goal[0] - start[0]) + abs(goal[1] - start[1]) # 曼哈顿距离came_from = {}while open_set:_, (r, c) = heapq.heappop(open_set)if (r, c) == goal:breakfor nr, nc in [(r+1, c), (r-1, c), (r, c+1), (r, c-1)]:if 0 <= nr < rows and 0 <= nc < cols and grid[nr][nc] == 0:tentative_g = g_score[(r, c)] + 1if tentative_g < g_score[(nr, nc)]:came_from[(nr, nc)] = (r, c)g_score[(nr, nc)] = tentative_gf_score[(nr, nc)] = tentative_g + abs(goal[0] - nr) + abs(goal[1] - nc)heapq.heappush(open_set, (f_score[(nr, nc)], (nr, nc)))path = []curr = goalwhile curr in came_from:path.append(curr)curr = came_from[curr]path.append(start)return path[::-1]
- 人形机器人适配:A* 生成的路径可以作为全局路径,结合局部规划(如动态避障)调整。
- 避坑指南:
- 启发式函数选择:(h(n)) 必须是可接受的(admissible),即不能高估真实代价,否则可能找不到最优解。
- 性能瓶颈:在动态环境中,频繁重规划可能导致延迟,建议结合局部规划。
- 参数经验值:启发式函数权重(如果加权)建议为 [0.5, 1.5],过大可能导致非最优解。
- 扩展资源:
- 论文:《A* Search Algorithm》(Hart et al., 1968)
- 开源项目:ROS Navigation Stack(包含 A* 实现,ROS)
3. RRT(Rapidly-exploring Random Tree)
- 原理:
- RRT 是一种基于采样的路径规划算法,通过随机采样构建树形结构,探索可行路径。
- 特点:适合高维空间和复杂环境,不需要离散化地图。
- 实现方案:
- 环境建模:直接使用连续空间,定义障碍物区域。
- 算法实现:
import numpy as npclass RRT:def __init__(self, start, goal, obstacle_list, step_size=0.1, max_iter=1000):self.start = np.array(start)self.goal = np.array(goal)self.obstacle_list = obstacle_list # 障碍物列表 [(x, y, radius), ...]self.step_size = step_sizeself.max_iter = max_iterself.nodes = [self.start]def plan(self):for _ in range(self.max_iter):rand_point = self.random_point()nearest_node = self.nearest_node(rand_point)new_node = self.steer(nearest_node, rand_point)if self.is_collision_free(nearest_node, new_node):self.nodes.append(new_node)if np.linalg.norm(new_node - self.goal) < self.step_size:return self.reconstruct_path(len(self.nodes) - 1)return Nonedef random_point(self):if np.random.rand() < 0.1: # 10% 概率直接采样目标点return self.goalreturn np.array([np.random.uniform(0, 10), np.random.uniform(0, 10)])def nearest_node(self, point):return self.nodes[np.argmin([np.linalg.norm(node - point) for node in self.nodes])]def steer(self, from_node, to_node):direction = to_node - from_nodedistance = np.linalg.norm(direction)if distance < self.step_size:return to_nodereturn from_node + self.step_size * direction / distancedef is_collision_free(self, from_node, to_node):for obs in self.obstacle_list:center, radius = obs[:2], obs[2]if np.linalg.norm(to_node - center) < radius:return Falsereturn Truedef reconstruct_path(self, end_idx):path = [self.goal]idx = end_idxwhile idx != 0:path.append(self.nodes[idx])idx = np.argmin([np.linalg.norm(self.nodes[idx] - self.nodes[i]) for i in range(idx)])path.append(self.start)return path[::-1]
- 人形机器人适配:RRT 生成的路径可能不平滑,需后处理(如样条插值)生成适合步态的轨迹。
- 避坑指南:
- 随机性:RRT 的路径非最优,多次运行结果可能不同,建议结合 RRT*(优化版)。
- 计算开销:迭代次数(
max_iter
)过大(如>5000)会影响实时性,建议范围 [500, 2000]。 - 参数经验值:步长(
step_size
)建议为 [0.05m, 0.2m],过小导致路径过密,过大可能错过狭窄通道。
- 扩展资源:
- 论文:《Rapidly-exploring Random Trees》(LaValle, 1998)
- 开源项目:OMPL(Open Motion Planning Library,OMPL)
4. 强化学习路径规划(扩展方案)
- 原理:
- 使用强化学习(如 PPO)训练一个策略,直接从状态(机器人位置、障碍物信息)映射到动作(移动方向)。
- 特点:适合动态环境,能学习复杂策略。
- 实现方案:
- 环境定义:使用 OpenAI Gym 自定义环境,状态包括机器人位置和目标位置,动作是移动方向。
- 奖励函数:
- 接近目标奖励:
exp(-distance_to_goal)
。 - 碰撞惩罚:
-10
(如果撞到障碍物)。 - 移动惩罚:
-0.1
(每步小惩罚,鼓励效率)。
- 接近目标奖励:
- 训练:使用 PPO 训练策略网络。
from stable_baselines3 import PPO import gymclass PathPlanningEnv(gym.Env):def __init__(self):super().__init__()self.action_space = gym.spaces.Discrete(4) # 上、下、左、右self.observation_space = gym.spaces.Box(low=0, high=10, shape=(2,)) # 位置self.position = [0, 0]self.goal = [9, 9]def reset(self):self.position = [0, 0]return np.array(self.position)def step(self, action):if action == 0: self.position[1] += 1 # 上elif action == 1: self.position[1] -= 1 # 下elif action == 2: self.position[0] -= 1 # 左elif action == 3: self.position[0] += 1 # 右distance = np.linalg.norm(np.array(self.position) - np.array(self.goal))reward = np.exp(-distance)done = distance < 0.5return np.array(self.position), reward, done, {}env = PathPlanningEnv() model = PPO("MlpPolicy", env, verbose=1) model.learn(total_timesteps=10000)
- 避坑指南:
- 奖励稀疏:如果目标距离远,奖励可能过于稀疏,建议添加中间奖励(如接近目标的奖励)。
- 探索不足:PPO 可能陷入局部最优,建议增加探索(如熵正则化系数 [0.01, 0.1])。
- 参数经验值:学习率建议为 [1e-4, 3e-4],批次大小 [32, 128]。
- 扩展资源:
- 论文:《Deep Reinforcement Learning for Path Planning》(arXiv)
- 开源项目:Stable Baselines3(GitHub)
三、结合人形机器人场景的路径规划
在人形机器人中,路径规划需要考虑以下特殊性:
- 运动学约束:人形机器人不能像轮式机器人那样自由移动,需考虑步态、关节角度限制。
- 解决方案:将路径点转换为步态序列,使用逆运动学(IK)计算关节角度。
- 动态环境:人形机器人可能在动态环境中操作(如移动障碍物)。
- 解决方案:结合局部规划(如 DWA,下一节会讲到)动态调整路径。
- 地形适应:人形机器人需要适应不平坦地形(如台阶、斜坡)。
- 解决方案:在路径规划中引入高度信息,使用 3D 地图。
四、学习建议
- 实践:
- 使用 Python Robotics 或 ROS Navigation Stack 实现 Dijkstra 和 A*。
- 在 PyBullet 或 Gazebo 中搭建人形机器人仿真环境,测试 RRT 算法。
- 尝试用 PPO 训练一个简单的路径规划策略。
- 调试:
- 可视化路径(使用 Matplotlib 或 RViz),检查是否合理。
- 记录规划时间,优化算法效率。
- 进阶:
- 学习 RRT*(RRT 的优化版),提升路径平滑性。
- 结合强化学习和传统算法(如 A* 提供初始路径,RL 优化动态调整)。
五、扩展资源
- 书籍:
- 《Probabilistic Robotics》 by Sebastian Thrun et al.(第7章,路径规划)
- 《Planning Algorithms》 by Steven M. LaValle(免费在线版,http://planning.cs.uiuc.edu/)
- 数据集:
- MoveIt! Benchmarks:提供路径规划测试场景(MoveIt)。
- KITTI Dataset:包含真实环境数据,可用于测试(KITTI)。
- 开源项目:
- Python Robotics:包含多种路径规划算法实现。
- ROS Navigation:提供 A*、Dijkstra 等算法的 ROS 实现。
相关文章:
动手学习:路径规划原理及常用算法
一、路径规划的基本原理 路径规划(Path Planning)是机器人导航的核心任务,目标是为机器人找到一条从起点到终点的无碰撞路径,同时满足约束条件(如最短路径、最优能耗、安全性等)。在人形机器人场景中&…...
Web前端性能指标Web3D性能优化
性能指标&评估方式 在Web3D性能优化之前,先了解性能指标&评估方式 前端性能指标评估与监测工具可分为以下几类,结合不同场景和需求,开发者可选择适合的工具进行性能优化: 一、浏览器内置工具 Chrome DevTools Performance 面板:记录运行时性能,分析CPU、内存使…...
Mujoco xml <option>
xml option option总起例子timestep(一般会用到)gravity(一般会用到)windmagneticdensityviscosityo_margino_solref, o_solimpo_frictionintegrator(一般会用到)cone(一般会用到)jacobian(一般会用到)solver(一般会用到)iterations(一般会用到)tolerance(一般会用到)noslip_it…...
如何用 nvm alias default 18.20.8 实现全局 Node.js 版本管理?一篇保姆级指南!!!
📝 如何用 nvm alias default 18.20.8 实现全局 Node.js 版本管理?一篇保姆级指南 🚀 1. 核心命令解析 🔍 nvm alias default 18.20.8 是 nvm 管理工具中用于设置全局默认 Node.js 版本的核心命令。它的作用是将指定版本锁定为所…...
推荐一款Nginx图形化管理工具: NginxWebUI
Nginx Web UI是一款专为Nginx设计的图形化管理工具,旨在简化Nginx的配置与管理过程,提高开发者和系统管理的工作效率。项目地址:https://github.com/cym1102/nginxWebUI 。 一、Nginx WebUI的主要特点 简化配置:通过图形化的界…...
Pytest多环境切换实战:测试框架配置的最佳实践!
你是否也遇到过这种情况:本地测试通过,一到测试环境就翻车?环境变量错乱、接口地址混乱、数据源配置丢失……这些「环境切换」问题简直像定时炸弹,随时引爆你的测试流程! 测试人员每天都跟不同的环境打交道࿰…...
大模型在网络安全领域的七大应用
1. 高级威胁检测与防御自动化 技术路径: 数据整合:聚合网络流量、终端日志、威胁情报等多源数据,构建多维特征库。行为建模:通过大模型的上下文理解能力,建立正常行为基线,识别偏离模式。动态策略生成&am…...
SpringBoot项目部署之启动脚本
一、启动脚本方案 1. 基础启动方式 1.1 直接运行JAR java -jar your-app.jar --spring.profiles.activeprod优点:简单直接,适合快速测试缺点:终端关闭即终止进程 1.2 后台运行 nohup java -jar your-app.jar > app.log 2>&1 &…...
【spark-submit】--提交任务
Spark-submit spark-submit 是 Apache Spark 提供的用于提交 Spark 应用程序到集群的命令行工具。 基本语法 spark-submit [options] <app-jar> [app-arguments]常用参数说明 应用程序配置 --class <class-name>: 指定应用程序的主类(对于 Java/Sc…...
机器学习中的回归与分类模型:线性回归、逻辑回归与多分类
在机器学习领域,回归和分类是两类重要的任务,它们各自有着不同的应用场景和模型构建方式。本文将详细介绍线性回归、逻辑回归以及多分类任务的相关内容,包括数据预处理、模型定义、损失函数的选择以及评估指标的计算。 一、线性回归…...
spark-rdd
Spark-core RDD转换算子 RDD 根据数据处理方式的不同将算子整体上分为 Value 类型、双 Value 类型和 Key-Value 类型。 Value类型: 1.map 将处理的数据逐条进行映射转换,这里的转换可以是类型的转换,也可以是值的转换 mapPartitions map …...
Python 实现如何电商网站滚动翻页爬取
一、电商网站滚动翻页机制分析 电商网站如亚马逊和淘宝为了提升用户体验,通常采用滚动翻页加载数据的方式。当用户滚动页面到底部时,会触发新的数据加载,而不是一次性将所有数据展示在页面上。这种机制虽然对用户友好,但对爬虫来…...
pytorch TensorDataset与DataLoader类
读取数据 Dataset类 Dataset 是一个读取数据抽象类,所有自定义的数据集类需要继承该类。 该类主要实现以下三个功能 ①如何获取每一个数据及其label --> 抽象方法__getitem()__设置通过对象[索引]的方式获取每一个样本及其label ②告知一共有多少数据 -->…...
AI大模型与知识生态:重构认知的新时代引擎
📝个人主页🌹:慌ZHANG-CSDN博客 🌹🌹期待您的关注 🌹🌹 一、引言:我们如何获得知识,正在被AI彻底改写 从古代图书馆、百科全书,到搜索引擎、问答社区,人类获取知识的方式一直在进化。而随着 ChatGPT、DeepSeek、Grok 等 AI 大模型的到来,这一过程迎来了颠覆…...
Server-Sent Events一种允许服务器向客户端发送实时更新的 Web API
Server-Sent Events(SSE)是一种允许服务器向客户端发送实时更新的 Web API。它基于 HTTP 协议,提供了一种单向的、服务器到客户端的通信机制,客户端可以通过监听服务器发送的事件来接收实时数据。下面从原理、使用场景、代码示例等…...
电子电器架构 --- AI如何重构汽车产业
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁&am…...
操作系统CPU调度
简介 当CPU有大量任务要处理,但由于资源有限,无法同时处理。所有就需要某种规则来决定任务处理的顺序,这就是调度。 调度层次 根据调度频率与层次,共分为三种 高级调度 也称为作业调度(Long-Trem Scheduling),频次很低,它决定哪些进程从外存(硬盘)加载到内存中级调度 也…...
icoding题解排序
数组合并 假设有 n 个长度为 k 的已排好序(升序)的数组,请设计数据结构和算法,将这 n 个数组合并到一个数组,且各元素按升序排列。即实现函数: void merge_arrays(const int* arr, int n, int k, int* out…...
xHCI 上 USB 读写分析
系列文章目录 xHCI 简单分析 USB Root Hub 分析 USB Hub 检测设备 usb host 驱动之 urb xHCI那些事儿 PCIe MMIO、DMA、TLP PCIe配置空间与CPU访问机制 PCIe总线协议基础实战 文章目录 系列文章目录一、xHCI 初始化二、xHCI 驱动识别根集线器(RootHub)…...
SpringCloud Alibaba 之分布式全局事务 Seata 原理分析
1. 什么是 Seata?为什么需要它? 想象一下,你去银行转账: 操作1:从你的账户扣款 1000 元操作2:向对方账户增加 1000 元 如果 操作1 成功,但 操作2 失败了,你的钱就凭空消失了&…...
《C语言中的“魔法盒子”:自定义函数的奇妙之旅》
🚀个人主页:BabyZZの秘密日记 📖收入专栏:C语言 🌍文章目入 一、引言二、自定义函数的创建(一)基本结构(二)一个简单的例子 三、自定义函数的使用(一…...
【Spring】IoC 和 DI的关系、简单使用,从“硬编码“到“优雅解耦“:IoC与DI的Spring蜕变之旅
1.IoC 和 DI的关系 IoC(Inversion of Control,控制反转)和DI(Dependency Injection,依赖注入)是Spring框架中紧密相关但又有所区别的两个概念。理解它们的联系,可以帮助我们更深刻地掌握Spring…...
43、RESTful API 保姆教程
RESTful API 目录 RESTful API简介RESTful设计原则RESTful设计规范RESTful统一返回体JAX-RSJAX-RS与SpringBoot集成构建Restful服务实践总结一、RESTful API 简介 REST(Representational State Transfer)是一种基于HTTP的web服务架构风格,RESTful API则是遵循REST原则的网…...
ASP.NET Core 性能优化:客户端响应缓存
文章目录 前言一、什么是缓存二、客户端缓存核心机制:HTTP缓存头1)使用[ResponseCache]属性(推荐)2)预定义缓存配置(CacheProfile)3)手动设置HTTP头4)缓存验证机制&#…...
算法导论(递归回溯)——递归
算法思路(21) 递归函数的含义: 创建一个递归函数,该函数接受两个链表的头结点作为输入,返回合并后的链表的头结点。 选择较小的节点: 在函数体内,首先比较两个链表的头结点的值,选择…...
从接口400ms到20ms,记录一次JVM、MySQL、Redis的混合双打
1. 场景:促销活动的崩溃 接到报警短信,核心接口响应时间突破5秒,DB CPU飙到100%。 用Arthas抓取线上火焰图后发现: ---[ 4763ms ] com.example.service.OrderService.createOrder() |---[ 98% ] com.example.m…...
Excel通过VBA脚本去除重复数据行并保存
一、方法1:使用字典动态去重并保存 适用场景:需要灵活控制去重逻辑(如保留最后一次出现的重复项)时 Sub 动态去重保存到新表()Dim srcSheet As Worksheet, destSheet As WorksheetDim dict As Object, lastRow As Long, i As LongDim key A…...
Mysql表的操作(2)
1.去重 select distinct 列名 from 表名 2.查询时排序 select 列名 from 表名 order by 列名 asc/desc; 不影响数据库里面的数据 错误样例 : 但结果却有点出乎意料了~为什么会失败呢? 其实这是因为书写的形式不对,如果带了引号,…...
#Linux内存管理# 在ARM32系统中,页表是如何映射的?在ARM64系统中,页表又是如何映射的?
一、ARM32系统页表映射 1. 层级结构与地址划分 默认实现:采用两层映射(PGD→PTE),合并Linux标准三级模型中的PMD层。 虚拟地址解析(以4KB页为例): Bits[31:20]:一级页表(…...
prometheus整合jmx_exporter 使用jmx_exporter监控Kafka
docker-compose部署kafka集群;单节点单zk-CSDN博客 springboot整合kafka;docker部署kafka-CSDN博客 kafka使用SSL加密和认证--todo_ssl.truststore.location-CSDN博客 version: 3.8services:zookeeper1:image: zookeeper:3.9.1container_name: zook…...
深度学习实战:从零构建图像分类API(Flask/FastAPI版)
引言:AI时代的图像分类需求 在智能时代,图像分类技术已渗透到医疗影像分析、自动驾驶、工业质检等各个领域。作为开发者,掌握如何将深度学习模型封装为API服务,是实现技术落地的关键一步。本文将手把手教你使用Python生态中的Fla…...
Kafka实现延迟消息
Kafka 实现延迟消息 Kafka 本身不支持原生的延迟消息(不像 RocketMQ 内置了延迟队列),但可以通过多种方式来实现延迟消息。常见的方案如下: 1. 使用不同的 Topic 分区(最常见) 思路: 创建多…...
大数据(7.2)Kafka万亿级数据洪流下的架构优化实战:从参数调优到集群治理
目录 一、海量数据场景下的性能之殇1.1 互联网企业的数据增长曲线1.2 典型性能瓶颈分析 二、生产者端极致优化2.1 批量发送黄金法则2.1.1 分区选择算法对比 2.2 序列化性能突破 三、消费者端并发艺术3.1 多线程消费模式演进3.1.1 消费组Rebalance优化 3.2 位移管理高阶技巧 四、…...
要查看 FAISS 使用的 OpenMP 版本,需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析:
要查看 FAISS 使用的 OpenMP 版本,需根据安装方式和系统环境采用不同方法。以下是具体步骤和原理分析: 方法 1:通过库文件名称直接查看(推荐) FAISS 的 OpenMP 版本通常直接体现在其依赖的动态链接库(DLL/…...
AI 大模型的标准化工具箱MCP (Model Context Protocol)
MCP简介 MCP (Model Context Protocol,模型上下文协议)定义了应用程序和 AI 模型之间交换上下文信息的方式。这使得开发者能够以一致的方式将各种数据源、工具和功能连接到 AI 模型(一个中间协议层),就像 …...
哈希表的封装
目录 引入 哈希表封装 修改哈希表参数 修改哈希表成员 修改%时使用的变量 修改读取时获得的变量 迭代器的实现 迭代器的定义 迭代器 迭代器*解引用 迭代器->成员访问 迭代器重载和! 封装迭代器 HashTable迭代器封装 非const版本 const版本 unordered_set迭…...
2025年认证杯数模竞赛赛题浅析-快速选题
赛题浅析 认证杯作为国内最早的数学建模论坛、唯一一个全部公开参赛论文的竞赛、国内最大的数学建模竞赛之一、唯一一个对非学生群里开放的数学建模竞赛、国内唯二的支持高中生参赛的大学生数模竞赛。在数模界一直被视为国赛之前较好的练手赛,本文将初步简略得介绍…...
【网络安全】Linux 常见命令
未经许可,不得转载。 文章目录 正文系统信息查看用户与权限管理进程管理网络配置与检测文件操作日志查看与分析权限审计与安全检测正文 在网络安全工作中,熟练掌握 Linux 系统中的常用命令,对于日常运维、日志分析、安全排查等工作至关重要。 以下为常用命令汇总,供参考。…...
电脑卡顿严重怎么办 电脑卡顿的处理指南
电脑突然卡顿比较严重,这是很多用户都曾经遇到过的问题,鼠标一直转圈圈,无法进行任何操作。电脑卡顿,电脑卡顿不仅会降低工作效率,还可能导致数据丢失,数据无法保存。很多用户解决电脑卡顿的方法就是直接一…...
山东大学软件学院创新项目实训开发日志(9)之测试前后端连接
在正式开始前后端功能开发前,在队友的帮助下,成功完成了前后端测试连接: 首先在后端编写一个测试相应程序: 然后在前端创建vue 并且在index.js中添加一下元素: 然后进行测试,测试成功: 后续可…...
H.264 NVMPI解码性能优化策略
H.264 NVMPI解码性能优化策略 1. 硬件与驱动配置 JetPack版本匹配:确保NVIDIA Jetson设备的JetPack SDK版本与CUDA驱动兼容,避免因驱动不匹配导致硬件解码性能下降8。显存分配优化:调整FFmpeg的-hwaccel_device参数指定GPU…...
汽车软件开发常用的需求管理工具汇总
目录 往期推荐 DOORS(IBM ) 行业应用企业: 应用背景: 主要特点: Polarion ALM(Siemens) 行业应用企业: 应用背景: 主要特点: Codebeamer ALM&#x…...
如何从零构建一个自己的 CentOS 基础镜像
如何从零构建一个自己的 CentOS 基础镜像 从零构建一个基于 CentOS 的基础镜像是一个很好的实践,可以帮助你理解 Docker 镜像的底层原理。以下是以 CentOS 为例,从零开始(不依赖现有镜像)构建基础镜像的详细步骤。我们将使用 yum…...
mongodb和clickhouse比较
好问题——MongoDB 也能处理这种高写入 定期删除的时间序列场景,尤其从 MongoDB 5.0 开始支持了专门的 Time Series Collections(时间序列集合),对你的需求其实挺对口的。 不过它有些优点和局限,需要具体分析下你场景…...
C#容器源码分析 --- List
List是一个非常常用的泛型集合类,它位于 System.Collections.Generic 命名空间下,本质上是一个动态数组,它提供了一系列方便的方法来管理和操作元素,例如添加、删除、查找等。与传统的数组相比,List可以根据需要动态调…...
以太坊区块大小的决定因素:深入解析区块 Gas 限制及其影响
以太坊(Ethereum)作为全球领先的区块链平台,其区块大小并非固定的物理尺寸,而是由区块 Gas 限制(Block Gas Limit)所决定。理解区块 Gas 限制及其影响因素,对于深入掌握以太坊网络的运行机制至…...
利用DeepFlow解决APISIX故障诊断中的方向偏差问题
概要:随着APISIX作为IT应用系统入口的普及,其故障定位能力的不足导致了在业务故障诊断中,APISIX常常成为首要的“嫌疑对象”。这不仅导致了“兴师动众”式的资源投入,还可能使诊断方向“背道而驰”,从而导致业务故障“…...
智慧养老实训基地建设方案:如何以科技赋能养老实操培训
在人口老龄化加剧的当下,智慧养老产业蓬勃发展,对专业技能型人才的需求愈发迫切。智慧养老实训基地建设意义非凡,它为培育具备实操能力与创新思维的养老人才搭建关键平台,有助于填补行业人才缺口,推动养老服务从传统模…...
基于AI的Web应用防火墙(AppWall)实战:漏洞拦截与威胁情报集成
摘要:针对Web应用面临的OWASP、CVE等漏洞攻击,本文结合群联AI云防护系统的AppWall模块,详解AI规则双引擎的防御原理,并提供漏洞拦截配置与威胁情报集成代码示例。 一、Web应用安全挑战与AppWall优势 传统WAF依赖规则库更新滞后&a…...
什么是采购管理?如何做好采购管理的持续优化?
你是不是也遇到过这种情况: 公司采购部刚换了新供应商,结果原材料质量忽高忽低,生产线上三天两头出状况;行政采购的办公用品,月初买回来月底就堆在仓库吃灰;财务部天天追着问采购成本怎么又超支了... 这些…...