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

MAVLink协议:原理、应用与实践

目录

1. 前言

2. MAVLink 协议的基本概念

2.1 协议概述

2.2 消息格式

2.3 协议版本

3. MAVLink 协议的适应场景

3.1 无人机地面站与飞行器通信

3.2 飞行器与传感器通信

3.3 无人机集群通信

3.4 飞行模拟与测试

4. 基于 Python 的 MAVLink 协议编程实践

4.1 开发环境搭建

4.2 生成 MAVLink 消息

4.3 接收和解析 MAVLink 消息

5. 总结


1. 前言

在无人机以及航空航天等众多领域,设备之间高效、可靠的数据通信是实现诸多高级功能的关键。MAVLink (Micro Air Vehicle Link)协议作为一款轻量级、高性能的消息传递协议,广泛应用于无人机地面站与飞行器、飞行器与传感器等设备之间的通信,为这些复杂系统的协同工作提供了坚实的基础。本文将全面深入地介绍 MAVLink 协议,通过通俗易懂的讲解、丰富的实例以及详细的 Python 代码实现,助力读者快速掌握这一关键协议,为在相关领域的开发实践铺平道路。

2. MAVLink 协议的基本概念

2.1 协议概述

MAVLink(Micro Air Vehicle Link)是一个专为微型空中飞行器设计的数据传输协议,同时也适用于其他类型的机器人系统。它的主要目标是提供一种简单、高效、可靠的消息传递机制,以满足飞行器与地面站、飞行器与传感器以及其他相关设备之间通信的需求。自 2009 年诞生以来,MAVLink 协议不断发展完善,得到了众多无人机制造商、开源项目(如 ArduPilot、PX4 等)以及相关研究机构的广泛支持和应用。

2.2 消息格式

MAVLink 协议采用消息传递的方式进行数据通信,每条消息都有固定的格式,主要包括以下几个部分:

  • 消息头(Header)

    • 魔数(Magic byte) :用于标识消息的起始,值为 254(0xFE),它可以帮助接收端快速识别消息的开始位置,确保消息的正确解析。

    • 消息长度(Message Length) :表示消息有效载荷(数据部分)的字节长度,使接收端能够准确读取后续的数据内容,避免数据读取错误或遗漏。

    • 消息标识(Message ID) :唯一标识消息的类型,如 30 表示飞行器位置信息(GLOBAL_POSITION_INT)、74 表示飞行器状态信息(RC_CHANNELS)等,接收端可以根据消息 ID 来确定如何处理收到的数据。

  • 消息体(Payload) :包含具体的通信数据,内容根据消息 ID 对应的格式进行填充,可以是飞行器的飞行参数、传感器采集的数据、控制指令等。例如,在发送飞行器位置信息消息时,消息体中会包含经纬度、海拔高度、速度等数据。

  • 校验和(Checksum) :用于验证消息的完整性和正确性,通过特定的算法(如 CRC 校验)对消息内容进行计算得到。接收端在收到消息后,重新计算校验和并与消息中的校验和值进行比较,若一致则认为消息传输正确,否则表明消息在传输过程中可能出现了错误,需要进行相应的处理(如丢弃消息并请求重传等)。

2.3 协议版本

目前,MAVLink 协议主要有两个版本:MAVLink v1.x 和 MAVLink v2.x。MAVLink v2.x 在 v1.x 的基础上进行了诸多改进和扩展,包括支持更大的消息长度、增强的校验和算法(采用 CRC-32 校验)、消息签名功能(用于确保消息的来源真实性与完整性)等。不过,尽管 v2.x 优势明显,但为了保持与旧系统的兼容性,许多系统仍然同时支持这两个版本,开发者在实际应用中需要根据所连接的设备和系统要求选择合适的协议版本进行通信。

3. MAVLink 协议的适应场景

3.1 无人机地面站与飞行器通信

这是 MAVLink 协议最典型的应用场景之一。地面站通过 MAVLink 协议向飞行器发送控制指令,如起飞、降落、改变飞行模式、调整飞行速度与高度等操作。同时,飞行器也会通过该协议将自身的飞行状态信息(如姿态、位置、速度、电池电量等)、传感器数据(如摄像头拍摄的图像、气象传感器采集的温度、气压等信息)实时发送回地面站,以便操作人员能够直观地了解飞行器的运行情况,并根据需要进行及时的干预和调整,确保飞行任务的安全和顺利完成。

3.2 飞行器与传感器通信

在复杂的飞行器系统中,通常会配备多种传感器,如 GPS 模块、IMU(惯性测量单元)、气压计、距离传感器等。这些传感器负责采集飞行器的各种环境和自身状态信息,而 MAVLink 协议能够实现飞行器与这些传感器之间的高效通信。飞行器的主控系统可以通过 MAVLink 协议定期读取传感器采集到的数据,并将其整合处理后,用于飞行控制算法的计算和决策。此外,当传感器需要进行配置或更新参数时,主控系统也可以通过 MAVLink 协议向传感器发送相应的指令,实现对传感器的远程管理和控制,提高了整个系统的集成度和可维护性。

3.3 无人机集群通信

在多无人机协同作业的场景下,例如物流配送、搜索救援、农业植保等领域,无人机集群需要进行相互通信以协调飞行任务、共享位置和状态信息、分配作业区域等。MAVLink 协议能够为无人机集群提供可靠的通信链路,使得各无人机之间能够实时交换数据,从而实现高效的协同工作。通过在集群中的无人机之间传输飞行计划、任务进度、障碍物信息等数据,每架无人机可以及时调整自身的飞行策略和任务执行顺序,提高整个集群的工作效率和任务完成质量。

3.4 飞行模拟与测试

在无人机的开发和测试过程中,飞行模拟器是一个重要的工具。MAVLink 协议可以用于连接飞行模拟器和地面站软件,模拟真实的飞行场景和通信环境。开发人员可以在模拟环境下对飞行控制算法、地面站功能、通信系统等进行充分的测试和验证,提前发现潜在的问题并进行优化,降低了在实际飞行测试中的风险和成本。此外,飞行模拟器也可以作为无人机硬件在环测试(HIL)系统的一部分,通过 MAVLink 协议与真实的飞控硬件进行通信,对飞控硬件的性能和可靠性进行全面评估,确保其在实际应用中的稳定性和安全性。

4. 基于 Python 的 MAVLink 协议编程实践

4.1 开发环境搭建

  • 安装 Python :确保已安装 Python 3.x 版本,可以从 Python 官方网站下载安装最新版本的 Python。

  • 安装 MAVLink 库 :在 Python 中,我们可以通过 pip 安装 pymavlink 库,该库是 MAVLink 协议的 Python 实现,提供了丰富的功能和接口,方便我们进行 MAVLink 消息的生成、解析和通信操作。打开命令行工具,运行以下命令进行安装:

pip install pymavlink
  • 验证安装 :安装完成后,可以通过以下 Python 代码验证 pymavlink 库是否安装成功:

import pymavlink
print(pymavlink.__version__)

如果能够正确输出 pymavlink 库的版本号,则说明安装成功。

4.2 生成 MAVLink 消息

以下是一个使用 Python 生成 MAVLink 消息的示例代码:

from pymavlink import mavutil# 创建一个 MAVLink 连接对象,指定通信端口和协议版本
# 这里使用 UDP 协议在本地端口 14550 进行通信,协议版本为 2.0
master = mavutil.mavlink_connection('udpin:0.0.0.0:14550', dialect=None, protocol_version='2.0')# 等待连接建立
master.wait_heartbeat()# 定义飞行器位置信息消息(GLOBAL_POSITION_INT)
# 设置经度、纬度、海拔高度、相对高度、速度等参数
longitude = 1167000000  # 单位:1e7 微度
latitude = 399000000    # 单位:1e7 微度
altitude = 1000         # 单位:毫米
relative_alt = 500      # 单位:毫米
vx = 10                 # 地面速度 X 分量,单位:厘米/秒
vy = 5                  # 地面速度 Y 分量,单位:厘米/秒
vz = 0                  # 地面速度 Z 分量,单位:厘米/秒# 生成消息并发送
master.mav.global_position_int_send(int(time.time() * 1e3),  # 标记时间(毫秒)longitude,latitude,altitude,relative_alt,vx,vy,vz,0,  # 朝向(单位:百秒弧度)0   # HDOP(水平精度因子)
)
print("发送飞行器位置信息消息成功!")
  • dialect=None 时,pymavlink 库会尝试使用默认的 MAVLink 协议方言(通常是标准的 MAVLink 协议)。如果你连接的设备使用特定的方言,则需要将 dialect 参数设置为相应的方言名称(例如 'ardupilotmega''PX4')。

4.3 接收和解析 MAVLink 消息

from pymavlink import mavutil
import time# 创建一个 MAVLink 连接对象,用于接收消息
master = mavutil.mavlink_connection('udpin:0.0.0.0:14550', dialect=None, protocol_version='2.0')# 等待连接建立
master.wait_heartbeat()while True:# 接收消息msg = master.recv_match(blocking=True)if msg is not None:# 判断消息类型if msg.get_type() == 'GLOBAL_POSITION_INT':# 解析位置信息消息longitude = msg.lonlatitude = msg.lataltitude = msg.altrelative_alt = msg.relative_altvx = msg.vxvy = msg.vyvz = msg.vzprint(f"收到飞行器位置信息:经度 = {longitude / 1e7}, 纬度 = {latitude / 1e7}, 海拔高度 = {altitude / 1000} 米, 相对高度 = {relative_alt / 1000} 米, 速度 = ({vx / 100}, {vy / 100}, {vz / 100}) 米/秒")elif msg.get_type() == 'RC_CHANNELS':# 解析遥控器通道消息ch1 = msg.chan1_rawch2 = msg.chan2_rawprint(f"收到遥控器通道信息:通道 1 = {ch1}, 通道 2 = {ch2}")time.sleep(0.1)

在上述代码中,我们通过 recv_match() 函数接收 MAVLink 消息,并根据消息类型进行相应的解析和处理。对于不同的消息类型,可以提取其中包含的具体数据字段,如位置信息中的经度、纬度、速度等,或者遥控器通道的数值等,从而实现对无人机或其他设备状态的监控和数据分析。

blocking=True 时,recv_match() 函数会阻塞当前线程,直到接收到一条符合条件的消息或者发生超时。这意味着程序会暂停在这个函数调用处,等待消息到达。具体来说:

  • 如果消息队列中有符合条件的消息,函数会立即返回该消息。

  • 如果消息队列中没有符合条件的消息,函数会一直等待,直到有符合条件的消息到达或者发生超时(超时时间可以通过 timeout 参数设置)。

 与 blocking=True 相对,当 blocking=False 时,recv_match() 函数会立即返回消息队列中的第一条符合条件的消息,而不会等待消息到达。如果没有符合条件的消息,就返回 None

5. 总结

MAVLink 协议作为无人机及相关领域设备间通信的核心协议,凭借其简单高效的消息传递机制、灵活的消息格式以及广泛的适应性,在众多应用场景中发挥着至关重要的作用。通过本文的详细介绍,我们从基本概念入手,深入探讨了 MAVLink 协议的消息格式、协议版本以及适用场景,并结合 Python 代码示例展示了如何在实际开发中进行 MAVLink 消息的生成、发送、接收和解析操作。希望大家能够通过本文的学习,对 MAVLink 协议有更深入的理解和掌握,为在无人机开发、航空航天项目以及其他相关领域的实践应用中提供有力的技术支持,实现更加高效、可靠的数据通信与系统集成。随着无人机技术的不断发展和应用场景的不断拓展,相信 MAVLink 协议将继续在这一领域保持其重要地位,并不断演进以满足日益增长的通信需求。我是橙色小博,关注我,一起在人工智能领域学习进步!

相关文章:

MAVLink协议:原理、应用与实践

目录 1. 前言 2. MAVLink 协议的基本概念 2.1 协议概述 2.2 消息格式 2.3 协议版本 3. MAVLink 协议的适应场景 3.1 无人机地面站与飞行器通信 3.2 飞行器与传感器通信 3.3 无人机集群通信 3.4 飞行模拟与测试 4. 基于 Python 的 MAVLink 协议编程实践 4.1 开发环境…...

【记一次亚马逊普华永道审计流程】

1、2025年2月21日 收到审计邮件 2、2025年2月25日未及时关注注册开发者的邮箱导致一直未回复 3、2025年3月4日亚马逊警告邮件-依旧未回复 4、2025年3月13日APP正式被亚马逊开发者商店下架 停用影响: APP从官方商店下架,不能授权新店铺 停用原因: 由于此邮箱为注册…...

Java 异常处理全解析:从基础到自定义异常的实战指南

Java 异常处理全解析:从基础到自定义异常的实战指南 一、Java 异常体系:Error 与 Exception 的本质区别 1. 异常体系核心架构 Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类。 在Java API中已经定义了许…...

二、UI自动化测试02--元素定位方法

目录 一、定位⼀组元素⽅法二、XPath 定位⽅法1. 路径策略1.1 路径值获取⽅法 2. 利⽤元素属性策略利⽤元素属性策略的注意事项 3. 属性和逻辑结合4. 层级和属性结合策略5. XPath 延伸⽅法 三、CSS 定位⽅法1. CSS 策略: id选择器/class选择器/元素选择器/属性选择器2. 属性选择…...

第二章 信息技术发展(2.1 信息技术及其发展)

2.1 信息技术及其发展 2.1.1 计算机软硬件 计算机硬件 (Computer Hardware) 是指计算机系统中由电 、机械和光电元件等组成 的各 种物理装置的总称计算机软件 (Computer Software) 是指计算机系统中的程序及其文档,程序是计 算任务的处理对象和处理规则的描述;文档是为了便千…...

【SwitchyOmega安装教程】

目录 一、插件安装 1. 下载安装文件 2. 打开浏览器扩展安装页面 3. 安装插件 二、界面详情 三、配置信息 3.1 设置IP 1、查看IP地址信息 2、批量测试IP是否有效 3、点击扩展程序,选择 Proxy SwitchyOmega 4、 点击选项进行配置 5、配置页面 一、插件安装 1…...

驱动开发硬核特训 · Day 21(上篇加强版):深入理解子系统机制与实战初探

📅 日期:2025-04-27 📚 技术平台:嵌入式Jerry(B站) 1. 为什么要有子系统?(深度版) 在 Linux 内核发展早期,设备管理较为混乱,每种设备&#xff0…...

GoFly快速开发框架新增UI素材库-帮助开发者快速开发管理后台UI基于ArcoDesign框架开发

说明: 为开发者提供管理台的UI素材,社区将持续为开发开发后台系统常用UI界面,让开发时能有一半的界面可以直接从UI库获取,减少开发者自己排版界面的时间,帮助开发者快速开发后台业务。 使用的前端版本要求&#xff1…...

Unity-Shader详解-其二

前向渲染和延迟渲染 前向渲染和延迟渲染总的来说是我们的两种主要的渲染方式。 我们在Unity的Project Settings中的Graphic界面能够找到渲染队列的设定: 我们也可以在Main Camera这里进行设置: 那这里我们首先介绍一下两种渲染(Forward R…...

Windows 安装 Neo4j 教程

Windows 安装 Neo4j 教程 Neo4j 是一个开源的图数据库,它以图形结构存储数据,适合用于处理高度连接的数据,广泛应用于社交网络、推荐系统、欺诈检测等场景。本文将为你介绍如何在 Windows 系统上安装和配置 Neo4j 数据库。 一、安装前准备 …...

Neo4j 常用查询语句

Neo4j 常用查询语句 Neo4j 是一个图数据库,查询语言是 Cypher,它类似于 SQL 但针对图形数据进行了优化。Cypher 语法直观易懂,适合用来处理图数据。本文将介绍一些 Neo4j 中常用的查询语句,帮助你快速掌握图数据的操作方法。 一…...

机器学习(10)——神经网络

文章目录 1. 神经网络基本原理1.1. 什么是神经网络1.2. 核心思想 2. 基础组件3. 前向传播(Forward Propagation)4. 反向传播(Backpropagation)5. 激活函数对比6. 网络架构类型7. 优化策略8. Python示例(PyTorch&#x…...

Qt软件开发-摄像头检测使用软件V1.1

系列文章目录 Qt软件开发-摄像头检测使用软件V1.1 文章目录 系列文章目录前言一、V1.1增加了哪些功能?二、代码构成1.总体结构2. 代码内容 三、效果展示图总结 前言 之前,在Qt软件开发-摄像头检测使用软件:https://blog.csdn.net/xuming204…...

AI日报 - 2025年04月26日

🌟 今日概览(60秒速览) ▎🤖 模型竞赛 | OpenAI与Google新模型在Arena榜单激烈角逐,性能指标各有千秋。 OpenAI发布o3/o4-mini等新模型,Gemini 2.5 Pro紧随其后,数学、编程能力成焦点。 ▎💼 商业动向 | 并…...

ES6 Map/WeakMap/Set/WeakSet 全解指南

一、设计思想与核心概念 1. 解决传统结构的痛点 Object:键只能是字符串/Symbol、无序、无size属性Array:查找效率低(O(n))、无自动去重机制核心突破:// 传统方式 vs ES6方式 const obj { [{}]: value }; // 键会被转为"[object Obje…...

【Python】使用uv管理python虚拟环境

本文介绍了python虚拟环境管理工具uv,包括uv的作用、uv的常用命令等等。 参考:UV - 管理Python 版本、环境、第三方包 1. 介绍uv 官网:https://docs.astral.sh/uv/ uv是一个python虚拟环境管理工具,可以用来替代pip、pyenv、vir…...

求解,如何控制三相无刷电机?欢迎到访评论

问题:通过一个集成的TF2104芯片控制H桥上桥臂和下桥臂,如何控制?还是说得需要PWM_UH和PWM_UL分开控制?...

002 六自由度舵机机械臂——姿态解算理论

00 DH模型的核心概念 【全程干货【六轴机械臂正逆解计算及仿真示例】】 如何实现机械臂的逆解计算-机器谱-robotway DH模型是机器人运动学建模的基础方法,通过​​四个参数​​描述相邻关节坐标系之间的变换关系。其核心思想是将复杂的空间位姿转换分解为绕轴旋转…...

部署大模型需要多少GPU显存?以DeepSeek R1部署为例

引言 部署大型语言模型(LLM)时究竟需要多少GPU显存?本文将进行一次简单测算。 如何计算 算法1 可以用一个简单的公式来计算显存占用(单位GB): 参数说明如下: 符号 含义 M 所需的 GPU 显存…...

C++?类和对象(下)!!!

一、前言 在之前我们已经讨论过了有关类和对象的前置知识以及类中的六大默认成员函数,在本期我们继续再讨论类和对象中剩余的友元、初始化列表等相关知识,如果需要再了解之前的知识的话,链接奉上:C?类和对象&#xff0…...

function,bind,lambda的用法

C中的std::function、std::bind与Lambda表达式详解 一、std::function std::function是C11标准引入的类模板,用于封装任意类型的可调用对象,例如函数指针、Lambda表达式、函数对象等。通过std::function可以实现不同形式可调用对象的统一存储与调用…...

Maven的聚合工程与继承

目录 一、为什么需要使用Maven工程 二、聚合工程的结构 三、聚合工程实现步骤 四、父工程统一管理版本 五、编译打包 大家好,我是jstart千语。想着平时开发项目似乎都是用maven来管理的,并且大多都是聚合工程。而且在maven的聚合工程中&#xff0c…...

‌C/C++对时间的处理

1. 两种数据结构 time_t‌ 是一个在C和C++编程语言中用于表示时间的类型。time_t类型通常是一个长整型(long int)或整数类型,用于表示从特定参考点(通常是1970年1月1日00:00:00 UTC)经过的秒数。 time_t定义在<ctime>头文件中,通常用于记录时间戳,比如获取当前时间…...

Spring Boot 支持政策

&#x1f9d1;&#x1f4bb; Spring Boot 支持政策 ✒️ Andy Wilkinson 于2023年12月7日编辑本页 32次修订 &#x1f4cc; 核心政策 &#x1f6e1;️ VMware Tanzu 开源支持政策 Spring Boot 针对关键错误和安全问题提供支持 &#x1f4c6; 版本支持周期 1️⃣ 主要版本&a…...

实验四 进程调度实验

一、实验目的 1、了解操作系统CPU管理的主要内容。 2、加深理解操作系统管理控制进程的数据结构--PCB。 3、掌握几种常见的CPU调度算法&#xff08;FCFS、SJF、HRRF、RR&#xff09;的基本思想和实现过程。 4、用C语言模拟实现CPU调度算法。 5、掌握CPU调度算法性能评价指…...

静态多态和动态多态的区别

C多态机制深度解析 多态是面向对象编程的核心特性&#xff0c;允许通过统一接口执行不同实现。在C中&#xff0c;多态表现为基类指针或引用调用虚函数时&#xff0c;根据实际对象类型执行对应派生类的函数逻辑。 基础实现示例 定义基类与派生类&#xff0c;演示动态绑定…...

现代化Android开发:Compose提示信息的最佳封装方案

在 Android 开发中&#xff0c;良好的用户反馈机制至关重要。Jetpack Compose 提供了现代化的 UI 构建方式&#xff0c;但提示信息(Toast/Snackbar)的管理往往显得分散。本文将介绍如何优雅地封装提示信息&#xff0c;提升代码可维护性。 一、基础封装方案 1. 简单 Snackbar …...

Android学习总结之Retrofit篇

1. 注解原理概述 在 Java 里&#xff0c;注解是一种元数据&#xff0c;它为代码提供额外信息但不影响程序的实际逻辑。注解可以在类、方法、字段等元素上使用&#xff0c;并且能在编译时、运行时通过反射机制被读取。Retrofit 充分利用了 Java 注解机制&#xff0c;通过自定义…...

Python 第 12、13 节课 - 元组和列表

- 第 94 篇 - Date: 2025 - 04 - 26 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 Python 第 12、13 节课 - 元组和列表 上课时间: 2025-04-21&#xff08;12&#xff09; 2025-04-24&#xff08;13&#xff09; 文章目录 Python 第 12、13 节课 - 元组和列表一 元组1 元组的…...

新特性版本升级指引

✨ 升级到新特性版本时的配置迁移 1️⃣ &#x1f527; 配置迁移工具说明 当您将应用升级到新特性版本时&#xff0c;可能需要处理部分配置属性的重命名或移除问题。 2️⃣ &#x1f680; 启用方法 Spring Boot 提供了环境分析工具&#xff1a; 应用启动时打印诊断信息运行时…...

6.1 客户服务:智能客服与自动化支持系统的构建

随着企业数字化转型的加速&#xff0c;客户服务作为企业与用户交互的核心环节&#xff0c;正经历从传统人工服务向智能化、自动化服务的深刻变革。基于大语言模型&#xff08;LLM&#xff09;和智能代理&#xff08;Agent&#xff09;的技术为构建智能客服与自动化支持系统提供…...

从新手到高手:小程序开发进阶技巧分享

小程序开发从入门到精通需要经历技术积累、架构优化和工程化实践等多个阶段。以下是结合真实项目经验的进阶路线与核心技术要点&#xff0c;涵盖性能优化、架构设计、跨平台开发等关键领域&#xff1a; 一、性能调优实战技巧 1. 首屏渲染加速方案 // 预请求关键数据&#xff…...

S参数的含义

S参数的含义&#xff1a; 在低速设计时代&#xff0c;工程界普遍使用等效集总电路模型来描述互连通道的过孔、连接器等各部分。对于上升时间达到几个ns的低速数字信号&#xff0c;甚至可以使用一个0Ω电阻代替连接器&#xff0c;分析的结果也不会和实际情况有太大的差别。但是当…...

职场十二法则-马方

马方老师的《职场十二法则》,献给初入职场工作中迷茫的自己。 1.挣钱是能力的副产品&#xff0c;能力比挣钱重要&#xff0c;让自己值钱比有钱更重要。成长比赚钱重要&#xff0c;年轻时把成长放第一位&#xff0c;挣钱放第二位&#xff0c;通过提升能力实现长期收益。 2.成长…...

安装docker,在docker上安装mysql,docker上安装nginx

目录 一.安装docker 1.1查看Linux版本的命令这里推荐两种&#xff1a; 1.2查看内核版本有三种方式&#xff1a; 2.安装 2.1 如果之前安装了docker&#xff0c;先删除旧版本的doker 2.2 安装需要的软件包&#xff0c;yum-util提供yum-config-manager功能&#xff0c;另外两…...

Java基础第五章、面向对象程序设计

1.package包 如果引入的不同包里面有相同的类名时&#xff0c;需要对要使用的类进行完整的限定名指定。 2.访问修饰符 子类对父类的方法重写也遵循上面的原则 一个java文件中最多只能有一个public(和文件同名)的类。 3.初始化块 //Driver.java public class Driver {private lo…...

RD电子实验记录本选用贴士A-B-C

传统的实验记录本&#xff0c;令人又爱又恨本 如何挑选电子实验室记录本&#xff08;ELN&#xff09;的品牌/服务商/供应商&#xff1f; 电子实验记录本&#xff0c;又名为ELN&#xff0c;Electronic lab notebook&#xff0c;enotebook&#xff0c;研发电子管理系统&#xf…...

Python 第 11 节课 - string 与 random 的方法

- 第 93 篇 - Date: 2025 - 04 - 26 Author: 郑龙浩/仟墨 【Python 在校课堂笔记】 Python 第 11 节课 - string 与 random 的方法 上课时间: 2025-04-14 文章目录 Python 第 11 节课 - string 与 random 的方法一 string 的方法1 s.split()2 s.find()3 s.replace()4 s.strip…...

proxychains4系统代理for linux(加速国内github下载速度,pip安装)

1.proxychains4代理安装&#xff1a; sudo apt-get install proxychains42.找到配置文件/etc/proxychains4.conf在[ProxyList]后面添加以下内容&#xff1a; socks5 127.0.0.1 10808 配置如下&#xff1a; 3.使用proxychains4(git clone)&#xff1a; proxychains4 git c…...

LLM基础之源码一

transformers 核心源码梳理 Trainer部分&#xff1a; __init__() 初始化函数&#xff1a; def __init__(xxx):if args is None:output_dir "tmp_trainer"args TrainingArguments(output_diroutput_dir) self.args argsself.compute_loss_func compute_loss_fun…...

蛮荒tv桌面永不升级版app下载-蛮荒桌面安卓电视版下载

蛮荒桌面是一款具有丰富桌面内容的生活应用软件&#xff0c;可以连接电视上使用&#xff0c;用户将需要的软件添加到桌面上&#xff0c;系统就会自动分类管理软件,小编今天为大家推荐一款功能更大强大的电视桌面应用——乐看家桌面。 乐看家桌面功能亮点: 1.官网下载刷入机顶盒…...

2025蓝桥省赛c++B组第二场题解

前言 这场的题目非常的简单啊&#xff0c;至于为什么有第二场&#xff0c;因为当时河北正在刮大风被迫停止了QwQ&#xff0c;个人感觉是历年来最简单的一场&#xff0c;如果有什么不足之处&#xff0c;还望补充。 试题 A: 密密摆放 【问题描述】 小蓝有一个大箱子&#xff0…...

c#简易超市充值卡程序充值消费查余额

开发背景 本软件是给克什克腾旗某公司开发的一个简易的超市充值卡程序 # 功能 1、充值卡的充值、消费、查询余额 github下载&#xff1a;https://github.com/oyangxizhe/cash.git...

使用FME生成Delaunay三角形

目录 背景与应用场景 前置条件与数据准备 操作流程详解 3.1 点要素矢量化3.2 设置坐标系3.3 生成Delaunay三角形...

三款实用工具推荐:图片无损放大+音乐格式转换+音视频格式转换!

在这个数字化时代&#xff0c;总有些工具能让人眼前一亮。今天李师傅大家精选三款实用工具&#xff0c;从图片优化到格式转换&#xff0c;解决日常创作中的痛点&#xff0c;让数字生活更得心应手。 在这个数字化时代&#xff0c;总有些工具能让人眼前一亮。今天为大家精选三款…...

文本预处理(NLTK)

1. 自然语言处理基础概念 1.1 什么是自然语言处理 自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于…...

泰迪杯实战案例学习资料:生产线的故障自动识别和人员配置优化

(西南石油大学,第十二届泰迪杯特等奖案例) (深度扩展版) 一、案例背景与目标 1.1 问题背景 在制造业中,生产线设备故障可能导致以下问题: 停机损失:每小时停机成本可达数万元(视行业而定)。 资源浪费:人工排班不合理导致高技能员工闲置或低效分配。 安全隐患:未及…...

dijkstra

open_set是当前正在计算的节点&#xff1b; 每次从当前open_set集合中找出cost最小的节点进行计算更新&#xff1a;从open_set中去除该节点&#xff0c;保存到close_set中&#xff1b; 运动更新可以根据运动模型选择合适的节点运动方式&#xff1b; 【代价的计算方式是&…...

【SSH 端口转发】通过SSH端口转发实现访问远程服务器的 tensorboard

SSH 连接远程服务器时的命令&#xff1a; ssh -L 8001:localhost:8001 usrnameserverip-L&#xff1a; 这是指定进行本地端口转发的选项。也就是说&#xff0c;要将本地机器的一个端口通过 SSH 隧道转发到远程服务器上的某个服务。 8001:localhost:8001&#xff1a; 第一个 80…...

w308汽车销售系统的设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…...