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

运动规划实战案例 | 基于四叉树分解的路径规划(附ROS C++/Python仿真)

目录

  • 1 为什么需要四叉树?
  • 2 基于四叉树的路径规划
    • 2.1 分层抽象
    • 2.2 路图搜索
    • 2.3 动态剪枝
  • 3 算法仿真
    • 3.1 ROS C++算法仿真
    • 3.2 Python算法仿真

1 为什么需要四叉树?

路径规划的本质是在给定环境中寻找从起点到终点的最优或可行路径,其核心挑战在于如何高效处理环境信息。传统栅格法将环境均匀划分为等大小的网格,虽直观但面临“维度灾难”——环境规模扩大时,计算量呈指数级增长。例如,一个100×100的二维栅格地图需维护10000个节点,而三维环境下这一数字将飙升至百万级别。拓扑图路径规划算法的核心思想在于将复杂的高维连续空间抽象为低维的离散图结构。基于障碍边界的可视图法(运动规划实战案例 | 基于可视图的路径规划算法(附ROS C++/Python仿真))以及维诺图法(路径规划 | 详解维诺图Voronoi算法(附ROS C++/Python/Matlab仿真))都属于这类基于拓扑图的路径规划。

本文介绍的四叉树(Quadtree)这一数据结构,源于计算机图形学中对二维空间的层次化分割思想:通过递归地将空间划分为四个象限(即“四叉”),仅在需要时对特定区域进行细化,从而实现对空间信息的自适应管理。例如,在开阔区域使用粗粒度划分以节省内存,在障碍物密集区域则进行多级细分以提升路径精度。这种按需分配的特性,使得四叉树在面对非均匀分布的环境时,能够显著降低数据存储与处理的冗余度

在这里插入图片描述

接下来,将详细介绍基于四叉树路径规划的算法原理

2 基于四叉树的路径规划

基于四叉树的路径规划(Quartree-based Path Planning)分为三个核心模块:分层抽象、路图搜索与动态剪枝

2.1 分层抽象

四叉树的构建始于将整个环境空间视为一个根节点,随后递归执行分割-判断过程:若当前节点对应的区域完全自由或完全被障碍物占据,则停止分割;若区域同时包含自由空间与障碍物,则将其均等分为四个子节点。这一过程持续至达到预设分割深度或满足精度要求,最终形成一棵层次化的树结构。例如,在机器人导航场景中,四叉树会在走廊等简单区域保持顶层粗划分,而在办公室桌椅排列的复杂区域自动生成多层细粒度节点。这种分层抽象的特性,为路径规划算法提供了天然的优化通道,因为四叉树可通过节点状态快速排除无效区域:若某个父节点被标记为完全障碍,其所有子节点无需进一步探查;若父节点完全自由,则可直接将其作为整体加入开放列表。这种“剪枝”机制大幅减少了状态扩展次数。

在这里插入图片描述

2.2 路图搜索

首先,四叉树路图利用已有的树节点作为路图顶点。具体而言,选择满足以下条件的四叉树节点作为路图节点:

  • 叶子节点中的自由节点,保证路径可达性
  • 非叶子节点中的自由父节点,用于跨层路径跳跃

两个四叉树节点被判定为相邻需满足几何边界接触条件:

  • 水平相邻节点需满足纵向坐标范围存在重叠且横向边界间距在容差内(下图红框)
  • 垂直相邻节点需满足横向坐标范围存在重叠且纵向边界间距在容差内(下图蓝框)

每个四叉树节点的中心点作为路径搜索的潜在航路点,相邻节点间建立带权无向边,边的权重通常取两节点中心点的欧氏距离。最终形成的路图本质上是一个由自由空间节点及其连接关系构成的图结构,其中节点密度在障碍物边界区域显著增加,确保路径能够精确绕行复杂障碍。

在这里插入图片描述

路径搜索过程依托构建完成的路图展开,采用Dijkstra算法即可。

2.3 动态剪枝

当环境中出现临时障碍物(如突然出现的行人或车辆)时,传统方法往往需要全局重新规划,而四叉树只需更新受影响区域的局部节点。具体而言,系统仅需回溯至包含障碍物变化的父节点层级,重新评估其子节点状态,并选择性触发局部重构。这种增量式更新策略使得路径规划系统能够以非常低的代价响应环境变化

3 算法仿真

3.1 ROS C++算法仿真

核心代码如下所示

bool QuartreePathPlanner::plan(const Point3d& start, const Point3d& goal, Points3d& path, Points3d& expand)
{double m_start_x, m_start_y, m_goal_x, m_goal_y;if ((!validityCheck(start.x(), start.y(), m_start_x, m_start_y)) ||(!validityCheck(goal.x(), goal.y(), m_goal_x, m_goal_y))){return false;}// construct quartree only onceif (!is_quartree_valid_){const size_t grids_num = quar_grids_.size();roadmap_.resize(grids_num);valid_edges_.reserve(grids_num * 4);for (size_t i = 0; i < grids_num; ++i){const auto& current = quar_grids_[i];for (size_t j = i + 1; j < grids_num; ++j){const auto& neighbor = quar_grids_[j];if ((std::abs(current.min_x() - neighbor.max_x()) <= 1.0 ||std::abs(current.max_x() - neighbor.min_x()) <= 1.0)){if (current.min_y() < neighbor.max_y() && current.max_y() > neighbor.min_y()){valid_edges_.emplace_back(current.center(), neighbor.center());const double dist = (current.center() - neighbor.center()).length();roadmap_[i].emplace_back(j, dist);roadmap_[j].emplace_back(i, dist);}}else if ((std::abs(current.min_y() - neighbor.max_y()) <= 1.0 ||std::abs(current.max_y() - neighbor.min_y()) <= 1.0)){if (current.min_x() < neighbor.max_x() && current.max_x() > neighbor.min_x()){valid_edges_.emplace_back(current.center(), neighbor.center());const double dist = (current.center() - neighbor.center()).length();roadmap_[i].emplace_back(j, dist);roadmap_[j].emplace_back(i, dist);}}}}is_quartree_valid_ = true;}...// search on quartree mapstd::vector<int> q_path;if (_searchOnRoadMap(roadmap_, start_idx, goal_idx, q_path)){path.clear();path.emplace_back(start);if (q_path.size() > 2){for (size_t i = 1; i < q_path.size() - 1; ++i){const auto& pt = vertices_[q_path[i]];// convert to world framedouble wx, wy;costmap_->mapToWorld(pt.x(), pt.y(), wx, wy);path.emplace_back(wx, wy);}}path.emplace_back(goal);return true;}else{return false;}
}

在这里插入图片描述

3.2 Python算法仿真

核心代码如下所示

def partition(self, grid: np.ndarray, x: int, y: int, size: int, square_size_threshold: int = 5) -> List[Square]:"""Recursively divides the grid into four parts. If a part contains obstacles it further divied into four more parts.Parameters:grid (np.ndarray): 2D array representing the grid.x, y (int): Top-left coordinates of the current partition.size (int): Size of the current partition.Returns:List of Square objects representing free spaces in the grid."""if size < square_size_threshold:bottom_left = Point3d(x, y)top_right = Point3d(x + size, y + size)if self.isFree(grid, bottom_left, top_right):return [Square(bottom_left, top_right)]else:return []else:# Check if the area is homogeneous and free spaceif self.isFree(grid, Point3d(x, y), Point3d(x + size, y + size)):return [Square(Point3d(x, y), Point3d(x + size, y + size))]else:# Divide the area into quadrants and partition recursivelynew_size = size // 2quad1 = self.partition(grid, x, y, new_size)quad2 = self.partition(grid, x, y + new_size, new_size)quad3 = self.partition(grid, x + new_size, y, new_size)quad4 = self.partition(grid, x + new_size, y + new_size, new_size)return quad1 + quad2 + quad3 + quad4

在这里插入图片描述

完整工程代码请联系下方博主名片获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇

相关文章:

运动规划实战案例 | 基于四叉树分解的路径规划(附ROS C++/Python仿真)

目录 1 为什么需要四叉树&#xff1f;2 基于四叉树的路径规划2.1 分层抽象2.2 路图搜索2.3 动态剪枝 3 算法仿真3.1 ROS C算法仿真3.2 Python算法仿真 1 为什么需要四叉树&#xff1f; 路径规划的本质是在给定环境中寻找从起点到终点的最优或可行路径&#xff0c;其核心挑战在…...

java设计模式-享元模式

享元模式 基本介绍 1、享元模式(flyweight Pattern)&#xff0c;也叫作蝇量模式&#xff1a;运用在共享技术有效的支持大量细粒度的对象。 2、常用语系统底层开发&#xff0c;解决系统的性能问题。像 数据库连接&#xff0c;里面都是创建好的连接对象&#xff0c;在这些连接对…...

Java 大视界 -- Java 大数据在智慧水利水资源调度与水情预测中的应用创新(180)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

自动驾驶---苹果又要造车了吗?

1 背景 巴菲特一直认为造车的企业是一个做 “苦生意” 的企业&#xff0c;可能苹果高层也意识到了这一点&#xff0c; 于是造车计划在去年被终止。 但2025年2月份&#xff0c;苹果公司署名发了一篇自动驾驶领域的论文《Robust Autonomy Emerges from Self-Play》&#xff0c;详…...

Redis主从复制:告别单身Redis!

目录 一、 为什么需要主从复制&#xff1f;&#x1f914;二、 如何搭建主从架构&#xff1f;前提条件✅步骤&#x1f4c1; 创建工作目录&#x1f4dc; 创建 Docker Compose 配置文件&#x1f680; 启动所有 Redis&#x1f50d; 验证主从状态 &#x1f4a1; 重要提示和后续改进 …...

PHP:将关联数组转换为索引数组的完整示例

处理之前的数据 头和行在一起显示 // 执行SQL查询后的原始数据&#xff08;假设查询返回3条记录&#xff09; $rawData [[wip_entity_name > JOB001,primary_item > ITEM001,primary_name > 主产品1,primary_desc > 主产品描述1,start_quantity > 100,quanti…...

27.[2019红帽杯]easyRE1(保姆教程)

收到文件&#xff0c;.elf 文件&#xff0c;ExeinfoPE查看一下基础信息。无壳&#xff0c;64bit。 把文件拖入IDA工具&#xff0c;查看一下。 点击关键字&#xff0c;ctrl x 交叉搜索一下位置&#xff0c;跟进&#xff0c;顺便菜单左侧 Edit --> Plugins--> findcrypt …...

【Redis】Redis实现分布式锁

1. 基于Redis 1.1 加锁 setnx lockKey uniqueValue1.2 解锁 基于Lua脚本保证解锁的原子性。Redis在执行Lua脚本时&#xff0c;可以以原子性的方式执行&#xff0c;确保原子性。 if redis.call("get", keys[1]) argv[1] then return redis.call("del", …...

AI大模型底层技术——Scaling Law

0. 定义 Scaling Law 是描述 AI 模型性能随关键因素&#xff08;如参数量、数据量、计算量&#xff09;增长而变化的数学规律&#xff0c;通常表现为幂律关系。 历史里程碑&#xff1a; **OpenAI 2020 年论文首次系统提出语言模型的缩放定律**DeepMind、Google 等机构后续发表…...

Spring MVC 国际化机制详解(MessageSource 接口体系)

Spring MVC 国际化机制详解&#xff08;MessageSource 接口体系&#xff09; 1. 核心接口与实现类详解 接口/类名描述功能特性适用场景MessageSource核心接口&#xff0c;定义消息解析能力支持参数化消息&#xff08;如{0}占位符&#xff09;所有国际化场景的基础接口Resource…...

java学习笔记13——IO流

File 类的使用 常用构造器 路径分隔符 常用方法 File类的获取功能和重命名功能 File 类的判断功能 File类的创建功能和删除功能 File 类的使用 总结&#xff1a; 1.File类的理解 > File类位于java.io包下&#xff0c;本章中涉及到的相关流也都声明在java.io包下 > File…...

防DDoS流量清洗核心机制解析

本文深度剖析DDoS流量清洗技术演进路径&#xff0c;揭示混合云清洗系统的四层过滤架构&#xff0c;结合2023年新型反射攻击案例&#xff0c;提出基于AI行为分析的动态防御策略。通过Gartner最新攻防效能数据与金融行业实战方案&#xff0c;阐明流量清洗系统在误判率、清洗延迟、…...

边缘计算革命:低功耗GPU在自动驾驶实时决策中的应用

边缘计算革命&#xff1a;低功耗GPU在自动驾驶实时决策中的应用 ——分析NVIDIA Jetson与华为昇腾的嵌入式方案差异 一、自动驾驶的实时决策挑战与边缘计算需求 自动驾驶系统需在30ms内完成环境感知、路径规划与车辆控制的全流程闭环‌。传统云端计算受限于网络延迟&#xf…...

ubuntu24.04-MyEclipse的项目导入到 IDEA中

用myeclipse创建的一个web项目&#xff0c; jdk1.7,tomcat7,mysql8.0,导入到idea项目中 1.导入现有项目 1.打开IDEA&#xff0c;选择“Import Project”进入下一步 2.选择所需要导入的项目&#xff0c;点击“OK” 3.点击创建一个新的项目&#xff0c;然后下一步 4.直接点…...

基于SpringBoot的律师事务所案件管理系统【附源码】

基于SpringBoot的律师事务所案件管理系统&#xff08;源码L文说明文档&#xff09; 目录 4 系统设计 4.1界面设计原则 4.2功能结构设计 4.3数据库设计 4.3.1属性图 4.3.2 数据库物理设计 5 系统实现 5.1客户信息管理 5.2 律师…...

电力网关:推动电力物联网及电力通信系统革新

在“双碳”目标与新型电力系统建设的背景下&#xff0c;电力行业正加速向数字化、智能化、绿色化转型。作为国内领先的电力物联网解决方案提供商&#xff0c;厦门计讯物联科技有限公司&#xff08;以下简称“计讯物联”&#xff09;依托自主研发的电力专用网关、边缘计算平台及…...

Android系统的Wi-Fi系统框架和详细启动流程

目录 一、前言 二、系统架构层次 ‌1、应用层‌ ‌2、Framework层‌ 3‌、HAL层‌ ‌4、驱动层‌ 三、Wi-Fi 目录树结构 四、系统流程 1、应用层请求 2、Wi-Fi管理服务处理 3、硬件交互 4、数据处理与事件通知 5.连接管理 6.状态维护 五、WiFi启动流程及函数调用…...

Scala基础知识8

集合计算高级函数 包括过滤、转换或映射、扁平化、扁平化加映射、分组、简化&#xff08;归约&#xff09;&#xff0c;折叠 过滤:遍历一个集合并从中获取满足指定条件的元素组成一个新的集合。 转换或映射:将原始集合中的元素映射到某个函数中。 扁平化:取消嵌套格式&…...

SwiftUI 本地推送(Local Notification)教程目录

1. 本地推送简介 1.1 什么是本地推送&#xff1f;1.2 本地推送的应用场景&#xff08;提醒、定时任务、用户交互等&#xff09;1.3 本地推送与远程推送的区别 2. 前提条件 2.1 开发环境要求&#xff08;Xcode 13、iOS 15&#xff09;2.2 需要的基础知识&#xff08;SwiftUI …...

大数据技术与Scala

集合高级函数 过滤 通过条件筛选集合元素&#xff0c;返回新集合。 映射 对每个元素应用函数&#xff0c;生成新集集合 扁平化 将嵌套集合展平为单层集合。 扁平化映射 先映射后展平&#xff0c;常用于拆分字符串。 分组 按规则将元素分组为Map结构。 归约 …...

golang通过飞书邮件服务API发送邮件功能详解

一.需求 需要实现通过飞书邮件服务API发送邮件验证码功能:用户输入邮箱, 点击发送邮件,然后发送邮件验证码, 这里验证码有过期时间, 保存到redis缓存中 二.实现 实现的部分代码如下: 控制器部分代码 // 发送邮件控制器 func EmailSendController(userId uint64, m proto.Messa…...

BoostSearch搜索引擎项目 —— 测试用例设计 + web自动化测试代码

web自动化代码&#xff1a; https://gitee.com/chicken-c/boost-search/tree/master/AutoTest...

MySQL学习笔记集--触发器

触发器 MySQL触发器&#xff08;Trigger&#xff09;是一种特殊的存储过程&#xff0c;它在指定的数据库表上指定的事件&#xff08;INSERT、UPDATE、DELETE&#xff09;之前或之后自动执行。触发器可以用来强制执行复杂的业务逻辑、数据完整性规则、自动更新数据等。 触发器…...

算力驱动未来:从边缘计算到高阶AI的算力革命

算力驱动未来&#xff1a;从边缘计算到高阶AI的算力革命 摘要 本文深入探讨了不同算力水平&#xff08;20TOPS至160TOPS&#xff09;在人工智能领域的多样化应用场景。从边缘计算的实时目标检测到自动驾驶的多传感器融合&#xff0c;从自然语言处理的大模型应用到AI for Scie…...

4.8刷题记录(双指针)

今天刷的部分是代码随想录中的双指针专题代码随想录 由于里面包含的题目大部分之前刷过&#xff0c;并且用双指针做过。所以今天仅仅复习&#xff0c;不再进行代码的搬运。 1.19. 删除链表的倒数第 N 个结点 - 力扣&#xff08;LeetCode&#xff09; 分析&#xff1a;此题无…...

在shell脚本中,$@和$#的区别与联系

在 Shell 脚本里&#xff0c;$ 和 $* 都是用于表示传递给脚本或函数的所有参数&#xff0c;下面详细介绍它们的区别与联系。 联系 表示所有参数&#xff1a;二者都能够代表传递给脚本或者函数的全部参数。当你在执行脚本时带上了多个参数&#xff0c;$ 和 $* 都能把这些参数呈…...

IP节点详解及国内IP节点获取指南

获取国内IP节点通常涉及网络技术或数据资源的使用&#xff0c;IP地址作为网络设备的唯一标识&#xff0c;对于网络连接和通信至关重要。详细介绍几种修改网络IP地址的常用方法&#xff0c;无论是对于家庭用户还是企业用户&#xff0c;希望能找到适合自己的解决方案。以下是方法…...

Google Play上架:解决android studio缓存问题(内容清理不干净导致拒审)

在as打包中,经常会遇到改变工程参数或者对应文件参数的情况,比如 修改android gradle版本 快捷键:ctrl + alt + shift + s 修改SDK文件路径 快捷键:ctrl + alt + shift + s 修改Gradle存储下载文件的默认位置 快捷键:ctrl + alt + s 先打开设置 修改compile...

蓝桥杯备赛 Day 21 图论基础

图的基础 ![[图的基础.png]] 1.图的存储方式 (1)邻接表(常用) vector<pair<int,int>> g[N]; //g[x]存放x的所有出点信息,二维数组 g[i][j]{first,second},first是从i出发的第j个出点,second表示边权 例如上图: g[1]{{2,0}.{3,0}} g[6]{{3,7}} g[4]{{5,0},{6,0}…...

MySQL数据库应用技术试卷

建一个以自己名字拼音为命名的数据库。&#xff08;3分&#xff09; CREATE DATABASE example; 令这个数据库为当前所使用的数据库。&#xff08;2分&#xff09; USE example; 写出如下student表结构语句。&#xff08;95分&#xff09; 表1&#xff1a; 列名 数据类型 …...

openssl源码分析之加密模式(modes)

openssl实现分组加密模式&#xff08;例如AES128-CBC的CBC部分&#xff09;的模块名字叫做modes&#xff0c;源代码位于 https://gitee.com/gh_mirrors/openssl/tree/master/crypto/modes 博主又打不开github了TT&#xff0c;只能找个gitee镜像 头文件是modes.h。 该模块目前…...

【Unity】Unity Transform缩放控制教程:实现3D模型缩放交互,支持按钮/鼠标/手势操作

【Unity 】Transform缩放控制教程&#xff1a;实现3D模型缩放交互&#xff0c;支持按钮/鼠标/手势操作 在Unity开发中&#xff0c;Transform组件承担着场景中物体的空间信息控制&#xff0c;包括位置、旋转和缩放。而缩放&#xff08;Scale&#xff09;操作&#xff0c;作为三…...

集成nacos2.2.1出现的错误汇总

总结 1.jdk问题 jdk要一致 2.idea使用问题 idea启动nacos要配置&#xff0c;idea启动类要启动两次&#xff0c;并配置两次vm参数 3.项目依赖问题 依赖要正确添加&#xff0c;有的模块就是不能用公共模块的pom配置&#xff0c;需要独立配置&#xff0c;先后启动顺序也要注意…...

从零到有的游戏开发(visual studio 2022 + easyx.h)

引言 本文章适用于C语言初学者掌握基本的游戏开发&#xff0c; 我将用详细的步骤引领大家如何开发属于自己的游戏。 作者温馨提示&#xff1a;不要认为开发游戏很难&#xff0c;一些基本的游戏逻辑其实很简单&#xff0c; 关于游戏的开发环境也不用担心&#xff0c;我会详细…...

海外高防服务器延迟优化——跨国业务安全加速的底层逻辑

本文深度解析海外高防服务器延迟优化的技术实现路径&#xff0c;揭示跨国业务场景下DDoS防护与网络性能的平衡法则。从物理线路选择到协议栈调优&#xff0c;从流量调度算法到安全检测机制重构&#xff0c;系统阐述降低20ms-50ms延迟的工程实践方案&#xff0c;并附2023年东南亚…...

常用环境部署(二十六)——Centos搭建MQTT服务端EMQX

1、安装docker https://blog.csdn.net/wd520521/article/details/112609796?spm1011.2415.3001.5331 2、安装EMQX4.4.4 &#xff08;1&#xff09;使用docker pull指令安装emqx镜像 docker pull emqx/emqx:4.4.4 &#xff08;2&#xff09;查看镜像 docker images 3、启…...

ecovadis认证基本概述,ecovadis认证审核有效期

EcoVadis认证基本概述 1. 什么是EcoVadis认证&#xff1f; EcoVadis是全球领先的企业可持续发展&#xff08;ESG&#xff09;评级平台&#xff0c;专注于评估企业在**环境&#xff08;E&#xff09;、劳工与人权&#xff08;S&#xff09;、商业道德&#xff08;L&#xff09…...

2.8.4 iOS覆盖率SDK开发

iOS系统的覆盖率SDK,通过搭建本地的pod仓库,直接在podfile中添加指定的下载地址,就可以实现对被测试的app注入覆盖率SDK。 2.8.4.1 开发iOS覆盖率获取Pod私有库 在网上查找了相应的开发方法后,决定开发自己的依赖库,开发方法及步骤如下: 1,开发新的包 (1)通过Xcode创…...

Redhat(6)-ansible-变量

变量 1.作用域 Global scope:命令行中设置。 Play scope:play中设置。 Host scope &#xff1a;inventory中定义、facts收集或任务中注册&#xff0c;在主机组和主机上设置。 1.全局变量 1.1cmd命令 #1.全局变量 #显示变量 echo %PATH1.2.ansible变量 全局变量 var变量不加…...

麦科信光隔离探头在碳化硅(SiC)MOSFET动态测试中的应用

碳化硅&#xff08;SiC&#xff09;MOSFET 是基于宽禁带半导体材料碳化硅&#xff08;SiC&#xff09;制造的金属氧化物半导体场效应晶体管&#xff0c;相较于传统硅&#xff08;Si&#xff09;MOSFET&#xff0c;具有更高的击穿电压、更低的导通电阻、更快的开关速度以及更优异…...

android audiorecord

这里写目录标题 初始化失败记录 AudioRecord 初始化及参数介绍基本初始化参数详解1. audioSource (音频源)2. sampleRateInHz (采样率)3. channelConfig (声道配置)4. audioFormat (音频格式)5. bufferSizeInBytes (缓冲区大小) 完整初始化示例使用注意事项 参考地址 初始化失败…...

有一个变量 在有些线程没有加锁 有些线程加锁了,那我在这些加锁的线程中能起到对应的作用吗

这是一个非常经典、但也很危险的问题。 &#x1f9e8; 简单结论&#xff1a; 如果一个变量在某些线程访问时没有加锁&#xff0c;即使其他线程对它加了锁&#xff0c;也&#xff1a; ❌ 不能保证线程安全&#xff01; ❌ 加锁的部分不会“保护”未加锁的部分&#xff01; &am…...

【人工智能】AI大模型开发数学基础指南

目录 学习内容**1. 线性代数****2. 概率与统计****3. 微积分****4. 优化理论****5. 信息论****6. 数值计算****7. 离散数学****8. 统计学进阶****如何学习&#xff1f;****总结** 如何学习**1. 明确学习目标****2. 分阶段学习计划****阶段 1&#xff1a;夯实基础****阶段 2&…...

直流减速电机控制实验:Simulink应用层开发(3)

文章目录 1 阶段目标2 单元测试方法3 单元测试过程3.1 按键指令识别测试3.2 电机状态转换测试4 代码生成5 总结1 阶段目标 本文是《直流减速电机控制实验》的第四部分,会通过图文结合的方式,手把手带读者操作Simulink工具进行直流减速电机的应用层开发。 本章主要将《直流减…...

隔行换色总结

功能效果展示&#xff1a; 第一种思路&#xff1a; 使用数组&#xff0c;将数组的内容渲染到页面上&#xff0c;序号也就是将数组的下标输出到第一个td上&#xff0c;将数组的内容输出到第二个td上&#xff0c;&#xff08;使用拼接字符串&#xff09; 具体操作&#xff1a; …...

【kind管理脚本-2】脚本使用说明文档 —— 便捷使用 kind 创建、删除、管理集群脚本

当然可以&#xff0c;以下是为你这份 Kind 管理脚本写的一份使用说明文档&#xff0c;可作为 README.md 或内部文档使用&#xff1a; &#x1f680; Kind 管理脚本说明文档 本脚本是一个便捷的工具&#xff0c;帮助你快速创建、管理和诊断基于 Kind (Kubernetes IN Docker) 的…...

Python星球日记 - 第13天:封装、继承与多态

🌟引言: 上一篇:Python星球日记 - 第12天:面向对象编程(OOP)基础 名人说:不要人夸颜色好,只留清气满乾坤(王冕《墨梅》) 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、引言二、封装的概念与实现1. 公有属性与私有属性2. 使用getter和sett…...

基于AT89C52单片机的GSM上报智能家居报警温度烟雾防盗系统

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/90579530?spm1001.2014.3001.5503 功能介绍&#xff1a; 1、功能&#xff1a;具有温度、烟雾、入侵报警功能&#xff0c;采用LCD1602液晶显示屏实时显示温度值与…...

北重数控滑台厂家:机器人地轨究竟是如何运作的,又在哪些领域发光发热呢?

机器人地轨是指利用机器人技术在地面上移动或执行任务的轨道系统。这种系统通常包括导轨、传动装置、传感器和控制系统等组成部分。机器人地轨的运作原理是通过控制传动装置沿着导轨移动&#xff0c;同时利用传感器获取周围环境信息并通过控制系统进行实时调节。 机器人地轨在…...

2025最新系统 Git 教程(三)

2.3 Git 基础 - 查看提交历史 查看提交历史 在提交了若干更新&#xff0c;又或者克隆了某个项目之后&#xff0c;你也许想回顾下提交历史。 完成这个任务最简单而又有效的工具是 git log 命令。 我们使用一个非常简单的 simplegit 项目作为示例。 运行下面的命令获取该项目&…...