技术报告模板:2023年全国大学生电子设计竞赛:运动目标控制与自动追踪系统(E题)

news2024/11/26 17:49:36

2023年全国大学生电子设计竞赛

运动目标控制与自动追踪系统E题)

202384

摘要:针对本题目的各项要求,本研究采用软硬件结合的方法设计了一套运动目标控制与自动追踪系统。该系统由OpenMV嵌入式计算机视觉平台、STM32单片机控制模块、摄像头模块、显示屏模块、人机交互系统以及二轴舵机云台和激光笔构成一个闭环控制系统。摄像头模块用于采集图像信息,经由OpenMV进行图像数据处理,并通过PID精确算法调节舵机,从而控制激光笔的光斑在屏幕上按照设定程序进行移动。本系统实现了以激光笔的光斑作为运动控制目标的自动追踪系统,包括复位功能、沿屏幕运动、沿A4纸边缘运动以及自动追踪光斑等功能。系统在完成任务要求的同时表现出良好的鲁棒性。此外,本系统还具备人机交互界面,各参数及测试模式可由按键输入,并通过显示屏直观地显示,具有智能性和快速的反应速度。 

关键词:嵌入式计算机视觉、运动目标控制、目标检测、目标追踪

Abstract: In view of the requirements of this topic, this system adopts a combination of software and hardware to design a motion target control and automatic tracking system. The closed-loop control system consists of OpenMV embedded computer vision platform, STM32 microcontroller control module, camera module, display module, human-computer interaction system, two-axis steering machine gimbal and laser pointer. The camera module collects image information, processes the image data through OpenMV, and adjusts the servo through the PID precision algorithm to control the spot of the laser pointer and move on the screen according to the set program. This system realizes the functions of reset, movement along the screen, movement along the edge of A4 paper, automatic tracking of the spot and other functions of the automatic tracking system with the spot of the laser pointer as the motion control target, and can accurately complete the task requirements with good robustness. In addition, the system has a human-computer interaction interface, each parameter and test mode can be entered by the button and displayed through the display screen, good intelligence, fast response.

Keywords: Embedded Computer Vision, Motion Target Control, Object Detection, Object Tracking.

目 录

目录

一、 系统方案... 1

1、       嵌入式视觉平台的论证与选择... 2

2、       单片机的论证与选择... 2

2、电机的论证与选择... 2

3、控制算法的论证与选择... 3

二、理论分析与计算... 3

1、矩形位置检测... 3

2、二轴云台控制分析... 4

3、控制算法分析... 4

4、斜线运动控制... 4

三、 电路与程序设计... 5

1、 电路设计... 5

(1)系统总体框图... 5

(2) 硬件连接图... 5

四、 测试方案与测试结果... 6

1、测试方案... 6

2、测试条件与仪器... 6

3、测试结果与分析... 6

1、测试结果... 6

2、测试分析和结论... 8

五、 结论与心得... 8

六、 参考文献... 8

附录:核心源程序... 9

运动目标控制与自动追踪系统(E题)

【本科组】

系统方案主要描述了针对研究的要求,采用软硬件结合的方法设计了一个运动目标控制与自动追踪系统。该系统由多个模块组成,包括OpenMV嵌入式计算机视觉平台、STM32单片机控制模块、摄像头模块、显示屏模块、人机交互系统、二轴舵机云台和激光笔,构成一个闭环控制系统。摄像头模块负责采集图像信息,然后通过OpenMV进行图像数据处理。处理后的图像数据用于控制PID算法调节舵机,从而实现对激光笔光斑在屏幕上按照设定程序进行移动的控制。下面分别论证这几个模块的选择。

  1. 嵌入式视觉平台的论证与选择

方案一:采用OpenMV嵌入式计算机视觉平台

OpenMV是一个基于MicroPython的嵌入式计算机视觉平台,使用ARM微控制器。开发者可以使用Python语言编写图像处理和计算机视觉应用,无需深入了解底层硬件编程。它专注于图像处理和计算机视觉任务,提供丰富的图像处理库和示例代码。OpenMV配备了图像传感器和其他传感器,可以直接连接摄像头、显示屏、Wi-Fi模块等设备。

方案二:采用K210嵌入式计算机视觉平台

K210是一种由中国公司寒武纪(Kendryte)开发的系统级芯片(SoC)。它采用RISC-V架构,是一种开源的指令集架构,支持低功耗和高性能。K210芯片主要用于机器学习和人工智能应用,如物体识别、语音识别等。它在物联网设备、智能摄像头、智能家居等边缘计算设备中广泛应用。

         总结:

OpenMV作为一个简单易用的嵌入式计算机视觉平台,适合初学者和快速原型开发。它的重点是图像处理和计算机视觉任务,并提供丰富的库和示例,使得开发者能够更快速地实现各种视觉应用。而K210则更适用于专业机器学习和边缘计算领域,具备更高的计算性能和灵活性。因此本设计采用OpenMV嵌入式视觉平台。

  1. 单片机的论证与选择

方案一:采用STC51单片机

STC51是一种基于Intel 8051核心的单片机,采用CISC架构。它在嵌入式系统中有着广泛的应用,历史悠久,生态丰富。STC51单片机相对较为简单,易于学习和使用,适合入门级开发者。它拥有一些基本的外设和功能,但在计算能力和性能方面相对较弱。对于较简单的控制任务和低性能要求的应用,STC51可以是一个经济实惠的选择。

方案二:采用以ARM Cortex-M3为内核的STM32F1系列控制芯片

STM32是一种基于ARM Cortex-M核心的单片机,采用RISC架构。它具有强大的计算能力和丰富的外设,适用于复杂的嵌入式应用。STM32单片机有多个系列,不同系列的芯片有着不同的性能和功能,满足不同需求。它支持多种编程语言,包括C和C++,也支持RTOS系统,适合中高级开发者。STM32单片机在性能、功耗、稳定性等方面都有优势,适用于较复杂的控制任务和性能要求较高的应用。

综合考虑,选择使用STM32单片机控制舵机云台是更合理的选择,因为它提供了更好的性能,所以本设计选择方案二。

2、电机的论证与选择

方案一:采用带编码器的直流减速电机

直流电机是一种最常见的电机类型,它的工作原理是通过直流电流在电磁场中产生力矩,从而驱动电机转动。直流电机在没有反馈控制的情况下,不容易实现精确的位置控制。

方案二:采用舵机

舵机是一种特殊类型的直流电机,它与普通直流电机相比具有额外的反馈控制回路,通常是一个位置反馈传感器(如编码器)。舵机可以精确地控制电机的位置,通过控制脉宽信号来实现精确的角度调节,通常具有较高的角度分辨率。舵机适用于需要精确位置控制的场景,如机器人、摄像云台、航模等。舵机的结构也相对简单,成本较低,但由于加入了反馈控制,相比普通直流电机稍微贵一些。

选择使用舵机作为云台电机是较为合理的选择。舵机具有精确的位置控制能力和较低的成本,在实现云台旋转和角度调节时具有优势。

3、控制算法的论证与选择

方案一:采用开环算法

开环控制是一种简单的控制方法,其中输出信号不受系统反馈信息的影响。在开环控制中,输入信号直接作为控制器的输出信号,用于云台电机控制。开环控制没有对输出信号进行监测和调整的机制,因此无法纠正外部干扰和内部误差,导致系统的稳定性和精确性较差。在开环控制中,系统的性能高度依赖于模型的准确性和环境条件的稳定性。对于复杂系统或存在不确定性的环境,开环控制的性能可能会受到较大影响。

方案二:采用闭环控制

闭环控制是一种基于反馈的控制方法,其中输出信号受系统反馈信息的影响。在闭环控制中,输出信号被反馈给控制器,并与期望信号进行比较,然后根据误差来调整控制器输出,以实现对输出信号的精确控制。闭环控制可以实时纠正外部干扰和内部误差,提高系统的稳定性和精确性,使系统能够更好地适应不确定性和变化的环境条件。在闭环控制中,采用合适的控制算法(如PID控制算法)可以优化系统的性能,使系统更快地响应控制信号,减少超调和稳态误差。PID控制算法按比例、积分、微分的函数关系,进行运算,将其运算结果用以输出控制。优点是控制精度高,是控制系统非常普遍的运算方法。对于本系统的控制已足够精确。

综上所述,选择使用闭环控制,并采用PID算法控制激光笔是较为合理的选择。闭环控制能够实时纠正误差,提高系统的稳定性和精确性,而PID算法能够优化系统的性能,使激光笔具有快速响应和灵活性,适用于实现精确的运动控制。

二、理论分析与计算

1、矩形位置检测

     OpenMV为开发者提供了Python API和丰富的图像处理库,这使得实现矩形检测变得相对简单和高效。通过结合OpenMV的强大功能和易用性,可以轻松地实现矩形检测功能。

         OpenMV对采集到的图像进行预处理,例如灰度化、二值化等。这些预处理步骤有助于减少图像中的噪声并简化后续的图像处理。在预处理后的图像上执行边缘检测算法,例如Canny边缘检测,以识别矩形的边缘。基于边缘检测的结果,进行轮廓检测,找出图像中的所有轮廓。对检测到的轮廓进行筛选,通过设置阈值和条件来排除不符合矩形特征的轮廓。对经过筛选的轮廓进行拟合,找出最接近的矩形。OpenMV通常使用旋转矩形(rotated rectangle)来拟合,因为它可以适应旋转的矩形。

2、二轴云台控制分析 

     二轴云台是一种常见的云台类型,它可以在两个轴(通常是水平和垂直方向)上进行转动。二轴云台广泛应用于摄像机、激光雷达、传感器等设备的定向控制,以及机器人、无人机等需要精确转动的系统中。

         水平轴通常用于实现云台在水平方向上的转动。垂直轴通常用于实现云台在垂直方向上的转动。

3、控制算法分析 

采用PID算法来光斑在屏幕的位置。开始工作后,实时检测屏幕上光斑的位置,并与设定的目标位置比较,进行PID控制。其PID结构原理如图1,PID分别表示光斑的位置比例(P)、位置误差(I)、位置积分(D)。 

P:对目标位置与当前位置偏差e(t)进行调整,系数越大调节速度越快,减小误差,但是过大的比例,会造成舵机速度状态的突变,从而导致云台状态不稳定 

I:加入积分调节,可以消除系统的稳态误差,提高无误差度。系统的稳定性下降,动态响应变慢。 

D:微分调节反应的是光斑的角速度,可以预见偏差变化的趋势具有可预见性因而可以产生超前调节,加入微分调节可以改善系统的动态性能。

PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。其PID控制器的传递函数为:

其中,KP, KI KDPID控制器的比例,积分和微分参数。

4、斜线运动控制

  1. 电路设计

(1)系统总体框图

自己用VISIO

图1 系统总体框图

  1. 硬件连接图

图2  硬件连接图

2、程序结构与设计              

控制二轴云台控制激光笔在屏幕上精准移动时,程序结构如下:

初始化: 在程序开始时,进行系统初始化,包括初始化OpenMV、舵机、传感器、Stm32单片机和通信接口等。

设定目标位置:在程序中设定激光笔在屏幕上的目标位置。目标位置通过OpenMV识别到矩形后,通过插值法计算获得。

主循环: 进入主循环,程序会不断执行以下步骤:

a. 获取传感器反馈: 读取舵机或电机的位置信息,获取当前云台的姿态。

b. 计算误差: 将目标位置与当前位置进行比较,计算出误差。即,目标位置与实际位置之间的差距。

c. PID控制器计算: 将误差输入PID控制器,根据PID算法计算出控制信号。PID控制器会根据比例系数Kp、积分系数Ki和导数系数Kd对误差进行加权计算,得到控制信号。

d. 控制信号输出: 将PID计算得到的控制信号转换为PWM信号,并发送给舵机,控制云台的转动。

e. 限制和安全检查: 对于舵机或电机的控制信号,进行范围限制,确保云台不超出安全转动范围,并避免碰撞。

f. 重复运行: 以上步骤会在循环中不断运行,直到激光笔移动到设定的目标位置。在运动到目标位置后,控制器可以进入静止状态或继续接收新的目标位置。

优化和调试: 进行系统调试和优化,根据实际情况调整PID参数(Kp、Ki、Kd)以及采样频率等参数,使云台运动更加稳定和精确。

中断程序: 当按下中断按钮时,程序会进行中断,舵机停止运动。

1、测试方案 

  1. 硬件测试:测试机械部分能否正常工作,各项参数是否准确。同时,检查电路焊接是否正确,各部分接线是否正确。  
  2. 程序测试:用keil、openmv ide软件编程并通过单片机多次运行调试。  
  3. 硬件软件联调:用实现的编程算法控制硬件系统进行工作。检测整个系统是否实现各项要求。

2、测试条件与仪器 

  1. 测试条件:检查多次,机械部分必须正常工作且参数正确。仿真电路和硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。 
  2. 测试仪器:尺子、秒表。

3、测试结果与分析

1、测试结果

  (1)基本要求的测试

   1)设置运动目标位置复位功能。执行此功能,红色光斑能从屏幕任意位置

回到原点。光斑中心距原点误差≤2cm

B-1 基础部分1测试结果

次数

1

2

3

4

5

距离(cm)

1.1

1.3

0.9

0.7

1.5

   2)启动运动目标控制系统。红色光斑能在 30 秒内沿屏幕四周边线顺时针

移动一周,移动时光斑中心距边线距离≤2cm。。

次数

1

2

3

4

5

转动用时间(s)

6.2

6.4

5.8

5.5

6.5

B-2 基础部分2测试结果

         3)用约 1.8cm 宽的黑色电工胶带沿 A4 纸四边贴一个长方形,构成 A4 靶纸。将此 A4 靶纸贴在屏幕自定的位置。启动运动目标控制系统,红色光斑能在30 秒内沿胶带顺时针移动一周。超时不得分,光斑完全脱离胶带一次扣 2 分,连续脱离胶带移动 5cm 以上记为 0 分。

B-3 基础部分3测试结果

次数

1

2

3

4

5

转动用时(s)

2.1

2.2

2.3

2.6

3.0

         4)将上述 A4 靶纸以任意旋转角度贴在屏幕任意位置。启动运动目标控制

系统,要求同(3)。

B-4 基础部分4测试结果

次数

1

2

3

4

5

转动用时(s)

2.8

3.5

3.4

2.5

2.5

2)发挥部分的测试

        1)运动目标位置复位,一键启动自动追踪系统,控制绿色光斑能在 2 秒

内追踪红色光斑,追踪成功发出连续声光提示。此时两个光斑中心距离应≤3cm。

B-5 发挥部分1测试结果

次数

1

2

3

4

5

追踪用时(s)

1.2

1.1

1.3

1.4

14

距离(cm)

2.0

1.6

1.4

1.4

1.8

       2)运动目标重复基本要求(3)~(4)的动作。绿色激光笔发射端可以放置在其放置线段的任意位置,同时启动运动目标及自动追踪系统,绿色光斑能自

动追踪红色光斑。启动系统 2 秒后,应追踪成功,发出连续声光提示。此后,追踪过程中两个光斑中心距离大于 3cm 时,定义为追踪失败,一次扣 2 分。连续追踪失败 3 秒以上记为 0 分。

B-6 发挥部分2的任务1测试结果

    次数

1

2

3

4

5

追踪用时(s)

1.2

1.2

1.0

1.8

1.1

距离(cm)

2.1

1.5

1.4

1.5

1.4

   

B-7 发挥部分2的任务2测试结果

    次数

1

2

3

4

5

追踪用时(s)

1.2

1.2

1.0

1.8

1.1

距离(cm)

2.1

1.5

1.4

1.5

1.4

自由发挥

在完成题目规定要求后,对系统做了进一步加强,实现了双系统使用激光笔在屏幕上高频闪烁,用摩斯码进行可见光通信。

2、测试分析和结论

根据上述测试数据,可以得出以下结论:

(1)能够很好的完成基本功能和发挥功能。

(2)完成任务的时间较快。

综上所述,本设计基本达到设计要求。

 此次电子设计大赛我们收获颇丰,在整个过程中,我们不仅在通力合作中体会到了团结的重要性。还将理论与实践结合了起来,培养了一定的科研能力,拓宽了知识面。一步一步的解决相应的任务;逐步的实现了任务需求。展望未来,智能车技术必将在更广阔的领域广泛应用, 

在这比赛的最后,要感谢学校和学院老师的给力的后勤工作,使我们能够在不被烦扰的情况下,用最充足的时间完成比赛。感谢全国大学生电子设计大赛的组委会,提供这样优秀的平台和机会给我们充足的锻炼。

[1]谭浩强.C语言程序设计[M].北京:清华大学出版社,2012. 

[2]黄智伟.全国大学生电子设计竞赛训练教程.北京:电子工业出版社,2005.    

[3]王福瑞等.单片微机测控系统设计大全[M].北京航空航天大学出版社,1998(331-337).

[4]童诗白. 模拟电子技术基础 第三版.  北京:高等教育出版社,2001.1.

附录:核心源程序

主函数:

from machine import Pin

import sensor, image, time

import pyb



# 初始化摄像头

sensor.reset()

sensor.set_pixformat(sensor.RGB565) # 设置图像色彩格式为RGB565格式

sensor.set_framesize(sensor.QQVGA)  # 设置图像大小为160*120

sensor.set_auto_whitebal(True)      # 设置自动白平衡

sensor.set_brightness(3000)         # 设置亮度为3000

sensor.skip_frames(time = 20)       # 跳过帧



clock = time.clock()



while(True):

    clock.tick()

    img = sensor.snapshot()



# -----矩形框部分-----

    # 在图像中寻找矩形

    for r in img.find_rects(threshold = 10000):

        # 判断矩形边长是否符合要求

        if r.w() > 20 and r.h() > 20:

            # 在屏幕上框出矩形

            img.draw_rectangle(r.rect(), color = (255, 0, 0), scale = 4)

            # 获取矩形角点位置

            corner = r.corners()

            # 在屏幕上圈出矩形角点

            img.draw_circle(corner[0][0], corner[0][1], 5, color = (0, 0, 255), thickness = 2, fill = False)

            img.draw_circle(corner[1][0], corner[1][1], 5, color = (0, 0, 255), thickness = 2, fill = False)

            img.draw_circle(corner[2][0], corner[2][1], 5, color = (0, 0, 255), thickness = 2, fill = False)

            img.draw_circle(corner[3][0], corner[3][1], 5, color = (0, 0, 255), thickness = 2, fill = False)



        # 打印四个角点坐标, 角点1的数组是corner[0], 坐标就是(corner[0][0],corner[0][1])

        # 角点检测输出的角点排序每次不一定一致,矩形左上的角点有可能是corner0,1,2,3其中一个

            corner1_str = f"corner1 = ({corner[0][0]},{corner[0][1]})"

            corner2_str = f"corner2 = ({corner[1][0]},{corner[1][1]})"

            corner3_str = f"corner3 = ({corner[2][0]},{corner[2][1]})"

            corner4_str = f"corner4 = ({corner[3][0]},{corner[3][1]})"

            print(corner1_str + "\n" + corner2_str + "\n" + corner3_str + "\n" + corner4_str)

    # 显示到屏幕上,此部分会降低帧率





    # 打印帧率

    print(clock.fps())

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

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

相关文章

[PHP]pearProject协作系统 v2.8.14 前后端

pearProject是一款轻量级的在线项目/任务协作系统,远程办公协作。 概述 PearProject 不支持 IE8 及以下版本,建议使用基于Webkit内核的现代浏览器访问 PearProject 为前后端分离架构,因此安装分为后端和前端两大部分,需要分别进…

定时器PWM输出

目录 介绍 PWM占空比 框图 输出比较 通道 1 输出比较功能为例 PWM 输出模式 PWM 边沿对齐模式 hal库代码 标准库代码 介绍 脉冲宽度调制(PWM),是英文“Pulse Width Modulation”的缩写,简称脉宽调制,是利用微 处理器的数字输出来对模…

Android启动优化-全文详细

一个应用App的启动速度能够影响用户的首次体验,通常用户期望app响应和加载速度越快越好。一个启动速度慢的app很可能会给用户留下不好的印象,除了导致用户在应用市场上的打分低之外,很有可能导致致用户直接卸载。这种糟糕的体验可能会导致用户…

[译]CSS Animations 与 CSS Transitions

本文译者为 360 奇舞团前端开发工程师原文标题:CSS Animations Versus CSS Transitions原文作者:Kirupa Chinnathambi原文出处:《Creating Web Animations: Bringing Your UIs to Life》 在 CSS 中有两种设置动画的方式即 CSS animations 和 …

Modelsim 使用教程(3)——Projects

目录 一、概述 二、设计文件及tb 2.1 设计文件 counter.v 2.2 仿真文件 tcounter.v 三、操作流程 3.1 Create a New Project(创建一个新的工程) 3.2 Add Objects to the Project(把代码加入项目) 3.3 Compile the …

vue+vant图片压缩后上传

vuevant图片压缩后上传 vue文件写入 <template><div class"home"><van-field input-align"left"><template #input><van-uploaderv-model"fileList.file":after-read"afterRead":max-count"5":…

电子沙盘数字沙盘地理信息开发教程第17课

M3DGIS电子沙盘数字沙盘地理信息开发教程第17课新增加属性在MTGIS3d控件 public bool ShowFLGrid;//是否显 示方里网格。 public bool Atmosphere;//是否显示大气圈。&#xff08;因为WPF不支持shader功能&#xff0c;所以效果嘛。。。&#xff09; 在SDK中提供底层的模型访问接…

美观且可以很方便自定义的MATLAB绘图颜色

函数介绍 主函数是draw_test&#xff0c;用于测试函数。 draw_h是函数&#xff0c;用于给Matlab提供美观且可以很方便自定义的绘图颜色。 draw_h函数介绍 这是一个带输入输出的函数&#xff0c;输入1/2/3&#xff0c;输出下面三种颜色库的配色&#xff0c;每种库均有五种颜色…

开发板挂载 Ubuntu 的 NFS 目录

前言 使用的开发板为韦东山老师的 IMX6ULL 目录 什么是 NFS 协议&#xff1f; 为什么要挂载 Ubuntu 的 nfs 目录&#xff1f; 开发板挂载 Ubuntu 的 NFS 目录 步骤 1. 确定 ubuntu 的桥接网卡 IP 2. 判断是否开权限了 3. 判断是否安装并启动 NFS 服务 4. 在开发板上执…

C语言从入门到精通之【第一个程序hello world】

编程步骤 通常&#xff0c;我们按照以下步骤进行 确立目标设计程序编写代码编译程序运行程序测试&调试修改维护 输出hello world 每个学编程的人都会从最经典的【输出hello world】开始。 https://lightly.teamcode.com/ 我们可以使用这个在线IDE学习C语言。 代码很简…

1. PPT高效初始化设置

1. PPT高效初始化设置 软件安装&#xff1a;Office 2019 主题和颜色 颜色可以在白天与黑夜切换&#xff0c;护眼 切换成了黑色 撤回次数 撤回次数太少&#xff0c;只有20次怎么办 自动保存 有时忘记保存就突然关闭&#xff0c;很需要一个自动保存功能 图片压缩 图…

Android Studio打包AAR

注意 依赖的Android Studio版本为4.2.2 更高的Android Studio版本使用方法可能有所不同&#xff0c;gradle的版本和gradle plugins的版本都会影响使用方式。 基于此&#xff0c;本文只能作为参考&#xff0c;而不能作为唯一答案&#xff0c;如果要完全依赖本文&#xff0c;则…

Python接口自动化测试 —— Requests库学习

安装&#xff1a; pip install requests 例子&#xff1a; import requests r requests.get(http://www.baidu.com) print r.status_code print type(r) print r.cookies运行程序&#xff0c;得到结果&#xff1a; 运行程序&#xff0c;得到结果&#xff1a; 200 <cla…

sort的第三个参数与priority_queue的第三个模板参数

sort 在C的标准库中&#xff0c;std::sort是一个用于对容器的元素进行排序的算法。它接受三个参数&#xff1a; 1、需要排序的容器的起始迭代器&#xff08;包含&#xff09;。 2、需要排序的容器的结束迭代器&#xff08;不包含&#xff09;。 3、可选参数&#xff0c;用于指…

webgl入门-基础三角形绘制

背景 最近工作上频繁接触webgl&#xff0c;因为不熟悉每每看到shader中的语法总感觉脑袋大&#xff0c;所以打算开始从零学习一下webgl&#xff0c;文章只做记录学习历程&#xff0c;那就直接开始吧&#xff01; 开始 可以配合着这个文章食用。 我还是对webgl有一些概念的&…

【云备份|| 日志 day2】FileUtil JsonUtil

这几天感冒了&#xff0c;稍微落下了进度 util工具 fileUtil&#xff08;文件操作类&#xff09; 在客户端&#xff0c;又或者是在服务端&#xff0c;本质是都是对文件的读写和管理&#xff0c;所以有必要封装一个文件操作类。 class FileUtil{ private:std::string _name; …

Unity Editor工具,导出unitypackage可选择是否包含脚本

概述 Unity自带的Export Package...功能&#xff0c;如果选中资源中包含脚本&#xff0c;或者Prefab挂载了自定义的脚本。在之后弹出的选择框内&#xff0c;如果勾选了Include dependencies会将整个项目所有的脚本全部都包含在内。等于导入了很多不相关的代码。如果取消勾选In…

Express框架开发接口之req.params、req.query与req.body的区别

1.req.query 用于get请求 http://localhost:3000/user?usernameljz&age1 获取 URL 中携带的查询参数 通过req.query对象&#xff0c;可以访问到客户端通过查询字符串的形式&#xff0c;发送到服务器的参数&#xff1a; 2.req.params 用于get请求 url路径为&#xff…

Ubuntu MySQL客户端功能介绍(mysql-client)mysql命令(mysql客户端命令)数据库导出、数据库导入

文章目录 Ubuntu MySQL客户端(mysql-client)功能介绍MySQL客户端与服务端服务器端&#xff08;MySQL Server&#xff09;客户端&#xff08;MySQL Client&#xff09; 安装MySQL客户端连接到MySQL服务器&#xff08;mysql -h host -u user -p&#xff09;执行SQL查询批处理模式…

SpringCloud-Alibaba-Seata

SpringCloud-Alibaba-Seata 注意&#xff1a;最好使用JDK1.8&#xff0c;使用JDK17整合seata会出现一些问题&#xff01;&#xff01;&#xff01; Docker部署Seata1.5.2 1&#xff1a;拉取Seata1.5.2镜像&#xff1a; docker pull seataio/seata-server:1.5.22&#xff1a;在…