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

【回眸】香橙派Zero2 超声波模块测距控制SG90舵机转动

前言

知识准备

超声波模块时序图

gettimeofday()函数作用

gettimeofday()函数原型

 tv结构体

获取当前系统时间与格林威治时间的时间差

获取香橙派数10万秒花费的时间

使用超声波模块获取到障碍物距离

SG90舵机模块

舵机模块的作用

舵机模块方波时序图

 舵机模块工作原理

 知识准备

setitimer时间函数原型

使用setitimer函数实现1秒钟打印一次hello

连接舵机和香橙派 

舵机控制与PWM方波关系

后记

前言

这个系列的上一篇文章介绍了香橙派的基础功能和作用,还用通过代码让蜂鸣器响起来。

本篇博文介绍如何使用香橙派使超声波模块完成测距功能。

知识准备

超声波模块时序图

通过 距离 = 速度 * 时间这个公式能够得到与障碍物的距离,注意障碍物不能太小,也最好比较平整,避免有误差。 

在写测距代码之前,先了解一下Linux下获取时间的函数 gettimeofday()

gettimeofday()函数作用

作用:获取当前系统时间与格林威治(GTM/UTC)的时间差

优点:可以精确到微秒级别且系统调用小

gettimeofday()函数原型

#include<sys/time.h>
int gettimeofday(struct timeval* tv, struct timezone* tz);

 tv结构体

struct timeval 
{time_t tv_sec;suseconds_t tv_usec;
}

tz在早期是用来获取时区,目前已经废弃,设置为NULL即可。

获取当前系统时间与格林威治时间的时间差

新建一个c文件命名为time,使用该函数获取当前系统时间与格林威治时间的时间差,用秒和微妙分别表示。 

time.c

#include <stdio.h>
#include <sys/time.h>
int main(){struct timeval tv;gettimeofday(&tv,NULL);printf("sec = %ld,usec = %ld\n",tv.tv_sec,tv.tv_usec);return 0;
}

获取香橙派数10万秒花费的时间

 再新建一个c文件命名为timeCnt10.c,预期效果是返回香橙派数10万秒花费的时间,单位是微秒

#include <stdio.h>
#include <sys/time.h>
void cntTest(){int i ,j;for(i=0;i<100;i++){for(j=0;j<1000;j++);}
}int main(){struct timeval timestop;struct timeval timestart;long diffTime;gettimeofday(&timestart,NULL);cntTest();gettimeofday(&timestop,NULL);diffTime = 1000000*(timestop.tv_sec - timestart.tv_sec) + (timestop.tv_usec - timestart.tv_usec);printf("H616 count 10w S use time =  %ld us\n",diffTime);return 0;
}

可以看到每次运行的结果都不一样,基本上稳定在1460左右,说明香橙派的资源每次需要1460毫秒左右 。

使用超声波模块获取到障碍物距离

 echo.c

注意这里的diffTime 单位是微秒

dis的单位是厘米

#include <stdio.h>
#include <sys/time.h>
#include <wiringPi.h>
#include <unistd.h>
#include <stdlib.h>#define Trig 0
#define Echo 1double getDistance()
{struct timeval start;struct timeval stop;long diffTime;double dis;pinMode(Trig, OUTPUT);pinMode(Echo, INPUT);digitalWrite(Trig, LOW);usleep(5);digitalWrite(Trig, HIGH);usleep(10);digitalWrite(Trig, LOW);while (!(digitalRead(Echo)));gettimeofday(&start, NULL);while (digitalRead(Echo));gettimeofday(&stop, NULL);diffTime = 1000000 * (stop.tv_sec - start.tv_sec) + (stop.tv_usec - start.tv_usec);dis = ((double)diffTime / 1000000 * 34000 / 2);return dis;
}int main()
{double dis;if (wiringPiSetup() == -1){fprintf(stderr, "error:%s", "initWiringPi error");exit(-1);}while (1){dis = getDistance();printf("dis = %lf\n", dis);usleep(500000);}return 0;
}

触发的引脚从超声波模块连接到物理3PIN脚(靠左一列的第二行针脚) 

echo的引脚从超声波模块连接到物理5PIN脚(靠左一列的第三行针脚) 

VCC的线需要连接到5V的物理口,如果接到3.3V的物理口则无法正常驱动。

GND的线需要接到任意GND的物理口。

SG90舵机模块

舵机模块的作用

舵机模块的作用是通过编程可以将塑料齿轮转不同的角度,用于精确控制角度位置。

舵机模块方波时序图

 舵机模块工作原理

向SG90舵机模块的黄色线输入PWM方波,不同占空比对应着不同角度。

SG90 黄色线输入频率是50HZ,周期是20ms的方波。

0.5ms-------------0度; 2.5% 对应函数中CCRx为5

1.0ms------------45度; 5.0% 对应函数中CCRx为10

1.5ms------------90度; 7.5% 对应函数中CCRx为15

2.0ms-----------135度; 10.0% 对应函数中CCRx为20

2.5ms-----------180度; 12.5% 对应函数中CCRx为25

这里舵机是否能够转动180度还是要具体看硬件是否支持。

 知识准备

在实现SG90功能开发之前,还需要了解一个时间函数。

setitimer时间函数原型

int setitimer(int which,const struct itimerval *new_value,struct itimerval *old_value);

 new_value和old_value的数据结构为:

struct itimerval {struct timeval it_interval; /* Interval for periodic timer */struct timeval it_value;    /* Time until next expiration */
};struct timeval {time_t      tv_sec;         /* seconds */suseconds_t tv_usec;        /* microseconds */
};

使用setitimer函数实现1秒钟打印一次hello

设置的时间单位是500微秒,需要2000个500微秒才是1秒

clock.c

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>static int i;void signal_handler(int signum)
{i++;if (i == 2000){printf("hello\n");i = 0;}
}int main()
{int res = 0;struct itimerval itv;// 设定定时时间itv.it_interval.tv_sec = 0;itv.it_interval.tv_usec = 500;// 设定开始生效,启动定时器的时间itv.it_value.tv_sec = 1;itv.it_value.tv_usec = 0;// 设定定时方式res = setitimer(ITIMER_REAL, &itv, NULL);if (res == -1){perror("error\n");exit(-1);}// 信号处理signal(SIGALRM, signal_handler);while (1);return 0;
}

连接舵机和香橙派 

 按照上图连接舵机和香橙派

注意SG90模块也和超声波模块一样,需要一个5V的电压,所以VCC需要连接5V的IO

GND也要选GND的IO

SG90Pin在代码里是5,对应物理PIN口是11

像上图示例这样连接舵机和树莓派,注意接地和VCC如果接反了会烧掉舵机。另外舵机的线是连在一起的,可以剪开杜邦线嫁接一下再用电工胶带绑一下连接处。

或者使用公对母杜邦线衔接一下也可以。

舵机控制与PWM方波关系

舵机的控制一般需要一个20ms 左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms 范围内的角度控制脉冲部分。以180 度角度伺服为例,那么对应的控制关系是这样的:

      0.5ms ---------- 0 °;

      1.0ms ---------- 45 °;

      1.5ms ---------- 90 °;

      2.0ms ---------- 135 °;

      2.5ms ---------- 180 °;

方波的总周期是20ms,设置的时间单位是500微秒,就是40个单位为20ms,所以当i等于1时,舵机角度为0°,当i等于2时,舵机角度为45°,当i等于3时,舵机角度为90°,当i等于4时,舵机角度为135°,当i等于5时,舵机角度为180°。

SG90.c

#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <signal.h>
#include <wiringPi.h>#define SG90Pin 5static int i = 0;
static int angle = 0;void signal_handler(int signum)
{if (i <= angle){digitalWrite(SG90Pin, HIGH);}else{digitalWrite(SG90Pin, LOW);}if (i == 40){i = 0;}i++;
}int main()
{int res;struct itimerval itv;wiringPiSetup();pinMode(SG90Pin, OUTPUT);// 设定定时时间itv.it_interval.tv_sec = 0;itv.it_interval.tv_usec = 500;// 设定开始生效,启动定时器的时间itv.it_value.tv_sec = 1;itv.it_value.tv_usec = 0;// 设定定时方式res = setitimer(ITIMER_REAL, &itv, NULL);if (res == -1){perror("error\n");exit(-1);}// 信号处理signal(SIGALRM, signal_handler);while (1){printf("Please input angle: 1-0   2-45  3-90  4-135  5-180\n");scanf("%d", &angle);}return 0;
}

预期看到的效果是输入1---5,可以让舵机转向不同的方向,最终结果也是符合预期的。

后记

要是在上大学的时候搞这个还有点小困难,工作几年以后发现简单不少,时间是最好的老师?? 

相关文章:

【回眸】香橙派Zero2 超声波模块测距控制SG90舵机转动

前言 知识准备 超声波模块时序图 gettimeofday()函数作用 gettimeofday()函数原型 tv结构体 获取当前系统时间与格林威治时间的时间差 获取香橙派数10万秒花费的时间 使用超声波模块获取到障碍物距离 SG90舵机模块 舵机模块的作用 舵机模块方波时序图 舵机模块工作原…...

RabbitMQ 添加新用户和配置权限

以下是关于使用 sudo rabbitmqctl add_user 命令创建新用户的详细示例&#xff0c;同时包含创建用户后进行权限设置、角色设置等相关操作的示例。 1. 前提条件 确保你的 RabbitMQ 服务已经正常运行&#xff0c;并且你具有执行 sudo 命令的权限。 2. 创建新用户 假设我们要创…...

【前缀和】矩阵区域和

文章目录 1314. 矩阵区域和解题思路1314. 矩阵区域和 1314. 矩阵区域和 ​ 给你一个 m x n 的矩阵 mat 和一个整数 k ,请你返回一个矩阵 answer ,其中每个 answer[i][j] 是所有满足下述条件的元素 mat[r][c] 的和: i - k <= r <= i + k, j - k <= c <= j + k …...

编程日志4.25

栈的stl模板 可直接用<stack>库进行调用 #include<iostream> #include<stack>//栈的模板库 using namespace std; int main() { stack<int> intStk;//整数 栈 stack<double> doubleStk;//浮点数 栈 intStk.push(1); intStk.pu…...

【中间件】brpc之工作窃取队列

文章目录 BRPC Work Stealing Queue1 核心功能2 关键数据结构2.1 队列结构2.2 内存布局优化 3 核心操作3.1 本地线程操作&#xff08;非线程安全&#xff09;3.2 窃取操作&#xff08;线程安全&#xff09; 4 设计亮点4.1 无锁原子操作4.2 环形缓冲区优化4.3 线程角色分离 5 性…...

用OMS从MySQL迁移到OceanBase,字符集utf8与utf8mb4的差异

一、问题背景 在一次从MySQL数据库迁移到OceanBase的MySQL租户过程中&#xff0c;出现了一个转换提示&#xff1a; [WARN][CONVER] he table charset:utf8->utf8mb4&#xff0c; 你可能会担心这种转换可能导致字符集不兼容的问题。但通过查阅相关资料可知&#xff0c;utf8m…...

知乎前端面试题及参考答案

Webpack 和 Vite 的区别是什么? 构建原理: Webpack 是基于传统的打包方式,它会将所有的模块依赖进行分析,然后打包成一个或多个 bundle。在开发过程中,当代码发生变化时,需要重新构建整个项目,构建速度会随着项目规模的增大而变慢。Vite 利用了浏览器对 ES 模块的支持,…...

项目中为什么选择RabbitMQ

当被问及为什么选择某种技术时&#xff0c;应该结合开发中的实际情况以及类似的技术进行分析&#xff0c;适合的技术才是最好的。 在项目中为什么选择RabbitMQ 作为消息中间件&#xff0c;主要可以基于以下几方面进行分析&#xff1a; 1. 可靠性 消息持久化&#xff1a;Rabbi…...

深入解析二维矩阵搜索:LeetCode 74与240题的两种高效解法对比

文章目录 [toc]**引言** **一、问题背景与排序规则对比****1. LeetCode 74. 搜索二维矩阵****2. LeetCode 240. 搜索二维矩阵 II** **二、核心解法对比****方法1&#xff1a;二分查找法&#xff08;适用于LeetCode 74&#xff09;****方法2&#xff1a;线性缩小搜索范围法&…...

Qt案例 以单线程或者单生产者多消费者设计模式实现QFTP模块上传文件夹功能

前文:Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器 已经介绍了Qt环境下搭建FTP服务器或者使用QFTP上传的方式示例, 这里主要介绍下使用QFTP模块上传整个文件夹的案例示例。 目录导读 前因后果单线程处理1.定义FTPFolderUpload 继承 QT…...

含锡废水回收率提升技术方案

一、预处理环节优化 物理分离强化 采用双层格栅系统&#xff08;孔径1mm0.5mm&#xff09;拦截悬浮物&#xff0c;配套旋流分离器去除密度>2.6g/cm的金属颗粒&#xff0c;使悬浮物去除率提升至85%。增设pH值智能调节模块&#xff0c;通过在线pH计联动碳酸钠/氢氧化钠投加系…...

第八章,STP(生成树协议)

广播风暴----广播帧在二层环路中形成逆时针或顺时针的转动的环路&#xff0c;并且无限循环&#xff0c;最终导致设备宕机&#xff0c;网络瘫痪。 MAC地址表的翻摆&#xff08;漂移&#xff09;----同一个数据帧&#xff0c;顺时针接收后将记录MAC地址及接口的对应信息&#xff…...

《面向对象程序设计-C++》实验五 虚函数的使用及抽象类

程序片段编程题 1.【问题描述】 基类shape类是一个表示形状的抽象类&#xff0c;area( )为求图形面积的函数。请从shape类派生三角形类(triangle)、圆类&#xff08;circles&#xff09;、并给出具体的求面积函数。注&#xff1a;圆周率取3.14 #include<iostream> #in…...

PCIe - ZCU106(RC) + KU5P(EP) + 固化

目录 1. 简介 1.1 Data Mover 1.2 描述符 2. ZCU102 2.1 Ubuntu OS 2.2 USB Host 2.2.1 连接拓扑 2.2.2 设备类型 2.2.3 USB 跳帽设置 2.3 无线网卡 2.4 PCIe Info 2.4.1 Diagram 2.4.2 lspci -tv 2.4.3 lspci -v 2.4.2.1 设备基本信息 2.4.2.2 控制与状态寄存…...

网络编程核心技术解析:从Socket基础到实战开发

网络编程核心技术解析&#xff1a;从Socket基础到实战开发 一、Socket编程核心基础 1. 主机字节序与网络字节序&#xff1a;数据传输的统一语言 在计算机系统中&#xff0c;不同架构对多字节数据的存储顺序存在差异&#xff0c;而网络通信需要统一的字节序标准&#xff0c;这…...

SQL注入总结

一.sql注入 原理&#xff1a;当一个网站存在与用户交互的功能&#xff08;如登录表单、搜索框、评论区等&#xff09;&#xff0c;并且用户输入的数据未经充分过滤或转义&#xff0c;直接拼接到后台数据库查询语句中执行时&#xff0c;就可能引发SQL注入漏洞。攻击者可以通过构…...

conda 安装cudnn

通过 Conda 安装 cuDNN 确保你有 NVIDIA GPU 和 CUDA Toolkit&#xff1a;首先&#xff0c;确保你的系统上安装了 NVIDIA GPU 和 CUDA Toolkit。你可以通过运行以下命令来检查 CUDA 是否已安装&#xff1a;nvcc --version 如果没有安装 CUDA&#xff0c;你需要先从 NVIDIA CU…...

强啊!Oracle Database 23aiOracle Database 23ai:使用列别名进行分组排序!

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 从 Oracle Database 23ai 开始&#xff0c;您可以在 GROUP BY 和 HAVING 子句中直接使用列别名。此功能在早期版本的 Oracle Database 中不…...

RAG 2.0 深入解读

一、Introduction 过去一年可谓是RAG元年&#xff0c;检索增强生成技术迅速发展与深刻变革&#xff0c;其创新与应用已深刻重塑了大模型落地的技术范式。站在2025年&#xff0c;RAG不仅突破了早期文本处理的局限&#xff0c;更通过多模态融合、混合检索优化和语义鸿沟跨越等突…...

Excel Vlookup

VLOOKUP(A2, Sheet2!A:B, 2, 0) 代表的是检查A2,匹配源是sheet2表AB两列 Sheet2!A:B&#xff1a;指定要在其中查找数据的范围&#xff0c;这里是 Sheet12中的 A 列和 B 列&#xff0c;A 列是查找的依据列&#xff0c;B 列是要返回值的列。2&#xff1a;表示要返回查找区域中的…...

css媒体查询及css变量

媒体查询是 CSS 样式表最重要的功能之一&#xff0c;所谓媒体查询指的就是根据不同的媒体类型&#xff08;设备类型&#xff09;和条件来区分各种设备&#xff08;例如&#xff1a;电脑、手机、平板电脑、盲文设备等&#xff09;&#xff0c;并为它们分别定义不同的 CSS 样式。…...

CSS网格布局

网格布局将元素占用的空间划分为二维格子&#xff0c;下级元素放置在格子所在的位置上。划分格子的元素叫做网格容器&#xff0c;其 display 属性是 grid &#xff08;块元素&#xff09;或 inline-grid &#xff08;内联块元素&#xff09;。网格容器的下级元素叫做网格项。容…...

Windows远程连接MySQL报错,本地navicat能连接MySQL

一、报错 telnet 119.87.111.79 3306​​“无法打开到主机的连接。在端口 3306: 连接失败”​​ 表明无法通过 TCP 协议连接到目标服务器的 3306 端口。 二、目的 &#xff08;1&#xff09;​​Telnet 测试的目的​​ Telnet 仅用于测试 ​​TCP 端口是否开放​​&#xff…...

Github打不开怎么办?

国内无法打开github&#xff0c;使有watt toolkit一键加速即可打开。 加速器 加速器直接加速Github原站&#xff0c;在开发者使用或者需要登录账号时非常有效 Watt Toolkit&#xff08;原Steam&#xff09; 官网地址&#xff1a;Watt Toolkit 一、进入官网后&#xff0c;点…...

亿级流量系统架构设计与实战(四)

本章关键词 : 读 / 写分离 、 数据缓存 、 缓存更新 、 CQRS 、 数据分片 、 异步写。 高并发架构设计的要点 形成高并发系统的必要条件 高性能、高可用、可扩展。 高性能: 性能代表一个系统的并行处理能力,在同样的硬件设备条件下 , 性能越高 , 越能节约硬件资源。高可…...

Java基础问题——八股盛宴 | 3w字分享

目录 面向对象与面向过程的区别&#xff1f; Java面向对象有哪些特征&#xff0c;如何应用&#xff1f; 介绍下Java中的四种引用&#xff1f; Java中创建对象有几种方式&#xff1f; Java中的序列化和反序列化是什么&#xff1f; 什么是Java中不可变类&#xff1f; Java…...

保障企业的数据安全需要做什么?

守护企业数据安全&#xff0c;犹如构筑一座固若金汤的城堡&#xff0c;需要从技术壁垒、管理护城河、流程吊桥和人员守卫等多维度精心布局&#xff0c;打造环环相扣的立体防御体系。我们从以下关键项分析&#xff1a; 一、技术层面 数据加密 对敏感数据&#xff08;如客户信息、…...

Flutter开发IOS蓝牙APP的大坑

Core Bluetooth 框架限制&#xff1a;iOS 的 Core Bluetooth 框架存在限制&#xff0c;如果指定的特征配置同时允许通知&#xff08;Notifications&#xff09;和指示&#xff08;Indications&#xff09;&#xff0c;调用相关方法设置通知值时&#xff0c;默认仅会开启通知功能…...

LeetCode 解题思路 45(分割等和子集、最长有效括号)

解题思路&#xff1a; dp 数组的含义&#xff1a; 在数组中是否存在一个子集&#xff0c;其和为 i。递推公式&#xff1a; dp[i] | dp[i - num]。dp 数组初始化&#xff1a; dp[0] true。遍历顺序&#xff1a; 从大到小去遍历&#xff0c;从 i target 开始&#xff0c;直到 …...

AI Agent 入门指南:从 LLM 到智能体

AI. AI. AI. 最近耳朵里是不是总是被这些词轰炸&#xff1f;特别是“Agent”、“AI Agent”、“智能体”、“Agentic”…… 感觉一夜之间&#xff0c;AI 就从我们熟悉的聊天框里蹦出来&#xff0c;要拥有“独立思考”和“自主行动”的能力了&#xff1f; 说实话&#xff0c;一…...

高级java每日一道面试题-2025年5月02日-基础篇[反射篇-编码]-使用反射,获取Class对象

如果有遗漏,评论区告诉我进行补充 面试官: 编写代码通过三种方式&#xff08;类名.class、对象.getClass()、Class.forName()&#xff09;获取java.util.ArrayList的Class对象。 我回答: 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#…...

【bug】fused_bias_act_kernel.cu卡住没反应

简述 在推理人脸修复face restoration算法 GPEN的时候&#xff0c;发现有时候fused_bias_act_kernel.cu卡住没反应。 解决 清理下缓存&#xff0c;让程序自己再编译下...

小游戏(2)扫雷游戏

一、简述 鸽子的时间太长了&#xff0c;其实学完数组和函数就应该搞出来这个丐版的小游戏了&#xff0c;不耽误&#xff0c;反正总归是轮到了&#xff0c;嘻嘻。 二、依旧菜单\. 我们这里写的是一个丐版的扫雷游戏&#xff0c;难度就固定了&#xff0c;所以菜单写起来就是玩游…...

如何在vscode中set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`

1.打开工作区设置文件 在 VS Code 中通过文件 -> 首选项 -> 设置&#xff0c;接着在设置窗口的右上角点击打开设置&#xff08;JSON&#xff09;&#xff0c;这会打开settings.json文件。 2.添加环境变量设置 "terminal.integrated.env.linux": { "TF_EN…...

leetcode 24. 两两交换链表中的节点

题目描述 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next…...

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT

微调大模型如何准备数据集——常用数据集,Alpaca和ShareGPT 数据集准备常用数据集自定义数据集AlpacaShareGPT数据集准备 常用数据集 预训练数据集 Wiki Demo (en)RefinedWeb (en)RedPajama V2 (en)Wikipedia (en)Wikipedia (zh)Pile (en)...

使用Homebrew下载配置git和连接GitHub(Mac版)

本文详细介绍了在M系列Mac上安装Homebrew并配置Git的过程&#xff0c;包括git的下载、设置全局用户名和邮箱、生成SSH密钥、添加GitHubSSH密钥以及终端验证。这些步骤有助于用户顺利进行协同开发。 一、下载git 1、终端输入一下命令 brew install git2、这时下载完成 二、配…...

电子电器架构 --- 网关转发时延解析

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...

shell-流程控制-循环-函数

1. 2. 3.获取当前目录下的普通文件的文件名作为变量列表打印输出 4.打印出下面语句中字符数不大于6的单词 rabbit is favorite to eat cabbage 5.Shell允许用户指定for语句的步长。当用户需要另外指定步长时 6.批量创建用户&#xff1a; 用户名以test开头&#xff0c;按数字序号…...

Paramiko 性能优化详解

1. 复用连接&#xff1a;减少 SSH 连接开销 SSH 连接的建立涉及 TCP 握手、密钥交换、身份认证等步骤&#xff0c;频繁创建连接会显著降低性能。复用连接是核心优化手段。 优化方法 手动创建 Transport 对象并复用通过同一 Transport 执行多种操作&#xff08;命令、SFTP、端…...

代码随想录图论part03

第十一章&#xff1a;图论part03 孤岛的总面积 &#xff08;深搜&#xff09; 代码随想录 孤岛问题&#xff1a;先处理边缘岛在处理孤岛 沉没孤岛 &#xff08;广搜&#xff09; 代码随想录 水流问题 代码随想录 目的&#xff1a;找水源 思路;逆向思考&#xff0c;找两…...

树上背包学习笔记

树上背包&#xff0c;顾名思义&#xff0c;就是在树上跑背包。每日顾名思义 Q&#xff1a;那么到底为什么要树上跑背包 dp 呢&#xff1f; A&#xff1a;因为我们到现在学的背包 dp 还是属于较浅的一类&#xff0c;什么 01 背包、完全背包还是多重背包&#xff0c;但是如果这…...

CPU:为什么Ryzen 7000系列处理器PCIe通道总数是28,而可用的通道数是24?

AMD Ryzen 7000系列&#xff08;Zen 4架构&#xff09;处理器的 28条PCIe 5.0通道 中&#xff0c;有 4条固定用于连接主板芯片组&#xff08;如X670/B650&#xff09;&#xff0c;剩余的 24条直接分配给用户设备。以下是具体分配逻辑&#xff1a; 1. PCIe通道的总分配 24条直连…...

OpenCV 图形API(80)图像与通道拼接函数-----仿射变换函数warpAffine()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 对图像应用仿射变换。 函数 warpAffine 使用指定的矩阵对源图像进行变换&#xff1a; dst ( x , y ) src ( M 11 x M 12 y M 13 , M 21 x M…...

巧记英语四级单词 Unit7-下【晓艳老师版】

navigate v. 航行&#xff0c;航空 那六扇门gatevibrate v.颤抖&#xff0c;抖动 男生早上起来看到六个文胸在那挂着&#xff0c;春心荡漾virtual a.事实上&#xff0c;实际上的 发音“龌龊”&#xff1b;通常lyvia prep.经过 a想成小乌龟&#xff0c;兔子想到河对面吃草&am…...

idea使用lombok错误,找不到符号,明明编译没问题,运行报错

lombok使用出现的问题 问题找不到方法 经常遇到这样的小伙伴看到这个是不是一头雾水&#xff0c;明明我编译没有我问题&#xff0c;运行就出现问题&#xff0c;真的很生气。 下面介绍解决这个问题的几种方法。 开启 annotation processing 开启之后重启&#xff0c;试试有…...

Transformer面经

请问你对Transformer有什么了解 简要回答的话可以这样&#xff1a; Transformer是一种基于自注意力机制的神经网络架构&#xff0c;它主要用于处理序列数据&#xff0c;如自然语言处理。 核心的组件有&#xff1a;自注意力机制&#xff08;计算序列中每个元素与其他元素的相…...

学习Python的第二天之网络爬虫

30岁程序员学习Python的第二天之网络爬虫的信息提取 BeautifulSoup库 地址&#xff1a;https://beautifulsoup.readthedocs.io/zh-cn/v4.4.0/ 1、BeautifulSoup4安装 在windows系统下通过管理员权限运行cmd窗口 运行pip install beautifulsoup4 测试实例 import requests…...

【基础】Python包管理工具uv使用教程

一、uv简介 uv 是由 Astral&#xff08;前身为 Basis&#xff09;团队开发的 Python 包安装器和解析器&#xff0c;完全使用 Rust 语言编写。与传统 Python 工具不同&#xff0c;uv 将多个工具的功能整合到一个高性能的解决方案中&#xff0c;旨在提供更现代、更高效的 Python…...

【十五】Mybatis动态SQL实现原理

Mybatis动态SQL实现原理 目录 Mybatis动态SQL实现原理 概述 动态 SQL 实现原理 总结 概述 每天日常开发都在使用mybatis&#xff0c;但是很多人并没有花心思去理解mybatis的实现原理&#xff0c;一直处于使用阶段&#xff0c;程序员的使命是改变世界&#xff0c;这一点可能…...