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

ROS2 强化学习:案例与代码实战

一、引言

在机器人技术不断发展的今天,强化学习(RL)作为一种强大的机器学习范式,为机器人的智能决策和自主控制提供了新的途径。ROS2(Robot Operating System 2)作为新一代机器人操作系统,具有更好的实时性、分布式性能和安全性,为强化学习在机器人领域的应用提供了更坚实的基础。本文将通过一个具体案例,深入探讨 ROS2 与强化学习的结合应用,并提供相关代码实现。

二、案例背景

本案例以移动机器人在复杂环境中的导航任务为例。机器人需要在一个包含障碍物的地图中,从起始点移动到目标点,同时避免碰撞障碍物。传统的路径规划方法,如 A * 算法,虽然能够找到一条从起点到目标点的路径,但在动态环境中缺乏适应性。而强化学习可以让机器人通过与环境的交互,不断学习最优的行动策略,以适应不同的环境情况。

三、强化学习基础概念

在深入案例之前,先简单回顾一些强化学习的基本概念:

  • 智能体(Agent):在本案例中,智能体就是移动机器人,它能够感知环境并执行动作。
  • 环境(Environment):包含地图、障碍物、起始点和目标点等信息,智能体在其中进行交互。
  • 状态(State):描述智能体当前在环境中的情况,例如机器人的位置、方向等。
  • 动作(Action):智能体可以采取的行动,如向前移动、向左转、向右转等。
  • 奖励(Reward):环境根据智能体的动作给予的反馈,例如成功到达目标点给予正奖励,碰撞障碍物给予负奖励。

四、ROS2 与强化学习结合的实现

(一)环境搭建

  1. 安装 ROS2:根据官方文档,在 Ubuntu 系统上安装 ROS2 Foxy 版本。
  1. 安装强化学习库:使用 pip 安装 stable - baselines3 库,这是一个常用的强化学习算法实现库。

(二)代码实现

  1. 定义 ROS2 节点

首先,创建一个 ROS2 节点,用于与机器人的运动控制和传感器数据进行交互。以下是一个简单的 Python 代码示例:

import rclpy
from rclpy.node import Node
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScanclass RobotNode(Node):def __init__(self):super().__init__('robot_node')self.publisher_ = self.create_publisher(Twist, 'cmd_vel', 10)self.subscription = self.create_subscription(LaserScan,'scan', self.scan_callback, 10)self.subscription  # prevent unused variable warningdef scan_callback(self, msg):# 处理激光雷达数据,这里可以提取机器人周围障碍物的信息passdef send_velocity_command(self, linear_x, angular_z):twist = Twist()twist.linear.x = linear_xtwist.angular.z = angular_zself.publisher_.publish(twist)
  1. 定义强化学习环境

接下来,定义一个强化学习环境类,继承自 stable - baselines3 中的 gym.Env 类。在这个类中,定义状态空间、动作空间、重置环境和执行动作的方法。

import gym
from gym import spaces
import numpy as npclass RobotEnv(gym.Env):def __init__(self):super(RobotEnv, self).__init__()# 定义状态空间,例如机器人的位置和激光雷达数据self.observation_space = spaces.Box(low=-np.inf, high=np.inf, shape=(10,), dtype=np.float32)# 定义动作空间,例如机器人的线速度和角速度self.action_space = spaces.Box(low=-1.0, high=1.0, shape=(2,), dtype=np.float32)def reset(self):# 重置环境,返回初始状态initial_state = np.zeros(10)return initial_statedef step(self, action):# 执行动作,返回新的状态、奖励、是否结束和其他信息new_state = np.zeros(10)reward = 0done = Falseinfo = {}return new_state, reward, done, info
  1. 训练强化学习模型

使用 stable - baselines3 中的 PPO(近端策略优化)算法训练强化学习模型。

from stable_baselines3 import PPOenv = RobotEnv()
model = PPO('MlpPolicy', env, verbose=1)
model.learn(total_timesteps=10000)

五、强化学习常用算法

Q 学习(Q - Learning)

Q 学习是一种基于值函数的无模型强化学习算法,属于时间差分(TD)算法的一种。它的核心思想是通过学习一个 Q 值函数,来评估在某个状态下采取某个动作的长期累积奖励。Q 值函数定义为\(Q(s,a)\),表示在状态\(s\)下采取动作\(a\)的价值。算法在每次迭代中,根据当前状态和动作选择,依据一定策略(如\(\epsilon -\)贪婪策略)更新 Q 值,其更新公式为:\(Q(s,a) \leftarrow Q(s,a) + \alpha \left[ r + \gamma \max_{a'} Q(s',a') - Q(s,a) \right]\)

其中,\(\alpha\)是学习率,控制每次更新的步长;\(\gamma\)是折扣因子,反映对未来奖励的重视程度;\(r\)是执行动作\(a\)后获得的即时奖励;\(s'\)是执行动作\(a\)后转移到的新状态。Q 学习是一种离策略算法,即学习过程中使用的策略与实际执行的策略可以不同。

深度 Q 网络(Deep Q - Network,DQN)

DQN 是将深度学习与 Q 学习相结合的算法,用于解决状态空间和动作空间较大时 Q 值函数难以存储和计算的问题。它利用深度神经网络来逼近 Q 值函数,使用经验回放(Experience Replay)机制存储智能体与环境交互的样本\((s,a,r,s')\),并从中随机采样进行训练,打破数据之间的相关性,提高学习效率。同时,DQN 引入了目标网络(Target Network),定期更新参数,以稳定学习过程。在实际应用中,DQN 在 Atari 游戏等领域取得了显著成果,能够让智能体通过学习玩多种不同类型的游戏并达到人类专家水平。

策略梯度算法(Policy Gradient)

策略梯度算法是直接对策略函数进行优化的一类算法。与基于值函数的方法不同,它通过计算策略梯度来直接调整策略参数,使得智能体在环境中获得的累积奖励最大化。策略函数通常用\(\pi_{\theta}(a|s)\)表示,其中\(\theta\)是策略参数。策略梯度的计算基于对数似然比,通过对累积奖励关于策略参数求梯度,得到策略梯度的估计值,进而使用梯度上升法更新策略参数。策略梯度算法是一种在线策略算法,学习过程中使用的策略就是实际执行的策略,常见的策略梯度算法有 REINFORCE 算法等 。

近端策略优化算法(Proximal Policy Optimization,PPO)

PPO 是基于策略梯度算法改进而来的算法,旨在提高策略优化的效率和稳定性。它引入了重要性采样(Importance Sampling)来估计策略更新的梯度,同时通过限制策略更新的幅度,避免策略更新过快导致性能下降。PPO 有两种主要实现方式:PPO - clip 和 PPO - penalty。PPO - clip 通过裁剪重要性采样比率来限制策略更新;PPO - penalty 则通过添加一个惩罚项到目标函数中,来控制策略更新的幅度。PPO 在多个领域都有广泛应用,如机器人控制、自动驾驶等,能够在复杂环境中快速学习到有效的策略。

六、案例总结与展望

通过上述案例,我们展示了如何在 ROS2 环境中实现强化学习,让移动机器人能够在复杂环境中自主学习导航策略。这种结合不仅提高了机器人的智能水平,还为未来更多复杂的机器人应用奠定了基础。未来,随着强化学习算法的不断发展和 ROS2 生态系统的不断完善,我们有望看到更多创新的机器人应用,如协作机器人、自动驾驶等领域的突破。

相关文章:

ROS2 强化学习:案例与代码实战

一、引言 在机器人技术不断发展的今天,强化学习(RL)作为一种强大的机器学习范式,为机器人的智能决策和自主控制提供了新的途径。ROS2(Robot Operating System 2)作为新一代机器人操作系统,具有…...

Java数据结构第十四期:走进二叉树的奇妙世界(三)

专栏:数据结构(Java版) 个人主页:手握风云 目录 一、二叉树OJ练习题 1.1. 相同的树 1.2. 另一棵树的子树 1.3. 翻转二叉树 1.4. 平衡二叉树 1.5. 对称二叉树 一、二叉树OJ练习题 1.1. 相同的树 判断两棵树是否相同,我们是否只能遍历一…...

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术,目的是在不修改业务代码的情况下,实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改,将监控代码注入到…...

《炎龙骑士团 1 邪神之封印》游戏信息

发行公司:1994 年由汉堂国际资讯公司发行。 游戏类型:回合制角色扮演游戏 故事背景 远古之战:在远古时代,圣族与魔族爆发大战,魔族领导者大邪神力量强大,圣族处于下风。圣族派出十二战士突袭,虽…...

本地大模型编程实战(23)用智能体(Agent)实现基于SQL数据构建问答系统(2)

本文将用 智能体(Agent) 实现对 SQLite 数据库的查询:用户用自然语言提出问题,智能体也用自然语言根据数据库的查询结果回答问题。 本次将分别在英文、中文环境下,使用 qwen2.5 、 MFDoom/deepseek-r1-tool-calling:7b 以及 llama3.1 做实验。…...

Flash-03

1-问题:Flash软件画两个图形,若有部分重合则变为一个整体 解决方法1:两个图形分属于不同的图层 解决方法2:将每个图形都转化为【元件】 问题2:元件是什么? 在 Adobe Flash(现在称为 Adobe Anim…...

防火墙双机热备---VRRP,VGMP,HRP(超详细)

双机热备技术-----VRRP,VGMP,HRP三个组成 注:与路由器VRRP有所不同,路由器是通过控制开销值控制数据包流通方向 防火墙双机热备: 1.主备备份模式 双机热备最大的特点就是防火墙提供了一条专门的备份通道(心…...

PC端-发票真伪查验系统-Node.js全国发票查询接口

在现代企业的财务管理中,发票真伪的验证至关重要。随着电子发票的普及,假发票问题日益严峻,如何高效、准确的对发票进行真伪查验,已经成为各类企业在日常运营中必须解决的关键问题。翔云发票查验接口做企业财务管理、税务合规的好…...

3.1部署filebeat:5044

beats是ELK体系中新增的一个工具,, 属于一个轻量的日志采集器。 1.安装(每台) # tar xf filebeat-6.4.1-linux-x86_64.tar.gz # mv filebeat-6.4.1-linux-x86_64 /usr/local/filebeat #yum -y install httpd #systemctl start httpd 2.测试…...

在 Windows 上配置 Ollama 服务并开放局域网访问

为了在局域网内共享 Ollama 服务,我们需要完成以下两步: 1、设置 Ollama 的环境变量 OLLAMA_HOST,使其监听局域网的 IP 地址。 (1) 配置 Ollama 服务的监听地址 Ollama 服务使用环境变量 OLLAMA_HOST 来指定监听的地…...

C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…...

解决后端跨域问题

目录 一、什么是跨域问题&#xff1f; 1、跨域问题的定义 2、举例 3、为什么会有跨域问题的存在&#xff1f; 二、解决跨域问题 1、新建配置类 2、编写代码 三、结语 一、什么是跨域问题&#xff1f; 1、跨域问题的定义 跨域问题&#xff08;Cross-Origin Resource Sh…...

【教程】使用docker+Dify搭建一个本地知识库

现在AI火的一塌糊涂&#xff0c;再不搭建一个自己的AI知识库就有点落伍了&#xff0c;这里我是自己的windows11电脑。用了dockerdifydeepseek。 一、安装docker 网址&#xff1a;https://www.docker.com/ 什么是docker&#xff1f; Docker 是一种开放源代码的容器化平台&…...

微信小程序数据绑定与事件处理:打造动态交互体验

在上一篇中&#xff0c;我们学习了如何搭建微信小程序的开发环境并创建了一个简单的“Hello World”页面。然而&#xff0c;一个真正的小程序不仅仅是静态内容的展示&#xff0c;它需要与用户进行动态交互。本文将深入探讨微信小程序中的数据绑定和事件处理机制&#xff0c;通过…...

Spring MVC 的执行流程解析:从用户请求到响应返回

Spring MVC 是一种基于 Model-View-Controller 设计模式的 Web 框架&#xff0c;用于处理用户请求、执行相应的业务逻辑并返回响应。它广泛应用于 Java Web 开发&#xff0c;提供了灵活的架构和丰富的功能。 本文将详细介绍 Spring MVC 的执行流程&#xff0c;帮助你理解它是如…...

c++day5

作业&#xff1a; 编写一个如下场景&#xff1a; 有一个英雄Hero类&#xff0c;私有成员&#xff0c;攻击&#xff0c;防御&#xff0c;速度&#xff0c;生命值&#xff0c;以及所有的set get 方法 编写一个 武器 Weapon 类&#xff0c;拥有私有成员攻击力&#xff0c;以及set …...

Deepseek 实战全攻略,领航科技应用的深度探索之旅

想玩转 Deepseek&#xff1f;这攻略别错过&#xff01;先带你了解它的基本原理&#xff0c;教你搭建运行环境。接着给出自然语言处理、智能客服等应用场景的实操方法与代码。还分享模型微调、优化技巧&#xff0c;结合案例加深理解&#xff0c;让你全面掌握&#xff0c;探索科技…...

公共数据授权运营模式研究(总体框架、主要模式及发展趋势)

本报告以公共数据运营模式为核心&#xff0c;以释放公共数据价值为目标&#xff0c;深入分析公共数据概念及特征&#xff0c;厘清公共数据运营的内涵及本质&#xff0c;提出纵深分域数据要素市场运营体系的总体思路&#xff0c;构建了一座&#xff08;一个数据底座&#xff09;…...

本地开发用ASP.NET Core Web API项目创建及测试

1. 服务端代码&#xff08;C#&#xff09; 1.1 创建ASP.NET Core Web API项目 打开Visual Studio 2022。 选择“创建新项目”。 选择“ASP.NET Core Web API”模板&#xff0c;点击“下一步”。 输入项目名称&#xff08;如OracleApi&#xff09;&#xff0c;选择项目位置&…...

【虚拟仪器技术】labview操作指南和虚拟仪器技术习题答案(一)

今天是2025年2月24日&#xff0c;画的是fate/Grand Order里面的阿尔托莉雅.卡斯特&#xff0c;武内老师的画。 目录 第1章 第2章 第3章 第4章 第5章 关注作者了解更多 我的其他CSDN专栏 毕业设计 求职面试 大学英语 过程控制系统 工程测试技术 虚拟仪器技术 可编程…...

SpringCloud系列教程:微服务的未来(二十五)-基于注解的声明队列交换机、消息转换器、业务改造

前言 在现代分布式系统中&#xff0c;消息队列是实现服务解耦和异步处理的关键组件。Spring框架提供了强大的支持&#xff0c;使得与消息队列&#xff08;如RabbitMQ、Kafka等&#xff09;的集成变得更加便捷和灵活。本文将深入探讨如何利用Spring的注解驱动方式来配置和管理队…...

LLM之论文阅读——Context Size对RAG的影响

前言 RAG 系统已经在多个行业中得到广泛应用&#xff0c;尤其是在企业内部文档查询等场景中。尽管 RAG 系统的应用日益广泛&#xff0c;关于其最佳配置的研究却相对缺乏&#xff0c;特别是在上下文大小、基础 LLM 选择以及检索方法等方面。 论文原文: On the Influence of Co…...

C#实现本地AI聊天功能(Deepseek R1及其他模型)。

前言 1、C#实现本地AI聊天功能 WPFOllamaSharpe实现本地聊天功能,可以选择使用Deepseek 及其他模型。 2、此程序默认你已经安装好了Ollama。 在运行前需要线安装好Ollama,如何安装请自行搜索 Ollama下载地址&#xff1a; https://ollama.org.cn Ollama模型下载地址&#xf…...

git 查询包含某个文件夹的步骤

步骤 1&#xff1a;拉取最新的远程分支信息 确保本地缓存的远程分支信息是最新的&#xff1a; bash 复制 git fetch --all 步骤 2&#xff1a;遍历所有远程分支并检查目标文件夹 使用 git ls-tree 检查每个分支是否包含目标文件夹。以下脚本会列出所有包含 your_folder_pa…...

微软开源神器OmniParser-v2.0本地部署教程

安装python环境 我这里是以前安装好的版本&#xff1a;python 3.11.5&#xff0c;这里不再介绍&#xff0c;有需要的可以在网上找教程。 安装Anaconda 我这里是以前安装好的版本&#xff1a;conda 23.7.4&#xff0c;这里也不再介绍&#xff0c;有需要的可以在网上找教程。 …...

解决 Git 合并冲突:当本地修改与远程提交冲突时

目录 错误原因分析 解决方法 1. 暂存本地修改并合并&#xff08;保留更改&#xff09; 2. 丢弃本地修改&#xff08;强制覆盖&#xff09; 3. 暂存修改后合并&#xff08;推荐&#xff1a;使用 git stash&#xff09; 4. 选择性合并&#xff08;手动处理冲突文件&#xf…...

VScode中Markdown PDF无法正确输出包含数学公式的pdf解决方案

在使用VScode的Markdown PDF插件时&#xff0c;可能会遇到无法正确输出包含公式的PDF文件的问题。下面为你提供一种有效的解决方案。 具体操作步骤 步骤一&#xff1a;定位模板文件 在安装Markdown PDF插件后&#xff0c;你需要找到对应的模板文件。该文件的路径通常如下&am…...

uniapp 网络请求封装(uni.request 与 uView-Plus)

一、背景 在开发项目中&#xff0c;需要经常与后端服务器进行交互&#xff1b;为了提高开发效率和代码维护性&#xff0c;以及降低重复性代码&#xff0c;便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹&#xff0c;utils文件夹内新建env.js文…...

Jtti.cc:站群服务器SEO优化建议,如何分配多IP?

站群优化的核心目标之一是尽可能通过多个网站互相引导流量&#xff0c;从而提升主站的权重。这时候&#xff0c;多IP的分配至关重要&#xff0c;因为搜索引擎会检测到同一IP下的网站之间的关联性。如果一个IP地址下有过多的相似站点&#xff0c;搜索引擎可能会认为这些站点存在…...

银行系统功能架构设计元模型

1. 元模型核心目标 ​规范性:定义功能模块的标准化描述方式,便于跨团队协作。​可复用性:抽象通用组件,减少重复开发。​可扩展性:支持未来业务创新和技术升级(如开放银行API集成)。​2. 元模型层级结构 采用分层架构模式,分为以下核心层级: ​**(1) 业务功能层** ​…...

uniapp写的h5跳转小程序

使用场景&#xff1a; 我们对接第三方支付的时候&#xff0c;对方只提供了原生小程序id和appid&#xff0c;由我们的app和h5平台跳转至小程序。 遇到的问题&#xff1a; app跳转本地正常&#xff0c;线上报错如下 解决办法&#xff1a; 需要去微信开放平台申请应用appid 易…...

DeepSeek点燃AI大模型战火:编程语言争霸,谁将问鼎“终极武器”王座?

DeepSeek点燃AI大模型战火&#xff1a;编程语言争霸&#xff0c;谁将问鼎“终极武器”王座&#xff1f; 一、DeepSeek&#xff1a;AI大模型竞赛的“导火索” 2023年&#xff0c;中国AI公司深度求索&#xff08;DeepSeek&#xff09;发布DeepSeek-R1大模型&#xff0c;凭借其超…...

游戏引擎学习第123天

仓库:https://gitee.com/mrxiao_com/2d_game_3 黑板&#xff1a;线程同步/通信 目标是从零开始编写一个完整的游戏。我们不使用引擎&#xff0c;也不依赖任何库&#xff0c;完全自己编写游戏所需的所有代码。我们做这个节目不仅是为了教育目的&#xff0c;同时也是因为编程本…...

钉钉快捷免登录 通过浏览器打开第三方系统,

一、钉钉内跳转至浏览器的实现 使用钉钉JSAPI的跳转接口 在钉钉内通过dd.biz.navigation.openLink方法强制在系统浏览器中打开链接。此方法需在钉钉开发者后台配置应用权限&#xff0c;确保应用具备调用该API的资格37。 示例代码&#xff1a; dd.ready(() > {dd.biz.navigat…...

塔能科技构建智慧隧道生态系统——城市升级改造的协同创新典范

一、智慧隧道生态系统的概念与意义 &#xff08;一&#xff09;概念解析 智慧隧道生态系统是一个涵盖多方面协同关系的复杂概念。在隧道建设方面&#xff0c;它不仅仅是简单的挖掘和结构搭建&#xff0c;而是将智能化技术融入其中&#xff0c;例如采用先进的传感器技术&#x…...

在Anaconda的虚拟环境中安装R,并在vscode中使用

在 Anaconda 的虚拟环境中使用 R&#xff0c;并且希望在 VS Code 中同时使用 Python 和 R&#xff0c;确实需要同时安装 Python 和 R。这是因为 VS Code 的 Jupyter 插件和内核管理依赖于 Python&#xff0c;而 R 则作为 Jupyter 的另一个内核运行。 以下是具体的操作步骤和逻…...

创建型模式 - 建造者模式 (Builder Pattern)

创建型模式 - 建造者模式 (Builder Pattern) 建造者模式是一种创建型设计模式&#xff0c;它将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 需求描述 在游戏开发中&#xff0c;创建一个复杂的游戏角色&#xff0c;角色具有多种属性&…...

路由追踪核心技术深度解析:Traceroute与Tracert命令实战指南(跨平台/抓包/网络安全防护)

目录 路由器是什么&#xff1f; 路由器的基本功能&#xff1a; 路由追踪技术&#xff08;Traceroute&#xff09; 路由追踪的工作原理 实现技术 路由追踪的输出示例 路由追踪的用途 traceroute 命令&#xff08;Linux 和 macOS&#xff09; 基本语法 常用选项 示例 …...

音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介

一、引言 RTP封装H.264时&#xff0c;RTP对NALU Header的nal_unit_type附加了扩展含义。 由《音视频入门基础&#xff1a;H.264专题&#xff08;4&#xff09;——NALU Header&#xff1a;forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道&#xff0c;nal_unit…...

HTTP GET 请求示例

鸿蒙操作系统&#xff08;HarmonyOS&#xff09;是华为公司自主研发的面向全场景的分布式操作系统&#xff0c;旨在为用户提供一个安全、流畅且跨设备无缝连接的体验。它支持多种终端设备&#xff0c;如智能手机、平板电脑、智能电视、汽车等&#xff0c;并实现了模块化解耦&am…...

GO 快速升级Go版本

由于底层依赖升级了&#xff0c;那我们也要跟着升&#xff0c;go老版本已经不足满足需求了&#xff0c;必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …...

ELK搭建初入

ELK搭建&#xff1a; 1、安装ElasticSearch &#xff08;用于存储收集到的日志信息&#xff09; 解压安装包 tar -xzvf elasticsearch-8.17.2-linux-x86_64.tar.gz 启动es&#xff1a;bin/elasticsearch –d&#xff08;默认端口号9200&#xff09; 浏览器输入es地址。出现…...

【redis】数据类型之Bitfields

Redis的Bitfields&#xff08;位域&#xff09;与Bitmaps一样&#xff0c;在Redis中并不是一种独立的数据类型&#xff0c;而是一种基于字符串的数据结构&#xff0c;用于处理位级别的操作。允许用户将一个Redis字符串视作由一系列二进制位组成的数组&#xff0c;并对这些位进行…...

vscode软件中引入vant组件

一、vant简介 Vant 是一个轻量、可靠的移动端组件库&#xff0c;于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本&#xff0c;并由社区团队维护 React 版本和支付宝小程序版本。 官网&#xff1a;介绍 - Vant Weapp 里面的快速上手的教程&a…...

DDR3模块、HDMI、晶振的布局原则

DDR3模块的布局原则 1.1片DDR就尽量靠近 我们CPU去摆放 2.DDRx2片&#xff0c;相对CPU需要严格对称 3.DDR滤波电容靠近管脚进行放置 4.端接匹配电阻摆放&#xff1a;串联端接电阻放置CPU端&#xff0c;并联端接电阻放置DDR端 5.地址线、控制线、时钟线都是单向传输&#xff0c…...

夜莺监控 - 边缘告警引擎架构详解

前言 夜莺类似 Grafana 可以接入多个数据源&#xff0c;查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好&#xff0c;如果由 n9e 进程去周期性查询数据并判定告警&#xff0c;那在网络链路抖动或拥塞的时候&#xff0c;告警就不稳定了。所…...

【CSP/信奥赛通关课(六):信奥赛STL专题】

CSP/信奥赛通关课&#xff08;六&#xff09;&#xff1a;信奥赛STL专题 课程简介&#xff1a; 讲解信奥赛C中的STL核心组件&#xff1a;容器、迭代器、算法等&#xff0c;分析重点案例&#xff0c;让学生在实践的过程中熟练掌握信奥赛C相关的STL重要知识点。 课程教学目标&…...

【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)

必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。云边有个稻草人-CSDN博客 对于本节我们要提前掌握前一节课堆的相关实现才能学好本次的知识&#xff0c;一定要多画图多敲代码看看实现的效果是啥&#xff08;Crazy&#xff01;&#xff09;开始吧&#xff01; …...

SSL/TLS 协议、SSL证书 和 SSH协议 的区别和联系

下面是 SSL/TLS 协议、SSL证书 和 SSH协议 的区别和联系&#xff0c;包含它们的英文全称和中文全称&#xff1a; 属性SSL/TLS 协议SSL证书SSH 协议英文全称Secure Sockets Layer / Transport Layer SecuritySecure Sockets Layer CertificateSecure Shell Protocol中文全称安全…...

数据结构与算法-图论-最短路和其他的结合

介绍 最短路算法常与深度优先搜索&#xff08;DFS&#xff09;、动态规划&#xff08;DP&#xff09;、二分答案、拓扑排序等算法结合使用&#xff1a; - 最短路与DFS结合&#xff1a;在一些图的路径问题中&#xff0c;当需要访问特定的多个结点&#xff0c;且数据范围较小时…...