2024年五一数学建模竞赛C题论文首发

news2024/11/16 7:28:01

基于随机森林的煤矿深部开采冲击地压危险预测

摘要

煤炭作为中国重要的能源和工业原料,其开采活动对国家经济的稳定与发展起着至关重要的作用。本文将使用题目给出的数据探索更为高效的数据分析方法和更先进的监测设备,以提高预警系统的准确性和可靠性。

对于问题一,干扰信号分析,分析干扰信号并识别干扰信号的时间区间。首先对数据集进行数据清洗,判断其异常值以及缺失值。利用matlab的find函数判定得出无缺失值,再利用k-s检验判定数据分布方式。得出所有的数据均不服从正态分布检验,因此使用箱型图判定异常值。对于判定结果结合实际情况进行分析处理。首先利用给出数据使用固定大小的窗口遍历整个数据集,计算每个窗口中的数据特征。计算幅度差、噪声水平、持续时间、频率特征等。使用提取的特征通过TreeBagger函数训练一个包含100棵决策树的随机森林分类模型。利用问题一特定时间段内的电磁辐射和声发射数据导入模型进行分类判定。随机森林模型的准确率高达99.78%,实现对干扰信号的高精度识别

对于问题二,前兆特征信号分析,分析前兆特征信号并识别前兆特征信号的时间区间。首先,采用与问题一相同的数据清洗方式对问题二涉及的数据进行数据清洗。采用滑动窗口方法计算每个窗口的平均值、标准差和能量等指标。使用随机森林算法训练分类模型,目的是从特征中学习区分类别A和B的模式。利用问题二特定时间段内的电磁辐射和声发射数据导入模型并对其执行与训练数据相同的预处理和特征提取步骤。识别并合并连续或近连续的预测为前兆特征的时间窗口,形成连续的时间区间。

对于问题三,前兆特征信号的实时预警,预测前兆特征信号的概率。应用滑动窗口技术,计算每个窗口的滑动平均值、滑动标准差,以及信号的能量。这些统计量能够捕获信号在每个窗口内的基本特征,为后续的模型训练提供输入特征。筛选类别为A和B的数据作为训练集,使用提取的滑动平均值、滑动标准差和能量作为特征,进行随机森林模型的训练。对每个测试数据文件的最后一个数据点使用训练好的随机森林模型进行预测,评估该时刻前兆特征信号出现的概率。

综合所述,我们通过解决上述问题有助于优化煤矿的安全监控系统,提高对冲击地压等灾害的预防和响应能力。

关键词:随机森林、煤矿深部开采、分类模型、数据清洗

 

26页  1.2万字(无附录)

无水印照片9页

5.1.2 特征提取

我们利用题目给出的数据进行数据处理后,选取特征进行提取

  1. 信号的统计特征:如平均值、方差、峰度、偏度等。
  1. 频率分析:使用傅里叶变换分析信号频率组成,识别与常规采矿作业不同的频率特征。

具体提取结果如下所示

 

图1:可视化结果

信号波动:信号在不同时间点显示出显著的波动性。有些时间段内,信号振幅显著增加,这可能表明发生了一些异常活动或外部干扰。

峰值:图中存在若干尖锐的峰值,这些峰值可能指示某种突发事件或设备的突然响应。

主要频率成分:频率分布主要集中在较低频段,这表明信号的主要变化是较缓慢的波动。没有明显的高频干扰或尖锐的频率峰值,这通常与机械振动或电子设备的正常运行模式相符。

低频强度:低频成分的强度较高,这可以是由于数据收集过程中的背景噪声或是由传感器本身的性质决定。

平均值(Mean):约77.96,这个值提供了信号平均水平的信息。较高的平均值可能与环境背景或常态运行水平相关。方差(Variance):约8229.37,表明信号在平均水平附近有较大的波动。方差的大小直接反映了信号值分布的散布程度。偏度(Skewness):约3.12,指示信号分布的不对称性和尾部的延伸。正偏度(大于0)意味着信号的尾部向较大值方向延伸。峰度(Kurtosis):约13.00,这是一个高峰度值,表明信号有厚重的尾部并且峰比正态分布更尖锐,这可能指出信号中存在极端值或突出的峰。

5.1.3 干扰信号识别

  1. 特征提取

1. 振幅(Amplitude)

振幅是描述信号强度的一个基本特征。在处理时序数据,如EMR信号时,通常会考虑信号在一定时间窗口内的最大值和最小值之差作为振幅。这个差值可以帮助我们理解在该时间窗口内信号的变化范围,从而捕捉到可能的异常或显著的变化事件。

2. 噪声水平(Noise Level)

噪声水平通常通过计算信号的标准差来估计,标准差能够反映信号的离散程度。在实际应用中,信号的标准差越大,表明信号在该时间窗内的波动越大,噪声水平也相对较高。

3. 能量(Energy)

能量特征通常用于描述信号在特定时间窗口内的总能量,可以通过计算信号平方的总和来估计。信号的能量越高,表明该时间段内信号的活动更加剧烈或更有可能包含某些事件。

4. 频率分析(Frequency Analysis)

频率分析是通过对信号进行傅里叶变换来完成的,目的是分析信号在频域上的分布。这种分析可以帮助识别信号中的周期性成分或者异常频率的出现。

5.信号波动(Signal Fluctuation)

信号波动可以通过多种方法来量化,一种常见的方法是计算信号在窗口内部的最大变化率,即窗口内相邻点之间差值的最大值。这个度量能够捕捉信号短时间内的剧烈变化,常用于识别突发事件。

6.峰值(Peak Value)

峰值是信号在窗口期间达到的最大值,它提供了信号强度的一个直观指标。在某些情况下,异常高的峰值可能指示设备故障、外部干扰或其他重要事件。

表1:部分数据特征

统计特征

时间特征

电磁辐射 (EMR) 统计特征

测量时间间隔统计特征

平均值:77.96

平均间隔:约5709秒(约95分钟)

标准差:90.72

标准差:约119216秒(因大部分间隔为31秒或62秒,故标准差大表明存在极端值)

最小值:0

最小间隔:0秒(连续测量)

第一四分位数:31.62

第一四分位数:31秒

中位数:45.00

中位数:31秒

第三四分位数:75.00

第三四分位数:62秒

最大值:500

最大间隔:约5815425秒(约67天)

特征提取是确保数据科学和机器学习模型有效性的基础。在本案例中,通过振幅、噪声水平、能量和频率分析,我们能够构建出能够有效反映信号特性的特征集,这些特征对于训练分类模型来说是至关重要的。通过这些特征,模型能够学习如何区分正常信号与前兆特征信号,从而在实际应用中提供预警,减少潜在的风险。

  1. 模型训练

随机森林是一种强大的机器学习算法,属于集成学习方法的一种。它主要用于分类和回归任务,通过结合多个决策树的预测结果来提高整体的预测准确性和鲁棒性。下面详细介绍随机森林的工作原理:

 

图1:随机森林原理图

表1 电磁辐射干扰信号时间区间

序号

时间区间起点

时间区间终点

1

2022-05-01 10:48:40

2022-05-01 11:16:07

2

2022-05-10 06:22:28

2022-05-10 06:46:15

3

2022-05-18 06:27:52

4

2022-05-25 10:30:13

5

2022-05-28 01:53:22

表2 声发射干扰信号时间区间

序号

时间区间起点

时间区间终点

1

11-Oct-2022 10:21:33

11-Oct-2022 10:

2

16-Oct-2022 02:16:27

3

16-Oct-2022 09:38:04

4

17-Oct-2022 00:42:24

5

22-Oct-2022 23:29:15

23-Oct-2022 00:04:16

表2 声发射干扰信号时间区间

序号

时间区间起点

时间区间终点

1

03-Apr-2022 09:13:07

03-Apr-2022 09:35:10

2

04-Apr-2022 01:07:58

3

06-Apr-2022 13:27:21

4

 07-Apr-2022 03:17:36

5

07-Apr-2022 08:28:30

 07-Apr-2022 10:20:10

问题一+数据预处理代码免费分享

百度网盘 请输入提取码 
提取码:sxjm

% 导入数据

opts = detectImportOptions('附件一.xlsx');

opts.DataRange = 'A2'; % 假设数据从A2开始

data = readtable('附件一.xlsx', opts);

% 选择要分析的数据列,这里假设是'EMR'

emrData = data.EMR;

% 绘制Q-Q图

figure;

qqplot(emrData);

title('Q-Q Plot of EMR Data');

% 执行K-S检验,检查数据是否符合正态分布

[h, p, ksstat, cv] = kstest((emrData-mean(emrData))/std(emrData)); % 数据标准化

% 显示K-S检验结果

fprintf('K-S Test Result:\n');

fprintf('Hypothesis Rejected (1 = true, 0 = false): %d\n', h);

fprintf('P-value: %g\n', p);

fprintf('KS Statistic: %g\n', ksstat);

fprintf('Critical Value for 5%% Significance: %g\n', cv);

% 导入数据

opts = detectImportOptions('附件一.xlsx');

opts.DataRange = 'A2'; % 假设数据从A2开始

data = readtable('附件一.xlsx', opts);

% 选择要分析的数据列,这里假设是'EMR'

emrData = data.EMR;

% 绘制Q-Q图,并美化结果

figure;

qqplot(emrData);

title('Q-Q Plot of EMR Data', 'FontSize', 14);

xlabel('Theoretical Quantiles', 'FontSize', 12);

ylabel('Sample Quantiles', 'FontSize', 12);

grid on; % 添加网格

set(gca, 'FontSize', 10); % 设置坐标轴字体大小

set(gca, 'Color', [0.95 0.95 0.95]); % 设置坐标轴背景颜色

% 执行K-S检验,检查数据是否符合正态分布

[h, p, ksstat, cv] = kstest((emrData-mean(emrData))/std(emrData)); % 数据标准化

% 显示K-S检验结果

fprintf('K-S Test Result:\n');

fprintf('Hypothesis Rejected (1 = true, 0 = false): %d\n', h);

fprintf('P-value: %g\n', p);

fprintf('KS Statistic: %g\n', ksstat);

fprintf('Critical Value for 5%% Significance: %g\n', cv);

% 导入数据

opts = detectImportOptions('附件一.xlsx');

data = readtable('附件一.xlsx', opts);

% 选择类别C的数据

c_data = data(strcmp(data.class, 'C'), :);

% 计算时间间隔和采样频率

timeIntervals = seconds(diff(c_data.time));

Fs = 1 / mean(timeIntervals); % 假设时间间隔均匀

L = height(c_data);

% 傅里叶变换

Y = fft(c_data.EMR);

P2 = abs(Y/L);

P1 = P2(1:L/2+1);

P1(2:end-1) = 2*P1(2:end-1);

f = Fs*(0:(L/2))/L;

% 计算振幅、持续时间、噪声水平

amplitudes = max(c_data.EMR) - min(c_data.EMR);

duration = seconds(max(c_data.time) - min(c_data.time));

noise_levels = std(c_data.EMR);

% 统计分析

stats = [mean(c_data.EMR), var(c_data.EMR), skewness(c_data.EMR), kurtosis(c_data.EMR)];

% 数据可视化

figure;

subplot(3,1,1);

plot(c_data.time, c_data.EMR, 'LineWidth', 1.5);

title('EMR Signal Waveform');

xlabel('Time');

ylabel('EMR');

grid on;

subplot(3,1,2);

plot(f, P1, 'b', 'LineWidth', 1.5);

title('Single-Sided Amplitude Spectrum of EMR');

xlabel('Frequency (f) [Hz]');

ylabel('|P1(f)|');

grid on;

subplot(3,1,3);

bar(stats, 'FaceColor', [0 0.5 0.7], 'EdgeColor', [0 0.2 0.3], 'LineWidth', 1.5);

set(gca, 'xticklabel', {'Mean', 'Variance', 'Skewness', 'Kurtosis'});

title('Statistical Metrics of EMR Signal');

grid on;

% 显示统计结果

fprintf('Mean: %.2f\n', stats(1));

fprintf('Variance: %.2f\n', stats(2));

fprintf('Skewness: %.2f\n', stats(3));

fprintf('Kurtosis: %.2f\n', stats(4));

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import kstest, norm

# 加载数据
data_path = '附件一.xlsx'
data = pd.read_excel(data_path)


# 函数用于检查每个类别的数据是否服从正态分布
def check_normal_distribution(group_data):
    statistic, p_value = kstest(group_data, 'norm', args=(group_data.mean(), group_data.std()))
    return statistic, p_value, p_value > 0.05  # p值大于0.05,接受原假设,认为数据服从正态分布


# 函数用于计算并可视化异常值
def detect_and_visualize_outliers(data, category):
    Q1 = data.quantile(0.25)
    Q3 = data.quantile(0.75)
    IQR = Q3 - Q1
    outliers = ((data < (Q1 - 1.5 * IQR)) | (data > (Q3 + 1.5 * IQR)))

    # 可视化
    plt.figure(figsize=(10, 6))
    plt.title(f"Boxplot and Outliers for Category {category}")
    plt.boxplot(data, vert=False)
    plt.scatter(data[outliers], np.full(data[outliers].shape, 1), color='red', zorder=5)
    plt.grid(True)
    plt.show()

    return outliers


# 按类别分组并检查每组数据分布
distribution_tests = {}
for category, group in data.groupby('类别 (class)'):
    emr_values = group['电磁辐射 (EMR)'].dropna()  # 删除可能的NaN值
    statistic, p_value, is_normal = check_normal_distribution(emr_values)
    distribution_tests[category] = {'K-S Statistic': statistic, 'P-Value': p_value, 'Is Normal': is_normal}

# 将检测结果转换为DataFrame进行更好的展示
distribution_tests_df = pd.DataFrame(distribution_tests).T
print(distribution_tests_df)

# 应用异常值检测并进行可视化
outliers_results = {}
for category, group in data.groupby('类别 (class)'):
    emr_values = group['电磁辐射 (EMR)'].dropna()
    outliers = detect_and_visualize_outliers(emr_values, category)
    outliers_results[category] = outliers.sum()  # 记录每个类别中异常值的数量

# 输出每个类别的异常值数量
outliers_summary = pd.DataFrame.from_dict(outliers_results, orient='index', columns=['Number of Outliers'])
print(outliers_summary)

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report

# 加载数据
attachment1_path = '附件一.xlsx'
attachment1_data = pd.read_excel(attachment1_path)

problem1_emr_path = '问题一EMR检测时间.xlsx'
problem1_emr_data = pd.read_excel(problem1_emr_path)

# 数据预处理
X = attachment1_data[['电磁辐射 (EMR)']]
y = attachment1_data['类别 (class)'].apply(lambda x: 1 if x == 'C' else 0)  # 'C'为干扰信号

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 标准化特征
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 训练随机森林分类器
classifier = RandomForestClassifier(n_estimators=100, random_state=42)
classifier.fit(X_train_scaled, y_train)

# 预测并检查模型性能
y_pred = classifier.predict(X_test_scaled)
print(classification_report(y_test, y_pred))

# 应用模型于新数据
problem1_emr_features = scaler.transform(problem1_emr_data[['电磁辐射 (EMR)']])
problem1_emr_data['干扰预测'] = classifier.predict(problem1_emr_features)

# 寻找干扰信号的连续区间
problem1_emr_data['时间 (time)'] = pd.to_datetime(problem1_emr_data['时间 (time)'])
problem1_emr_data.sort_values('时间 (time)', inplace=True)

# 合并95分钟内的干扰信号区间
def merge_intervals(intervals):
    sorted_intervals = sorted(intervals, key=lambda x: x[0])
    merged = []
    current_start, current_end = sorted_intervals[0]
    for start, end in sorted_intervals[1:]:
        if start - current_end <= pd.Timedelta(minutes=95):
            current_end = max(current_end, end)
        else:
            merged.append((current_start, current_end))
            current_start, current_end = start, end
    merged.append((current_start, current_end))
    return merged

# 提取干扰区间
problem1_emr_data['区间起点'] = (problem1_emr_data['干扰预测'] == 1) & (problem1_emr_data['干扰预测'].shift(1) != 1)
problem1_emr_data['区间终点'] = (problem1_emr_data['干扰预测'] == 1) & (problem1_emr_data['干扰预测'].shift(-1) != 1)
intervals = problem1_emr_data[(problem1_emr_data['区间起点'] | problem1_emr_data['区间终点']) & (problem1_emr_data['干扰预测'] == 1)]
intervals = intervals[['时间 (time)', '区间起点', '区间终点']]
interval_list = [(row['时间 (time)'], row['时间 (time)']) for index, row in intervals.iterrows()]

# 合并区间并可视化
merged_intervals = merge_intervals(interval_list)
fig, ax = plt.subplots(figsize=(10, 2))
y = 1
for start, end in merged_intervals[:5]:  # 展示前五个区间
    ax.plot([start, end], [y, y], marker='o', color='red')
    y += 1
plt.yticks([])
plt.title("Top 5 EMR Interference Intervals")
plt.xlabel("Time")
plt.tight_layout()
plt.show()
# 显示合并后的前五个干扰区间的起点和终点
merged_intervals[:5]

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

键盘更新计划

作为 IT 搬砖人&#xff0c;一直都认为键盘没有什么太大关系。 每次都是公司发什么用什么。 但随着用几年后&#xff0c;发现现在的键盘经常出问题&#xff0c;比如说调节音量的时候通常莫名其妙的卡死&#xff0c;要不就是最大音量要不就是最小音量。 按键 M 不知道什么原因…

服务运营 | 精选:花钱买开心!体验型服务设计中的调度优化

编者按 在体验经济时代&#xff0c;企业逐渐从提供产品转变为提供体验&#xff0c;只有了解顾客的行为&#xff0c;才能对服务进行更好的设计&#xff0c;从而提高顾客的体验和忠诚度&#xff0c;实现企业与顾客的双赢。如何优化顾客体验便是体验型服务设计&#xff08;Experie…

通过自然语言处理执行特定任务的AI Agents;大模型控制NPC执行一系列的动作;个人化的电子邮件助手Panza

✨ 1: OpenAgents 通过自然语言处理执行特定任务的AI代理 OpenAgents是一个开放平台&#xff0c;旨在使语言代理&#xff08;即通过自然语言处理执行特定任务的AI代理&#xff09;的使用和托管变得更加便捷和实用。它特别适合于日常生活中对数据分析、工具插件获取和网络浏览…

鹏哥C语言复习——内存函数

目录 一.memcpy函数 二.memmove函数 三.memset函数 四.memcmp函数 一.memcpy函数 该函数是针对内存块进行拷贝操作&#xff0c;mem即为memory&#xff0c;是内存的意思&#xff1b;cpy就是copy&#xff0c;是拷贝的意思 int arr[] { 1,2,3,4,5,6,7,8,9,10 }; int arr2[2…

C++中的右值引用和移动语义

1 左值引用和右值引用 传统的C语法中就有引用的语法&#xff0c;而C11中新增了的右值引用语法特性&#xff0c;所以从现在开始我们之前学习的引用就叫做左值引用。无论左值引用还是右值引用&#xff0c;都是给对象取别名。 什么是左值&#xff1f;什么是左值引用&#xff1f; 左…

初探 Google 云原生的CICD - CloudBuild

大纲 Google Cloud Build 简介 Google Cloud Build&#xff08;谷歌云构建&#xff09;是谷歌云平台&#xff08;Google Cloud Platform&#xff0c;GCP&#xff09;提供的一项服务&#xff0c;可帮助开发人员以一致和自动化的方式构建、测试和部署应用程序或构件。它为构建和…

【Java探索之旅】包管理精粹 Java中包的概念与实践

文章目录 &#x1f4d1;前言一、封装1.1 封装的概念1.2 访问限定修饰符 二、封装扩展&#xff08;包&#xff09;2.1 包的概念2.2 带入包中的类2.3 自定义包2.4 常见的包 &#x1f324;️全篇总结 &#x1f4d1;前言 在Java编程中&#xff0c;封装是面向对象编程的核心概念之一…

PyCharm 2024新版图文安装教程(python环境搭建+PyCharm安装+运行测试+汉化+背景图设置)

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。—— 苏轼《水调歌头》 创作者&#xff1a;Code_流苏(CSDN) 目录 一、Python环境搭建二、PyCharm下载及安装三、解释器配置及项目测试四、PyCharm汉化五、背景图设置 很高兴你打开了这篇博客&#xff0c;如有疑问&#x…

Swift - 可选项(Optional)

文章目录 Swift - 可选项&#xff08;Optional&#xff09;1. 可选项&#xff08;Optional&#xff09;2. 强制解包&#xff08;Forced Unwrapping&#xff09;3. 判断可选项是否包含值4. 可选项绑定&#xff08;Optional Binding&#xff09;5. 等价写法6. while循环中使用可选…

【linuxC语言】stat函数

文章目录 前言一、stat函数二、示例代码总结 前言 在Linux系统编程中&#xff0c;stat() 函数是一个非常重要的工具&#xff0c;用于获取文件的元数据信息。无论是在系统管理、文件处理还是应用开发中&#xff0c;都可能会用到 stat() 函数。通过调用 stat() 函数&#xff0c;…

简约大气的全屏背景壁纸导航网源码(免费)

简约大气的全屏背景壁纸导航网模板 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html> <html lang"zh-CN"> <!--版权归孤独 --> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible…

用LM Studio搭建微软的PHI3小型语言模型

什么是 Microsoft Phi-3 小语言模型&#xff1f; 微软Phi-3 模型是目前功能最强大、最具成本效益的小型语言模型 &#xff08;SLM&#xff09;&#xff0c;在各种语言、推理、编码和数学基准测试中优于相同大小和更高大小的模型。此版本扩展了客户高质量模型的选择范围&#x…

C# Winform父窗体打开新的子窗体前,关闭其他子窗体

随着Winform项目越来越多&#xff0c;界面上显示的窗体越来越多&#xff0c;窗体管理变得更加繁琐。有时候我们要打开新窗体&#xff0c;然后关闭多余的其他窗体&#xff0c;这个时候如果一个一个去关闭就会变得很麻烦&#xff0c;而且可能还会出现遗漏的情况。这篇文章介绍了三…

Stylus深度解析:开发效率提升秘籍(AI写作)

首先&#xff0c;这篇文章是基于笔尖AI写作进行文章创作的&#xff0c;喜欢的宝子&#xff0c;也可以去体验下&#xff0c;解放双手&#xff0c;上班直接摸鱼~ 按照惯例&#xff0c;先介绍下这款笔尖AI写作&#xff0c;宝子也可以直接下滑跳过看正文~ 笔尖Ai写作&#xff1a;…

基于北京迅为iTOP-RK3588大语言模型部署测试

人工智能&#xff08;AI&#xff09;领域中的大模型&#xff08;Large Model&#xff09;逐渐成为研究的热点。大模型&#xff0c;顾名思义&#xff0c;是指拥有海量参数和高度复杂结构的深度学习模型。它的出现&#xff0c;不仅推动了AI技术的突破&#xff0c;更为各行各业带来…

社交媒体数据恢复:Sugram

Sugram数据恢复的方法 在本文中&#xff0c;我们将探讨Sugram数据恢复的基本方法。通过专业软件按照数据恢复步骤来了解如何进行数据恢复。 1. 立即停止使用设备 一旦发现数据丢失&#xff0c;第一步应该是立即停止使用该设备。这是因为每次设备被使用&#xff0c;都有可能导…

SpringBoot~ dubbo + zookeeper实现分布式开发的应用

配置服务名字, 注册中心地址, 扫描被注册的包 server.port8081 #当前应用名字 dubbo.application.nameprovider-server #注册中心地址 dubbo.registry.addresszookeeper://127.0.0.1:2181 #扫描指定包下服务 dubbo.scan.base-packagescom.demo.service 实现一个接口,在…

IoTDB 入门教程③——基于Linux系统快速安装启动和上手

文章目录 一、前文二、下载三、解压四、上传五、启动六、执行七、停止八、参考 一、前文 IoTDB入门教程——导读 二、下载 下载二进制可运行程序&#xff1a;https://dlcdn.apache.org/iotdb/1.3.1/apache-iotdb-1.3.1-all-bin.zip 历史版本下载&#xff1a;https://archive.…

ROS2专栏(三) | 理解ROS2的动作

​ 1. 创建一个动作 目标&#xff1a; 在ROS 2软件包中定义一个动作。 1.1 新建包 设置一个 workspace 并创建一个名为 action_tutorials_interfaces 的包&#xff1a; mkdir -p ros2_ws/src #you can reuse existing workspace with this naming convention cd ros2_ws/s…

STM32 工程移植 LVGL:一步一步完成

STM32 工程移植 LVGL&#xff1a;一步一步完成 LVGL&#xff0c;作为一款强大且灵活的开源图形库&#xff0c;专为嵌入式系统GUI设计而生&#xff0c;极大地简化了开发者在创建美观用户界面时的工作。作为一名初学者&#xff0c;小编正逐步深入探索LVGL的奥秘&#xff0c;并决…