基于PX4和Ardupilot固件下自定义MAVLink消息测试(QGroundControl和Mission Planner)
在无人机行业,MAVLink(Micro Air Vehicle Link)协议已经成为了通信的标准协议。MAVLink协议定义了一种轻量级的消息传输格式,广泛应用于PX4和ArduPilot等开源无人机飞控固件中。通过自定义MAVLink消息,我们可以为无人机添加特定功能或扩展现有功能。本文将详细介绍如何在PX4和ArduPilot固件下自定义MAVLink消息,并使用QGroundControl和Mission Planner进行测试。
一、创建自定义MAVLink消息文件
MAVLink的消息格式定义是通过XML文件来描述的。在这个XML文件中,我们可以定义自定义的消息类型、字段及其数据类型。
以下是一个简单的自定义消息示例,它用于请求云台设备消息:
<?xml version="1.0"?>
<mavlink><message id="154" name="GIMBAL_DEVICE_INFORMATION"><description>Gimbal device information message, sent in response to MAV_CMD_REQUEST_MESSAGE (512).</description><!-- Message fields --><field type="uint32_t" name="time_boot_ms">Time since boot in milliseconds</field><field type="uint64_t" name="uid">Unique identifier for the gimbal</field><field type="uint32_t" name="firmware_version">Firmware version of the gimbal</field><field type="uint32_t" name="hardware_version">Hardware version of the gimbal</field><field type="float" name="pitch_max">Maximum pitch angle in radians</field><field type="float" name="pitch_min">Minimum pitch angle in radians</field><field type="float" name="roll_max">Maximum roll angle in radians</field><field type="float" name="roll_min">Minimum roll angle in radians</field><field type="float" name="yaw_max">Maximum yaw angle in radians</field><field type="float" name="yaw_min">Minimum yaw angle in radians</field><field type="uint32_t" name="cap_flags">Capabilities flags</field><field type="uint32_t" name="custom_cap_flags">Custom capability flags</field><field type="string" name="vendor_name">Vendor name of the gimbal</field><field type="string" name="model_name">Model name of the gimbal</field><field type="string" name="custom_name">Custom name of the gimbal</field></message>
</mavlink>
XML文件解析:
<message id="154" name="GIMBAL_DEVICE_INFORMATION">
:这是定义消息的标识符和名称。这里的ID为154,这是您在代码中看到的ack_id。名称为GIMBAL_DEVICE_INFORMATION,描述了消息内容是云台设备信息。
<field type="uint32_t" name="time_boot_ms">
:每个字段都定义了数据类型和名称。time_boot_ms字段类型为uint32_t,表示系统启动以来的时间(以毫秒为单位)。
<field type="float" name="pitch_max">、<field type="float" name="yaw_min">
等:这些字段描述了云台设备的最大和最小角度(俯仰角、滚转角、偏航角),它们的类型是float,表示浮动精度的小数。
<field type="uint32_t" name="cap_flags">
:这个字段定义了云台的能力标志,它的类型是uint32_t,表示一个32位的无符号整数。
<field type="string" name="vendor_name">、<field type="string" name="model_name">
等:这些字段描述了云台设备的厂商名称、型号名称和自定义名称,字段类型是string,表示字符串。
二、编写测试脚本
我这里选择通过python导入mavlink包去测试,简单方便
1. 导入库和设置连接
from pymavlink import mavutil
import time
-
pymavlink 是一个 Python 库,用于通过 MAVLink 协议与飞行控制器或其他设备进行通信。
-
time 库用于设置延时(如:等待1秒再发送下一次请求)。
2. 设置串口连接参数
SERIAL_PORT = 'COM35' # Windows 示例,Linux 用 '/dev/ttyUSB0'
BAUD_RATE = 115200 # 修改为你的设备波特率master = mavutil.mavlink_connection(SERIAL_PORT, baud=BAUD_RATE)
-
SERIAL_PORT
:设置了与MAVLink设备(如飞控)连接的串口端口。对于Windows系统通常是COMx,Linux系统通常是/dev/ttyUSB0等。 -
BAUD_RATE
:设置串口波特率,通常为115200,这个值需要根据设备配置进行调整。 -
mavutil.mavlink_connection
:创建一个MAVLink连接实例,用于和设备通信。
3. 发送心跳包和请求消息
message_id = 512
target_system = 1
target_component = 154
ack_id = 283while True:# 发送心跳包master.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS,mavutil.mavlink.MAV_AUTOPILOT_INVALID,0, 0, 0)
-
心跳包:心跳包是MAVLink通信中定期发送的数据包,用来告知其他设备自己在线。这里,MAV_TYPE_GCS 表示地面站类型的心跳包,MAV_AUTOPILOT_INVALID 表示未指定自动驾驶仪类型。
-
master.mav.heartbeat_send()
:发送心跳包,用于维护设备之间的连接。
# 发送 MAV_CMD_REQUEST_MESSAGE (512)master.mav.command_long_send(target_system, target_component, 512, 0, 283, 0, 0, 0, 0, 0, 0)
请求云台设备信息:通过发送MAV_CMD_REQUEST_MESSAGE命令(命令ID为512)请求设备信息。
-
target_system 和 target_component:目标系统和目标组件的标识符,这里目标系统为1,目标组件为154(表示云台设备)。
-
283:这是MAV_CMD_REQUEST_MESSAGE命令的“ack_id”,用来标识这条命令的特定请求。
4. 接收和解析返回的MAVLink消息
msg = master.recv_match(blocking=True)if msg:if msg.get_msgId() == ack_id:# 打印消息的字段内容,检查实际的字段名msg_dict = msg.to_dict()print(f"收到消息, 消息内容: {msg_dict}")
-
master.recv_match(blocking=True)
:接收一个MAVLink消息,如果没有收到消息,程序会阻塞直到接收到消息。 -
msg.get_msgId()
:获取返回消息的ID,如果它与预期的ack_id(即283)匹配,表示这是我们请求的云台设备信息的响应。 -
msg.to_dict()
:将接收到的消息转为字典格式,方便后续操作。
5. 解析云台设备信息消息
time_boot_ms = msg_dict.get('time_boot_ms', '未知')
uid = msg_dict.get('uid', '未知')
firmware_version = msg_dict.get('firmware_version', '未知')
hardware_version = msg_dict.get('hardware_version', '未知')
pitch_max = msg_dict.get('pitch_max', '未知')
pitch_min = msg_dict.get('pitch_min', '未知')
roll_max = msg_dict.get('roll_max', '未知')
roll_min = msg_dict.get('roll_min', '未知')
yaw_max = msg_dict.get('yaw_max', '未知')
yaw_min = msg_dict.get('yaw_min', '未知')
cap_flags = msg_dict.get('cap_flags', '未知')
custom_cap_flags = msg_dict.get('custom_cap_flags', '未知')
vendor_name = msg_dict.get('vendor_name', '未知')
model_name = msg_dict.get('model_name', '未知')
custom_name = msg_dict.get('custom_name', '未知')
通过msg_dict.get() 方法从返回的字典中提取各个字段的值,如果某个字段没有值,则返回默认值’未知’。
-
time_boot_ms:系统启动以来的时间(毫秒)。
-
uid:云台的唯一标识符。
-
firmware_version:固件版本。
-
hardware_version:硬件版本。
-
pitch_max, pitch_min:云台的最大和最小俯仰角。
-
roll_max, roll_min:云台的最大和最小滚转角。
-
yaw_max, yaw_min:云台的最大和最小偏航角。
-
cap_flags:云台的能力标志。
-
custom_cap_flags:云台的自定义能力标志。
-
vendor_name:厂商名称。
-
model_name:型号名称。
-
custom_name:自定义名称。
6. 输出解析结果
print(f"Time Boot MS: {time_boot_ms} ms")
print(f"UID: {uid}")
print(f"Firmware Version: {firmware_version}")
print(f"Hardware Version: {hardware_version}")
print(f"Pitch Max: {pitch_max} rad")
print(f"Pitch Min: {pitch_min} rad")
print(f"Roll Max: {roll_max} rad")
print(f"Roll Min: {roll_min} rad")
print(f"Yaw Max: {yaw_max} rad")
print(f"Yaw Min: {yaw_min} rad")
print(f"Capability Flags: {cap_flags}")
print(f"Custom Capability Flags: {custom_cap_flags}")
print(f"Vendor Name: {vendor_name}")
print(f"Model Name: {model_name}")
print(f"Custom Name: {custom_name}")
通过打印输出的方式将解析出来的云台设备信息展示在控制台上,方便查看。
7. 延时等待下一次请求
# 等待 1 秒后再发送下一个请求# time.sleep(1)
time.sleep(1)
:等待1秒后再发送下一次请求(这部分被注释掉了,表示发送请求后不会立即休眠)。
代码示例:
#请求云台设备消息 MAVLINK_MSG_ID_GIMBAL_DEVICE_INFORMATIONfrom pymavlink import mavutil
import time# 连接到 MAVLink 设备
SERIAL_PORT = 'COM35' # Windows 示例,Linux 用 '/dev/ttyUSB0'
BAUD_RATE = 115200 # 修改为你的设备波特率master = mavutil.mavlink_connection(SERIAL_PORT, baud=BAUD_RATE)# 发送心跳包和 MAV_CMD_REQUEST_MESSAGE 每秒一次
message_id = 512
target_system = 1
target_component = 154
ack_id = 283while True:# 发送心跳包master.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS,mavutil.mavlink.MAV_AUTOPILOT_INVALID,0, 0, 0)# print("已发送心跳包")# 发送 MAV_CMD_REQUEST_MESSAGE (512)master.mav.command_long_send(target_system, target_component, 512, 0, 283, 0, 0, 0, 0, 0, 0)# print(f"已发送 MAV_CMD_REQUEST_MESSAGE ({message_id}) 请求")# 监听返回的 MAVLink 消息并解析特定消息 IDmsg = master.recv_match(blocking=True)# print(f"msg: {msg} ")if msg:# 通过 msg.id 过滤需要的消息if msg.get_msgId() == ack_id:# 打印消息的字段内容,检查实际的字段名msg_dict = msg.to_dict()print(f"收到消息, 消息内容: {msg_dict}")# 解析字段time_boot_ms = msg_dict.get('time_boot_ms', '未知')uid = msg_dict.get('uid', '未知')firmware_version = msg_dict.get('firmware_version', '未知')hardware_version = msg_dict.get('hardware_version', '未知')pitch_max = msg_dict.get('pitch_max', '未知')pitch_min = msg_dict.get('pitch_min', '未知')roll_max = msg_dict.get('roll_max', '未知')roll_min = msg_dict.get('roll_min', '未知')yaw_max = msg_dict.get('yaw_max', '未知')yaw_min = msg_dict.get('yaw_min', '未知')cap_flags = msg_dict.get('cap_flags', '未知')custom_cap_flags = msg_dict.get('custom_cap_flags', '未知')vendor_name = msg_dict.get('vendor_name', '未知')model_name = msg_dict.get('model_name', '未知')custom_name = msg_dict.get('custom_name', '未知')# 输出解析后的数据print(f"Time Boot MS: {time_boot_ms} ms")print(f"UID: {uid}")print(f"Firmware Version: {firmware_version}")print(f"Hardware Version: {hardware_version}")print(f"Pitch Max: {pitch_max} rad")print(f"Pitch Min: {pitch_min} rad")print(f"Roll Max: {roll_max} rad")print(f"Roll Min: {roll_min} rad")print(f"Yaw Max: {yaw_max} rad")print(f"Yaw Min: {yaw_min} rad")print(f"Capability Flags: {cap_flags}")print(f"Custom Capability Flags: {custom_cap_flags}")print(f"Vendor Name: {vendor_name}")print(f"Model Name: {model_name}")print(f"Custom Name: {custom_name}")# 等待 1 秒后再发送下一个请求# time.sleep(1)
三、PX4固件MAVLink消息测试
-
- 打开QGroundControl,连接飞控,进入MAVLink检测
-
- 在cmd命令行,运行python脚本
可见如下图所示
四、Ardupilot固件MAVLink消息测试
-
- 打开Mission Planner,连接飞控,进入MAVLink Inspector
-
- 在cmd命令行,运行python脚本
可见如下图所示
相关文章:
基于PX4和Ardupilot固件下自定义MAVLink消息测试(QGroundControl和Mission Planner)
在无人机行业,MAVLink(Micro Air Vehicle Link)协议已经成为了通信的标准协议。MAVLink协议定义了一种轻量级的消息传输格式,广泛应用于PX4和ArduPilot等开源无人机飞控固件中。通过自定义MAVLink消息,我们可以为无人机…...
Maven快速上手
在前面我们学习了许多关于JAVA的知识,从今天这个博客开始我们就要进入到JAVAEE进阶的学习中了,在这里你们可以学到项目是怎么被我们一步步写出来。让我们为之加油吧!!!! 本期讲解: 1.了解Maven…...
【Django】教程-5-ModelForm增删改查+规则校验【正则+钩子函数】
【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 【Django】教程-3-数据库相关介绍 【Django】教程-4-一个增删改查的Demo 11. ModelForm 11.1 models.py from django.utils import timezone from django.db import models# 数据库ÿ…...
JavaScript中 == 和 === 区别
== 运算符 它是相等运算符,用于比较两个 值 是否相等 ( 如果两个值的类型不同,它会尝试将它们转换为相同的类型,然后再比较。) 示例: console.log(1 == 1); // true,因为1被转换为数字1,所以相等 console.log(1 == true); // true,因为true被转换为数字1,所以相等…...
使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI
使用LangChain Agents构建Gradio及Gradio Tools(3)——使用Langchain agents构建Gradio UI 本篇摘要16. 使用LangChain Agents构建Gradio及Gradio Tool16.3 使用Langchain agents构建Gradio UI16.3.1 创建代理16.3.2 创建Gradio UI16.3.3 运行demo参考文献本章目录如下: 《使…...
scikit-surprise 智能推荐模块使用说明
目录 1、前言 2、算法 3、数据集 3.1 three built-in datasets are available: 3.2 Load a dataset from a pandas dataframe. 3.3 Load a dataset from a (custom) file. 3.4 Load a dataset where folds (for cross-validation) are predefined by some files. 4、pre…...
基于python开发的邮箱合并群发工具
智能邮件群发系统 一个基于Python和PyQt5开发的智能邮件群发工具,支持Word模板和Excel数据源的自动匹配,具有现代化UI界面和友好的用户体验。 Github项目地址:https://github.com/liugang926/Auto-mail-sent.git dist目录有编译好的exe程序&…...
分治算法之凸包问题
1. 算法思路 基本思想 利用分治策略解决凸包问题主要分为两大步骤: 分解(Divide): 将所有点按照 x 坐标排序,并将点集分为左右两部分。 递归地对左右两部分分别求解凸包。 合并(Conquer/Merge…...
OpenBMC:BmcWeb 处理http请求3 字典树查找节点
OpenBMC:BmcWeb 处理http请求2 查找路由对象-CSDN博客 findRouteByPerMethod实际上是调用了perMethod.trie.find(url);来查找路由对象的 class Trie {struct FindResult{unsigned ruleIndex;std::vector<std::string> params;};FindResult findHelper(const std::string…...
音频进阶学习二十五——脉冲响应不变法实现低通滤波器
文章目录 前言一、脉冲响应不变法1.定义2.模拟系统冲激响应的周期采样3.模拟系统和数字系统的频域响应关系1)S域和Z域的关系2)幅频响应的关系 4.通过有理函数设计滤波器5.总结 二、低通滤波器的设计实例1.给定数字滤波器指标2.转换模拟滤波器指标3.模拟滤…...
Linux中输入输出管理技巧
一、输入输出使用到的系统资源 1、字符设备(Character Devices) 什么是字符设备 字符设备是 Linux 中的一类设备,支持以字符为单位进行数据传输。与块设备不同,字符设备不需要缓 冲区,即数据是逐字节直接传递的。典…...
wireshark抓包工具的使用
下载地址:https://www.wireshark.org/#downloadLink 安装方式,一路next。 使用方式 第一步启动后选择你要抓包的网卡,ipconfig 可以查看你的默认网卡,我的是 以太网 双击进入。 筛选操作(快速筛选方式)…...
javaweb自用笔记:文件上传案例、登录(统一拦截)案例
文件上传 或者说新建一个类配置好信息,然后到aliOssUtils里面用getter、setter方法获取到配置项 登录(统一拦截) 前端要json格式的数据,捕获到异常后前端可以显示错误(对不起,操作失败,请联系管…...
【区块链安全 | 第十七篇】类型之引用类型(一)
文章目录 引用类型数据存储位置分配行为 数组特殊数组:bytes 和 string 类型bytes.concat 和 string.concat 的功能分配 memory 数组数组字面量(Array Literals)二维数组字面量数组成员(Array Members)悬空引用&#x…...
2025国内DevOps新手突围指南:从Gitee零门槛入门到工具链深度对比
对于刚接触DevOps的新手,推荐优先选择Gitee DevOps平台,其次是Jenkins和GitLab。Gitee DevOps作为国内领先的一站式研发效能平台,深度融合代码托管、持续集成/持续交付(CI/CD)、项目协作等功能,不仅界面简洁…...
【C语言】文件操作(2)
一、文件的随机读写 在前面我们学习了文件的顺序读写的函数,那么当我们要读取某个指定位置的内容的时候,是否只能顺序的读取到这个内容?还有在对文件进行输入的时候,需要对指定的位置进行写入,那么此时应该怎么办呢&a…...
将内网的IP地址映射到外网的几种方案
文章目录 1. 背景与目标2. 核心方案选型3. 方案A:路由器端口映射(详细步骤)3.1 前置条件3.2 配置流程3.3 验证访问 4. 方案B:云平台NAT网关配置(以阿里云为例)4.1 前置条件4.2 配置流程4.3 验证访问 5. 方案…...
基于深度学习的图像超分辨率技术研究与实现
一、引言 在数字图像处理领域,图像超分辨率技术一直是一个备受关注的热点话题。随着人们对图像质量要求的不断提高,如何将低分辨率图像提升到高分辨率,同时保持图像的细节和清晰度,成为了一个极具挑战性的问题。传统的图像超分辨率技术主要依赖于插值方法,如双线性插值、双…...
A股复权计算_权息数据整理
目录 前置: 步骤: 1 以通达信为参照 2 从优矿获取所需数据 2.1 股票配股信息 2.2 股票分红信息 2.3 股票拆股信息 3 合并数据,制成权息数据表 权息数据截止20250329.7z 视频 前置: 1 本系列将以 “A股复权计算_” 开头…...
如何进行Prompt调优?
一. 神奇的咒语 在输入prompt前,加入下面这一段“神奇的咒语”,中文或者英文,就能帮你优化提示词。 I want you to become my Expert Prompt Creator. Your goal is to help me craft the best possible prompt for my needs. The prompt yo…...
Git Tag 详解:版本管理与实战指南
文章目录 Git Tag 详解:版本管理与实战指南1. Git Tag 的类型2. Git Tag 的常见操作(1) 创建标签① 创建轻量标签② 创建附注标签③ 给指定的提交打标签 (2) 查看标签(3) 删除标签(4) 推送标签到远程① 推送单个标签② 推送所有标签 (5) 删除远程标签 3. 使用 Tag 的…...
从零开始打造HTML5拼图游戏:一个Canvas实战项目
从零开始打造HTML5拼图游戏:一个Canvas实战项目 先看效果: 你是否曾经被那些精美的网页拼图游戏所吸引?用 HTML5 的 Canvas 技术,从零开始,教你怎么画图、处理鼠标事件,还有游戏的核心逻辑,…...
【数据分享】2000—2024年我国乡镇的逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)
之前我们分享过2000-2024年我国逐年的归一化植被指数(NDVI)栅格数据,该逐年数据是取的当年月归一化植被指数(NDVI)的年最大值!另外,我们基于此年度栅格数据按照行政区划取平均值,得到…...
设计模式 Day 2:工厂方法模式(Factory Method Pattern)详解
继 Day 1 学习了单例模式之后,今天我们继续深入对象创建型设计模式——工厂方法模式(Factory Method)。工厂方法模式为对象创建提供了更大的灵活性和扩展性,是实际开发中使用频率极高的一种设计模式。 一方面,我们将简…...
TensorFlow SegFormer 实战训练代码解析
一、SegFormer 实战训练代码解析 SegFormer 是一个轻量级、高效的语义分割模型,结合了 ViT(视觉 Transformer) 和 CNN 的高效特征提取能力,适用于边缘 AI 设备(如 Jetson Orin)。下面,我们深入…...
51c嵌入式~单片机~合集7~※
我自己的原文哦~ https://blog.51cto.com/whaosoft/13692314 一、芯片工作的心脏--晶振 在振荡器中采用一个特殊的元件——石英晶体,它可以产生频率高度稳定的交流信号,这种采用石英晶体的振荡器称为晶体振荡器,简称晶振。 制作方法 …...
私有知识库 Coco AI 实战(一):Linux 平台部署
Coco AI 是一个完全开源、跨平台的统一搜索和生产力工具,能够连接各种数据源,包括应用程序、文件、Google Drive、Notion、Yuque、Hugo 等,帮助用户快速智能地访问他们的信息。通过集成 DeepSeek 等大型模型,Coco AI 实现了智能个…...
大模型高质量rag构建:A Cheat Sheet and Some Recipes For Building Advanced RAG
原文:A Cheat Sheet and Some Recipes For Building Advanced RAG — LlamaIndex - Build Knowledge Assistants over your Enterprise DataLlamaIndex is a simple, flexible framework for building knowledge assistants using LLMs connected to your enterpris…...
LeetCode 78.子集
问题描述 给定一个不含重复元素的整数数组 nums,返回其所有可能的子集(幂集)。 示例 输入: nums [1,2,3] 输出: [ [], [1], [1,2], [1,2,3], [1,3], [2], [2,3], [3] ]解法:回溯算法 回溯是一种 暴力…...
变量(Variable)
免责声明 如有异议请在评论区友好交流,或者私信 内容纯属个人见解,仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示:从小学解方程变量x,到中学阶段函数自变量x因变量y&…...
【STM32】最后一刷-江科大Flash闪存-学习笔记
FLASH简介 STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程,(系统存储器用于存储原厂写入的BootLoader程序,用于串口…...
Dify 深度集成 MCP实现灾害应急响应
一、架构设计 1.1 分层架构 #mermaid-svg-5dVNjmixTX17cCfg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5dVNjmixTX17cCfg .error-icon{fill:#552222;}#mermaid-svg-5dVNjmixTX17cCfg .error-text{fill:#552222…...
2025 年上半年软考信息系统项目管理师备考计划
2025 年上半年软考信息系统项目管理师备考计划 2025 年上半年软考信息系统项目管理师考试时间为 5 月 24 日 - 27 日,从现在开始备考,需合理规划,高效学习。以下为详细备考计划: 一、基础学习阶段(现在 - 4 月上…...
Scikit-learn使用指南
1. Scikit-learn 简介 定义: Scikit-learn(简称 sklearn)是基于 Python 的开源机器学习库,提供了一系列算法和工具,用于数据挖掘、数据预处理、分类、回归、聚类、模型评估等任务。特点: 基于 NumPy、SciP…...
学习大模型需要具备哪些技术、知识和基础
数学基础 概率论与数理统计:用于理解模型中的不确定性、概率分布,以及进行数据的统计分析、评估模型的性能等。例如,通过概率分布来描述模型预测结果的可信度,利用统计方法对数据进行抽样、估计模型的参数等。线性代数࿱…...
十五届蓝桥杯省赛Java B组(持续更新..)
目录 十五届蓝桥杯省赛Java B组第一题:报数第二题:类斐波那契数第三题:分布式队列第四题:食堂第五题:最优分组第六题:星际旅行第七题:LITS游戏第八题:拼十字 十五届蓝桥杯省赛Java B…...
Flink SQL Client bug ---datagen connector
原始sql语句如下 CREATE TABLE test_source (event_time TIMESTAMP(3), -- 事件时间(精确到毫秒)click INT, -- 随机数值字段WATERMARK FOR event_time AS event_time - INTERVAL 5 SECOND WITH (connector datagen, …...
股指期货的多头套期保值是什么意思?
多头套期保值,又叫“买入套期保值”,听起来很复杂,其实很简单。它的核心就是“提前锁定价格,防止未来价格上涨”。 举个例子,假设你是一家工厂的老板,过几个月要买一批原材料。现在原材料的价格是100元/吨…...
hadoop集群配置-scp命令
scp 命令用于在不同主机之间复制文件或目录,在Hadoop集群配置中常用于将配置文件或相关资源分发到各个节点。以下是 scp 命令的基本用法和在Hadoop集群配置中的示例: 基本语法 scp [-r] [源文件或目录] [目标用户目标主机:目标路径] - -r :…...
Redis 源码硬核解析系列专题 - 结语:从源码看Redis的设计哲学
1. 引言 通过前七篇的源码解析,我们从Redis的整体架构、核心数据结构、事件驱动模型,到内存管理、持久化、主从复制与集群模式,逐步揭开了Redis高性能与简洁性的秘密。本篇将总结这些技术细节,提炼Redis的设计哲学,并探讨如何将源码学习成果应用到实际开发中。 2. Redis的…...
解决QSharedPointer栈变量的崩溃问题
目录 参考崩溃代码现象 解决 参考 QSharedPointer的陷阱 qt中的共享指针,QSharedPointer类 崩溃 代码 #include <QtCore/QCoreApplication> #include <QDebug> #include <QSharedPointer>class MyClass { public:void doSomething() {qDebug…...
Lambda 表达式是什么以及如何使用
目录 📌 Kotlin 的 Lambda 表达式详解 🎯 什么是 Lambda 表达式? 🔥 1. Lambda 表达式的基本语法 ✅ 示例 1:Lambda 基本写法 ✅ 示例 2:使用 it 关键字(单参数简化) ✅ 示例 3…...
C++自定义迭代器
实现自己的迭代器 最近在写数据结构,使用类模板实现,碰到了一些问题,其中有一个就是遍历的问题,查阅资料最后实现了自己的迭代器,让我实现的数据结构能像STL一样进行for循环遍历。 类的构成 #include <stdexcept…...
PWA 中的 Service Worker:如何实现应用离线功能
前言 在当今快速发展的互联网时代,Progressive Web App (PWA) 正在逐步成为现代 Web 开发的主流选择。PWA 将 Web 应用和原生应用的最佳特性相结合,提供了丰富的用户体验。而在 PWA 的众多技术中,Service Worker 无疑是其核心组件之一。 作…...
dockerfile制作镜像
1.docker pull centos:centos7 2.dockerfile内容 FROM centos:centos7 #指定镜像维护的作者和邮箱 MAINTAINER csdn< **********qq.com #设置环境变量mypath ENV MYPATH /usr/local #设置进入容器的默认目录是/usr/local WORKDIR $MYPATH # 下载并替换 CentOS 镜像源 RUN …...
网络空间安全(46)DevSecOps概述
一、定义与核心理念 DevSecOps是“开发(Development)、安全(Security)和运营(Operations)”的结合,它将安全实践融入软件开发生命周期的每个阶段,从需求、设计、开发、测试到部署和运…...
LeetCode 211
实现支持通配符的字典树(Trie):解决单词匹配问题 一、问题描述 我们需要设计一个数据结构,支持以下功能: 添加新单词搜索字符串是否与任何已添加的单词匹配,其中搜索字符串可能包含通配符 .(…...
Docker Compose 启动jar包项目
参考文章安装Docker和Docker Compose 点击跳转 配置 创建一个文件夹存放项目例如mydata mkdir /mydata上传jar包 假设我的jar包名称为goudan.jar 编写dockerfile文件 vim app-dockerfile按键盘上的i进行编辑 # 使用jdk8 FROM openjdk:8-jre# 设置时区 上海 ENV TZAsia/Sh…...
利用deepseek直接调用其他文生图网站生成图片
这次deepseek输入中文后,其实翻译英文后,是可以丢到比如pollinations.这个网站,来生成图片,用法如下: 你是一个图像生成助手,请根据我的简单描述,想象并详细描述一幅完整的画面。 然后将你的详…...
远程装个Jupyter-AI协作笔记本,Jupyter容器镜像版本怎么选?安装部署教程
通过Docker下载Jupyter镜像部署,输入jupyter会发现 有几个版本,不知道怎么选?这几个版本有什么差别? 常见版本有: jupyter/base-notebookjupyter/minimal-notebookjupyter/scipy-notebookjupyter/datascience-notebo…...