一些杂七杂八的知识点记录
天线
天线用于将电磁波从电信号转换为空间中的电磁波,并将其辐射到空间中,或者从空间中接收电磁波并将其转换为电信号
-
增益(Gain):
-
天线增益
-
- 定义: 天线增益是指天线在特定方向上相对于理想点源(各向同性辐射器)的辐射能力。
- 计算方法: 天线增益通常通过比较天线在特定方向上的辐射功率与理想点源在所有方向上的辐射功率之比来计算。
- 单位: 天线增益通常以dBi(分贝相对于各向同性辐射器)为单位。
2. 通信增益 1. 放大器的增益表示输出信号功率与输入信号功率之间的比值。这里的增益用于衡量放大器对信号的放大能力。通常用分贝(dB)表示。
2. 方向性(Directivity): 天线方向性是指天线在特定方向上的辐射能力,是增益的一个特例。它表示天线在特定方向上相对于平均辐射能力的能量增加了多少倍。方向性越高,天线的辐射能力越集中在某个方向上。3. 波束宽度(Beamwidth): 天线波束宽度是指天线主辐射方向的有效角度范围。通常以水平和垂直方向的角度表示。波束宽度越窄,天线在特定方向上的辐射能量越集中。 1. 主瓣半功率波束宽度(Half Power Beamwidth,HPBW): 主瓣半功率波束宽度是指主辐射方向两侧辐射功率下降到峰值功率的一半时的角度范围。对于大多数天线,主瓣半功率波束宽度通常是指水平和垂直方向上的角度范围。 计算方法通常是通过测量天线辐射模式的图表或极坐标图来确定。在图表上,找到主瓣峰值并从峰值开始向两侧寻找功率下降到峰值的一半的点,然后将这两个点之间的角度差作为主瓣半功率波束宽度。 2. 3dB波束宽度: 与主瓣半功率波束宽度类似,3dB波束宽度是指主辐射方向两侧辐射功率下降到峰值功率的1/√2时的角度范围。在某些情况下,3dB波束宽度可能更容易测量和计算。 3. 全宽度半最大(Full Width at Half Maximum,FWHM): FWHM是主瓣半功率波束宽度的另一种术语,指的是主辐射方向两侧功率下降到峰值功率的一半的角度范围。4. 驻波比(Standing Wave Ratio,SWR): 驻波比是用于描述电传输线上的无反射信号的度量。在天线中,驻波比表示天线的输入阻抗与传输线的特性阻抗之间的匹配程度。匹配越好,驻波比越接近1,反之则越高。
-
-
在驻波比图中,最低点通常被称为驻波比的最小值或者最小驻波比点。在这个点上,传输线上的信号没有发生反射,也就是信号完全被传输到了负载端,这是驻波比图上的最优状态。
-
-
频率带宽(Bandwidth): 天线频率带宽是指天线在特定性能指标(如增益或驻波比)下能够工作的频率范围。在频率带宽内,天线的性能通常能够满足设计要求。
-
极化(Polarization): 天线极化指电磁波的振动方向。常见的极化方式包括垂直极化、水平极化和圆极化等。通信系统中的天线和接收机必须使用相同极化方式以确保有效的信号传输。
-
史密斯阻抗(Smith Impedance): 史密斯阻抗是一个复数,通常用于描述电路元件的阻抗特性,包括电阻和电抗。它由实部和虚部组成,通常表示为
Z = R + jX,其中 R 是电阻部分,X 是电抗部分,j 是虚数单位。史密斯阻抗常用于传输线、天线等电路元件的分析和设计中。 -
史密斯图: 通常是一个圆形或半圆形的图表,通常是在复平面上绘制的,横轴代表实部,纵轴代表虚部。图的中心通常代表50欧姆的特性阻抗,而边界则代表无穷大的阻抗。通过在史密斯图上绘制电路元件的阻抗,并进行一系列的变换,可以找到使得输入和输出阻抗匹配的解决方案。
- 圆圈移动(Circle Rotation): 可以将圆圈(表示特定阻抗的圆)沿着史密斯图上的等效电阻率(normalized impedance)轨迹旋转。这个操作可以改变阻抗的实部和虚部。
- 线段移动(Line Translation): 可以沿着史密斯图上的等效电抗率(normalized admittance)轨迹平行移动线段。这个操作可以改变阻抗的实部或虚部。
- 反射系数(Reflection Coefficient): 可以通过史密斯图来直观地看出电路元件的反射系数,反射系数是一个描述信号反射程度的参数。反射系数的大小和相位可以在史密斯图上的圆圈位置和圆心之间读取。
- 阻抗匹配(Impedance Matching): 可以通过史密斯图来设计匹配网络,以实现电路的输入和输出阻抗匹配。匹配网络的设计通常涉及圆圈移动和线段移动操作。
-
天线长度会影响谐振频率
-
谐振频率是指天线的长度和电磁波波长之间的关系,当天线的长度等于电磁波的半波长(或整数倍)时,天线将处于谐振状态,即在这个频率下能够以最大效率地辐射或接收电磁波
天线长度的变化会影响天线的电容和电感,进而影响天线的阻抗。当天线的长度接近谐振长度时,天线的阻抗会接近理想的谐振阻抗,而在其他长度下,阻抗会发生变化。
-

频段
- LF段(低频段): 30 kHz到300 kHz,用于低频无线电通信和导航系统。
- MF段(中频段): 300 kHz到3 MHz,也用于无线电通信和导航系统,例如AM广播。
- HF段(高频段): 3 MHz到30 MHz,用于短波广播、航空通信和长距离通信。
- VHF段(甚高频段): 30 MHz到300 MHz,用于调频广播、电视广播、无线电通信等。
- UHF段(超高频段): 300 MHz到3 GHz,用于移动通信、卫星通信、雷达等。
- SHF段(极高频段): 3 GHz到30 GHz,用于雷达、微波通信、卫星通信等。
- EHF段(极超高频段): 30 GHz到300 GHz,用于毫米波通信、雷达、无线局域网等。
增益和带宽
-
增益(Gain) :
-
增益是衡量信号强度或信号功率的度量。在通信系统中,增益通常表示信号的放大倍数。
-
增益可以用来衡量信号在传输过程中的放大程度,通常用分贝(dB)为单位表示。
-
增益用于衡量放大器、天线、传输链路等设备或系统的性能,其值越大表示信号被放大得越多。
- “8dBi"中的"D"代表"Decibels”(分贝),“i"代表"isotropic”(各向同性)。
- "8dBi"表示相对于各向同性天线(isotropic antenna)的增益。
- 增益值越高,天线在指定方向上的性能就越好。
-
典型的增益公式为: G a i n ( d B ) = 10 × l o g 10 ( 𝑃 o u t / 𝑃 i n ) Gain(dB)=10×log_{10}(𝑃_{out}/𝑃_{in}) Gain(dB)=10×log10(Pout/Pin), P o u t P_{out} Pout是输出信号的功率, P i n P_{in} Pin是输入信号的功率。
-
-
带宽(Bandwidth) :
- 带宽是指信号在频率范围内的宽度,通常以赫兹(Hz)为单位表示。它描述了信号在频域上的分布。
- 在通信系统中,带宽通常表示信号的传输频率范围,即信号所占据的频谱范围。
- 带宽可以影响信号的传输速率和信息容量,更宽的带宽通常意味着更高的传输速率和更大的信息容量。
- 如果频率范围在频率轴上以 f l o w f_{low} flow和 f h i g h f_{high} fhigh表示,则带宽 𝐵的计算公式为: B B B = = = f f f h i g h − _{high}− high− f f f l o w _{low} low
增益和带宽之间的联系和区别如下:
-
联系:
- 在某些情况下,增益可以影响带宽,特别是在信号传输过程中可能会引入一定程度的频谱扩展,从而影响信号的带宽。
- 例如,在无线通信系统中,放大器的增益可能会引入非线性失真,从而产生额外的谐波和干扰,这会扩展信号的频谱范围,增加信号的带宽。
-
区别:
- 增益主要关注信号的强度或功率级别,而带宽主要关注信号在频率域上的分布范围。
- 增益通常用来衡量信号的放大程度,而带宽用来描述信号所占据的频率范围。
- 增益可以通过放大器等设备进行调节,而带宽通常由信号的调制方式和调制参数决定。
Mesh组网
Mesh组网是一种无线网络拓扑结构,其中网络中的节点通过多个路径相互连接,而不依赖单个中心节点。这种拓扑结构使得Mesh网络具有自组织、自修复和自组态的特点,可以灵活地应对节点的添加、移动和故障。Mesh网络中的节点可以充当路由器和终端设备,从而形成一个自组织的、去中心化的网络。以下是Mesh组网的一些关键特点和优势:
- 去中心化: Mesh网络中的节点彼此之间可以直接通信,而不需要依赖单个中心节点进行路由和转发,从而减少了单点故障的风险。
- 自组织性: Mesh网络具有自组织的特性,新节点可以自动加入网络,并根据网络拓扑和环境条件选择最优的通信路径。
- NLOS: 直视距节点可转发信号给非直视距节点 。
- 鲁棒性: Mesh网络具有很强的鲁棒性,因为它可以通过多条路径传输数据,从而降低了单点故障的风险。即使某些节点失败或受到干扰,网络仍然可以保持通信。
- 自修复性: 当网络中的某个节点发生故障或者通信路径中断时,Mesh网络具有自动修复的能力,可以通过其他可用路径重新组织通信。
- 覆盖范围广: 由于节点可以相互连接并通过中继节点传输数据,Mesh网络具有较大的覆盖范围。这使得Mesh网络在覆盖大面积区域或难以布线的环境中具有优势。
- 动态路由: Mesh网络中的节点可以通过动态路由协议来确定最佳路径,以传输数据。这使得Mesh网络可以适应网络拓扑的变化,如节点移动或故障。
- 灵活性: Mesh网络可以根据具体的应用场景和需求进行灵活配置和部署,可以覆盖大范围的区域,并支持多种通信技术和频段。
- 可靠性: Mesh网络中的节点之间可以通过多个路径进行通信,增加了数据传输的可靠性和稳定性,可以应对信号干扰和传输中断的情况。
链式拓扑

各节点之间链式分布,只有相邻的两个节点可以直接通信。
节点2、3、4回传视频数据给节点1,但节点4需要节点3、2作为中继,节点3需要节点2作为中继。
星型拓扑

各节点之间以星型方式连接成网,网络中有中央节点,其它节点都与中央节点直接相连。
节点2、3、4直接回传视频数据给节点1。
网状拓扑

由多个节点将多种类型网络连接起来,可让网络选择一条最快的路径传输数据。
节点2、3、4回传视频数据给节点1,但节点4需要节点2作为中继,节点2、3直接回传到节点1。
Mesh组网与无线中继的区别
(1)⽆线中继的⽹络拓扑结构是固定的,是由⽤户设置之初就已经定义好的,整个⽹络⽆法保证是最优的效果。⼀台离线后,可能导致后面的所有节点瘫痪,无法自动修复。而Mesh可以智能组网,网络自愈性强。
(2)⽆线中继系统中⼏个路由器相互之间不知道彼此的状态,无法主动引导设备连接更好的节点,设备从主路由连接到中继路由时会出现明显掉线。而Mesh可以找到最优节点路由实现⽆缝漫游且无卡顿。
(3)⽆线中继需要逐个配置SSID、密码,并选择需要中继的⽹络,步骤繁琐,门槛较高。不像Mesh一样具备自同步功能。
Mesh网络分层

01 物理层(PHY):
提供了用于传输数据的物理设备及接口,对于Mesh而言,其提供了无线传输(空口)、以太网、串口等数据传输接口。
02 数据链路层(DLL):
定义了数据在链路上的传输方式。传统网络中数据链路层协议分为两个子层,逻辑链路控制(LLC)层和媒体访问控制(MAC)层,只有MAC层,主要定义了数据传输帧格式、用户接入方式、接入传输控制等。
LLC层主要负责逻辑连接的建立和数据传输的逻辑控制,而MAC层则负责控制物理介质的访问和数据帧的传输
-
逻辑链路控制(LLC)层:
- LLC层是数据链路层中的高级子层,负责在网络节点之间建立逻辑连接和提供数据传输的逻辑控制。
- LLC层提供了逻辑连接的建立、维护和释放功能,以及数据帧的流控制、错误检测和纠正等服务。
- LLC层定义了与网络层(OSI模型中的第三层)之间的接口,使得数据链路层可以适应不同的网络协议和服务需求,实现透明的数据传输。
-
媒体访问控制(MAC)层:
- MAC层是数据链路层中的低级子层,负责控制数据帧在物理介质上的传输和访问。
- MAC层定义了数据帧在物理介质上的封装格式和访问机制,包括帧的起始和结束标志、地址识别、帧同步、冲突检测与解决等。
- MAC层的主要功能是管理物理介质的访问,以确保数据的可靠传输,并通过处理竞争和冲突来管理多个节点之间的共享介质。
03 网络层(NETWORK):
Mesh中网络层的主要任务是为网络上的不同主机提供通信,主要实现路由控制算法,为不同的数据包选择合适的传输路径,并不具备传统意义网络层中流量控制、拥塞控制等功能。
其中,MAC层以及网络层中的路由控制是我们关注的重点。MAC层采用时分多址(TDMA)协议,从而引出帧、时隙、多跳等概念。
内存条
GPU、CPU、NPU

GPU、CPU、NPU的对比
| 特性 | GPU | CPU | NPU |
|---|---|---|---|
| 设计目标 | 高度并行计算,图形渲染和数据并行任务 | 通用计算,各种类型的计算任务 | 专门为神经网络计算优化 |
| 计算单元 | CUDA Cores / Stream Processors | 高性能核心 | MAC Units / Tensor Cores |
| 内存结构 | 大量全局内存,高速共享内存和多级缓存 | 多级缓存(L1、L2、L3) | 高速片上存储,外部内存接口 |
| 并行处理能力 | 高度并行,适合数据并行计算 | 并行能力有限,适合多任务处理 | 高度并行,专为神经网络设计 |
| 优化技术 | 线程并行、内存优化、专用计算单元 | 分支预测、乱序执行、投机执行 | 数据并行、低精度计算、稀疏矩阵优化 |
| 应用场景 | 图形渲染、科学计算、深度学习 | 操作系统、应用程序、通用计算任务 | 深度学习训练和推理、AI应用 |
CPU(中央处理器,Central Processing Unit)
线程少,单线程运算能力强
CPU 是通用计算的核心处理单元,适合各种任务,但在处理高度并行的任务时可能不如 GPU 高效。
功能:CPU 是计算机的核心处理单元,负责执行计算机程序中的指令,进行数据处理和控制计算机的所有其他硬件组件。它是计算机系统的“大脑”。
特点:
- 通用性:能够处理各种类型的计算任务,如逻辑运算、数据处理和控制指令等。
- 多核设计:现代 CPU 通常具有多个核心(如双核、四核、八核),每个核心可以并行处理多个任务。
- 时钟速度:以 GHz(千兆赫兹)为单位,时钟速度决定了 CPU 每秒钟可以执行的指令数量。
- 缓存:拥有多级缓存(L1、L2、L3)以提高数据访问速度。
应用:
- 操作系统和应用程序的常规计算任务。
- 适合处理单线程或低并行度的任务,如桌面应用、文档处理、轻度游戏等。
目前市场上主流的芯片架构有 X86、ARM、RISC-V和MIPS四种:
架构:是一种理论上的设计和描述,描述了系统设计和组织方式,定义了指令集、功能和操作流程。
| 序号 | 架构 | 特点 | 代表性的厂商 | 运营机构 | 发明时间 |
|---|---|---|---|---|---|
| 1 | X86 | 性能高,速度快,兼容性好 | 英特尔,AMD | 英特尔 | 1978年 |
| 2 | ARM | 成本低,低功耗 | 苹果,谷歌,IBM,华为 | 英国ARM公司 | 1983年 |
| 3 | RISC-V | 模块化,极简,可拓展 | 三星,英伟达,西部数据 | RISC-V基金会 | 2014年 |
| 4 | MIPS | 简洁,优化方便,高拓展性 | 龙芯 | MIPS科技公司 | 1981年 |
ARM 架构
-
ARM(Advanced RISC Machine)是一种基于精简指令集(RISC)的处理器架构,广泛用于移动设备、嵌入式系统和嵌入式应用等领域。
-
ARM 架构的处理器通常具有较低的功耗、较高的性能和较小的尺寸,因此非常适合用于移动设备和嵌入式系统。
-
ARM 处理器通常采用小端序(Little-endian)存储方式。
- 小端序是从低地址到高地址进行存储
- 0x12345678 ->
0x78 0x56 0x34 0x12
| 序号 | 架构 | 特点 |
|---|---|---|
| 1 | ARM | 主要是面向**移动** 、****低功耗领域 ,因此在设计上更偏重**节能** **、****能效**方面 |
| 2 | X86 | 主要面向**家用** **、****商用领域,在性能和兼容性**方面做得更好 |
x86 架构
-
x86 架构是一种基于复杂指令集(CISC)的处理器架构,最初由英特尔开发,用于个人计算机和服务器等领域。
-
x86 架构的处理器通常具有较高的性能,适用于桌面计算机、服务器和工作站等高性能需求场景。
-
x86 处理器通常采用大端序(Big-endian)存储方式。
- 0x12345678 ->
0x12 0x34 0x56 0x78
- 0x12345678 ->
在选择服务器CPU时,需要考虑以下因素:
- 核心和线程数:多核心和多线程可以提供更好的并行处理能力和性能。
- 时钟频率:CPU的时钟频率决定了其处理能力,高频率通常意味着更好的性能。
- 缓存大小和类型:更大的缓存可以提高数据访问速度,L3缓存通常对性能影响较大。
- 功耗和热设计功耗(TDP) :高功耗CPU通常性能更强,但也会产生更多热量。
- 指令集和支持的特性:不同的CPU支持不同的指令集,如SSE、AVX等,这些指令集可以提高特定类型的计算效率。
- 接口类型:确保CPU与主板插槽兼容,如LGA 1151、Socket AM4等。
- 品牌和可靠性:选择知名品牌通常能保证更好的性能和稳定性。
GPU(图形处理器,Graphics Processing Unit)
GPU 设计用于处理大量并行计算任务,特别适合图形渲染和深度学习等需要高计算量的任务。
线程多,单线程运算能力弱
功能:GPU 专门设计用于处理图形和图像计算任务,能够进行大量的并行计算,适合处理需要大量数据的计算任务。
特点:
- 并行处理:GPU 拥有成百上千个小型处理单元,能够同时处理大量的计算任务,适合高并行度的计算任务。
- 图形渲染:最初设计用于处理图形和视频渲染任务,例如生成图像、渲染三维图形。
- 高吞吐量:能够在每时钟周期内处理大量数据,具有较高的带宽和吞吐量。
应用:
- 图形和视频渲染、游戏处理。
- 科学计算、数据分析、机器学习等需要高并行计算的任务。
- 支持深度学习训练和推理等高计算量的任务。
AMD(Advanced Micro Devices)
简介:
- 成立于1969年,AMD 是一家美国跨国半导体公司,主要设计和制造计算机处理器和相关技术。
- 其产品线包括 CPU、GPU 和 APU(加速处理单元),APU 将 CPU 和 GPU 集成在一个芯片上。
主要产品:
-
CPU:
- Ryzen 系列:针对台式机和笔记本电脑市场。Ryzen 处理器以其高核心数和多线程处理能力而著称。
- EPYC 系列:针对服务器和数据中心市场,提供高性能和高可扩展性。
-
GPU:
- Radeon 系列:包括 Radeon RX 和 Radeon Pro 系列。Radeon RX 系列针对游戏和消费者市场,而 Radeon Pro 系列则面向专业图形和内容创作市场。
- Radeon Instinct 系列:用于深度学习和高性能计算(HPC)的加速器。
-
APU:
- Ryzen APU:将高性能 CPU 和 GPU 集成在一个芯片上,适用于需要较强图形处理能力的轻薄笔记本电脑和小型桌面系统。
特点:
- 多核心和多线程:AMD 的处理器通常具有较高的核心数和线程数,适合多任务和并行计算。
- 性价比高:AMD 产品通常在同级别产品中价格较为优惠。
- 开放生态系统:支持开源和跨平台技术。
NVIDIA
简介:
- 成立于1993年,NVIDIA 是一家美国科技公司,主要以其 GPU 产品著称。
- NVIDIA 在图形处理和人工智能领域有很强的技术积累和市场影响力。
主要产品:
-
GPU:
- GeForce 系列:面向游戏和消费市场的 GPU,提供高性能图形渲染能力。
- Quadro 系列:针对专业图形工作站的 GPU,适用于设计、建模和视频编辑等应用。
- Tesla 和 A100 系列:专为数据中心、深度学习和高性能计算(HPC)设计的加速器。
- Jetson 系列:用于嵌入式系统和边缘计算的 AI 平台。
-
软件平台:
- CUDA:NVIDIA 的并行计算平台和编程模型,广泛用于科学计算和深度学习。
- NVIDIA AI:包括 TensorRT、NVIDIA Triton 等,用于加速 AI 推理和训练的工具和框架。
-
专业解决方案:
- DGX 系列:用于深度学习和 AI 研究的超级计算机。
特点:
- 图形处理能力强:NVIDIA 的 GPU 在游戏和图形渲染领域表现卓越。
- AI 和深度学习优化:NVIDIA 投入大量资源开发 AI 和深度学习技术,其 GPU 和软件平台在这一领域有广泛应用。
- 高性能计算:NVIDIA 的 GPU 被广泛用于科学研究、数据分析和高性能计算领域。
NPU(神经网络处理器,Neural Network Processing Unit)
NPU 专注于深度学习和神经网络计算,提供优化的计算能力和低功耗,适合 AI 和机器学习应用。
功能:NPU 专门设计用于加速神经网络计算,特别是在人工智能(AI)和深度学习领域中。它的目标是优化神经网络的训练和推理过程。
特点:
- 深度学习优化:具有专门优化的硬件架构,能高效处理神经网络中的矩阵乘法和卷积运算。
- 低功耗:通常比 CPU 和 GPU 更高效,在处理特定类型的 AI 计算任务时能耗更低。
- 高效计算:支持高效的并行计算,优化了深度学习模型的推理速度。
应用:
- 人工智能和机器学习模型的加速,例如图像识别、自然语言处理、语音识别等。
- 边缘计算设备(如智能手机、物联网设备)中的 AI 推理。
- 在数据中心和云计算环境中提供高效的 AI 计算能力。
内存颗粒
颗粒度(Granularity)是一个用来描述系统中处理任务或操作的规模和细节程度的术语。
内存颗粒(Memory Chips)是指用于构成内存模块的基本存储单元。
每个单元可以存储一位数据(0或1)。这些单元被组织成行和列的矩阵,形成一个存储阵列。
每个内存颗粒都是一个独立的存储芯片,通常安装在内存条(DIMM,Dual Inline Memory Module)上。
内存颗粒的关键特性包括:
-
容量:
- 每个内存颗粒的容量通常以兆比特(Mb)或千兆比特(Gb)表示,表示颗粒可以存储的数据量。
-
速度:
- 速度以数据传输率表示,例如DDR4-3200表示数据传输速率为3200 MT/s(百万次传输每秒)。
-
电压:
- 不同类型的内存颗粒工作在不同的电压下,例如DDR3通常工作在1.5V,而DDR4工作在1.2V。
-
封装类型:
- 内存颗粒的封装类型决定了它们如何连接到内存模块上,常见的封装类型包括BGA(球栅阵列)和TSOP(薄小外形封装)。
内存颗粒被安装在内存模块上,这些模块被插入到计算机的内存插槽中。常见的内存模块类型包括:
-
DIMM(双列直插内存模块) :
- 用于台式计算机,典型的内存类型为DDR、DDR2、DDR3、DDR4、DDR5。
-
SO-DIMM(小型双列直插内存模块) :
- 用于笔记本电脑和小型设备,尺寸较小。
算力
算力=“计算能力”的缩写,指IT设备的计算能力
操作次数(OPS,Operations Per Second) :
- 表示每秒可以进行的操作次数。根据数量级的不同,通常使用MOPS(百万次操作每秒)、GOPS(十亿次操作每秒)、TOPS(万亿次操作每秒)等单位。
- 这种指标通常用于AI芯片和硬件加速器等专用设备中。
FLOPS (Floating Point Operations Per Second) :
-
定义:每秒执行的浮点运算次数。
-
浮点运算(Floating Point Operations)是计算机中对带有小数点的数字进行的算术运算。
-
浮点运算主要用于科学计算、图形处理、工程应用等需要高精度和大范围数值的场合。
-
浮点数通常用科学记数法表示,在计算机中也类似。例如,数值 1.23 × 10 4 1.23 \times 10^4 1.23×104 可以表示为一个浮点数。一个浮点数由三部分组成:
- 尾数(Mantissa) :表示有效数字。
- 基数(Base) :通常为2(计算机二进制系统)。
- 指数(Exponent) :表示数值的数量级。
在计算机中,浮点数的表示遵循IEEE 754标准:
- 单精度浮点数(32位) :包含1位符号位、8位指数和23位尾数。
- 双精度浮点数(64位) :包含1位符号位、11位指数和52位尾数。
-
变量
a和b是浮点数,对它们进行乘法运算,结果也是一个浮点数。注意输出结果由于浮点运算的精度限制可能会有轻微的误差。a = 1.5 b = 2.3 c = a * b print(c) # 输出 3.4499999999999997
-
-
应用:主要用于科学计算、图形处理和高性能计算(HPC)领域。
-
单位:
- GFLOPS(Giga FLOPS):每秒十亿次浮点运算。
- TFLOPS(Tera FLOPS):每秒万亿次浮点运算。
- PFLOPS(Peta FLOPS):每秒千万亿次浮点运算。
TOPS (Tera Operations Per Second) :
- 定义:每秒执行的操作次数,包括整数运算和简单的逻辑操作。
- 应用:主要用于AI加速器、神经网络处理单元(NPU)等专用硬件。
- 单位:TOPS(Tera Operations Per Second),每秒万亿次操作。
馈线和同轴电缆
同轴电缆是一种常见的馈线类型,但馈线可以指任何将信号传输到或从天线的线路,它可以是同轴电缆,也可以是其他类型的线缆。
同轴电缆(Coaxial Cable)是一种电信号传输线路,由内导体、绝缘层、外导体和外绝缘层组成。内导体和外导体之间的排列方式使其在较高频率下具有良好的屏蔽性能,可防止信号外泄和外部干扰的影响。
馈线(Feed Line)通常指的是用于将信号传输到天线或从天线传输信号到接收设备的线路。同轴电缆常被用作馈线,但馈线并不一定非得是同轴电缆,它还可以是其他形式的传输线,如平行线、双绞线等。
RF 1.13
"RF 1.13"通常指的是一种细小的同轴电缆,常用于连接天线和设备之间,尤其是在无线通信领域。这种同轴电缆通常用于传输射频(RF)信号,如WiFi、蓝牙、GPS等。"RF 1.13"的规格一般为外径约为1.13毫米,内部包含一根细小的中心导体,周围被绝缘层和外导体包裹。
它的特点包括:
- 细小灵活:由于直径很小,因此非常柔软和灵活,适合于在有限空间内进行布线。
- 低损耗:尽管尺寸小,但是在传输RF信号时,它提供了相对较低的信号损耗,这对于要求信号传输质量的应用非常重要。
- 用途广泛:RF 1.13常见于各种无线通信设备、天线、模块和基站之间的连接,提供可靠的信号传输。
- 易于连接:通常配有标准的同轴连接器(如SMA、MMCX等),易于连接到设备或天线接口。
can总线
CAN是控制器局域网络(Controller Area Network)的简称
CAN是国际标准化的**串行通信协议**,采用数据块编码的方式,数据块根据帧的类型,能够让挂载在总线上的不同节点接收到相同的数据,再根据每个节点的配置对信息进行选择性处理(接收or丢弃)
Controller 控制器 专业术语 ECU electronic control unit 电子控制单元
ECU 可以看作为是一个超小型的计算机,内部集成了供电系统、单片机、驱动系统,是汽车里面最小的控制模块


为了能让ECU之间进行通信 -> 设计了CAN协议
CAN总线一开始是为了减少铜线的长度而开发
不适用CAN总线,则需要使用数倍长的铜线,并且线束杂乱

通过CAN,多个ECU只需要挂载到CAN总线上,组成局域网通信

CAN总线如何通信
需要专门的CAN收发芯片
对于单片机,普通逻辑:逻辑1是高电平,逻辑0是低电平

单片机经过CAN收发器后,普通信号转化为差分信号
差分线是用两根线表示一个信号

差分信号
如果发送低电平,两根线分别输出3.5V和1.5V,电压差2V -> 表示逻辑0
如果发送高电平,两根线分别输出2.5V和2.5V,电压差0V -> 表示逻辑1

CAN收发器可以将接收到的差分信号,转化为普通电平信号,然后转发给单片机

差分信号的优点
如果是普通信号,只有一根线,当某一点受到干扰,电平会发送跳变,导致传输错误,导致不能进行长距离传输

差分信号使用两根线共同作用,双绞线缠绕,这样即使受到干扰,也是两根线同时受到干扰,压差保持不变,保证传递的信息不受干扰,因此CAN信号可以传输距离很长,可达1000米(低速)(常规通信:10m)


CAN通信传递的数据
一帧标准的数据帧

识别码:根据11位识别码可以知道是发送给哪个设备的,每一个设备有自己的识别码,代表优先级

RTR位:
数据帧:0
远程请求帧:1
控制码:控制数据长度
控制码第1位IDE位:用去区分标准格式和扩展格式

控制码第2位 空闲位:预留位
控制码后4位:DLC(Data Link Control)位:数据长度代码,二进制编码是0-8,如果是1,就表示只有1个字节,8位;如果是8,就表示后面的数据位是8个字节,64位


CRC码:循环冗余校验位:确保数据的准确性
15位CRC校验码:设备接收端会根据数据计算出他的CRC位,如果计算出的和接收到的CRC不一致,说明数据存在问题,就会重新发送一遍数据帧
CRC界定符:逻辑1,目的是为了把后面的信息隔开
ACK确认槽:发送端发送的是逻辑1,接收到发送的是逻辑0
ACK界定位:逻辑1,目的是为了把后面的信息隔开
7位结束位:逻辑1,表示数据帧传输结束
IP地址和MAC地址

- MAC地址是物理地址,由操作系统补齐


MAC地址
- 网卡表示设备,每张网卡在出厂时都写入一个MAC地址,用于在局域网中唯一标识设备
- MAC地址是由6个字节(48位二进制)构成
- MAC地址是全球唯一的地址
- 某台主机通过网线与交换机的端口1绑定,交换机知道某个MAC地址在端口1上,从而将MAC地址与端口进行绑定

IP地址
网卡接入到网络后,如果要通信,需要配置IP地址
IP地址是用于在网络中唯一标识设备的地址

DHCP协议 动态主机配置协议
自动配置IP地址
- 发现(Discover) :客户端设备在连接到网络时,通过广播消息发送 DHCP Discover 报文,以寻找可用的 DHCP 服务器。
- 提供(Offer) :DHCP 服务器收到 Discover 报文后,向客户端发送 DHCP Offer 报文,其中包含一个可用的 IP 地址以及其他配置信息。
- 请求(Request) :客户端收到一个或多个 Offer 报文后,选择其中一个 DHCP 服务器并向其发送 DHCP Request 报文,确认选择该服务器并请求分配 IP 地址。
- 确认(Acknowledge) :选中的 DHCP 服务器收到 Request 报文后,向客户端发送 DHCP Ack 报文,确认分配了 IP 地址和其他配置信息。
注意:在一个局域网中,IP地址是唯一的,路由器不会分配重复的IP地址给不同的设备

ARP协议
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写
- 在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址,而将已知IP地址转换为MAC地址的工作是由ARP协议来完成的。
- 在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。
- 所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。
流程
假设主机A和B在同一个网段,主机A要向主机B发送信息,具体的地址解析过程如下:
-
主机A想向主机B发送消息时,操作系统不会立即发出
-
主机A首先查看自己的ARP表,确定其中是否包含有主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
-
如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后会先发送一个ARP广播报文,问一下目的IP的MAC地址是多少
- ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。
-
由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但除目的IP设备之外,其他设备均会丢弃这个ARP报文
-
主机B比较自己IP地址和ARP请求报文中的 目标IP 地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。
-
之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
-
主机A收到回复,将主机B的MAC地址加入到自己的ARP表中以用于后续报文的转发,同时将IP数据包进行封装后发送出去。

OSI七层

数据传输

物理层 physical
二进制传输数据 0101

- Twisted Pair : 双绞线 = 以太网线
- Coaxial : 同轴电缆线 长距离传输
- Fiber : 光纤 长距离传输,带宽高

数据链路层 MAC地址 节点跳跃
和物理层做交互,负责在相邻节点之间传输数据帧
网卡 MAC地址:48 bits
网卡 交换机

帧
帧是数据链路层的基本传输单位,负责在局部网络中传输数据
- 帧起始标志(Start of Frame): 表示帧的开始,通常是一个特定的比特序列,标识着帧的开始。
- 帧头(Frame Header): 包含了一些控制信息,如目标地址、源地址、帧类型等。
- 数据字段(Data): 实际的数据内容,可以是传输的消息、文件等。
- 帧校验序列(Frame Check Sequence,FCS): 用于检测数据在传输过程中是否发生错误的校验序列。
- 帧结束标志(End of Frame): 表示帧的结束,标识着帧的结束。
网络层 IP地址 端到端
负责在不同计算机或网络之间提供数据传输的路径选择和转发功能
ip地址:32 bits
路由器 主机
ARP -Address Resolution Protocol 负责IP地址翻译为MAC地址

包
包是网络层及以上协议的基本传输单位,负责在全局网络中进行数据传输和路由
传输过程
- 传输数据

- 加入从哪到哪的ip地址:起点和终点

- 加入从哪些节点走

- 到达下一个节点,去除节点地址

- 新增下一个节点地址

- 到达终点,去除节点地址

- 去除目的地址

传输层 服务到服务
取地址方式:端口区别
TCP
UDP

应用层

桥接模式、NET模式
一文详解vmware虚拟机nat、桥接、仅主机模式的区别 - luzhouxiaoshuai - 博客园 (cnblogs.com)
VMnet0:用于桥接模式下的虚拟交换机
VMnet1:用于仅主机模式下的虚拟交换机
VMnet8:用于NAT模式下的虚拟交换机
桥接模式
- 虚拟机操作系统直接连接物理网卡,通过物理网卡与外部网络建立连接关系。
- 此模式下,虚拟机与宿主机处于同一网段中,以独立IP的身份参与网络交互。
- 与宿主机处于同一网段中的其他PC可以直接访问虚拟机(可以ping通虚拟机的IP,访问虚拟机上部署的应用)。
NAT模式
- 虚拟机与宿主机形成封闭的网络环境,通过共享宿主机的IP连接外部网络。
- 此模式下,虚拟机与宿主机物理网段是不同的,与宿主机处于同一物理网段中的其他PC无法直接访问虚拟机(ping不通虚拟机IP,无法访问虚拟机上部署的应用)。
电阻、电容、电感
-
电阻(Resistor) :
- 作用:电阻用于限制电流的流动,阻碍电流通过的程度取决于电阻的阻值。电阻还用于分压、限流、保护电路等。
- 直流电:在直流电路中,电阻的作用可以用欧姆定律来描述:𝑉=𝐼×𝑅其中,𝑉是电压(伏特),𝐼是电流(安培),𝑅是电阻(欧姆)。
- 交流电:在交流电路中,电阻同样遵循欧姆定律,但由于交流电流方向不断变化,因此电阻会导致功率损耗。
-
电容(Capacitor) :
-
作用:电容用于储存电荷,并且可以在电路中产生降压、滤波、延迟响应、耦合、旁路作用。它还可以阻止直流电流通过,但允许交流信号通过。
-
直流电:在直流电路中,电容充电或放电的过程可以用以下公式表示:𝑄=𝐶×𝑉其中,𝑄是电荷量(库仑),𝐶 是电容(法拉),𝑉是电压(伏特)。
-
交流电:在交流电路中,电容对交流信号的响应取决于频率,其阻抗可以表示为:X=1/2𝜋𝑓𝐶 其中,X是电容的阻抗(欧姆),𝑓 是信号的频率(赫兹),𝐶是电容(法拉)。


-
降压
-
在降压功能中,通常不会直接使用电阻来替代电容,这是因为电阻和电容在电路中的作用和特性不同,无法直接互相替代。下面是一些原因:
- 电阻消耗功率:电阻会将电能转化为热能,导致能量损失,因此在电阻上消耗的功率会随着电流的增加而增加。在降压功能中,如果使用电阻,会导致系统功率的损耗增加,效率降低。
- 电容可以储存能量:与电阻不同,电容无功功率,可以储存能量而不是消耗能量。在降压功能中,使用电容可以将能量存储起来,然后再释放出来,以实现对电压的调节,而不会造成能量的浪费。
- 电容能够响应快速变化的需求:电容具有较低的阻抗,在高频率下能够快速地响应电压变化,因此在需要快速调节电压的情况下,电容更加适合。
-
-
滤波
-
-
基本原理:
- 电容器在直流电路中表现为开路,而在交流电路中,电容器对频率越高的信号阻抗越小,对频率越低的信号阻抗越大。

- 电容器在直流电路中表现为开路,而在交流电路中,电容器对频率越高的信号阻抗越小,对频率越低的信号阻抗越大。
-
工作过程:
- 当交流信号通过电容器时,高频信号的频率很高,因此电容器的阻抗很低,几乎等效于短路,高频信号会被电容器直接绕过。
- 低频信号的频率相对较低,电容器的阻抗相对较高,低频信号会通过电容器,但由于电容器的存在,信号的变化率会减缓,从而实现了对信号的平滑化。
-
滤波效果:
- 电容滤波可以有效地去除信号中的高频噪声或波动,使得信号更加平滑。
- 滤波效果取决于电容器的容值大小和电路中的电阻负载。
-
滤波器类型:
- 电容滤波器可以设计为低通滤波器或带通滤波器,具体设计取决于需要滤除的信号频率范围。
-
-
-
-
电感(Inductor) :
- 作用:电感用于储存能量,并且可以阻止交流电流通过,但允许直流信号通过。它可以用于滤波、阻抗匹配、延迟信号等。
- 直流电:在直流电路中,电感的作用通常不大,因为它会阻止电流的变化。其电压-电流关系为:𝑉=𝐿𝑑𝑖/𝑑𝑡 其中,𝑉是电压(伏特),𝐿是电感(亨利),𝑑𝑖/𝑑𝑡是电流变化率。
- 交流电:在交流电路中,电感对交流信号的响应取决于频率,其阻抗可以表示为:𝑍=2𝜋𝑓𝐿其中,𝑍是电感的阻抗(欧姆),𝑓是信号的频率(赫兹),𝐿是电感(亨利)。
电阻和阻抗
电阻是由于导体当中的电阻性质导致,当电流流过导体的时候,由于电子之间的互相作用,会对电流产生阻碍作用
电阻在直流电路和交流电路中都存在
电阻的大小变化和电流、频率无关,和导体的直径、材料、长度有关
电阻应用于直流电路当中,用于限制电流大小和调节功率

理想的电阻、电容、电感

为什么会有阻抗?
因为理想的电阻、电容、电感元件在现实生活中不存在
阻抗是由电阻电感电容这三个元器件综合影响产生
现实生活中电阻、电容、电感



阻抗只存在于交流电路中

阻抗在具有电阻、电感和电容的电路里,对电路中的电流起阻碍作用

当交流电流通过电路的时候,会产生电磁感应效应,从而电容和电感会对电流产生一定的影响,产生电抗

电容对电流的阻碍作用 = 容抗
电感对电流的阻碍作用 = 感抗

阻抗=电抗+电阻

电抗会随着电压和电流的变化而变化
感抗和频率成正比
容抗和频率成反比
接口
TTL(Transistor-Transistor Logic,双极型晶体管逻辑)
无线电通信数据收发
三极管
- 低电平0:0-0.4V
- 高电平1:2.4-5V
- 电压差:2V
- 传输距离:1米左右


RS232
水声通信接收端、铱星接收端、DVL、GPS接收端、备用接口


RS232负逻辑


电压差30V,抗干扰能力强,传输距离为15米


GPIO
无线电通信模块状态指示、休眠控制、RST接口
中继器、集线器、网桥、路由器
中继器(转发器),集线器,网桥,交换机介绍 - 拾月凄辰 - 博客园 (cnblogs.com)
中继器 Repeaters
物理层设备
-
中继器又称转发器,主要功能是将信号整形并放大再转发出去,以消除信号经过一长段电缆后,因噪声或其他原因而造成的失真和衰减,使信号的波形和强度达到所需要的事求,进而扩网络传输的距离。
- 放大器和中继器都起放大作用,只不过放大器放大的是模拟信号,原理是将衰减的信号放大,而中继器放大的是数字信号,原理是将衰减的信号整形再生。
- 如果某个网络设备具有存储转发的功能,那么可以认为它能连接两个不同的协议,如果该网络设备没有存储转发功能,那么认为它不能连接两个不同的协议。
- 中继器是没有存储转发功能的,因此它不能连接两个速率不同的网段,中继器两端的网段一定要使用同一个协议。
-
其原理是信号再生(而非简单地将衰减的信号放大)。
-
中继器有两个端口,数据从一个端口输入,再从另一个端口发出。端口仅作用于信号的电气部分,而不管数据中是否有错误数据或不适于网段的数据。
-
中继器的两端连接的是相同的媒体

集线器 Hub
物理层设备
集线器(Hub)实质上是一个多端口的中继器,不能存储转发。
-
连接多端
- 每个接口仅仅简单地转发比特——收到1就转发1,收到0就转发0,不进行碰撞检测。
-
多口的中继器
-
解决扩展性
问题:通信时,每台主机都会收到信息。例如:当左边的主机想跟右边的主机通信,通过集线器,所有的主机都会收到信息

网桥 Bridges
数据链路层设备
两个用集线器连接的主机群之间的连接
网络1和网络2通过网桥连接后,网桥接收网络1发送的数据帧,检查数据帧中的地址,如果是网络2的地址,那么就转发给网络2;如果是网络1的地址,那么就将其丢弃,因为源站和目的站处在同一个网段,目的站能够直接收到这个帧而不需要借助网桥转发。

交换机 switch
数据链路层和网络层设备
- 在网络层上,交换机根据IP地址进行数据包转发;
- 在数据链路层上,交换机根据MAC地址进行数据包转发。
交换机的实质是一个多端口的网桥,在数据链路层使用MAC地址转发数据。
集线器和网桥的组合
工作时,实际上允许许多组端口间的通道同时工作。
传输数据,互不打扰
作用:连接不同终端
当有多个终端,在一个局域网内,实现相互通信

通信流程
根据数据包的MAC地址找到对应的端口
每一个交换机有一个MAC地址表,MAC地址唯一

以太网交换机通信流程
假定在图3-25中的以太网交换机有4个接口,各连接一台计算机,其 MAC 地址分别是A,B,C和D。在一开始,以太网交换机里面的交换表是空的(图3-25(a))。

- A 先向B发送一帧,从接口1进入到交换机。
- 交换机收到帧后,先查找交换表,没有查到应从哪个接口转发这个帧(在MAC地址这一列中,找不到目的地址为B的项目)。
- 接着,交换机把这个帧的源地址A和接口1写入交换表中,并向除接口1以外的所有接口广播这个帧(这个帧就是从接口1进来的,当然不应当把它再从接口1转发出去)。
- C和D将丢弃这个帧,因为目的地址不对。只B才收下这个目的地址正确的帧。这也称为过滤。
- 假定接下来B通过接口3向A发送一帧。交换机查找交换表,发现交换表中的MAC地址有A。表明要发送给A 的帧(即目的地址为A的帧)应从接口1转发。于是就把这个帧传送到接口1转发给A。显然,现在已经没有必要再广播收到的帧。交换表这时新增加的项目(B.3),表明今后如有发送给B的帧,就应当从接口3转发出去。
- 经过一段时间后,只要主机C和D也向其他主机发送帧,以太网交换机中的交换表就会把转发到C或D应当经过的接口号(2或4)写入到交换表中。这样,交换表中的项目就齐全了。要转发给任何一台主机的帧,都能够很快地在交换表中找到相应的转发接口。
- 考虑到有时可能要在交换机的接口更换主机,或者主机要更换其网络适配器,这就需要更改交换表中的项目。为此,在交换表中每个项目都设有一定的有效时间。过期的项目就自动被删除。用这样的方法保证交换表中的数据都符合当前网络的实际状况。
有时为了增加网络的可靠性,在使用以太网交换机组网时,往往会增加一些冗余的链路。在这种情况下,可能导致以太网帧在网络的某个环路中无限制地兜圈子。

假定一开始主机A通过接口交换机#1向主机B发送一帧。交换机#1收到这个帧后就向所有其他接口进行广播发送。现观察其中一个帧的走向:离开交换机#1的接口3→交换机#2的接口1→接口2→交换机#1 的接口4→接口3→交换机#2的接口1… 。这样就无限制地循环兜圈子下去,白白消耗了网络资源。
为了解决这种兜圈子问题,IEEE的802.1D标准制定了一个生成树协议STP (SpanningTree Protocol)。其要点就是不改变网络的实际拓扑,但在逻辑上则切断某些链路,使得从一台主机到所有其他主机的路径是无环路的树状结构,从而消除了兜圈子现象。
有线传输

对于计算机,计算机的网卡通过网线连接到对应的交换机上
星型拓扑结构

无线传输
无线交换机是一种网络设备,用于在局域网中提供无线接入点(Access Point)和有线设备之间进行数据传输和通信的功能。它通过无线技术(如Wi-Fi)将无线终端设备连接到有线网络,并提供可靠的数据传输和高效的网络管理。
- 无线AP(无线接入点,Access Point):发射WiFi信号的发射器,功能单一,只是一个无线接入点
- 链路流程:设备 -无线-> 无线AP+网线+交换机,交换机进行数据转发
- 星型、网状或混合型拓扑结构

路由器 Router
网络层设备
-
有线路由器:这种类型的路由器通常只有有线连接端口,用于连接通过以太网线或其他有线连接方式连接到网络的设备。它们适用于需要连接大量有线设备的场景,如办公室网络或数据中心。
-
无线路由器:这种类型的路由器除了具有有线连接端口外,还具有无线局域网(Wi-Fi)功能,可以通过无线信号连接到网络的设备。无线路由器通常适用于家庭网络或需要移动性的场景,允许用户通过无线方式连接到网络,例如通过笔记本电脑、智能手机或平板电脑等设备。
-
路由器之间可以进行转发,这被称为路由器之间的路由。这通常发生在大型网络中,其中多个路由器连接在一起,用于将数据包从一个网络子网传输到另一个网络子网。
- 这种情况下,每个路由器都会维护一个路由表,其中包含了指示如何将数据包从一个子网传输到另一个子网的路由信息。当一个路由器接收到一个数据包时,它会根据目标IP地址查找其路由表,确定应该将数据包转发到哪个接口,并在必要时将其传输到下一个路由器。
- 这种路由器之间的转发通常是通过路由协议(例如OSPF、BGP等)来实现的,这些协议允许路由器之间交换路由信息,并根据网络拓扑和策略动态地更新路由表。
不同网络之间通信
不同网络的ID号(即IP地址)来确定数据转发的地址

- 连接不同网段

-
地址转换
- 私网地址 转换为 公网地址

- LAN口 接家庭网络设备
- WAN口 接运营商网络 连接英特网
- 如果忽略WAN口,路由器 = 交换机

网关
实现两个子网相互通信
子网划分


网关转发
网关拿到数据后 通过路由表 查询数据属于子网2
网关修改目标地址为计算机b的mac地址,修改原先的MAC为自己的MAC

家庭网络上网
问题:在两个不同家庭中,通过路由器接入的两台电脑,IP地址一致 ,IP地址冲突
分析:
数据包发送数据,是通过IP路由
如果IP冲突,会导致ARP表出现混乱,导致目标地址不确定

解决:让数据包从路由器发送出去时,变成不同的IP -> 修改IP -> 源地址转换SNAT
源地址转换SNAT
- 单台主机发送数据包

- 解析返回数据包
多台主机发送数据包,可以到达
解析返回数据包时,服务器处理的地址一致,出现IP混乱

方法:增加确定性标记 -> 扩展到传输层
举例:TCP协议
SNAT 转变为修改源IP和源端口,将修改后的端口号和源IP、源端口形成映射关系


目标地址转换 DNAT
解决问题:内网计算机对外提供服务,公网上发过来的请求不能到达直接到达内网计算机

直流电和交流电
直流电 (Direct Current,简称DC)和交流电 (Alternating Current,简称AC) 是两个最基本的电流形式
直流电(DC)
直流电是指电流的方向和大小恒定不变的电流。
直流电适用于需要稳定电源的设备和储能系统。
直流电通常由电池、直流发电机或直流电源产生。
特点:
- 电流方向恒定:电流总是从正极流向负极,方向不变。
- 电压恒定:电压值固定不变。
- 电能传输损耗较小:适用于短距离供电。
- 适用于储能:电池储存的能量是直流电。
应用:
- 电子设备:大多数电子设备(如手机、笔记本电脑)都使用直流电。
- 电动汽车:电动汽车中的电池提供直流电。
- 电镀和电解:化学工业中常使用直流电。
交流电(AC)
交流电是指电流的方向和大小随时间周期性变化的电流。
交流电适用于电力输送和大规模用电设备。
交流电通常由交流发电机产生,电网输电也使用交流电。

特点:
- 电流方向和大小周期性变化:电流的方向和大小随时间变化,一般是正弦波形式。
- 电压变化:电压值随时间变化,通常是正弦波。
- 传输效率高:适用于长距离输电。
- 变压方便:通过变压器可以方便地升高或降低电压。
应用:
- 家庭和工业电力:家用电器和工业设备大多使用交流电。
- 电力输送:电网通过高压交流电进行长距离输送,然后在使用地点降压。
- 电动机:大多数工业电动机使用交流电。
比较
-
方向和大小:
- 直流电:方向和大小恒定。
- 交流电:方向和大小周期性变化。
-
产生方式:
- 直流电:电池、直流发电机。
- 交流电:交流发电机。
-
传输和应用:
- 直流电:适用于短距离传输和储能。
- 交流电:适用于长距离传输和大规模供电。
| 特点 | 交流电 | 直流电 |
|---|---|---|
| 电流方向 | 周期性变化,正负方向交替 | 从正极到负极单向流动 |
| 原理 | 电荷在电路中来回摆动,电流方向周期性变化 | 电荷在电路中沿一个方向稳定地流动 |
| 电压波形 | 正弦波形 | 恒定或脉动式 |
| 频率 | 固定频率,通常为50或60赫兹 | 恒定电压为直流电,无频率概念 |
| 传输距离 | 适合长距离传输,通过变压器降低传输损耗 | 适合短距离传输,损耗较小 |
| 能量损耗 | 在传输过程中有一定的能量损耗 | 传输过程中能量损耗较小 |
| 设备成本 | 一些设备成本较高,如变频器和变压器 | 设备成本较低,适用于简单应用 |
| 电压稳定性 | 电压波动较大,需要稳压器平滑波动 | 电压稳定,不需要额外设备 |
| 电解过程应用 | 不适用于某些电解过程,因电流方向需保持一致 | 适用于某些电解过程,因电流方向单向流动 |
| 家庭用电 | 广泛用于家庭电器,提供稳定的电能供应 | 并不直接用于家庭用电,因为交流电在电力传输方面具有优势 |
| 应用领域 | 电力传输、家庭用电、工业生产、交通运输等领域 | 电子设备、能源储存与分配、交通运输等领域 |
时间同步
主机
安装NTP
sudo apt-get install ntp
修改配置文件
sudo gedit /etc/ntp.conf
注释
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
pool ntp.ubuntu.com
添加
restrict 从机IP地址 mask 255.255.255.0 nomodify
server 127.127.1.0 #从自己获取时间,没有就需要新添加的
fudge 127.127.1.0 stratum 10 #设置自己的层级,没有就需要新添加的
修改
restrict -4 default kod notrap nomodify nopeer #在原来基础上去掉这2个字段 noquery limited
restrict -6 default kod notrap nomodify nopeer #在原来基础上去掉这2个字段 noquery limited

关闭防火墙
sudo ufw disable
取消对123端口的限制
sudo iptables -t filter -A INPUT -p udp --destination-port 123 -j ACCEPT
重启
sudo /etc/init.d/ntp restart
从机
安装NTP和NTPDDATE
sudo apt-get install ntp ntpdate
修改配置文件
sudo gedit /etc/ntp.conf
注释
pool 0.ubuntu.pool.ntp.org iburst
pool 1.ubuntu.pool.ntp.org iburst
pool 2.ubuntu.pool.ntp.org iburst
pool 3.ubuntu.pool.ntp.org iburst
pool ntp.ubuntu.com
添加
server 主机IP prefer
修改
restrict -4 default kod notrap nomodify nopeer #在原来基础上去掉这2个字段 noquery limited
restrict -6 default kod notrap nomodify nopeer #在原来基础上去掉这2个字段 noquery limited

关闭防火墙
sudo ufw disable
取消对123端口的限制
sudo iptables -t filter -A INPUT -p udp --destination-port 123 -j ACCEPT
重启
sudo /etc/init.d/ntp restart
sudo ntpdate -u 主机IP
报错:no server suitable for synchronization found
查看连接情况
ntpdate -d 主机IP
Server dropped: strata too high
显示“stratum 16”。而正常情况下stratum这个值得范围是“0~15”
这是因为NTP server还没有和其自身或者它的server同步上
查看同步过程
watch ntpq -p
CMake
# 设置最低的 CMake 版本要求
cmake_minimum_required(VERSION 3.0)
# 设置项目名称
project(sonar)
add_compile_options(-std=c++11)
# 添加编译选项
set(CMAKE_CXX_STANDARD 11)
add_definitions(-DOS_UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -DOS_UNIX")
# 添加包含目录
include_directories(
src/include
src/islSdk
src/islSdk/helpers
src/islSdk/platform
)
# 添加源文件
file(GLOB SOURCES
"src/src/*.c"
"src/src/*.cpp"
)
# 添加可执行文件
add_executable(main ${SOURCES} src/src/main.cpp)
# 添加链接库
target_link_libraries(main ${CMAKE_CURRENT_SOURCE_DIR}/src/islSdk/islSdk_X64.a)
在终端下切到main.c所在的目录下,然后输入以下命令运行cmake,
cmake .
make
make clean
./main
ROS
安装
wget http://fishros.com/install -O fishros && . fishros
ros版本
echo $ROS_DISTRO
修改IP地址
virtual-machine:~$ vim ~/.bashrc
export ROS_IP=192.168.23.130
virtual-machine:~$ source ~/.bashrc
启动ros
virtual-machine:~$ roscore
编译
catkin_make
source devel/setup.bash
rosrun n_infor_router n_infor_router
查看订阅发布情况
virtual-machine:~$ rostopic list -v
查看发布的数据
rostopic echo msg_auv_mission
catkin_make报错
ROS "Could not find the required component ‘serial’. " 解决方法-CSDN博客
问题:Command ‘catkin_make‘ not found, but can be installed with:sudo apt install catkin
source /opt/ros/melodic/setup.bash
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
ros驱动包
如何配置ROS驱动功能包-电子发烧友网 (elecfans.com)

sudo apt-get install ros-melodic-serial
export动态库
source ~/AUV/auv-ics-software-simu/devel/setup.bash
export LD_LIBRARY_PATH=/home/wicri/HCWORK/hsdk/sdk/lib:$LD_LIBRARY_PATH
# export ROS_IP=192.168.3.102
export LD_LIBRARY_PATH=$PATH:/home/shh/wicriplat-master/HSdk/Sdk/lib
export: 这是一个用于设置环境变量的命令。在这种情况下,它用于设置LD_LIBRARY_PATH环境变量。LD_LIBRARY_PATH: 这是一个重要的环境变量,用于指定动态链接库(共享库)的搜索路径。当你执行一个程序时,操作系统会根据LD_LIBRARY_PATH的设置来查找程序所需要的动态链接库。如果动态链接库不在标准的系统路径下,就需要将包含这些库的路径添加到LD_LIBRARY_PATH中。$PATH: 在这里,$PATH是一个环境变量,代表当前的路径。$PATH是一个默认的系统环境变量,用于指定可执行程序的搜索路径。:/home/shh/wicriplat-master/HSdk/Sdk/lib: 这部分是你要添加到LD_LIBRARY_PATH中的新路径。它指向你的系统中的一个目录,该目录包含一些动态链接库文件。
时钟偏差find ./ -type f|xargs touch
find ./ -type f|xargs touch
这个命令在 Linux 或 Unix 系统中用于更新或创建指定文件的时间戳
效果是:递归查找当前目录及其所有子目录中的所有文件,并更新它们的时间戳。如果文件不存在,touch 会创建一个空文件(但由于文件是从 find 命令中得到的,所以这些文件应该都是已经存在的文件)。
-
find ./ -type f:find: 一个在文件系统中搜索文件和目录的命令。./: 当前目录。可以替换为任何其他目录路径。-type f: 只查找文件(不包括目录、链接等)。
这一部分命令会递归地查找当前目录及其子目录中的所有文件,并将文件路径输出到标准输出。
-
|: 管道操作符,将前一个命令的输出作为下一个命令的输入。 -
xargs touch:xargs: 一个构建并执行命令行的工具,通常与管道一起使用。touch: 一个用于更改文件时间戳的命令(包括访问时间和修改时间)。如果指定的文件不存在,touch会创建一个空文件。
xargs touch会将从find命令输出的文件路径列表传递给touch命令,以便对每个文件执行touch操作。
手动修改Linux 有线ip地址
sudo vim /etc/netplan/**.yaml
network:
version: 2
renderer: networkd
ethernets:
eth0:
dhcp4: no
addresses:
- 192.168.5.102/24
gateway4: 192.168.5.1
sudo netplan apply
修改解析域名
Ubuntu 20.04 server不能ping,提示“Temporary failure in name resolution”的解决方法-CSDN博客
连接外网方法:方法1.使用4G模块提供外网,主控板ip设置为DHCP,修改/etc/netplan/**.yaml
yaml文件内容如下:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:(enp3s为网卡名,根据实际填写)
dhcp4: true
方法2:连接网线连接研究院网络
如果使用 WPA-EAP 和 TTLS 保护网络:
network:
version: 2
wifis:
wl0:
access-points:
workplace:
auth:
key-management: eap
method: ttls
anonymous-identity: "@internal.example.com"
identity: "joe@internal.example.com"
password: "v3ryS3kr1t"
dhcp4: yes
如果使用 WPA-EAP 和 TLS 保护网络
network:
version: 2
wifis:
wl0:
access-points:
university:
auth:
key-management: eap
method: tls
anonymous-identity: "@cust.example.com"
identity: "cert-joe@cust.example.com"
ca-certificate: /etc/ssl/cust-cacrt.pem
client-certificate: /etc/ssl/cust-crt.pem
client-key: /etc/ssl/cust-key.pem
client-key-password: "d3cryptPr1v4t3K3y"
dhcp4: yes
域名解析方法:
在/etc/resolv.conf添加:
nameserver 8.8.8.8
nameserver 8.8.4.4
ping 百度
curl www.baidu.com
curl 是一个命令行工具,用于向指定的 URL 发送请求并显示响应内容。curl www.baidu.com 命令的作用是向 www.baidu.com 发送一个 HTTP 请求,并将响应结果输出到终端。
安装g++
sudo apt update
sudo apt install build-essential
查看当前所有tcp端口
netstat
- netstat 命令:用于显示各种网络相关信息,如网络连接,路由表,接口状态,无效连接,组播成员 等等。
- netstat命令是net-tools软件包中的一员

[root@web129 ~]# netstat 选项
选项:
-a: 列出系统中所有网络连接,包括已经连接的网络服务、监听的网络服务和Socket套接字
-t: 列出TCP数据 -u: 列出UDP数据
-l: 列出正在监听的网络服务(不包含已经连接的网路服务)
-n: 用端口显示服务,而不用服务名
-p: 列出该服务的进程ID(PID)
查看所有端口号的占用情况
netstat -ntlp
查看具体端口号的占用情况
netstat -tunlp|grep 端口号
[root@web129 ~]# netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1490/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1989/master
tcp6 0 0 :::80 :::* LISTEN 852/httpd
tcp6 0 0 :::22 :::* LISTEN 1490/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1989/master
udp 0 0 127.0.0.1:323 0.0.0.0:* 524/chronyd
udp6 0 0 ::1:323 :::* 524/chronyd
ss
ss是Socket Statistics的缩写
- ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容。但是ss的优势在于它能够显示更详细的有关网络连接的状态信息,而比netstat更快速、更高效。
- ss命令是iproute2软件包中的一员
查看当前服务器的网络连接数
[root@web129 ~]# ss -s
Total: 580 (kernel 1020)
TCP: 8 (estab 2, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0
Transport Total IP IPv6
* 1020 - -
RAW 0 0 0
UDP 4 3 1
TCP 7 4 3
INET 11 7 4
FRAG 0 0 0
查看所有打开的网络端口
[root@web129 ~]# ss -l
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:1736442360 *
nl UNCONN 768 0 rtnl:dockerd/853 *
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:1736442360 *
nl UNCONN 4352 0 tcpdiag:ss/4865 *
nl UNCONN 768 0 tcpdiag:kernel *
nl UNCONN 0 0 xfrm:kernel *
nl UNCONN 0 0 xfrm:dockerd/853 *
nl UNCONN 0 0 selinux:kernel *
[root@web129 ~]# ss -pl #列出具体的程序名字Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port nl UNCONN 0 0 rtnl:1736442360 * nl UNCONN 768 0 rtnl:dockerd/853 *
tcp LISTEN 0 128 :::http :::* users:(("httpd",pid=2493,fd=4),("httpd",pid=2492,fd=4),("httpd",pid=2491,fd=4),("httpd",pid=2490,fd=4),("httpd",pid=2489,fd=4),("httpd",pid=852,fd=4))tcp LISTEN 0 128 :::ssh :::*
查看这台服务器上所有的Socket 连接
[root@web129 ~]# ss -a #列出所有网络连接
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
nl UNCONN 0 0 rtnl:1736442360 *
nl UNCONN 768 0 rtnl:dockerd/853 *
nl UNCONN 0 0 rtnl:kernel *
nl UNCONN 0 0 rtnl:1736442360 *
[root@web129 ~]# ss -ta #查看TCP socket
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:ssh *:*
LISTEN 0 100 127.0.0.1:smtp *:*
ESTAB 0 0 192.168.19.129:ssh 192.168.19.1:ratio-adp
ESTAB 0 0 192.168.19.129:ssh 192.168.19.1:cpq-wbem
LISTEN 0 128 :::http :::*
LISTEN 0 128 :::ssh :::*
LISTEN 0 100 ::1:smtp :::*
[root@web129 ~]# ss -ua #查看UDP Socket
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 127.0.0.1:323 *:*
ESTAB 0 0 192.168.19.129:53193 185.134.197.4:ntp
ESTAB 0 0 192.168.19.129:55294 193.228.143.12:ntp
ESTAB 0 0 192.168.19.129:49316 85.199.214.101:ntp
UNCONN 0 0 ::1:323 :::*
[root@web129 ~]#
[root@web129 ~]# ss -wa #查看RAW socket
State Recv-Q Send-Q Local Address:Port Peer Address:Port
[root@web129 ~]# ss -xa #查看UNIX socket
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
u_str LISTEN 0 128 /run/docker/libnetwork/2607d31c4b65ff68cf08c24cc6d5e4687dad654f9ec402872e98f8dcc79f448f.sock 25859 * 0
u_str LISTEN 0 100 private/rewrite 24960 * 0
u_str LISTEN 0 100 private/bounce 24963 * 0
u_str LISTEN 0 100 private/defer 24966 * 0
u_str LISTEN 0 100 private/trace 24969 * 0
ps根据程序名称查询进程ID
ps命令(全称:process status)是linux查看当前系统中进程状态的常用命令,比如我们可以通过以下命令查看当前系统所有进程信息:
aux是BSD风格
ps -aux
PID 代表进程标识号process identification,它在大多数操作系统内核(如 Linux、Unix、macOS 和 Windows)中使用。它是在操作系统中创建时自动分配给每个进程的唯一标识号。
显示所有进程,-ef是System V风格
ps -ef
ps -ef|grep 进程名
UID:拥有者 PID:程序id PPID:父级id C:CPU STIME:系统启动时间 TTY:登入者的终端机位置 TIME:使用掉的cpu时间 CMD:下达的指令

如果查看指定的进程,如java进程,可以通过管道符和grep命令进行过滤,命令如下:
ps -aux|grep java
杀死进程
sudo kill -9 PID
#查看java进程
ps -aux|grep java
#获取java进程号,如55555,通过kill命令关闭进程(-9表示强制关闭)
kill -9 55555
ps aux 当前系统上运行的进程的详细信息
ps aux
输出包括以下列:
USER:进程所有者
PID:进程ID
%CPU:CPU使用率
%MEM:内存使用率
VSZ:虚拟内存大小(KB)
RSS:驻留内存大小(KB)
TTY:控制台(tty)的名称
STAT:进程状态
START:进程启动时间
TIME:累计CPU时间
COMMAND:执行的命令行
top监控linux的系统状况
top命令
经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况
top - 15:12:30 up 10 days, 4:21, 1 user, load average: 0.30, 0.24, 0.20
Tasks: 142 total, 1 running, 141 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0 us, 0.3 sy, 0.0 ni, 98.4 id, 0.2 wa, 0.0 hi, 0.1 si, 0.0 st
KiB Mem : 8051328 total, 543204 free, 1587328 used, 5920796 buff/cache
KiB Swap: 8191996 total, 8191996 free, 0 used. 6110208 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 user 20 0 158380 10460 3896 S 0.3 0.1 0:03.76 myprocess
5678 user 20 0 122504 38232 7540 S 1.0 0.5 1:15.32 anotherprocess
%MEM 显示的是每个进程使用的物理内存占总物理内存的百分比。
RES(Resident Set Size):这是进程当前使用的物理内存的大小,单位为 KiB。包括进程实际占用的内存,但不包括共享库和内核分配的内存。
总物理内存:这是系统中所有物理内存的总和,可以在 top 命令输出的 KiB Mem 行看到。
读取温度传感器的温度值(内核温度)
cat /sys/devices/virtual/thermal/thermal_zone1/temp
cat /sys/devices/virtual/thermal/thermal_zone1/temp
这个命令会输出 thermal_zone1 传感器的当前温度值。通常,这个温度值是以千摄氏度为单位的(例如,如果文件内容是 45000,则表示传感器温度是 45.000 摄氏度)。
cat: 这是一个用于显示文件内容的命令。/sys/devices/virtual/thermal/thermal_zone1/temp: 这是一个文件路径,位于/sys虚拟文件系统中。该文件系统提供了内核与设备之间的接口。
具体来看:
/sys: Linux 中的一个虚拟文件系统,提供了内核与硬件设备的接口。/devices: 该目录包含了所有连接到系统上的设备信息。/virtual: 虚拟设备的目录。/thermal: 该目录包含了系统中的温度传感器信息。/thermal_zone1: 这是系统中的一个温度传感器(可能还有其他传感器,例如thermal_zone0、thermal_zone2等等)。/temp: 这是包含温度传感器当前温度值的文件。
后台启动nohup
nohup:
nohup(“no hang up” 的缩写)命令用于运行另一个命令并忽略挂起信号(SIGHUP)。- 使用
nohup,即使关闭终端,命令也会继续运行。
nohup roscore >core.txt 2>&1 & 这个命令在 Linux 或 Unix 系统中用于后台启动 roscore,并且将其标准输出和标准错误都重定向到 core.txt 文件中。即使关闭终端,roscore 也会继续运行。
nohup rosrun n_info_router n_info_router >info.txt 2>&1 & 这个命令在 Linux 或 Unix 系统中用于后台运行 ROS 节点 n_info_router,并且将其标准输出和标准错误都重定向到 info.txt 文件中。即使关闭终端,n_info_router 节点也会继续运行。
nohup rosrun n_auv_sonarFoward n_auv_sonarFoward >sonar07022.txt 2>&1 &
nohup ./main >sonar0702.txt 2>&1 &
nohup ./sdkExample >sonar07022.txt 2>&1 &
nohup rosrun n_info_router n_info_router >Sea150.txt 2>&1
比特率和波特率
波特率:1s中波形变化的次数
比特率:1s中传送的信号数

举例:




串口配置
串口操作
查看串口
ls -l /dev/ttyUSB*
打开串口助手
sudo cutecom
打开串口权限
sudo chmod 777 /dev/ttyUSB0
id -Gn <username>
sudo usermod -a -G dialout <username>

注意:两个设备之间的 TXD 与 RXD 应交叉相连

串行通信奇偶校验
奇偶校验是一种错误检测机制,常用于串行通信中,确保传输的数据的完整性。
下面设置通常用于配置串行端口,以确保与通信的另一端保持一致的通信协议。例如,在初始化串行通信端口时,可以指定使用何种奇偶校验类型,以便正确发送和接收数据。
UART_NO_PARITY: 无奇偶校验(No Parity)。这是最简单的形式,不添加额外的校验位。UART_ODD_PARITY: 奇校验(Odd Parity)。发送数据时,添加一个校验位,使得所有1的个数为奇数。UART_EVEN_PARITY: 偶校验(Even Parity)。发送数据时,添加一个校验位,使得所有1的个数为偶数。UART_MARK_PARITY: 标记校验(Mark Parity)。校验位始终设置为1。UART_SPACE_PARITY: 空格校验(Space Parity)。校验位始终设置为0。UART_UNKNOWN_PARITY: 未知校验类型(Unknown Parity)。用于表示未知或未定义的校验类型。
串行通信停止位
停止位用于标志一个数据包的结束,并使接收设备有时间准备接收下一个数据包。
UART_1_STOPBIT: 使用1个停止位(1 Stop Bit)。这是最常见的设置,在每个数据包的末尾添加1个停止位。UART_1HALF_STOPBIT: 使用1.5个停止位(1.5 Stop Bits)。这种设置较为罕见,通常用于某些特定的通信协议。UART_2_STOPBIT: 使用2个停止位(2 Stop Bits)。在每个数据包的末尾添加2个停止位,用于需要更长间隔时间的通信场景。UART_UNKNOWN_STOPBIT: 未知停止位(Unknown Stop Bit)。用于表示未知或未定义的停止位类型。
microcom串口连接到设备的控制台进行调试
busybox microcom -t 10000 /dev/ttyUSB0
busybox microcom -t 10000 /dev/ttyUSB0 这个命令用于在 Linux 系统中使用 busybox 提供的 microcom 工具来连接到一个串行设备(例如,通过 USB 接口连接的串行端口),并设置连接的超时时间。
这个命令的效果是:使用 busybox 提供的 microcom 工具连接到 /dev/ttyUSB0 设备,并设置超时时间为 10000 毫秒(10 秒)。这意味着 microcom 将尝试与 /dev/ttyUSB0 设备通信,并且在 10 秒内如果没有收到任何数据,将会超时。
-
busybox:busybox是一个软件工具,它集成了许多 Unix 工具的缩减版,适用于嵌入式系统。busybox提供了一个单一的可执行文件,包含了多个常用的命令和工具。
-
microcom:microcom是一个简单的串行端口通信程序,类似于minicom或cu。busybox microcom是使用busybox提供的microcom工具。
-
-t 10000:-t选项用于设置连接的超时时间。10000表示超时时间为 10000 毫秒(即 10 秒)。
-
/dev/ttyUSB0:- 这是一个设备文件,表示通过 USB 接口连接的第一个串行端口。
- 在 Linux 系统中,
/dev/ttyUSB0通常表示一个 USB 转串口设备。
设置波特率
-t 单位毫秒,无操作自动退出时间。
-s 单位bps,串口波特率。
ttyS0 要操作的串口。
busybox microcom -t 15000 -s 115200 /dev/ttysWK1
busybox microcom -t 15000 -s 115200 /dev/ttyUSB0
busybox microcom -t 1500 -s 115200 /dev/ttyUSB3
检查驱动模块:
使用以下命令可以查看系统中所有串口设备:
dmesg | grep tty
固定串口号
ubuntu工控机固定设备usb串口号(详细)_ubuntu固定串口号-CSDN博客
udev 是 Linux 系统中的设备管理器,负责动态地创建和删除 /dev 目录中的设备文件
查看串口名称
udevadm info /dev/ttyUSB0
“1-1:1.0”就是工控机usb口的固定接口名

或者
udevadm info --attribute-walk --name=/dev/ttyUSB4 |grep KERNELS
udevadm info --attribute-walk --name=/dev/ttyUSB4:显示设备/dev/ttyUSB4及其父设备的所有属性。grep KERNELS:过滤输出,仅显示包含KERNELS的行。
建.rules文件
进入文件夹:计算机->etc->udev->rules.d
里面新建一个.rules文件(自己随意命名)
ACTION=="add",KERNELS=="1-4:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="t_serial"
ACTION=="add",KERNELS=="1-1:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="serial"
其中的"1-4:1.0"和"1-1:1.0"为usb口的固定接口名,"t_serial"与"serial"为对应usb串口名(用的时候表示为“/dev/t_serial”和“/dev/serial”)
命名:t_serial,不能与之前名字一样:ttyUSB4
拔掉串口编译
sudo service udev reload
sudo service udev restart

或者
sudo udevadm trigger
或者 触发特定设备
sudo udevadm trigger --name-match=/dev/ttyUSB0
udevadm:设备管理命令行工具。trigger:触发 udev 事件,导致系统重新扫描所有设备。
检查
检查设备文件 /dev/ttyUSB0 是否存在
ls -l /dev | grep ttyUSB0
ls -l /dev:列出/dev目录下的所有文件和目录的详细信息。grep ttyUSB0:过滤输出,只显示包含ttyUSB0的行。
SSH 远程终端
s w@192.168.5.102
SSH 传输文件
将名为 example.txt 的文件从本地计算机复制到 IP 地址为 192.168.5.102 的远程计算机并将其保存在 /home/wi目录中
scp example.txt wi@192.168.5.102:/home/wi
将文件从远程计算机复制到本地计算机,可以反转源参数和目标参数
命令末尾的点 (.) 指定当前工作目录作为目标
scp wi@192.168.5.102:/home/wi/example.txt .
拷贝到本地目录 C:\local\directory
scp wi@192.168.5.102:/home/wi/auv-ics-software/src/n_nodes/n_auv_sonarFoward/log/n_auv_sonarFoward_2024-07-02.log D:\ISA500\log
df -h 系统上各个文件系统的磁盘空间使用情况摘要
Linux 磁盘管理常用三个命令为 df、du 和 fdisk。
- df(英文全称:disk full):列出文件系统的整体磁盘使用量
- du(英文全称:disk used):检查磁盘空间使用量
- fdisk:用于磁盘分区
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 20G 10G 8.0G 55% /
/dev/sda2 100G 50G 45G 53% /home
这个输出表示有两个文件系统:
/dev/sda1: 总共有 20GB 的空间,已使用 10GB,剩余 8GB,使用率为 55%,它是根目录的文件系统。
/dev/sda2: 总共有 100GB 的空间,已使用 50GB,剩余 45GB,使用率为 53%,它是 /home 目录的文件系统。
复制cp
这条命令会将/etc/apt/sources.list文件复制到/home目录中。如果成功执行,在/home目录下会有一个同名的sources.list文件。
cp /etc/apt/sources.list /home/
cp: 这是Linux中的复制命令,用于复制文件或目录。/etc/apt/sources.list: 这是源文件路径。/etc/apt/sources.list是APT包管理器的源列表文件,包含了系统软件包的下载源。/home/: 这是目标路径,表示将文件复制到/home目录下。
如果/home/目录下已经存在同名的文件,这条命令会覆盖它。如果不希望覆盖,可以修改目标文件名或者使用-i选项提示确认:
cp -i /etc/apt/sources.list /home/
挂载
挂载(Mount)是将文件系统连接到系统目录树中的过程。通过挂载,可以使得外部的存储设备(如硬盘分区、USB闪存驱动器、网络文件系统等)在系统中可用,从而可以访问其中的文件和目录。
注意,在操作挂载和卸载文件系统时,需要具有足够的权限,通常需要使用 sudo 或者是 root 权限。
-
确定挂载点:首先,你需要确定将要挂载的文件系统的挂载点,这是一个现有的空目录,用于在系统中访问挂载的文件系统。
sudo mkdir /mnt/external_storage -
执行挂载命令:使用
mount命令来执行挂载操作。mount [options] device directory device 是要挂载的设备文件或者网络共享的位置。 directory 是挂载点,即文件系统将被挂载到该目录。 -
例如:要将名为
/dev/sdb1的设备挂载到/mnt/external_storage目录下,可以使用以下命令 -
设备名称:通过
lsblk -f或者fdisk -l
sudo mount /dev/sdb1 /mnt/external_storage
挂载完成后,/dev/sdb1 中的内容将在 /mnt/external_storage 下可见。记得在操作前确保目标挂载点存在,并且有足够的权限。
-
要卸载已经挂载的文件系统
umount-
sudo umount /mnt/external_storage
压缩
zip
sudo apt-get install zip
zip ttysWK1.zip ttysWK1
如果 ttysWK1 是目录而不是文件,你需要使用 -r 选项递归压缩整个目录:
zip -r ttysWK1.zip ttysWK1
解压
unzip filename.zip
将documents.zip解压到/path/to/destination目录:
unzip documents.zip -d /path/to/destination
tax
tar命令用于创建和解压缩归档文件。通常与其他压缩工具结合使用,如gzip、bzip2、xz。
压缩
# 使用 gzip 压缩
tar -czvf archive.tar.gz /path/to/directory
# 使用 bzip2 压缩
tar -cjvf archive.tar.bz2 /path/to/directory
# 使用 xz 压缩
tar -cJvf archive.tar.xz /path/to/directory
解压
# 解压 gzip 压缩的 tar 包
tar -xzvf archive.tar.gz
# 解压 bzip2 压缩的 tar 包
tar -xjvf archive.tar.bz2
# 解压 xz 压缩的 tar 包
tar -xJvf archive.tar.xz
WiFi 自启
Linux系统将WiFi配置为AP模式 — hostapd 和 udhcpd的使用说明-CSDN博客
无线接入点(Access Point,AP)
无线接入点(Access Point,AP)是网络硬件设备,它允许无线设备(如笔记本电脑、智能手机、平板电脑等)通过无线局域网(WLAN)连接到有线网络。AP通常用在家庭、办公室、公共场所(如咖啡馆、机场)等环境中,以提供无线网络接入服务。
主要功能
- 无线信号传输:AP通过无线电波向周围的设备广播无线网络信号,使无线设备可以搜索并连接到该网络。
- 网络桥接:AP将无线设备连接到有线网络,充当桥梁角色,允许无线设备访问有线网络资源(如服务器、打印机)和互联网。
- 扩展网络覆盖范围:通过设置多个AP,可以扩展无线网络的覆盖范围,确保在大面积区域内提供稳定的无线网络连接。
- 安全管理:AP提供多种安全功能,如加密(WEP、WPA、WPA2)、MAC地址过滤、隐藏SSID等,以保护无线网络免受未经授权的访问。
工作模式
AP可以工作在以下几种模式下:
- 基础设施模式:这是最常见的模式,AP连接到有线网络,提供无线接入服务。所有的无线设备通过AP与有线网络进行通信。
- 中继模式:AP作为中继器,扩展无线网络的覆盖范围。它接收信号并重新发送,以覆盖更大的区域。
- 桥接模式:两个AP之间建立无线桥接,连接两个有线网络,使其可以通过无线链路互相通信。
- 客户端模式:AP充当无线客户端,连接到另一个AP,实现无线设备通过AP连接到有线网络。
配置和管理
- 配置参数:AP的配置通常通过网页界面或专用管理软件完成。常见配置参数包括SSID(无线网络名称)、信道、加密方式、IP地址等。
- 管理功能:高级AP通常提供更多管理功能,如用户认证(RADIUS服务器)、流量控制、带宽管理、VLAN(虚拟局域网)支持等。
类型和应用
- 家庭用AP:通常集成在无线路由器中,提供基本的无线网络覆盖和安全功能。
- 企业用AP:具备更强的性能和更多的管理功能,适合高密度用户环境,支持更复杂的网络结构和安全要求。
- 户外AP:设计用于户外环境,具有防水、防尘、防雷等特性,通常用于公共场所、大型活动、工业园区等。
优点和挑战
-
优点:
- 提供灵活的网络接入方式,方便用户移动和使用无线设备。
- 扩展网络覆盖范围,适应不同场景的需求。
- 提供多种安全措施,保护网络免受攻击。
-
挑战:
- 无线信号的干扰和衰减,影响连接质量。
- 安全风险高,需要定期更新和维护安全设置。
- 多AP环境下的信道规划和管理复杂。
步骤
配置 WiFi AP
目的: 配置 WiFi AP 使您的设备可以作为一个无线接入点,让其他设备可以连接到它。
步骤:
- 安装和配置
hostapd:设置无线网络的 SSID 和密码,管理无线连接 - 安装和配置
dnsmasq:提供 DHCP 服务,分配 IP 地址给连接到 AP 的设备 -
sudo apt-get update sudo apt-get install hostapd dnsmasq
启用 IP 转发
目的: 使通过 WiFi AP 连接的设备能够访问通过以太网接口连接的设备,即在不同网络接口之间转发 IP 数据包。
步骤:
- 启用系统的 IP 转发功能。通过设置
net.ipv4.ip_forward=1,允许内核将 IP 数据包从一个接口转发到另一个接口。
设置 NAT
目的: 在不同网络接口之间实现网络地址转换,使连接到 WiFi AP 的设备能够通过以太网接口访问外部网络。
步骤:
- 使用
iptables配置 NAT 规则,将从wlan0发出的流量通过eth0接口进行网络地址转换,使其能够与外部网络通信。
配置自启动脚本
目的: 确保在系统启动时自动执行上述配置,以便每次启动时 WiFi AP 自动启动并配置好网络转发和 NAT 规则。
步骤:
- 创建一个启动脚本,包含启动 WiFi AP 和配置 IP 转发及 NAT 的所有步骤。
- 配置脚本为自启动脚本,使其在系统启动时自动运行。
总结
无线接入点(AP)是现代无线网络中的关键设备,通过提供无线网络接入服务,满足用户在各种场景下的无线通信需求。随着技术的发展,AP的功能和性能不断提升,为用户提供更加稳定、安全、便捷的无线网络体验。
无线站点(Station,STA)
无线站点(Station,STA)是指连接到无线局域网(WLAN)的任何无线设备。STA通常指使用Wi-Fi技术的设备,如智能手机、笔记本电脑、平板电脑、无线打印机和智能家居设备。STA通过与无线接入点(AP)通信,接入无线网络,实现数据传输和互联网连接。
主要功能
- 无线通信:STA使用无线电波与AP通信,通过Wi-Fi协议(如802.11a/b/g/n/ac/ax)实现无线数据传输。
- 网络接入:STA通过AP连接到有线网络,访问网络资源和互联网。
- 移动性支持:STA可以在无线网络覆盖范围内自由移动,保持与网络的连接。
- 多媒体传输:STA可以进行音频、视频、图片等多媒体数据的无线传输,支持高清视频通话、视频流播放等应用。
工作模式
STA的工作模式主要包括以下几种:
- 基础设施模式:这是最常见的模式,STA通过AP连接到无线网络。AP作为中心节点,所有的STA通过AP进行通信。
- Ad-Hoc模式:也称为对等模式,STA之间直接通信,无需AP。此模式适用于临时网络、小型组网等场景。
配置和管理
- 无线网络配置:STA需要配置无线网络参数,如SSID(无线网络名称)、加密方式(WEP、WPA、WPA2)、密码等,以便连接到无线网络。
- IP地址配置:STA需要获取IP地址,可以通过DHCP(动态主机配置协议)自动获取,也可以手动配置静态IP地址。
- 网络诊断:STA通常提供网络诊断工具,如信号强度检测、网络速度测试、故障排除等,以帮助用户解决连接问题。
类型和应用
- 智能手机和平板电脑:最常见的STA设备,广泛应用于日常通信、互联网访问、移动办公、娱乐等场景。
- 笔记本电脑:用于办公、学习、娱乐等,提供便捷的无线网络接入。
- 无线打印机:允许用户通过无线网络进行打印操作,适用于家庭和办公环境。
- 智能家居设备:如智能灯泡、智能门锁、智能音箱等,通过无线网络实现远程控制和自动化管理。
- 物联网设备:如传感器、摄像头等,连接到无线网络,实现数据采集和监控。
优点和挑战
-
优点:
- 提供灵活的网络接入方式,方便用户随时随地连接网络。
- 支持多种应用场景,包括通信、娱乐、办公、智能家居等。
- 简化网络布线,减少物理连接的复杂性。
-
挑战:
- 无线信号受环境干扰和衰减影响,可能导致连接质量不稳定。
- 需要定期更新和维护安全设置,以防止未经授权的访问和数据泄露。
- 多STA设备同时连接时,可能会造成网络拥塞,影响传输速度。
总结
无线站点(STA)是无线网络中的重要组成部分,通过连接无线接入点(AP)实现无线网络接入。STA设备种类繁多,应用广泛,为用户提供便捷的无线通信和网络服务。随着技术的不断进步,STA的性能和功能也在不断提升,进一步满足用户对无线网络的需求。
iw list 显示无线设备的详细信息
iw list 命令用于显示无线设备的详细信息,包括支持的频段、信道、功率和其他特性。
-
Wiphy 设备信息:
-
Wiphy phy0:无线设备的物理名称。 -
max # scan SSIDs:最大扫描 SSID 数量。- SSID(Service Set Identifier,服务集标识符)是无线网络(Wi-Fi)的名称,用于唯一标识一个无线局域网(WLAN)。每个无线网络都有一个唯一的SSID,通常由无线访问点(AP)或无线路由器广播,以便客户端设备(如笔记本电脑、智能手机、平板电脑等)能够发现并连接到该网络
-
max scan IEs length:最大扫描信息元素长度。 -
Retry short limit和Retry long limit:短重试和长重试的限制次数。
-
-
支持的加密协议:
Supported Ciphers列出了设备支持的加密协议,如 WEP40、WEP104、TKIP、CCMP-128、CMAC、GCMP-128、GCMP-256、CMAC-256、GMAC-128、GMAC-256。
-
支持的接口模式:
Supported interface modes列出了设备支持的接口模式,如 IBSS、managed、AP、AP/VLAN、monitor、P2P-client、P2P-GO、P2P-device。
-
频段信息:
Band 1和Band 2:分别表示 2.4 GHz 和 5 GHz 频段的详细信息。Capabilities:设备的能力,如 HT20/HT40、SM Power Save、TX/RX STBC 等。Frequencies:每个频段支持的频率和最大发射功率。
为了更全面地了解 wlp2s0 的配置,可以先运行以下命令来查看完整信息:
sudo iw wlp2s0 info
然后,根据具体输出内容筛选和查看与 802.11 相关的信息。通常,无线接口信息会显示如下内容:
- 接口类型(如 managed, AP, monitor 等)
- MAC 地址
- 频率
- 信道
- 传输功率
示例输出可能类似于以下内容:
Interface wlp2s0
ifindex 3
wdev 0x1
addr 12:34:56:78:9a:bc
type managed
wiphy 0
channel 6 (2437 MHz), width: 20 MHz, center1: 2437 MHz
txpower 20.00 dBm
iwconfig 配置和显示无线网络
iwconfig 是一个用于配置和显示无线网络接口的命令行工具
查看无线接口信息
iwconfig
示例输出:
wlp2s0 IEEE 802.11 ESSID:"MyNetwork"
Mode:Managed Frequency:2.437 GHz Access Point: 00:14:BF:3B:C7:A0
Bit Rate=54 Mb/s Tx-Power=20 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=70/70 Signal level=-40 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:18 Missed beacon:0
解释:
wlp2s0: 无线接口的名称。IEEE 802.11: 无线标准。ESSID: 当前连接的网络的 SSID(网络名称)。Mode: 工作模式(如 Managed 表示站点模式)。Frequency: 当前使用的频率。Access Point: 连接的访问点的 MAC 地址。Bit Rate: 数据传输速率。Tx-Power: 发送功率。Link Quality: 链路质量。Signal level: 信号强度。
配置无线接口
设置无线网络的 ESSID:
sudo iwconfig wlp2s0 essid "MyNetwork"
设置无线网络的传输速率:
sudo iwconfig wlp2s0 rate 54M
设置无线网络的工作模式:
sudo iwconfig wlp2s0 mode Managed
设置无线网络的传输功率:
sudo iwconfig wlp2s0 txpower 20
设置无线网络的加密密钥:
sudo iwconfig wlp2s0 key s:password
关闭加密:
sudo iwconfig wlp2s0 key off
iwconfig 常见参数
essid: 设置或获取网络的 ESSID。mode: 设置工作模式,如 Managed(站点模式)、Ad-hoc(点对点模式)、Monitor(监听模式)。freq或channel: 设置频率或信道。rate: 设置传输速率。txpower: 设置传输功率。sens: 设置灵敏度。retry: 设置重试限制。ap: 强制指定接入点的 MAC 地址。nick: 设置网络设备的昵称。key或enc: 设置加密密钥。power: 设置电源管理模式。
nmcli 终端连接网络
nmcli 命令行工具来管理网络连接
nmcli device wifi connect "WI" password "wi20"
通过 nmcli 工具连接到名为 “WI” 的Wi-Fi网络,并使用提供的密码 “wi20” 进行认证。
nmcli:调用 NetworkManager 命令行工具。device:指定操作对象为网络设备。wifi:指定操作类型为 Wi-Fi 网络。connect "WI":指定要连接的 Wi-Fi 网络的 SSID(服务集标识符)。password "wi20":提供连接到 Wi-Fi 网络所需的密码。
nmcli connection down WI6F
nmcli connection del WI6F
nmcli radio wifi off
nmcli radio wifi on
-
nmcli connection down WI6F:- 这个命令用于禁用名为
WI6F的网络连接。它不会删除连接,只是临时断开。
- 这个命令用于禁用名为
-
nmcli connection del WI6F:- 这个命令用于删除名为
WI6F的网络连接。删除后,该连接的所有配置都会被移除。
- 这个命令用于删除名为
-
nmcli radio wifi off:- 这个命令用于关闭无线电,这意味着禁用 Wi-Fi 功能。这将断开所有 Wi-Fi 连接并使无线网络适配器不可用。
-
nmcli radio wifi on:- 这个命令用于打开无线电,这意味着启用 Wi-Fi 功能。这将使无线网络适配器可用,并允许建立新的 Wi-Fi 连接。
连接流程
-
查看附件WiFi
-
nmcli device wifi list
-
-
重新扫描WiFi
-
nmcli device wifi rescan
-
主控wifi模式和AP模式(AUV自身wifi模式)切换:
- 查看连接的接口,开机默认AP模式
-
nmcli connection show
如果当前处于AP模式下
-
断开【AP模式连接】的WIFI
-
nmcli connection down DEBUG
-
-
关闭WiFi
-
nmcli radio wifi off
-
-
打开WiFi (必须关闭再打开,否则连不上外网)
-
nmcli radio wifi on
-
-
WIFI拨号【STA模式连接】上网
-
nmcli device wifi connect WI password wi20 nmcli device wifi connect WI8 password wi21
-
如果处于WiFi模式
-
断开WiFi
-
禁用(断开)名为 WI7F 的网络连接: nmcli connection down WI7F 删除网络连接 nmcli connection del WI7F
-
-
关闭WiFi
-
nmcli radio wifi off
-
-
打开WiFi
-
nmcli radio wifi on
-
-
打开AP模式WiFi
-
nmcli connection up AUV_DEBUG
-
创建WiFi热点
nmcli connection down WI7F
nmcli connection del WI7F
nmcli radio wifi off
nmcli radio wifi on
sudo nmcli device wifi hotspot ifname wlp2s0 con-name 02C ssid 02C password 123456
nmcli device wifi hotspot: 这是用于创建 Wi-Fi 热点的nmcli命令。ifname wlp2s0: 指定用于创建热点的网络接口名称。你需要确保这个接口是你的无线网卡接口。con-name 02C: 指定连接名称为02C。ssid AUV_02C: 设置热点的 SSID(无线网络名称)为02C。password 123456: 设置热点的密码为123456。
WiFi脚本
start_wifi_ap.sh 脚本
#!/bin/sh
# 这个行声明了脚本使用的解释器是 /bin/sh
# 定义一个名为 ssd_mount 的函数
ssd_mount()
{
# 打印信息,指示 SSD 挂载操作正在进行
echo "ssd_mount..."
# 挂载 /dev/nvme0n1p1 设备到 /mnt/ssd 目录
mount /dev/nvme0n1p1 /mnt/ssd
}
# 定义一个名为 start_wifi_ap 的函数
start_wifi_ap()
{
# 打印信息,指示 WiFi 热点启动操作正在进行
echo "start_wifi_ap"
# 初始化计数器,用于跟踪等待 eth0 接口激活的次数
couteTemp=0
# 无限循环,直到 eth0 接口激活或超时
while [ 1 ]
do
# 使用 ifconfig 命令检查 eth0 接口的状态
# grep 过滤出 eth0 行,awk 用于提取接口名称
psInfo=`ifconfig | grep eth0 | awk -F ":" '{print $1}'`
# 打印接口信息
echo $psInfo
# 检查 psInfo 是否为空,表示 eth0 接口还没有激活
if [ -z $psInfo ];then
# 如果 eth0 没有激活,增加计数器并打印等待信息
couteTemp=$(($couteTemp+1))
echo "wait eth0 up ...{$couteTemp}"
# 如果超过 30 次尝试,则打印超时信息并退出循环
if [ $couteTemp -gt 30 ];then
echo "eth0 up timeout"
break
fi
else
# 如果 eth0 激活,打印激活信息并退出循环
echo "eth0 is up"
break
fi
# 每秒检查一次
sleep 1
done
# 等待 2 秒,确保 eth0 接口状态稳定
sleep 2
# 从 /sys/class/net/eth0/address 文件读取 eth0 的 MAC 地址
wlan0mac=`cat /sys/class/net/eth0/address`
# 打印获取到的 MAC 地址
echo $wlan0mac
# 等待 2 秒,以确保获取的 MAC 地址稳定
sleep 2
# 使用 nmcli 命令配置并启动 WiFi 热点
nmcli device wifi hotspot \
ifname wlan0 \ # 指定无线接口名称
con-name DEBUG \ # 设置连接名称
ssid DEBUG[$wlan0mac] \ # 设置 SSID(网络名称),包括 MAC 地址作为一部分
password 123456 # 设置 WiFi 热点的密码
}
# 调用 ssd_mount 函数,挂载 SSD
ssd_mount
# 调用 start_wifi_ap 函数,启动 WiFi 热点
start_wifi_ap
将 start_wifi_ap.sh 脚本添加到系统启动项
假设 start_wifi_ap.sh 脚本的路径是 /path/to/start_wifi_ap.sh
-
确保脚本是可执行的:
sudo chmod +x /path/to/start_wifi_ap.sh -
将脚本复制到
/etc/init.d/目录:sudo cp /path/to/start_wifi_ap.sh /etc/init.d/ -
使用
update-rc.d添加脚本到默认运行级别:sudo update-rc.d start_wifi_ap.sh defaults
这样,start_wifi_ap.sh 脚本会在系统启动时自动运行。
linux统计当前路径下的文件数量
ls ./ | wc -w
ls ./:列出当前目录下的所有文件和目录的名称。wc -w:计算输入的单词数(在这种情况下,文件和目录的名称被视为单词)。
$ wc example.txt
4 18 76 example.txt
行数 单词数 字节数 文件名
cat 读取文件内容并将其显示到终端上
cat是 “concatenate” 的缩写,它是一个用于读取文件内容并将其显示到终端上的命令。- 显示文本文件:cat filename
- 创建新文件:cat > filename
- 合并多个文件:cat file1 file2 > file3
- 在屏幕上显示行号:cat -n filename
- 只显示非空白行号:cat -b filename
- 压缩连续的空白行为一行: cat -s filename
cat /home/sources.list 命令会读取并在终端中显示位于 /home 目录下的 sources.list 文件的内容。这可以让用户查看文件中所包含的文本信息。
cat /home/sources.list
/home/sources.list 文件路径:
/home是 Linux 系统上的一个目录,通常用来存放用户的个人文件和配置。sources.list是一个文件名,通常在 Linux 系统中,它会在/etc/apt/sources.list路径下出现,这个文件用于 Debian 和 Ubuntu 系统,包含了系统软件包管理器 APT 的软件源配置。- 如果
sources.list文件在/home目录下,可能是一个用户自定义或备份的文件,而不是系统默认的 APT 软件源配置文件。
sync 将内存中的数据同步至硬盘
sync 是同步(synchronize)的简称,指的是将数据从内存写入到持久存储设备(如硬盘)中,以确保数据的一致性和持久性。具体来说,sync 命令用于刷新文件系统缓冲区,将所有待处理的数据写入磁盘。
-
一般情况
- 当我们在向硬盘写入数据时,操作系统并不会立刻将数据写入硬盘,而是先暂存到内存缓冲区中,待到合适的时机,操作系统自己会将相应的数据同步到硬盘中。
-
sync命令- 用户主动命令操作系统将所有未写入的系统缓冲区写入硬盘,包括超级块、索引节点、数据块和位图等。
sync命令会同步所有挂载过的文件系统。
将所有文件系统缓冲区中的数据写入磁盘。这通常在系统关机或重启之前使用,以确保所有数据都已保存到持久存储中。
sync
确保所有数据都写入磁盘,然后立即关机
sync && poweroff
在卸载一个挂载的文件系统之前,通常会使用 sync 命令来确保所有数据都已写入磁盘。
sync
umount /mnt/mydisk
route Linux 内核的路由表
通过 route 命令查看 Linux 内核的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 表示所有目的地(默认路由)的数据包将通过网关 192.168.1.1 发送,并使用接口 eth0。
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 表示目的地在 192.168.1.0/24 网络内的数据包将直接发送,不经过网关,使用接口 eth0。
-
Destination:
- 目的地网络或主机的 IP 地址。
0.0.0.0表示默认路由。
- 目的地网络或主机的 IP 地址。
-
Gateway:
- 数据包应发送到的网关 IP 地址。
0.0.0.0表示没有网关,数据包直接发送到目的地。
- 数据包应发送到的网关 IP 地址。
-
Genmask:
- 子网掩码,用于确定目的地 IP 地址所在的子网。
255.255.255.0表示子网掩码是 24 位,覆盖了前三个八位字节。
- 子网掩码,用于确定目的地 IP 地址所在的子网。
-
Flags:
-
标志位,表示路由条目的属性:
U表示路由是启用的(Up)。G表示路由是一个网关。H表示目的地是一个主机。D表示路由是由一个重定向创建的。M表示路由是由一个重定向更改的。
-
-
Metric:
- 路由的优先级或成本。较低的值表示更高的优先级。
-
Ref:
- 引用计数(通常为 0)。
-
Use:
- 路由条目的使用计数,表示该路由条目被使用的次数。
-
Iface:
- 接口名称,通过该接口发送数据包(例如,
eth0)。
- 接口名称,通过该接口发送数据包(例如,
route -n 是一个在 Unix 和类 Unix 操作系统(例如 Linux)上使用的命令,用于显示内核的 IP 路由表。该命令列出了当前的网络路由表,并提供有关网络连接的详细信息,包括目标网络、网关、子网掩码、接口等。
删除路由
sudo route del default dev eno1
sudo:以超级用户权限运行命令。ip route del default:删除默认路由。dev eno1:指定要删除默认路由的网络接口eno1。
如果路由表中存在两个默认路由(即两个目的地址为default的条目)
在网络配置中,如果路由表中存在两个默认路由(即两个目的地址为default的条目),这会导致网络流量的路由选择变得不明确。系统将需要决定如何在这两个默认路由之间选择路径,这通常取决于路由的优先级和度量(metric)。
- 如果两个默认路由指向不同的网关或接口,可能会导致不稳定的网络连接,因为流量可能会随机分布或根据系统配置在这两个路由之间切换。
- 某些应用程序或服务可能依赖于稳定的路由路径,多默认路由配置可能导致这些服务工作不正常。
方法:
- 检查当前路由表
- 删除多余的默认路由
- 配置单一默认路由
路由转发
检查当前 IP 路由转发状态
要检查当前系统是否启用了 IP 路由转发,可以使用 sysctl 命令:
sudo sysctl net.ipv4.ip_forward
可能的输出
-
启用:
net.ipv4.ip_forward = 1 -
禁用:
net.ipv4.ip_forward = 0
Destination Gateway Genmask Flags Metric Ref Use Iface
10.42.0.0 0.0.0.0 255.255.255.0 U 600 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
-
10.42.0.0/24通过wlan0接口:- 这个路由条目表示网络
10.42.0.0和子网掩码255.255.255.0的所有 IP 地址都通过wlan0接口进行通信。 - 这通常意味着任何连接到
wlan0的设备将使用这个接口进行网络通信。
- 这个路由条目表示网络
-
192.168.1.0/24通过eth0接口:- 这个路由条目表示网络
192.168.1.0和子网掩码255.255.255.0的所有 IP 地址都通过eth0接口进行通信。 - 这通常意味着任何连接到
eth0的设备将使用这个接口进行网络通信。
- 这个路由条目表示网络
连接到 WiFi 热点的设备 IP 地址
WiFi 热点分配的 IP 地址:如果您的 WiFi 热点 (wlan0) 配置了 DHCP 服务器,并分配了 10.42.0.115 这样的 IP 地址,说明这个设备是连接到 wlan0 的网络中。
连接到不同网络的设备的通信:如果连接到 wlan0 的设备能够 ping 通 192.168.1.102,这通常是因为系统有以下配置:
-
IP 转发:
-
如果启用了 IP 转发,连接到
wlan0的设备可以通过路由器或系统的eth0接口访问192.168.1.0/24网络。检查和启用 IP 转发的命令如下:sudo sysctl net.ipv4.ip_forward sudo sysctl -w net.ipv4.ip_forward=1
-
-
网络地址转换 (NAT) :
- 如果
wlan0上的设备需要访问192.168.1.0/24网络上的资源,您的系统可能配置了 NAT。这使得不同子网之间的设备可以通过一个公共 IP 地址进行通信。
- 如果
-
路由规则:
- 检查系统的路由规则,确保
wlan0上的流量可以被路由到eth0网络。例如,iptables配置可能会影响这种通信。
- 检查系统的路由规则,确保
ifconfig
ifconfig(interface configuration)是一个网络管理工具。它用于配置和查看Linux操作系统中的网络接口状态。- 使用
ifconfig,你可以分配IP地址,启用或禁用接口,管理ARP缓存,路由等。 - 通过
ifconfig命令配置的网络设置在系统重启后会丢失。如果你需要永久保存这些设置,需要修改网络配置文件。
为网络接口分配IP地址
为名为eth0的网络接口分配IP地址192.168.1.5
ifconfig eth0 192.168.1.5
为eth0的网络接口的配置信息
ifconfig eth0
启用名为eth0的网络接口
ifconfig eth0 up
禁用名为eth0的网络接口
ifconfig eth0 down
为名为eth0的网络接口分配IP地址192.168.1.5和子网掩码255.255.255.0
ifconfig eth0 192.168.1.5 netmask 255.255.255.0
为名为eth0的网络接口分配IP地址192.168.1.5,子网掩码255.255.255.0和广播地址192.168.1.255
ifconfig eth0 192.168.1.5 netmask 255.255.255.0 broadcast 192.168.1.255
ifconfig ens33 192.168.xxx.xxx network 255.255.255.0 broadcast 192.168.xxx.xxx
192.168.120.2/24 broadcast 192.168.120.255
192.168.120.2/24:
IP 地址: 192.168.120.2
子网掩码: /24 表示子网掩码是 24 位长,即 255.255.255.0
broadcast 192.168.120.255:
广播地址: 192.168.120.255 表示这个子网的广播地址。
Netmask (子网掩码)
子网掩码是用于将 IP 地址划分为网络部分和主机部分的掩码。它是一个 32 位的数字,用于确定网络的大小和范围。
-
格式: 通常表示为点分十进制,如
255.255.255.0。 -
功能: 它通过按位与操作将 IP 地址分为网络部分和主机部分。例如,在
192.168.1.5和255.255.255.0子网掩码下,网络部分(网络部分是指子网掩码用来标识 IP 地址中属于网络的位。这部分位决定了网络的范围)是192.168.1,主机部分是5。 -
子网掩码可以有不同的长度,不必是
255.255.255.0这种形式。常见的子网掩码及其对应的网络部分长度如下:255.0.0.0->/8子网(8 位网络部分,16,777,216 个地址)255.255.0.0->/16子网(16 位网络部分,65,536 个地址)255.255.255.0->/24子网(24 位网络部分,256 个地址)
IP 地址: 192.168.1.5
子网掩码: 255.255.255.0
二进制形式:
IP 地址: 11000000.10101000.00000001.00000101
子网掩码: 11111111.11111111.11111111.00000000
网络地址: 11000000.10101000.00000001.00000000 (192.168.1.0)
主机地址: 00000000.00000000.00000000.00000101 (5)
IP 地址: 192.168.1.5 -> 11000000.10101000.00000001.00000101
子网掩码: 255.255.255.192 -> 11111111.11111111.11111111.11000000
IP 地址: 11000000.10101000.00000001.00000101
子网掩码: 11111111.11111111.11111111.11000000
网络地址: 11000000.10101000.00000001.00000000 -> 192.168.1.0
网络部分: 前 26 位 11000000.10101000.00000001.11 对应的十进制表示是 192.168.1。
主机部分: 后 6 位 000101 对应的十进制表示是 5。
Network (网络地址)
网络地址是用于标识子网的起始地址。它是一个 IP 地址,网络部分是固定的,而主机部分全为 0。
- 格式: 通常表示为一个 IP 地址,带有一个前缀长度(CIDR 表示法),如
192.168.1.0/24。 - 功能: 网络地址用于标识特定子网中的所有主机。例如,
192.168.1.0/24表示从192.168.1.0到192.168.1.255的所有 IP 地址。
IP 地址: 192.168.1.5
子网掩码: 255.255.255.0
网络地址: 192.168.1.0
区别
-
定义:
- Netmask (子网掩码) : 用于将 IP 地址划分为网络部分和主机部分。
- Network (网络地址) : 标识一个子网的起始地址。
-
表示方法:
- Netmask (子网掩码) : 点分十进制格式,如
255.255.255.0。 - Network (网络地址) : IP 地址与 CIDR 前缀长度结合,如
192.168.1.0/24。
- Netmask (子网掩码) : 点分十进制格式,如
-
功能:
- Netmask (子网掩码) : 确定网络部分和主机部分。
- Network (网络地址) : 标识子网范围。
重启网络服务
sudo systemctl restart network
Linux WiFi图标消失
Ubuntu18.04网络图标不见了_ubuntu18.04 没有网络连接图标-CSDN博客
service NetworkManager stop
sudo rm /var/lib/NetworkManager/NetworkManager.state
service NetworkManager start
adb 调试
- adb工具即Android Debug Bridge(安卓调试桥) tools。
- 是一个命令行窗口,用于通过电脑端与模拟器或者真实设备交互。
- 在某些特殊的情况下进入不了系统,adb就派上用场啦!
首先要将设备连接到电脑:
- 设备:typc 转 USB
- typc口接3399pro板子,USB口接电脑
- 在本地adb安装目录下,开启adb服务
adb start-server
adb kill-server --停止adb服务
adb start-server --开启adb服务
adb shell --进入串口
adb devices --查看系统是否识别设备(List of devices attached 是没有识别到设备)
adb nodaemon server --查看adb出现了什么问题,提示说cannot bind ‘tcp:5037’无法绑定到5037端口
netstat -ano | findstr "5037" --查找占用端口号5037的连接
tasklist | findstr "2376" --查找进程ID为2376的进程
taskkill /f /t /im java.exe --杀死进程
Windows动态ip进板子
Windows下进入动态ip板子需要Android SDK Platform tools
Android SDK Platform tools 降级以及下载历史版本的方法-CSDN博客
SDK 平台工具版本说明 | Android Studio | Android Developers (google.cn)
下载完成后,需要使用可以配置到环境变量,介绍不配置环境变量的使用方法:
首先,下载路径 E:\platform-tools-latest-windows\platform-tools 文件路径不要有中文
然后,选中文件路径输入cmd,回车,在终端中打开
adb shell会自动检测可用设备进入
RK3399pro板联网
两块开发板网络互连,其中一块充当路由器并访问外网_两个开发版通过网线连接-CSDN博客
背景:pro板没有WiFi模块,所以只能通过RK3399板连接外网,或者通过无线模块联网(联网需要将pro板ip改为动态ip)
-
RK3399板连接外网
-
RK3399板需要打开路由转发功能,pro板无需打开
echo "1" > /proc/sys/net/ipv4/ip_forward //打开路由转发功能 cat /proc/sys/net/ipv4/ip_forward //显示为1则打开 -
RK3399板是连接外网的,他的ip地址就是网关,所以不用再设置网关
-
pro板需要设置ip地址
设置网关(RK3399的IP地址)
ifconfig 192.168.5.102 route add default gw 192.168.5.102 -
添加路由规则(可以理解为将数据从网关转发到接口)
iptables命令用于配置网络地址转换(NAT)和转发规则,以便在不同网络接口之间进行数据包的路由和转发-
NAT 配置:使用 MASQUERADE 将离开
wlan0的数据包的源地址伪装。 -
转发规则:
- 允许从
wlan0进入、从eth0出去的相关和已建立连接的数据包通过。 - 允许从
eth0进入、从wlan0出去的数据包通过。 wlan0和eth0是实际使用的网络接口名称,可以通过ifconfig或ip a命令查看。- 命令是临时的,在重启后会丢失。
- 允许从
# 配置 NAT,使从 wlan0 接口出去的数据包被伪装 iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE # 配置转发规则,允许 wlan0 到 eth0 的相关和已建立连接的数据包通过 iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT # 配置转发规则,允许 eth0 到 wlan0 的数据包通过 iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT -
Linux执行.sh文件,提示No such file or directory的问题的解决方法
Linux执行.sh文件时提示No such file or directory该怎么办(三种解决办法)_sh文件中出现no such filecannot open file1.txt-CSDN博客
导航定位
IMU 惯性测量单元
惯性测量单元(Inertial Measurement Unit)
由惯性器件组成(陀螺、加速度计等),输出最原始的数据,如加速度、角速度等等,但是无法给出位置、姿态等信息
-
加速度计:检测载体坐标系统独立三轴的加速度信号;
-
陀螺仪:检测载体相对于导航坐标系的角速度信号;
-
磁力计:用卡尔曼或者互补滤波等算法为用户提供拥有绝对参考的俯仰角、横滚角和航向角。
-
角速度(ω)和角加速度(α)的计算公式如下:
-
角速度(ω) :
- 角速度是描述物体旋转状态的物理量,表示单位时间内物体旋转的角度变化率。
- 对于匀速转动,角速度的计算公式为: ω = Δ θ Δ t \omega = \frac{\Delta \theta}{\Delta t} ω=ΔtΔθ 其中,Δθ 是单位时间内物体转过的角度变化量,Δt 是时间变化量。
-
角加速度(α) :
- 角加速度是描述物体旋转状态变化速率的物理量,表示单位时间内角速度的变化率。
- 对于匀变速转动,角加速度的计算公式为: α = Δ ω Δ t \alpha = \frac{\Delta \omega}{\Delta t} α=ΔtΔω 其中,Δω 是单位时间内角速度变化量,Δt 是时间变化量。
-
INS 惯性导航系统
惯性导航系统(Inertial Navigation System)
利用IMU测量数据进行导航的系统,由算法和IMU共同构成
INS使用IMU测量的加速度和角速度信息来推算物体的位置、速度和方向
DVL 声学多普勒速度仪
声学多普勒速度仪
测量相对于水底速度的声纳设备
MEMS
MEMS代表微机电系统(Micro-Electro-Mechanical Systems),是一种技术,将微米尺度的机械元件、传感器、执行器以及电子电路集成在一起。这些系统通常包含微小的机械和电子部件,可以在微尺度上执行机械和电子功能。
主要特点和应用
-
微小尺度:MEMS设备通常在微米到毫米尺度上操作,可以制造出非常小型化的传感器和执行器。
-
集成性:MEMS技术允许机械部件和电子部件在同一芯片上集成,实现功能强大且占用空间小的设备。
-
应用领域:MEMS技术被广泛应用于多个领域,包括但不限于:
- 传感器:例如加速度计、陀螺仪、压力传感器等,用于测量力、加速度、压力等物理量。
- 执行器:例如微型马达、微泵等,用于执行微小的机械运动或操作。
- 生物医学:用于生物传感、医疗诊断和治疗,如微型生物芯片、生物传感器等。
- 通信和电子设备:用于改进无线通信设备、惯性导航系统等。
工作原理
MEMS设备通常由微机械结构、电子电路和传感器/执行器组成。其工作原理涉及微机械结构的设计和制造,以及与之配合的电子控制和信号处理。例如,一个加速度计可以使用微小的机械质量和微电子传感器来检测加速度,并将其转换为电信号进行处理。
USBL 超短基线定位系统
USBL(Ultra-Short Baseline)是一种用于水下定位和导航的声学技术,主要用于确定和跟踪水下目标的位置,如潜水器、ROV(遥控水下机器人)、AUV(自主水下机器人)等。
示例图示
为了更好地理解 USBL 系统的工作原理,以下是一个简化的示意图:
海面
------------
|
| 基站
| [接收器阵列]
| / | \
| / | \
| / | \
| / | \
| / | \
|/ | \
v v v
--------------------------------
海底 [水下目标]
[发射器]
USBL 系统的组成
一个典型的 USBL 系统由以下几个主要组件组成:
-
船载换能器阵列(Transceiver Array):
- 安装在船体或浮标上,用于发射和接收声波信号。
- 阵列中的多个换能器通常以很短的间距布置(因此称为“超短基线”)。
-
水下换能器或应答器(Transponder or Responder):
- 安装在水下目标上(如ROV、AUV)。
- 接收来自船载换能器阵列的声波信号,并返回响应信号。
-
控制和处理单元(Control and Processing Unit):
- 处理接收到的声波信号,计算水下目标的位置。
- 通常包括计算机和信号处理软件。
-
定位和导航软件(Positioning and Navigation Software):
- 可视化水下目标的位置和轨迹。
- 结合其他导航数据(如GPS)提供综合导航解决方案。
工作原理
-
声波发射和接收:
- 船载换能器阵列发射一组声波信号到水下目标。
- 水下换能器接收到声波信号后,发出应答信号。
-
时差测量:
- 船载换能器阵列接收到应答信号,并测量声波传播的时间差。
- 根据各个换能器接收到信号的时间差,可以计算出水下目标相对于船的位置。
-
位置计算:
- 利用三角测量法和声波传播速度,确定水下目标的三维位置(包括深度、水平距离和方位角)。
- 结合船上的GPS数据,转换成全球坐标。
优点和应用
优点:
- 高精度:USBL 系统能够提供较高的定位精度,尤其适合短距离的高精度定位。
- 实时性:可以实时跟踪水下目标的位置,适用于动态环境下的水下操作。
- 灵活性:系统安装相对简单,不需要长距离的基线布置,适合各种水下任务。
应用:
- 水下机器人导航:ROV和AUV的精确定位和导航。
- 海洋调查:海底地形测量、资源勘探和科学研究。
- 打捞和搜救:水下打捞、搜救任务中的目标定位。
- 海洋工程:海洋结构物安装和维护。
M估计
- M估计(M-estimation)是一种用于统计估计和回归分析的稳健估计方法,旨在提高对异常值和偏离假设的鲁棒性。
- M估计通过优化一个损失函数(通常是一个对数似然函数)来找到估计值。
- 与最小二乘法(OLS)相比,M估计能够更好地处理数据中的异常值或噪声。
M估计的基本概念
-
损失函数:
- M估计的核心是通过最小化一个损失函数来估计参数。
- 损失函数(也称为ρ函数)用来衡量残差的大小,选择适当的损失函数可以减少异常值对估计结果的影响。
-
权重函数:
- M估计通过权重函数(ψ函数)对不同的残差赋予不同的权重。
- 大残差(可能的异常值)被赋予较小的权重,从而减少其对整体估计的影响。
M估计的数学表述
假设我们有一组观测数据 ( x i , y i ) (x_i, y_i) (xi,yi)( i = 1 , 2 , . . . , n i = 1, 2, ..., n i=1,2,...,n),我们的目标是通过一个模型 y = f ( x ; θ ) y = f(x; \theta) y=f(x;θ) 来估计参数 θ \theta θ。
-
损失函数 ρ \rho ρ 和权重函数 ψ \psi ψ:
-
ρ \rho ρ函数:衡量每个残差 r i = y i − f ( x i ; θ ) r_i = y_i - f(x_i; \theta) ri=yi−f(xi;θ) 的损失。
-
ψ \psi ψ函数:
ψ ( r ) = d ρ ( r ) d r \psi(r) = \frac{d\rho(r)}{dr} ψ(r)=drdρ(r)
即损失函数的导数,用于计算残差的权重。
-
-
M估计的定义:
-
参数 θ \theta θ 的估计通过最小化总损失函数:
θ ^ = arg min θ ∑ i = 1 n ρ ( r i ) \hat{\theta} = \arg\min_\theta \sum_{i=1}^{n} \rho(r_i) θ^=argminθ∑i=1nρ(ri)
-
等价地,可以通过求解以下方程来找到 θ \theta θ:
∑ i = 1 n ψ ( r i ) ⋅ ∂ f ( x i ; θ ) ∂ θ = 0 \sum_{i=1}^{n} \psi(r_i) \cdot \frac{\partial f(x_i; \theta)}{\partial \theta} = 0 ∑i=1nψ(ri)⋅∂θ∂f(xi;θ)=0
-
最小二乘
基本原理
- 最小二乘法的核心思想是通过最小化数据点到拟合模型的残差平方和来找到最优的模型参数。
- 通常,将数据表示为 ( x i , y i ) (x_i, y_i) (xi,yi),其中 x i x_i xi 是自变量(或特征), y i y_i yi 是对应的因变量(或目标值)。
- 假设有一个模型 y = f ( x ; θ ) y = f(x; \theta) y=f(x;θ),其中 θ \theta θ 是模型的参数。希望找到最优的参数 θ \theta θ,使得模型预测值 f ( x i ; θ ) f(x_i; \theta) f(xi;θ) 尽可能接近实际观测值 y i y_i yi。
步骤
-
定义模型:选择适当的数学模型 f ( x ; θ ) f(x; \theta) f(x;θ),如线性模型、多项式模型等。
-
定义损失函数:通常使用残差的平方和作为损失函数,即最小化误差的平方和:
Loss ( θ ) = ∑ i = 1 n ( y i − f ( x i ; θ ) ) 2 \text{Loss}(\theta) = \sum_{i=1}^{n} (y_i - f(x_i; \theta))^2 Loss(θ)=∑i=1n(yi−f(xi;θ))2
其中 n n n 是数据点的数量。
-
最小化损失函数:通过求解以下优化问题找到最优参数 θ \theta θ:
θ ^ = arg min θ ∑ i = 1 n ( y i − f ( x i ; θ ) ) 2 \hat{\theta} = \arg\min_{\theta} \sum_{i=1}^{n} (y_i - f(x_i; \theta))^2 θ^=argminθ∑i=1n(yi−f(xi;θ))2
这通常通过微积分或数值优化方法(如梯度下降法)来实现。
梯度下降法(Gradient Descent)
基本原理
梯度下降法的核心思想是通过迭代的方式,沿着损失函数(或目标函数)的负梯度方向更新参数,从而使得函数值不断减小。具体步骤如下:
-
初始化参数:选择合适的初始参数值 θ 0 \theta_0 θ0。
-
计算损失函数的梯度:对于损失函数 J ( θ ) J(\theta) J(θ),计算其关于参数 θ \theta θ 的梯度 ∇ J ( θ ) \nabla J(\theta) ∇J(θ)。梯度表示函数在当前点最快增加的方向。
-
参数更新:沿着梯度的负方向更新参数 θ \theta θ,更新公式如下:
θ : = θ − α ∇ J ( θ ) \theta := \theta - \alpha \nabla J(\theta) θ:=θ−α∇J(θ)
其中 α \alpha α 是学习率(Learning Rate),控制每次迭代步长的大小。学习率的选择影响着算法的收敛速度和稳定性。
-
迭代:重复步骤2和步骤3,直到满足停止条件,例如达到最大迭代次数、损失函数变化小于阈值或梯度变化小于阈值等。
梯度计算示例
假设有一个简单的二次函数 J ( θ ) = θ 2 J(\theta) = \theta^2 J(θ)=θ2,梯度下降法的计算过程:
-
损失函数:
J ( θ ) = θ 2 J(\theta) = \theta^2 J(θ)=θ2
-
梯度计算:
∇ J ( θ ) = d J ( θ ) d θ = 2 θ \nabla J(\theta) = \frac{dJ(\theta)}{d\theta} = 2\theta ∇J(θ)=dθdJ(θ)=2θ
-
参数更新:选择合适的学习率 α \alpha α,比如 α = 0.1 \alpha = 0.1 α=0.1,然后进行迭代更新:
θ : = θ − α ⋅ 2 θ = θ − 0.2 θ = 0.8 θ \theta := \theta - \alpha \cdot 2\theta = \theta - 0.2\theta = 0.8\theta θ:=θ−α⋅2θ=θ−0.2θ=0.8θ
-
迭代:重复更新步骤,直到满足停止条件。
#include <iostream>
#include <vector>
#include <cmath>
// 最小二乘法函数
void leastSquares(const std::vector<double>& x, const std::vector<double>& y, double& theta0, double& theta1) {
int n = x.size();
double sumX = 0.0, sumY = 0.0, sumXY = 0.0, sumXX = 0.0;
// 计算和
for (int i = 0; i < n; ++i) {
sumX += x[i];
sumY += y[i];
sumXY += x[i] * y[i];
sumXX += x[i] * x[i];
}
// 计算最小二乘估计
double denom = n * sumXX - sumX * sumX;
if (denom != 0) {
theta1 = (n * sumXY - sumX * sumY) / denom;
theta0 = (sumY - theta1 * sumX) / n;
}
}
int main() {
std::vector<double> x = {1.0, 2.0, 3.0, 4.0, 5.0};
std::vector<double> y = {2.1, 3.8, 6.1, 8.0, 10.1};
double theta0, theta1;
// 应用最小二乘法拟合直线
leastSquares(x, y, theta0, theta1);
std::cout << "Best fit line: y = " << theta0 << " + " << theta1 << " * x" << std::endl;
return 0;
}
最大似然估计
最大似然估计(Maximum Likelihood Estimation, MLE)是统计学中常用的一种参数估计方法,用于根据观测数据估计模型的参数。
它的核心思想是选择能使观测数据出现的概率最大化的参数值作为估计值。
基本原理
假设有一个概率分布模型 P ( X ∣ θ ) P(X|\theta) P(X∣θ),其中 X X X 是观测数据, θ \theta θ 是待估计的参数。最大似然估计的目标是找到使得观测数据出现的概率 P ( X ∣ θ ) P(X|\theta) P(X∣θ) 最大的参数 θ ^ \hat{\theta} θ^。
步骤:
-
定义似然函数:对于给定的数据集 { x 1 , x 2 , . . . , x n } \{x_1, x_2, ..., x_n\} {x1,x2,...,xn},似然函数 L ( θ ) L(\theta) L(θ) 定义为:
L ( θ ) = ∏ i = 1 n P ( x i ∣ θ ) L(\theta) = \prod_{i=1}^{n} P(x_i | \theta) L(θ)=∏i=1nP(xi∣θ)
其中 P ( x i ∣ θ ) P(x_i | \theta) P(xi∣θ) 是在给定参数 θ \theta θ 下观测数据 x i x_i xi 的概率密度函数或概率质量函数。
-
对数似然函数:为了便于计算和优化,通常使用对数似然函数 ℓ ( θ ) \ell(\theta) ℓ(θ):
ℓ ( θ ) = log L ( θ ) = ∑ i = 1 n log P ( x i ∣ θ ) \ell(\theta) = \log L(\theta) = \sum_{i=1}^{n} \log P(x_i | \theta) ℓ(θ)=logL(θ)=∑i=1nlogP(xi∣θ)
-
最大化对数似然函数:通过求解以下优化问题来找到最大似然估计 θ ^ \hat{\theta} θ^:
θ ^ = arg max θ ℓ ( θ ) \hat{\theta} = \arg\max_{\theta} \ell(\theta) θ^=argmaxθℓ(θ)
示例
假设有一个观测数据集 { x 1 , x 2 , . . . , x n } \{x_1, x_2, ..., x_n\} {x1,x2,...,xn},我们希望用高斯分布来拟合这些数据,并估计其均值 μ \mu μ 和方差 σ 2 \sigma^2 σ2。
-
概率模型:假设观测数据 x i x_i xi 来自均值为 μ \mu μ、方差为 σ 2 \sigma^2 σ2 的正态分布 N ( μ , σ 2 ) N(\mu, \sigma^2) N(μ,σ2)。
-
似然函数:对于单个观测数据 x i x_i xi,概率密度函数为:
P ( x i ∣ μ , σ 2 ) = 1 2 π σ 2 exp ( − ( x i − μ ) 2 2 σ 2 ) P(x_i | \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x_i - \mu)^2}{2\sigma^2}\right) P(xi∣μ,σ2)=2πσ21exp(−2σ2(xi−μ)2)
所以整体的似然函数 L ( μ , σ 2 ) L(\mu, \sigma^2) L(μ,σ2) 是所有观测数据的联合概率密度函数。
-
正态分布的似然函数:
L ( μ , σ 2 ; X ) = ∏ i = 1 n 1 2 π σ 2 exp ( − ( x i − μ ) 2 2 σ 2 ) L(\mu, \sigma^2; X) = \prod_{i=1}^{n} \frac{1}{\sqrt{2\pi\sigma^2}} \exp\left(-\frac{(x_i - \mu)^2}{2\sigma^2}\right) L(μ,σ2;X)=∏i=1n2πσ21exp(−2σ2(xi−μ)2)
-
对数似然函数:对数似然函数为:
ℓ ( μ , σ 2 ) = ∑ i = 1 n [ − 1 2 log ( 2 π σ 2 ) − ( x i − μ ) 2 2 σ 2 ] \ell(\mu, \sigma^2) = \sum_{i=1}^{n} \left[ -\frac{1}{2} \log(2\pi\sigma^2) - \frac{(x_i - \mu)^2}{2\sigma^2} \right] ℓ(μ,σ2)=∑i=1n[−21log(2πσ2)−2σ2(xi−μ)2]
-
对数似然函数:
ℓ ( μ , σ 2 ; X ) = − n 2 log ( 2 π σ 2 ) − 1 2 σ 2 ∑ i = 1 n ( x i − μ ) 2 \ell(\mu, \sigma^2; X) = -\frac{n}{2} \log(2\pi\sigma^2) - \frac{1}{2\sigma^2} \sum_{i=1}^{n} (x_i - \mu)^2 ℓ(μ,σ2;X)=−2nlog(2πσ2)−2σ21∑i=1n(xi−μ)2
-
最大化对数似然函数:求解对 μ \mu μ 和 σ 2 \sigma^2 σ2 的偏导数,并令其为零,可以得到最大似然估计 μ ^ \hat{\mu} μ^ 和 σ ^ 2 \hat{\sigma}^2 σ^2 的闭式解。
卡尔曼滤波
卡尔曼滤波(Kalman Filter)是一种利用线性系统状态方程和观测方程,对系统状态进行估计的数学方法。它通过融合预测和测量两个来源的信息,能够有效地对系统状态进行估计,并且可以处理具有高斯噪声的测量和预测数据。
基本原理
卡尔曼滤波的核心思想是利用当前时刻的状态估计和测量值,来预测下一个时刻的状态,并根据新的测量值进行状态修正,以逐步优化对系统状态的估计。
-
状态方程:描述系统状态如何随时间变化的数学模型,通常表示为线性动态系统的状态转移方程。
x k = A x k − 1 + B u k + w k x_k = A x_{k-1} + B u_k + w_k xk=Axk−1+Buk+wk- x k x_k xk 是系统在时刻 k k k 的状态向量。
- A A A 是状态转移矩阵,描述状态如何从时刻 k − 1 k-1 k−1 转移到时刻 k k k。
- B B B 是控制输入矩阵,描述外部输入对状态的影响。
- u k u_k uk 是时刻 k k k 的控制输入。
- w k w_k wk 是过程噪声,代表系统建模误差或未建模的外部扰动。
-
观测方程:描述系统状态如何通过测量得到观测值的关系,通常表示为线性系统的测量方程。
z k = H x k + v k z_k = H x_k + v_k zk=Hxk+vk- z k z_k zk 是在时刻 k k k 的观测值。
- H H H 是观测矩阵,描述状态向量如何映射到观测空间。
- v k v_k vk 是测量噪声,通常假设为高斯白噪声,代表测量误差。
-
卡尔曼滤波过程:
-
预测步骤(预测状态) :根据上一个时刻的状态估计 x ^ k − 1 ∣ k − 1 \hat{x}_{k-1|k-1} x^k−1∣k−1 和控制输入 u k u_k uk,预测当前时刻的状态估计 x ^ k ∣ k − 1 \hat{x}_{k|k-1} x^k∣k−1。
x ^ k ∣ k − 1 = A x ^ k − 1 ∣ k − 1 + B u k \hat{x}_{k|k-1} = A \hat{x}_{k-1|k-1} + B u_k x^k∣k−1=Ax^k−1∣k−1+Buk预测状态协方差:P k ∣ k − 1 = A P k − 1 ∣ k − 1 A T + Q k P_{k|k-1} = A P_{k-1|k-1} A^T + Q_k Pk∣k−1=APk−1∣k−1AT+Qk其中, P k − 1 ∣ k − 1 P_{k-1|k-1} Pk−1∣k−1 是上一个时刻的状态协方差, Q k Q_k Qk 是过程噪声的协方差矩阵。
-
更新步骤(校正状态) :利用测量值 z k z_k zk 和预测状态 x ^ k ∣ k − 1 \hat{x}_{k|k-1} x^k∣k−1,计算校正后的状态估计 x ^ k ∣ k \hat{x}_{k|k} x^k∣k 和更新后的状态协方差 P k ∣ k P_{k|k} Pk∣k。
卡尔曼增益 K k K_k Kk 的计算:
K k = P k ∣ k − 1 H T ( H P k ∣ k − 1 H T + R k ) − 1 K_k = P_{k|k-1} H^T (H P_{k|k-1} H^T + R_k)^{-1} Kk=Pk∣k−1HT(HPk∣k−1HT+Rk)−1更新状态估计:x ^ k ∣ k = x ^ k ∣ k − 1 + K k ( z k − H x ^ k ∣ k − 1 ) \hat{x}_{k|k} = \hat{x}_{k|k-1} + K_k (z_k - H \hat{x}_{k|k-1}) x^k∣k=x^k∣k−1+Kk(zk−Hx^k∣k−1)更新状态协方差:
P k ∣ k = ( I − K k H ) P k ∣ k − 1 P_{k|k} = (I - K_k H) P_{k|k-1} Pk∣k=(I−KkH)Pk∣k−1其中, R k R_k Rk 是测量噪声的协方差矩阵。
-
slam
SLAM(Simultaneous Localization and Mapping,同时定位与地图构建)是指机器人或无人系统在未知环境中实时构建地图,并同时确定自身位置的过程。因此可知SLAM的主要工作是定位以及建图。
基本原理
SLAM系统基于传感器(如摄像头、激光雷达、超声波传感器等)获取的环境数据,通过以下步骤实现地图构建和定位:
- 数据获取:机器人通过搭载的传感器获取环境信息,比如激光雷达扫描数据、摄像头图像或深度信息等。
- 特征提取与跟踪:从传感器数据中提取关键特征,如地标点、边缘、角点等,然后通过跟踪这些特征来估计机器人的运动轨迹。
- 运动估计:根据传感器数据和先验信息(如初始位置),估计机器人的运动,即机器人在地图上的轨迹。
- 地图构建:通过融合传感器数据和运动估计,构建环境地图,地图可以是二维或三维的,并包含障碍物、地标、建筑物等信息。
- 定位:通过比对机器人当前传感器数据与地图的特征,确定机器人的位置和姿态(定位)。这一步通常与地图的更新和修正相结合,以提高定位精度。
SLAM系统一般分为五个模块:传感器数据、视觉里程计、后端、建图及回环检测。
传感器数据:主要用于采集实际环境中的各类型原始数据。包括激光扫描数据、视频图像数据、点云数据等。
视觉里程计:主要用于不同时刻间移动目标相对位置的估算。包括特征匹配、直接配准等算法的应用。
后端:主要用于优化视觉里程计带来的累计误差。包括滤波器、图优化等算法应用。
建图:用于三维地图构建。
回环检测:主要用于空间累积误差消除
edge浏览器显示你尚未连接,代理服务器有问题或者地址不正确
edge浏览器显示你尚未连接,代理服务器有问题或者地址不正确_edge代理服务器有问题或者地址有误-CSDN博客
1.打开命令行窗口:win+r,输入inetcpl.cpl,进入Internet属性窗口
2.连接页面,点击局域网设置
3.把“代理服务器”前的√取消
4.点击确认,即可
更多推荐


所有评论(0)