32单片机从入门到精通之数据处理——传感器接口(十二)

无论遇到什么困难和挑战,我们都要坚定信心,勇往直前。成功的路上充满了艰辛和磨砺,但正是这些困难使我们变得更加坚强和成熟。在人生的道路上,我们要时刻提醒自己,不管面对多大的困难,都要勇敢地迎接,坚持下去。努力奋斗的过程并不容易,但只有经历了努力和汗水,才能收获更多的成功和成果。让我们鼓起勇气,迎接挑战,相信自己的实力,坚信只要不放弃,就一定能够实现梦想。在逆境中崛起,不断超越自己,这就是成功的真谛。无论遇到什么困难,我们都要坚信自己的能力,不轻言放弃。困难是人生路上的一道坎,只有越过了它,我们才能迎来更美好的未来。励志不仅仅是一种口号,更是一种信念和行动,相信自己,你就已经成功了一半。所以,让我们保持积极的心态,勇往直前,坚持不懈,一定能够走向成功的巅峰!

目录

上一张试卷讲解

一、选择题(每题2分,共40分)

二、简答题(每题10分,共30分)

三、编程题(每题15分,共30分)

知识点和代码详解

一、传感器接口与数据读取

1. 温度传感器(以DHT22为例)

2. 加速度计(以ADXL345为例)

二、模拟信号输入处理

三、PWM输出控制

试卷

一、选择题(每题2分,共20分)

二、简答题(每题10分,共30分)

三、编程题(每题15分,共30分)


上一张试卷讲解

一、选择题(每题2分,共40分)

  1. B. 波特率
    UART通信中,确保两端设备同步传输的关键参数是波特率。它定义了数据传输的速度。

  2. C. 起始条件
    在I2C通信中,起始条件用于标识数据传输的开始。

  3. C. SCK
    SPI通信中,SCK(串行时钟)引脚负责控制时钟信号,协调主从设备之间的数据交换。

  4. D. MQTT
    MQTT是一种发布/订阅模式的消息协议,不是基于点对点的通信方式。

  5. C. 可靠的数据传输
    TCP/IP模型中的传输层主要提供可靠的数据传输服务,例如通过TCP协议实现。

  6. B. 资源受限的IoT设备
    MQTT协议设计用于资源受限的IoT设备,因为它具有轻量级的特点。

  7. A. 指示数据帧的结束
    停止位在UART通信中用来指示一个数据帧的结束。

  8. A. 设备地址
    I2C总线上的每个设备都有唯一的地址,以区分彼此。

  9. B. 同时发送和接收数据
    在SPI通信中,全双工模式允许同时进行数据的发送和接收。

  10. B. 会话层
    会话层不属于TCP/IP四层模型;该模型包括应用层、传输层、网络层和链路层。

  11. B. 最多一次传递
    MQTT协议中的QoS级别0表示最多一次传递,即消息可能丢失但不会重复。

  12. B. 接收完成中断
    实现UART通信时,通常使用接收完成中断来处理接收到的数据。

  13. B. 从设备
    I2C协议中的ACK信号通常由从设备发出,确认已经成功接收到数据。

  14. C. 需要外部时钟源
    SPI通信不需要外部时钟源,因为时钟是由主设备提供的。

  15. C. 网络层
    IP协议位于TCP/IP栈的网络层,负责路由选择等任务。

  16. A. MQTTClient_connect
    MQTT客户端连接到服务器时使用的函数通常是MQTTClient_connect

  17. D. 简单硬件连接
    I2C通信的一个优势是只需要两条线(SDA和SCL),因此硬件连接较为简单。

  18. C. 选择从设备
    在SPI通信中,SS(片选)引脚的主要作用是选择哪个从设备参与当前通信。

  19. C. 可靠的数据传输
    相对于UDP,TCP的主要优势在于提供了可靠的、面向连接的数据传输。

  20. B. 继续接收离线消息
    MQTT的持久会话特性使得客户端断开后还能继续接收离线期间的消息。

二、简答题(每题10分,共30分)

  1. 描述UART通信的基本原理,并说明波特率设置的重要性

     

    UART(通用异步收发传输器)通信是一种串行通信方式,其中两个设备之间通过发送和接收一系列比特来交换信息。通信过程中,发送方将并行数据转换为串行格式发送出去,接收方则执行相反的操作。为了保证正确的数据传输,双方必须事先约定好相同的波特率(即每秒传输的比特数)。波特率设置的重要性在于,它决定了通信速度以及两端设备如何同步地读取和写入数据。如果波特率不匹配,可能会导致数据误读或丢失。

  2. 比较I2C和SPI两种通信协议的主要区别,包括硬件连接、数据传输方式和应用场景

    • 硬件连接:I2C仅需两根线(SDA和SCL)即可实现多主多从架构;而SPI需要至少四根线(MOSI, MISO, SCK, SS),并且每次只能有一个主设备。
    • 数据传输方式:I2C采用半双工模式,同一时间内只能单向传输数据;SPI则是全双工模式,可以同时双向传输数据。
    • 应用场景:I2C适合于低速、简单的通信场景,如传感器读取;SPI更适合高速传输需求的应用,如LCD显示驱动、音频数据传输等。
  3. 解释TCP/IP模型的四层结构及其各层的主要功能

    • 应用层:负责应用程序间的通信,例如HTTP、FTP等协议。
    • 传输层:提供端到端的通信服务,如TCP提供可靠的流控传输,UDP提供无连接的服务。
    • 网络层:负责逻辑寻址与路由选择,IP协议在此层工作,确保数据包能够正确到达目的地。
    • 链路层:管理物理层之上的一系列操作,如MAC地址解析、错误检测等,保障数据在本地网络内的传输。

三、编程题(每题15分,共30分)

  1. 编写一段C语言代码,初始化一个UART接口并实现发送字符串“Hello, World!”的功能。假设使用STM32微控制器
#include "stm32f4xx_hal.h"UART_HandleTypeDef huart2;void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART2_UART_Init(void);int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART2_UART_Init();char *msg = "Hello, World!\r\n";HAL_UART_Transmit(&huart2, (uint8_t *)msg, strlen(msg), HAL_MAX_DELAY);while (1){// 主循环等待}
}static void MX_USART2_UART_Init(void)
{huart2.Instance = USART2;huart2.Init.BaudRate = 115200;huart2.Init.WordLength = UART_WORDLENGTH_8B;huart2.Init.StopBits = UART_STOPBITS_1;huart2.Init.Parity = UART_PARITY_NONE;huart2.Init.Mode = UART_MODE_TX_RX;huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart2.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart2) != HAL_OK){Error_Handler();}
}void Error_Handler(void)
{while(1){// 错误处理}
}
  1. 使用Paho-MQTT库编写一个简单的MQTT客户端程序,该程序能够连接到指定的MQTT服务器,订阅一个主题,并打印接收到的消息
import paho.mqtt.client as mqtt# 定义回调函数-连接上服务器后触发
def on_connect(client, userdata, flags, rc):print("Connected with result code "+str(rc))client.subscribe("test/topic")# 定义回调函数-收到消息后触发
def on_message(client, userdata, msg):print(f"Received message: {msg.payload.decode()} from topic: {msg.topic}")client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message# 连接到MQTT服务器
client.connect("broker.hivemq.com", 1883, 60)# 开始循环监听
client.loop_forever()

以上代码段展示了如何配置和初始化STM32的UART接口以发送字符串,以及如何利用Python的Paho-MQTT库创建一个简单的MQTT客户端。请注意,在实际项目中还需要根据具体的硬件平台和开发环境做适当的调整。

知识点和代码详解

接下来我将详细讲解如何读取温度、湿度、加速度计等传感器的数据,并处理模拟信号输入以及控制PWM输出。同时,我会提供详细的代码示例和注释,帮助你更好地理解每个部分的工作原理。

一、传感器接口与数据读取

1. 温度传感器(以DHT22为例)

知识点讲解:

  • DHT22 是一种数字温湿度传感器,它可以通过单总线协议与微控制器通信。
  • 使用Arduino平台上的DHT库可以简化对DHT22的操作,该库提供了易于使用的API来读取温度和湿度值。

代码详解及注释:

#include <DHT.h> // 包含DHT传感器库// 定义DHT22连接的引脚编号以及传感器类型
#define DHTPIN 2          // DHT22 数据引脚连接到数字引脚2
#define DHTTYPE DHT22     // 指定使用的是DHT22型号DHT dht(DHTPIN, DHTTYPE); // 创建DHT对象void setup() {Serial.begin(9600); // 初始化串口通信,波特率为9600dht.begin();        // 初始化DHT传感器
}void loop() {// 从DHT22读取湿度和温度值float humidity = dht.readHumidity();float temperature = dht.readTemperature();// 如果读取失败,则打印错误信息并返回if (isnan(humidity) || isnan(temperature)) {Serial.println("Failed to read from DHT sensor!");return;}// 打印湿度和温度值到串口监视器Serial.print("Humidity: ");Serial.print(humidity);Serial.print("%  Temperature: ");Serial.print(temperature);Serial.println("°C");delay(2000); // 等待两秒再读取新数据
}

注释说明:

  • #include <DHT.h>:包含用于操作DHT传感器的库文件。
  • #define DHTPIN 2 和 #define DHTTYPE DHT22:定义了DHT22传感器连接的引脚号及其类型。
  • DHT dht(DHTPIN, DHTTYPE):实例化了一个名为dht的对象,用来表示连接在指定引脚上的DHT22传感器。
  • Serial.begin(9600):初始化串行通信,设置波特率为9600,以便能够通过串口监视器查看结果。
  • dht.begin():初始化DHT传感器,准备开始读取数据。
  • float humidity = dht.readHumidity(); 和 float temperature = dht.readTemperature();:分别调用readHumidity()readTemperature()方法读取湿度和温度值。
  • if (isnan(humidity) || isnan(temperature)):检查是否成功读取到了有效数值;如果不是,则输出错误信息并退出当前循环迭代。
  • delay(2000):等待2秒钟后再次尝试读取新的数据。
2. 加速度计(以ADXL345为例)

知识点讲解:

  • ADXL345 是一个三轴加速度计,支持I²C或SPI接口,通常用于检测物体的运动状态。
  • 可以通过I²C或SPI协议与MCU进行通信,获取XYZ三个方向上的加速度信息。

代码详解及注释:

#include <Wire.h>         // 包含I2C通信所需的库
#include <Adafruit_ADXL345_U.h> // 包含ADXL345传感器库Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(ADXL345_ADDRESS);void setup() {Serial.begin(9600); // 初始化串口通信,波特率为9600Wire.begin();       // 初始化I2C通信if (!accel.begin()) { // 尝试初始化ADXL345传感器Serial.println("Failed to initialize ADXL345!");while (1);         // 如果初始化失败,则进入死循环}
}void loop() {sensors_event_t event; // 创建一个事件结构体存储传感器数据accel.getEvent(&event); // 获取加速度计数据// 打印X、Y、Z轴的加速度值到串口监视器Serial.print("X: "); Serial.print(event.acceleration.x); Serial.print(" m/s^2");Serial.print(" Y: "); Serial.print(event.acceleration.y); Serial.print(" m/s^2");Serial.print(" Z: "); Serial.print(event.acceleration.z); Serial.print(" m/s^2");Serial.println("");delay(500); // 等待半秒再读取新数据
}

注释说明:

  • #include <Wire.h> 和 #include <Adafruit_ADXL345_U.h>:包含必要的库文件,前者用于I²C通信,后者是专门为ADXL345设计的库。
  • Adafruit_ADXL345_Unified accel = Adafruit_ADXL345_Unified(ADXL345_ADDRESS);:创建了一个Adafruit_ADXL345_Unified类型的对象accel,并通过传递设备地址来初始化它。
  • Wire.begin();:初始化I²C通信。
  • if (!accel.begin()):尝试初始化ADXL345传感器,如果失败则停止程序运行。
  • sensors_event_t event;:声明一个sensors_event_t类型的变量event,用于存储从传感器获得的数据。
  • accel.getEvent(&event);:调用getEvent()方法填充event变量中的数据。
  • Serial.print(event.acceleration.x); 等:将X、Y、Z轴的加速度值打印出来。

二、模拟信号输入处理

对于模拟传感器,如LM35温度传感器,其输出是一个随温度变化而变化的电压值。为了将其转换为数字形式,我们需要利用微控制器内置的ADC(模数转换器)功能。

代码详解及注释:

const int analogPin = A0; // 定义模拟输入引脚void setup() {Serial.begin(9600); // 初始化串口通信,波特率为9600
}void loop() {int sensorValue = analogRead(analogPin); // 读取模拟引脚上的电压值// 将ADC值转换为实际温度(假设使用LM35,每10mV对应1°C)float voltage = sensorValue * (5.0 / 1023.0); // 转换为电压值float temperatureC = voltage * 100.0;         // 转换为摄氏度// 打印温度值到串口监视器Serial.print("Temperature: ");Serial.print(temperatureC);Serial.println("°C");delay(1000); // 等待一秒再读取新数据
}

注释说明:

  • const int analogPin = A0;:定义模拟输入引脚A0,这是LM35传感器的输出端应该连接的地方。
  • int sensorValue = analogRead(analogPin);:调用analogRead()函数读取模拟引脚上的电压值,范围通常是0到1023之间的整数。
  • float voltage = sensorValue * (5.0 / 1023.0);:根据ADC的最大输入电压(这里是5V),计算出对应的电压值。
  • float temperatureC = voltage * 100.0;:由于LM35的输出特性是10mV/°C,因此乘以100即可得到摄氏度值。
  • delay(1000);:等待1秒钟后再次读取新的数据。

三、PWM输出控制

PWM(脉宽调制)是一种常用的模拟控制技术,主要用于调节电机速度、LED亮度等。通过改变占空比(即高电平持续时间相对于周期的比例),可以在固定频率下实现不同级别的功率输出。

代码详解及注释:

const int ledPin = 9; // 定义PWM输出引脚void setup() {pinMode(ledPin, OUTPUT); // 设置引脚模式为输出
}void loop() {for (int brightness = 0; brightness <= 255; brightness++) { // 逐渐增加亮度analogWrite(ledPin, brightness); // 设置PWM占空比delay(30);                       // 等待一段时间}for (int brightness = 255; brightness >= 0; brightness--) { // 逐渐降低亮度analogWrite(ledPin, brightness); // 设置PWM占空比delay(30);                       // 等待一段时间}
}

注释说明:

  • const int ledPin = 9;:定义PWM输出引脚为数字引脚9,这个引脚支持PWM功能。
  • pinMode(ledPin, OUTPUT);:配置引脚模式为输出,以便可以发送PWM信号。
  • for (int brightness = 0; brightness <= 255; brightness++) 和 for (int brightness = 255; brightness >= 0; brightness--):这两个循环分别实现了LED亮度从暗到亮再到暗的过程。
  • analogWrite(ledPin, brightness);:调用analogWrite()函数设置PWM占空比,参数brightness的取值范围是从0到255,代表不同的亮度级别。
  • delay(30);:每次调整亮度后等待30毫秒,使得过渡效果更加平滑。

以上就是关于如何读取温度、湿度、加速度计等传感器的数据,处理模拟信号输入以及控制PWM输出的详细讲解。希望这些内容能帮助你更深入地理解各个知识点,并且能够根据提供的代码示例快速上手实践。如果有任何疑问或者需要进一步的帮助,请随时告诉我!

试卷

一、选择题(每题2分,共20分)

  1. 在读取DHT22温湿度传感器数据时,以下哪个库可以简化操作?

    • A. Wire.h
    • B. DHT.h
    • C. Adafruit_ADXL345_U.h
    • D. SPI.h
  2. I2C通信中,用于标识数据传输开始的是:

    • A. ACK信号
    • B. NACK信号
    • C. 起始条件
    • D. 停止条件
  3. LM35温度传感器输出的电压值与摄氏度之间的关系是:

    • A. 每1V对应1°C
    • B. 每10mV对应1°C
    • C. 每100mV对应1°C
    • D. 每1mV对应1°C
  4. PWM信号的主要用途之一是:

    • A. 实现模拟到数字转换
    • B. 控制电机速度或LED亮度
    • C. 提供网络寻址服务
    • D. 读取传感器数据
  5. 下列哪种传感器通常使用I²C接口进行通信?

    • A. DHT22
    • B. ADXL345
    • C. LM35
    • D. LDR(光敏电阻)

二、简答题(每题10分,共30分)

  1. 描述如何使用Arduino平台上的DHT库读取DHT22传感器的数据。

  2. 解释如何利用微控制器内置的ADC将来自LM35温度传感器的模拟信号转换为数字值,并计算出实际温度。

  3. 说明PWM(脉宽调制)的工作原理以及它在控制电机或其他执行机构中的应用。


三、编程题(每题15分,共30分)

  1. 编写一段Arduino代码,初始化一个DHT22传感器并打印温度和湿度值。
  1. 编写一段Arduino代码,从模拟输入读取LM35温度传感器的电压值,将其转换为摄氏度,并通过串口打印出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/503601.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5实现喜庆的新年快乐网页源码

HTML5实现喜庆的新年快乐网页源码 前言一、设计来源1.1 主界面1.2 关于新年界面1.3 新年庆祝活动界面1.4 新年活动组织界面1.5 新年祝福订阅界面1.6 联系我们界面 二、效果和源码2.1 动态效果2.2 源代码 源码下载结束语 HTML5实现喜庆的新年快乐网页源码&#xff0c;春节新年网…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

概率基本概念 --- 离散型随机变量实例

条件概率&独立事件 随机变量 - 离散型随机变量 - 非离散型随机变量 连续型随机变量奇异性型随机变量 概率表示 概率分布函数概率密度函数概率质量函数全概率公式贝叶斯公式 概率计算 数学期望方差协方差 计算实例 假设有两个离散型随机变量X和Y&#xff0c;它们代…

【Linux】Linux指令apt、systemctl、软链接、日期时区

一、apt命令 1.1 Linux系统的应用商店 操作系统安装软件有许多种方式&#xff0c;一般分为&#xff1a; 下载安装包自行安装 如win系统使用exe文件、msi文件等如mac系统使用dmg文件、pkg文件等 系统的应用商店内安装 如win系统有Microsoft Store商店如mac系统有AppStore商…

OSI模型的网络层中产生拥塞的主要原因?

&#xff08; 1 &#xff09;缓冲区容量有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 2 &#xff09;传输线路的带宽有限&#xff1b;&#xff08; 1.5 分&#xff09; &#xff08; 3 &#xff09;网络结点的处理能力有限&#xff1b;&#xff08; 1 分…

C++list

1. list的介绍及使用 1.1list的介绍 list的文档介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双相迭代 2.list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过…

Java 日期时间格式化标准

文章目录 Java日期时间格式化符号ISO 8601中的日期时间ISO 8601标准的定义ISO 8601日期时间格式 周数年份ISO 8601中的周数年份Java中的周数年份 Java跨年日期格式化BUG注意事项 Java日期时间格式化符号 JDK官网截图&#xff1a; 格式化符号梳理&#xff1a; 符号描述符号用…

【计算机视觉】单目深度估计模型-Depth Anything-V2

概述 本篇将简单介绍Depth Anything V2单目深度估计模型&#xff0c;该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比&#xff0c;V2版本通过采用合成图像训练、增加教师模型容量&#xff0c;并利用大规模伪标签现实数据进行学…

如何在Windows上编译OpenCV4.7.0

前言 ​ 参考&#xff1a;Win10 下编译 OpenCV 4.7.0详细全过程&#xff0c;包含xfeatures2d 这里在其基础上还出现了一些问题&#xff0c;仅供参考。 正文 一、环境 1、win10 2、cmake-gui 3、opencv4.7.0 4、VS2019 二、编译过程 1、下载需要的文件&#xff1a; 通…

ros2-4.1 服务通信介绍

服务是ROS图中节点之间的另一种通信方法。服务分为客户端和服务端&#xff0c;客户端发送请求给服务端&#xff0c;服务端可以根据客户端的请求做一些处理&#xff0c;然后返回结果给客户端。也称为为请求-响应模型。 服务和话题的不同之处&#xff0c;话题是没有返回的&#…

代码随想录算法训练营第四十天 | 股票问题

LeetCode 121.买卖股票的最佳时机&#xff1a; 文章链接 题目链接&#xff1a;121.买卖股票的最佳时机 思路 方法1&#xff1a;暴力 看到题目最直接的想法是双层遍历求最大区间差 class Solution:def maxProfit(self, prices):if len(prices) < 1:return 0result 0for…

EyeSoothe: Your Ultimate Eye Health Companion

In today’s screen-dominated world, our eyes deserve extra care. EyeSoothe is the ultimate app for anyone looking to track their vision, rejuvenate tired eyes, and find the perfect eyewear—all powered by intelligent AI and packed into one seamless app. h…

AnaConda下载PyTorch慢的解决办法

使用Conda下载比较慢&#xff0c;改为pip下载 复制下载链接到迅雷下载 激活虚拟环境&#xff0c;安装whl&#xff0c;即可安装成功 pip install D:\openai.wiki\ChatGLM2-6B\torch-2.4.1cu121-cp38-cp38-win_amd64.whl

【python】matplotlib(radar chart)

文章目录 1、功能描述和原理介绍2、代码实现3、效果展示4、完整代码5、多个雷达图绘制在一张图上6、参考 1、功能描述和原理介绍 基于 matplotlib 实现雷达图的绘制 一、雷达图的基本概念 雷达图&#xff08;Radar Chart&#xff09;&#xff0c;也被称为蛛网图或星型图&…

鸿蒙APP之从开发到发布的一点心得

引言&#xff1a; 做鸿蒙开发大概有1年左右时间了&#xff0c;从最开始的看官方文档、看B站视频&#xff0c;到后来成功发布两款个人APP&#xff08;房贷计算极简版、时简时钟 轻喷&#xff0c;谢谢&#xff09;。简单描述一下里边遇到的坑以及一些经历吧。 学习鸿蒙开发 个…

Clisoft SOS与CAD系统集成

Clisoft SOS与CAD系统集成 以下内容大部分来自官方文档&#xff0c;目前只用到与Cadence Virtuoso集成&#xff0c;其他还未用到&#xff0c;如有问题或相关建议&#xff0c;可以留言。 与Keysight ADS集成 更新SOS客户端配置文件sos.cfg&#xff0c;以包含支持ADS的模板&am…

IP查询于访问控制保护你我安全

IP地址查询 查询方法&#xff1a; 命令行工具&#xff1a; ①在Windows系统中&#xff0c;我们可以使用命令提示符&#xff08;WINR&#xff09;查询IP地址&#xff0c;在弹窗中输入“ipconfig”命令查看本地网络适配器的IP地址等配置信息&#xff1b; ②在Linux系统中&…

人工智能训练师一级(高级技师)、二级(技师)考试指南

随着经济快速发展&#xff0c;人工智能技术在制造业、交通运输、农业、医疗健康、金融服务、物流配送以及城市服务等多个领域得到了广泛的应用。不仅带来产业的转型升级&#xff0c;更是对具备相应技能的人工智能训练师需求的激增。 根据教育部发布的《关于做好职业教育“…

ArmSoM RK3588/RK3576核心板,开发板网络设置

ArmSoM系列产品都搭配了以太网口或WIFI模块&#xff0c;PCIE转以太网模块、 USB转以太网模块等&#xff0c;这样我们的网络需求就不止是上网这么简单了&#xff0c;可以衍生出多种不同的玩法。 1. 网络连接​ 连接互联网或者组成局域网都需要满足一个前提–设备需要获取到ip&a…

patchwork++地面分割学习笔记

参考资料&#xff1a;古月居 - ROS机器人知识分享社区 https://zhuanlan.zhihu.com/p/644297447 patchwork算法一共包含四部分内容&#xff1a;提出了以下四个部分&#xff1a;RNR、RVPF、A-GLE 和 TGR。 1&#xff09;基于 3D LiDAR 反射模型的反射噪声消除 (RNR)&#xff…