diff --git a/swarm/undergraduate/README.md b/swarm/undergraduate/README.md deleted file mode 100644 index 18a03286..00000000 --- a/swarm/undergraduate/README.md +++ /dev/null @@ -1,7 +0,0 @@ -编译说明: -1. 使用 TeXstudio 打开 hutbthesis_main.tex。 -2. 编译器选择 XeLaTeX。 -3. 连续编译两次,即可生成 PDF。 -4. 本工程参考文献采用 content/references.tex 手工编号方式,不需要运行 biber。 -5. 本版已将公式统一整理为 equation 环境,图注统一绑定到 figure 环境,表格使用 LaTeX longtable/table 环境,代码段使用 listings 模板样式。 -6. 若重新编译前需要清理临时文件,可双击 cmdel.bat。 diff --git a/swarm/undergraduate/cmdel.bat b/swarm/undergraduate/cmdel.bat deleted file mode 100644 index 5573d497..00000000 --- a/swarm/undergraduate/cmdel.bat +++ /dev/null @@ -1 +0,0 @@ -del /s /q *.aux *.log *.toc *.out *.bcf *.run.xml *.synctex.gz *.xdv *.fdb_latexmk *.fls *.bbl *.blg diff --git a/swarm/undergraduate/content/.gitkeep b/swarm/undergraduate/content/.gitkeep deleted file mode 100644 index 8b137891..00000000 --- a/swarm/undergraduate/content/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/swarm/undergraduate/content/abstract.tex b/swarm/undergraduate/content/abstract.tex deleted file mode 100644 index dc790418..00000000 --- a/swarm/undergraduate/content/abstract.tex +++ /dev/null @@ -1,26 +0,0 @@ - -%!TEX root = ../hutbthesis_main.tex - -% 设置英文摘要 -\keywordsen{AirSim; UAV swarm; simulation platform; performance optimization; thread scheduling} -\begin{abstracten} - -Aiming at the bottlenecks of sharp frame rate drop and surge delay in -large-scale UAV swarm simulation on Microsoft AirSim, this paper -conducts software-level optimization on UAV swarm simulation, -performance optimization and thread scheduling. Inefficient thread -scheduling, frequent kernel-user mode switching, and unreasonable -spin-wait are identified as the main causes of performance degradation. -Five thread waiting models, including single-thread dispatcher, standard -blocking sleep, and cooperative yield, are designed and integrated into -the AirSim framework. The optimization effects are verified through -micro-benchmark and integrated simulation experiments from the -dimensions of timing accuracy, frame rate, and CPU usage. Results show -that the optimized scheme significantly improves the efficiency and -stability of AirSim for simulations with more than 20 UAVs, provides a -reusable tuning paradigm for high-concurrency real-time simulation, -reduces the cost of real-world testing for swarm algorithms, and -promotes the application of UAV swarms in reconnaissance, delivery, and -mapping. - -\end{abstracten} diff --git a/swarm/undergraduate/content/acknowledgement.tex b/swarm/undergraduate/content/acknowledgement.tex deleted file mode 100644 index e1128b6d..00000000 --- a/swarm/undergraduate/content/acknowledgement.tex +++ /dev/null @@ -1,19 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\clearpage -\chapter*{致谢} -\addcontentsline{toc}{chapter}{致谢} - -本论文的完成,离不开老师、同学、家人与学校的支持。 - -首先感谢我的指导教师,从选题、框架、研究思路到论文修改都给予了严谨细致的指导。 - -感谢智能机器人学院提供的实验环境与学习平台,让我能够顺利完成源码研究、性能测试与系统优化。 - -感谢同窗好友在讨论、调试、实验中给予的帮助。 - -最后感谢家人一直以来的理解、支持与鼓励。 - -本研究立足于开源社区,受益于微软AirSim项目,成果也将回馈社区。 - -由于本人水平有限,论文中难免存在疏漏与不足,恳请各位老师、专家批评指正。 diff --git a/swarm/undergraduate/content/appendix.tex b/swarm/undergraduate/content/appendix.tex deleted file mode 100644 index 83e32c45..00000000 --- a/swarm/undergraduate/content/appendix.tex +++ /dev/null @@ -1,242 +0,0 @@ - -%!TEX root = ../hutbthesis_main.tex - -\clearpage -\chapter*{附录} -\addcontentsline{toc}{chapter}{附录} - -{[}1{]} 实验硬件配置清单 - -{[}2{]} 软件环境版本与依赖清单 - -{[}3{]} 实验原始数据记录表 - -{[}4{]} 优化模型编译与使用说明 - -\section*{附录1 实验硬件配置清单} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2994}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.5533}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1472}}@{}} -\caption{实验硬件配置清单}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -设备名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -型号 / 规格 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -数量 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -CPU & Intel Core i9-12900K & 1 \\ -内存 & 64GB DDR5 4800MHz & 4条 \\ -显卡 & NVIDIA RTX 4090 24GB & 1 \\ -服务器主板 & 华硕 ROG Z690 & 1 \\ -固态硬盘 & 2TB PCIe4.0 & 1 \\ -\end{longtable} - -\section*{附录2 软件环境版本与依赖清单} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.4471}} - >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.5529}}@{}} -\caption{软件环境版本依赖清单表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -软件名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -版本号 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -操作系统 & Windows 11专业版 \\ -Unreal Engine & 5.1 \\ -Visual Studio & 2022 \\ -Python & 3.9 \\ -AirSim & 1.8.1 \\ -CMake & 3.24.1 \\ -\end{longtable} - -\section*{附录3 实验原始数据记录表} - -测试环境:i9-12900K+64GB+RTX4090+Unity2021.3.15f1+AirSim1.8.1 - -测试场景:标准化室外场景,无人机悬停模式 - -单位:FPS(帧/秒) - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.4307}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2117}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.3577}}@{}} -\caption{1架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & 61 & 61.0 \\ -\end{longtable} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.2332}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1146}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1146}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1146}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1146}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1146}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1937}}@{}} -\caption{5架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV2 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV3 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV4 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV5 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & 58 & 57 & 59 & 58 & 57 & 57.8 \\ -\end{longtable} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1922}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.6482}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1596}}@{}} -\caption{10架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1\textasciitilde UAV10 单台帧率 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & 46、45、44、46、45、44、46、45、44、45 & 45.0 \\ -\end{longtable} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1470}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.7231}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1299}}@{}} -\caption{15架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1\textasciitilde UAV15 单台帧率 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & 29、28、27、29、28、27、29、28、27、29、28、27、29、28、27 & -28.0 \\ -\end{longtable} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1240}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.7576}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1183}}@{}} -\caption{20架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1\textasciitilde UAV20 单台帧率 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & -13、12、11、13、12、11、13、12、11、13、12、11、13、12、11、13、12、11、12、12 -& 12.1 \\ -\end{longtable} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1292}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.7551}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1157}}@{}} -\caption{25 架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1\textasciitilde UAV25 单台帧率 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & -7、6、5、7、6、5、7、6、5、7、6、5、7、6、5、7、6、5、6、6、6、5、6、6、5 -& 6.0 \\ -\end{longtable} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1169}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.7750}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1081}}@{}} -\caption{30架无人机仿真帧率数据}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机编号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -UAV1\textasciitilde UAV30 单台帧率 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均帧率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -帧率 & -3、3、2、3、3、2、3、3、2、3、3、2、3、3、2、3、3、2、3、3、2、3、3、2、3、3、2、3、3、2 -& 3.0 \\ -\end{longtable} - -\section*{附录4 优化模型编译与使用说明} - -优化模型的编译与使用步骤如代码~\ref{lst:airsim-opt-build}所示。 - -\begin{lstlisting}[style=hutbcode,language=bash,caption={AirSim优化模型编译与启用流程},label={lst:airsim-opt-build}] -build_release.bat -copy /Y AirSim.dll \Binaries\Win64\AirSim.dll -UnrealEditor.exe .uproject -AirSim.exe -allow-thread-optimize -\end{lstlisting} diff --git a/swarm/undergraduate/content/authorization.tex b/swarm/undergraduate/content/authorization.tex deleted file mode 100644 index 77d69291..00000000 --- a/swarm/undergraduate/content/authorization.tex +++ /dev/null @@ -1,11 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\chapter*{湖南工商大学本科毕业设计\protect\\版权使用授权书} - -本毕业设计《基于AirSim的无人机集群仿真软件性能优化》是本人在校期间所完成学业的组成部分,是在学校教师的指导下完成的。因此,本人特授权学校可将本毕业设计的全部或部分内容编入有关书籍、数据库保存,可采用复制、印刷、网页制作等方式将设计文本和经过编辑、批注等处理的设计文本提供给读者查阅、参考,可向有关学术部门和国家有关教育主管部门呈送复印件和电子文档。本毕业设计无论做何种处理,必须尊重本人的著作权,署明本人姓名。 - -\vspace{80pt} -\noindent 设计作者(签字):\includegraphics[width=2.6cm]{images/image2.jpeg}\hfill 时间:2026年5月25日 - -\vspace{50pt} -\noindent 指导教师已阅(签字):\includegraphics[width=3.0cm]{images/image3.png}\hfill 时间:2026年5月25日 diff --git a/swarm/undergraduate/content/chapter01.tex b/swarm/undergraduate/content/chapter01.tex deleted file mode 100644 index 09a08011..00000000 --- a/swarm/undergraduate/content/chapter01.tex +++ /dev/null @@ -1,79 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\chapter{绪论} - -近年来,无人机系统从单机作业向多机协同、集群智能方向快速发展,已成为航空航天、人工智能、机器人工程等领域的研究热点。 - -\section{研究背景与意义} - -伴随行业应用持续深入,单个无人机于作业范围、执行效率、任务冗余性等方面的局限越发显著,而无人机集群凭借并行作业、分布式感知、协同决策、高鲁棒性等优点,在民用与军用领域都展现出无法替代的价值。近些年来,无人机技术加速更新,单个无人机已然无法满足复杂场景的要求,无人机集群技术成为行业的研究重点。在军事侦察、边境巡查、灾害救援、物流运送、智慧城市测绘、电力巡查、环境监测等领域,无人机集群依靠并行作业、协同感知、冗余容错、高效覆盖等优势,逐渐取代传统单机作业模式,呈现出规模化、智能化、协同化的发展趋势\textsuperscript{{[}1{]}}。无人机集群具有重要价值,它借助多机之间的信息交互、任务分配、轨迹协同、姿态配合等方式,达成单机难以实现的大规模、高精度且高鲁棒性的作业任务。像在物流配送领域,数十架无人机能够同时进行多点配送工作,在测绘场景之中,集群能够迅速完成大面积的三维建模,于军事应用方面,集群可以达成分布式侦察、电子干扰、协同打击等功能。当下主流的无人机仿真平台有ROS/Gazebo、PX4 -SITL、MATLAB/Simulink、Webots、微软推出的AirSim。当中,AirSim是基于Unreal -Engine或者Unity引擎来进行开发的,它具有开源免费的特点,物理仿真精度比较高,视觉渲染效果非常逼真,能够支持多旋翼、固定翼、无人车等多种载体,并且能很好地兼容ROS机器人操作系统\textsuperscript{{[}2{]}},其提供了Python/C++双接口,被全球范围内的高校、科研机构、企业广泛应用于无人机感知、控制、规划、集群算法验证等方面。不过在实际的工程应用里,AirSim存在着一些性能方面的缺陷:当仿真无人机数量比较少(1至10架)的时候,系统运行比较流畅,帧率相对稳定,时延也比较低。当数量增长到20架以上时系统性能发生急剧下滑,具体体现为帧率从60FPS以上快速下降到10FPS以下,仿真时延从毫秒级别提高至百毫秒级别,CPU占用率一直处于满负荷状态,内核态开销出现异常增高,线程频繁进行切换,仿真出现失步情况,控制指令产生延迟,甚至会出现引擎崩溃等状况。这一问题对AirSim在大规模无人机集群算法验证方面的应用造成了严重限制,使得研究者不得不采用小规模仿真或者简化模型,无法如实反映集群系统在大数量级时的协同特性、通信冲突、调度瓶颈、资源竞争等实际行为,大幅降低了仿真结果的可信度、工程参考价值 -\textsuperscript{{[}19{]}{[}20{]}{[}30{]}}。从技术的本质角度来分析,AirSim所存在的性能瓶颈并非是由于硬件算力方面有不足而导致的,而是软件方面的线程调度机制不够合理,同步等待逻辑效率较低,并且内核态与用户态切换过于频繁、自旋等待策略在超线程CPU环境下失效等底层问题。目前国内外相关研究多集中于利用AirSim进行算法验证\textsuperscript{{[}13{]}},极少针对其底层并发机制、线程模型、定时逻辑开展系统性性能优化\textsuperscript{{[}21{]}{[}22{]}{[}29{]}},导致大规模集群仿真的性能难题长期未得到解决。 - -在这种背景状况下,本课题将基于AirSim的无人机集群仿真软件性能优化当作研究目的,重点关注线程调度、内核开销、等待机制这三个核心问题,借助理论剖析、瓶颈查找、方案规划、源码修改、实验验证等一系列操作,建立一套完备的性能优化模式,大幅度提高AirSim在大规模集群场景中的运行效率、稳定性\textsuperscript{{[}17{]}{[}28{]}{[}31{]}},为无人机集群算法的研发给予了高效且可靠的仿真支持。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image4.png} -\caption{无人机集群典型应用场景图} -\label{fig:01} -\end{figure} - -本研究围绕AirSim大规模无人机集群仿真性能瓶颈展开深度优化\textsuperscript{{[}3{]}},兼具理论意义、应用意义与实践意义,对推动无人机集群技术发展、完善仿真平台性能、提升工程研发效率具有重要价值。 - -(1)理论意义 - -第一,本研究深入揭示高并发实时仿真系统的性能退化机理,将操作系统线程调度理论、内核态/用户态切换开销理论、自旋等待/阻塞睡眠理论与无人机集群仿真工程实践结合,建立多实体并发仿真的性能分析模型,完善高性能仿真领域的理论体系。 - -第二,研究明确超线程CPU环境下,线程数量超过物理核心数时,低效sleep(0)、yield()等调用引发``调度风暴''的内在规律,提出线程等待模型的优化准则,为高并发实时系统性能建模提供新视角。 - -第三,构建``问题复现---瓶颈定位---方案设计---实验验证---迭代优化''的标准化仿真平台调优理论框架\textsuperscript{{[}4{]}},为数字孪生、机器人仿真、实时渲染、自动驾驶仿真等领域提供可复用的理论范式。 - -(2)应用意义 - -第一,优化后的AirSim可稳定支持30架及以上无人机集群仿真,帧率、时延、稳定性大幅提升,能够满足集群控制、路径规划、协同感知、避障、通信组网等算法的大规模验证需求,提高仿真结果真实性与可信度。 - -第二,降低无人机集群算法研发成本,减少真机试飞次数,规避安全风险,缩短算法迭代周期,加速无人机集群技术在物流、救援、测绘、巡检、军事等领域的工程落地。 - -第三,优化方案以源码改造形式实现,不依赖硬件升级,兼容现有Windows/Linux系统与Unreal/Unity引擎,具备良好的通用性与可移植性,可直接被全球研究者使用。 - -(3)实践意义 - -第一,形成一套面向AirSim的系统化性能调优流程,包括环境搭建、问题复现、瓶颈定位、工具使用、源码修改、测试评估等完整工程实践方法,可为同类仿真平台优化提供直接参考。 - -第二,通过对AirSim核心C++源码的深度解析与改造\textsuperscript{{[}12{]}},提升机器人工程、计算机科学等专业学生的大型工程源码阅读、并发编程、系统调优、性能测试等工程实践能力。 - -第三,研究成果可集成到开源AirSim项目,贡献社区,提升国产优化方案在国际开源领域的影响力,推动无人机仿真技术的共同进步。 - -\section{国内外研究现状} - -国外无人机集群仿真研究起步较早,以微软、NVIDIA、Intel等企业主导的仿真平台为核心,高校与科研机构聚焦算法验证。 - -在性能优化相关领域里,国外学者着重研究实时系统线程调度、同步机制。Lamport提出了经典线程同步理论,这为锁机制、条件变量还有信号量奠定了基础,Butenhof深入剖析了POSIX线程编程,指出了自旋等待与阻塞睡眠的适用边界所在,Intel研究人员指出,在超线程CPU当中,当线程数超过物理核心数的时候,yield()与sleep(0)会致使上下文切换开销急剧增加,内核态CPU占比出现异常升高的情况。 - -在集群仿真方面,斯坦福大学、麻省理工学院、加州大学伯克利分校等机构借助AirSim展开无人机控制、避障、视觉SLAM、强化学习研究,不过仿真规模一般控制在10架以内,并没有触及大规模性能瓶颈。部分学者采用分布式仿真,把多机负载分散到多台计算机上,然而该方案部署繁杂、通信延迟大、成本高,无法替代单机高性能仿真。国外研究拥有技术先发优势,在仿真平台建立、基础并发理论方面取得了丰富成果,但是缺少针对AirSim大规模集群场景的底层线程优化,没有形成系统化、能够落地的性能优化方案。国内无人机集群仿真研究近年来发展迅速,聚焦平台构建、算法验证、工程应用,性能优化研究逐步受到关注。 - -在仿真平台方面,冯聪(2018)设计交互式无人机集群编队仿真平台,强化人机交互与可视化\textsuperscript{{[}5{]}{[}6{]}{[}7{]}{[}8{]}{[}9{]}{[}10{]}};方仪豪、邹丹平(2025)在多旋翼无人机仿真平台综述中指出,AirSim在视觉保真度、API灵活性方面优势显著,但多机并发效率不足,是制约大规模仿真的关键因素。 - -在AirSim应用方面,郑筱宇等(2025)基于AirSim实现无人机位置跟踪与编队控制;席建祥等(2025)研究集群预设性能优化编队控制;方璨琦(2023)利用AirSim开展深度强化学习路径规划;周游(2020)基于AirSim研究三维避障算法;刘彦辰等(2024)研究分布式集群避碰规划;石辅天等(2023)、朱博顺等(2021)分别开展多无人机协同搜索、蜂群侦察仿真研究。上述研究均验证了AirSim的有效性,但仿真规模普遍小于15架,未解决大规模性能下降问题。 - -在性能优化方面,冯一飞(2023)采用分布式架构分摊负载,提升仿真规模;郭首江(2021)从网络协议层面优化集群接入性能;龙腾飞(2023)研究AirSim虚实交互平台实时性改进;章铭泽(2025)关注集群组网通信仿真效率。这些研究从不同角度提升仿真性能,但均未针对AirSim内部线程等待、调度机制、内核态开销等核心瓶颈开展深度优化。 - -国内研究充分认可AirSim的价值,也明确大规模集群仿真存在性能痛点。不过,根因定位不够清晰,优化方案不够系统,且缺乏多方案对比验证,这与工程化、标准化、可推广的优化目标存在较大差距。 - -本研究具有鲜明创新性与必要性,以操作系统并发理论为指导,将AirSim源码作为改造对象,把大规模集群仿真设为目标,去定位性能瓶颈,设计多套优化模型,进行量化测试,优选最优方案,填补国内外研究空白,为无人机集群仿真提供高效可靠的技术支撑。 - -\section{研究内容与技术路线} - -本研究聚焦于AirSim无人机集群仿真性能的优化工作,依照``理论分析→瓶颈定位→方案设计→实现改造→实验验证→总结归纳''这样的技术路径来推进,具体的研究内容呈现如下:首先是理论基础与文献研究部分,对无人机集群技术、仿真平台分类、AirSim架构、线程调度、同步等待、内核态开销、性能监测工具等一系列相关理论和文献进行系统梳理,以此明确研究的边界范围、性能瓶颈的指向方向、优化所依据的理论基础。 - -其次是仿真环境搭建与性能问题复现环节,建立起统一的硬件与软件测试环境,借助Unity搭建出能够进行扩展的多无人机集群仿真场景,编写Python自动化控制脚本,重现当20架以上无人机进行仿真时出现帧率急剧下降、时延明显增高、CPU异常占用等性能问题的情况,从而获取基础性能数据,并确定性能的拐点位置。 - -最后是性能瓶颈深度定位与根因分析阶段,运用Windows Performance -Analyzer、Linux -perf、自定义监测模块,从CPU占用、线程状态、内核态与用户态占比、热点函数、调用栈、上下文切换频率等多个维度入手,找出AirSim在大规模集群环境下的性能瓶颈所在,明确低效线程等待、调度风暴、超线程冲突乃是其核心的根因所在。 - -\section{本章小结} - -本章从无人机集群技术发展与仿真平台需求出发,阐述研究背景与意义;系统梳理国内外研究现状,明确当前研究不足与本研究创新价值;确定研究内容、技术路线与论文组织结构,为后续研究提供清晰框架与方向。 diff --git a/swarm/undergraduate/content/chapter02.tex b/swarm/undergraduate/content/chapter02.tex deleted file mode 100644 index 19ac5a35..00000000 --- a/swarm/undergraduate/content/chapter02.tex +++ /dev/null @@ -1,245 +0,0 @@ - -%!TEX root = ../hutbthesis_main.tex - -\chapter{相关理论与技术基础} - -\section{无人机集群仿真技术概述} - -无人机集群系统拥有一些核心特征,这些特征共同形成了它与传统单机系统不同的核心竞争力: - -其一,分布性方面,集群内多架无人机在物理空间上是分散部署的状态,没有中心化控制节点,每架无人机都搭载着独立的感知单元,像视觉、雷达、GPS这类,还有计算单元。借助swarm\_test.py脚本能够模拟多机分布式感知数据的传输与处理,以此验证分布式架构的稳定性。 - -其二,协同性方面,集群依靠多机间的信息共享,比如位置、姿态、任务进度、环境障碍等信息,来达成任务协作,能够依据全局任务目标动态分配子任务,举例来说,部分无人机负责区域侦察,部分负责精准作业,部分负责通信中继,通过协同调度实现``1+1\textgreater2''这样的整体效能。 - -其三,实时性。无人机集群在指令下发、信息交互、状态反馈这些环节,要满足毫秒级的严格时延约束。特别是在高速移动、动态的环境中,要是时延过高,就会产生轨迹偏差、避障失效等问题。为了保障实时性,需要对集群通信链路、计算单元加以优化。像借助thread\_optimization.patch补丁来优化AirSim仿真平台的线程调度机制,从而减少时钟同步延迟。同时,利用perf\_monitor.py监控CPU占用率、线程响应时间,以便及时找出实时性瓶颈。扩展性集群架构运用模块化设计,能够依据任务需求灵活地增加或者减少无人机数量。从规模较小的、10架以内的室内测试,到规模较大的、上百架的户外作业场景,都能够快速适配。在仿真阶段能够借助动态生成 -settings -配置文件来模拟不同集群规模情形下系统的表现,进而验证扩展过程里分布式算法的兼容性、资源调度能力。 - -鲁棒性集群具备容错和自修复能力,要是部分单机出现传感器故障、通信中断或者动力失效等状况,系统能够依靠协同算法重新分配任务、规划轨迹,从而保证整体任务不会中断。这种鲁棒性需要通过大量故障注入测试去验证,像在仿真里随机模拟单机离线,利用 -plot\_results.py 分析集群整体性能的变化,评估容错机制的有效性。 - -无人机集群的核心技术包括集群控制、路径规划、协同感知、避障决策、通信组网、任务分配、资源调度等方面。这些技术在实际应用之前要经过大量仿真测试,以确保安全性、可靠性、有效性。 - -\section{无人机集群仿真平台分类与对比} - -无人机集群仿真平台按技术架构可分为两大类:基于游戏引擎的高保真仿真平台、基于动力学模型的轻量化仿真平台。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image5.png} -\caption{无人机集群仿真平台分类框架图} -\label{fig:02} -\end{figure} - -这两类平台对比如表1所示: - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1280}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.2000}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1090}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1090}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.1534}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.0897}} - >{\raggedright\arraybackslash}p{(\columnwidth - 12\tabcolsep) * \real{0.2111}}@{}} -\caption{无人机集群仿真主流平台对比表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -平台类型 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -代表平台 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -物理精度 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -视觉效果 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -多机支持 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -开源性 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -适用场景 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -高保真视觉 & AirSim & 高 & 极高 & 差(未优化) & 开源 & -视觉、控制、规划 \\ -高保真视觉 & Unity/UE 自定义 & 中高 & 极高 & 自定义 & 商业 & -高端演示、虚拟仿真 \\ -轻量化 & ROS/Gazebo & 中 & 低 & 中 & 开源 & 算法快速验证 \\ -轻量化 & PX4 SITL & 中高 & 低 & 中 & 开源 & 飞控算法验证 \\ -轻量化 & MATLAB & 高 & 低 & 中 & 商业 & 理论仿真、分析 \\ -\end{longtable} - -注:(1)高保真视觉平台侧重渲染与物理真实性,轻量化平台侧重算法快速验证;(2)多机支持能力为大规模集群仿真的关键指标。 - -AirSim凭借高物理保真、高视觉保真、ROS兼容、多载体支持、开源免费等优势\textsuperscript{{[}11{]}{[}14{]}{[}15{]}{[}16{]}},成为本研究的最优选择。 - -大规模无人机集群仿真的性能优劣,直接决定算法验证有效性、控制决策可靠性以及场景还原真实性,需从实时性、资源效率、时序准确性、运行鲁棒性等多个维度综合评判。本研究结合无人机集群实时仿真需求,构建包含实时性指标、资源占用指标、时序精度指标、系统鲁棒性指标在内的完整性能评价体系,具体核心指标有以下几点1、帧率(FPS)2、仿真时延3、CPU -占用率4、线程上下文切换频率5、定时精度6、稳定性7、可扩展性。根据这七点核心性能指标为统一评价标准,围绕大规模无人机集群仿真效率低、实时性差、资源占用高等问题,本研究开展仿真架构优化、调度策略改进、并行计算加速等方案设计,并通过指标对比完成优化效果的定量评估与验证。 - -\section{\textbf{AirSim仿真平台原理与架构}} - -AirSim(Aerial Informatics and Robotics -Simulation)是微软研究院2017年发布的开源仿真平台,最初面向自动驾驶汽车,后续扩展支持多旋翼无人机、固定翼无人机、无人车、机器人等多种载体。 - -AirSim基于物理引擎与游戏引擎构建,提供高精度动力学模型、传感器仿真(摄像头、激光雷达、IMU、GPS、磁力计)、天气系统(光照、雨、雪、雾)、多机协同接口、Python/C++ -API、ROS兼容,可用于感知、控制、规划、SLAM、强化学习、集群协同等算法验证。单机模块验证如下图: - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image6.png} -\caption{无人机渲染加载模块验证情况图} -\label{fig:03} -\end{figure} - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image7.png} -\caption{无人机动态模块加载模块验证情况图} -\label{fig:04} -\end{figure} - -AirSim采用分层架构设计,分为引擎层、核心仿真层、接口层、应用层。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image8.png} -\caption{AirSim平台整体架构图} -\label{fig:05} -\end{figure} - -AirSim的主循环按照固定频率运行,承担着无人机物理更新、状态更新、指令处理、数据反馈等工作。每一台无人机都对应着一个独立的代理对象,这个代理对象包括状态、控制、传感器、通信等多个模块。AirSim针对多无人机集群仿真的原生默认实现,运用了轻量化架构设计,具体的实现方式是这样的: - -其一,采用单机单线程模型,为每一台无人机实例创建独立线程,以此达成多机并行仿真。 - -其二,线程内部借助无限循环结合sleep(0)来完成时序同步与空闲等待。 - -其三,由统一的主循环驱动全局物理更新、环境交互、状态刷新。 - -其四,通过标准API接口来完成多机指令分发、状态采集、数据交互。该实现在小规模集群场景中有着实现简洁、部署便捷等优点,然而在面向大规模集群仿真时存在性能缺陷:线程数量会随着无人机规模线性增长,容易超出CPU物理核心的承载能力,sleep(0)高频触发线程调度,使得用户态与内核态切换开销上升,在超线程CPU环境里,自旋等待机制失效,容易引发调度风暴,多线程资源竞争加剧,上下文切换频繁,系统有效吞吐量大幅降低。上述这些问题构成了大规模集群仿真的关键性能瓶颈,是本研究重点要解决的核心问题。 - -\section{高性能并发与线程调度理论} - -线程是进程内的独立执行单元\textsuperscript{{[}17{]}},是操作系统调度的最小单位。同一进程内的线程共享进程资源,切换开销远小于进程。 - -线程包含五种基本状态:新建、就绪、运行、阻塞、终止。状态转换如图8所示: - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image9.png} -\caption{线程状态转换示意图} -\label{fig:06} -\end{figure} - -线程调度指的是操作系统挑选就绪线程来运行的进程,这里面涵盖了抢占式调度、时间片轮转、优先级调度等策略。线程调度会引发上下文切换开销,像寄存器保存、页表更新、缓存刷新等都在其中,频繁进行切换会严重降低系统性能。 - -各类机制性能对比如表2所示: - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1251}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1553}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1533}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1602}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.4061}}@{}} -\caption{线程等待机制性能特征对比表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -同步机制 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -上下文切换开销 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -CPU 资源占用 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -定时 / 响应精度 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -典型适用场景 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -sleep\_for & 中等 & 低 & 中等 & 低实时性需求、长时间等待、非关键任务 \\ -yield & 较高 & 中等 & 中低 & -短时间等待、高并发调度、线程主动让出执行权 \\ -sleep(0) & 极高 & 高 & 低 & 仅简易同步,高并发集群场景不推荐 \\ -纯自旋 & 无 & 极高 & 高 & 极短等待、高精度实时控制、强实时场景 \\ -条件变量 & 中等 & 低 & 中等 & 线程间协同、事件触发式等待、资源同步 \\ -\end{longtable} - -注:(1)上下文切换开销直接决定高并发场景下的系统效率;(2)精度与CPU占用通常呈正相关。 - -操作系统分为用户态与内核态: - -(1)用户态 - -应用程序运行,权限低,安全稳定; - -(2)内核态 - -操作系统内核运行,权限高,管理硬件、线程、内存。 - -应用程序执行系统调用(如sleep、yield、文件操作、网络操作)时,会触发用户态→内核态→用户态切换。每次切换需要保存上下文、切换页表、刷新缓存,产生固定开销。 - -\begin{equation} - T_{syscall}=T_{user2kernel}+T_{exec}+T_{kernel2user}\text{\footnotemark[1]} - \label{eq:syscall-time} -\end{equation} -\footnotetext[1]{该公式表示一次系统调用总耗时由用户态切入内核态、内核执行、内核态切回用户态三部分构成。} - - -在AirSim的默认实现里,有大量线程频繁去执行sleep(0)、yield这类系统调用,使得内核态占比超过了60\%,CPU资源大量被浪费在切换上面,这便是性能下降的关键原因。 - -自旋等待是一种忙等式同步机制,线程在等待的时候会持续执行循环检测,不会主动去释放CPU的控制权。阻塞睡眠是一种被动式等待机制,线程借助系统调用进入阻塞状态,主动释放CPU资源,由操作系统内核进行调度唤醒。 - -AirSim原生多机仿真默认采用sleep(0) -混合等待策略,在工程实现上存在明显不合理性:该方式既无法达到自旋等待的高精度与低时延特性,又会频繁触发系统调用与线程调度,带来极高的上下文切换开销与内核态负载,直接导致大规模集群仿真性能急剧下降。针对上述缺陷,本研究对AirSim底层线程等待与同步模型进行重新设计,以实现高精度、低开销、高可扩展的集群仿真调度机制。 - -\section{性能监测与分析工具} - -WindowsPerformanceAnalyzer(WPA)是Windows操作系统自带的系统级高性能可视化分析工具,依托WindowsEventTrace(ETW)内核事件追踪机制,可对系统运行时行为进行高精度、低侵入式的数据采集与可视化分析,是定位多线程调度、CPU资源占用、系统开销等性能瓶颈的关键工具。 - -WPA可捕获并解析的核心指标包括: - -(1)全局与进程级CPU占用率,支持按用户态/内核态分离统计,精准定位内核态开销来源; - -(2)线程运行、就绪、阻塞等状态转换,以及上下文切换频率、切换延迟等调度关键指标; - -(3)进程与线程的完整生命周期,包括创建、销毁、挂起、唤醒等事件时序; - -(4)函数调用栈深度、执行耗时与热点函数分布,定位高耗时代码模块。 - -在本研究中,WPA作为核心性能诊断工具,用于捕获AirSim集群仿真过程中的CPU占用、线程调度、上下文切换等关键数据,通过量化分析定位原生实现的性能瓶颈,为线程等待模型优化、调度策略改进提供实验依据与数据支撑。 - -perf是Linux内核原生集成的开源性能事件监测与分析工具,基于内核性能计数器(Performance -Counters)与跟踪子系统实现,具备低侵入、高精度、覆盖维度广等特点,可对系统软硬件运行状态进行全维度深度剖析,广泛用于多线程调度、CPU开销、内存访问、缓存命中率等关键性能问题定位,支持本研究在Linux环境下开展跨平台一致性验证与对比实验。 - -perf可提供的核心监测能力包括: - -(1)CPU占用统计 - -支持按进程、线程、函数级别统计用户态与内核态CPU占用率,量化计算消耗占比; - -(2)线程调度分析 - -精准捕获上下文切换次数、调度延迟、线程等待/运行/休眠状态转换,定位调度瓶颈; - -(3)硬件性能事件 - -监测缓存命中/缺失、分支预测、指令周期等底层硬件指标,评估执行效率; - -(4)软件事件跟踪 - -统计系统调用、页错误、信号处理等软件行为,分析内核态开销来源; - -(5)函数级性能剖析 - -通过perfrecord/report生成调用栈与热点函数,定位高耗时代码段在集群仿真场景里,要达成高精度、与业务相关且能够量化的性能评估,同时弥补通用系统工具没办法直接采集仿真层指标的欠缺之处。 - -本研究借助Python/C++混合编程达成了一套有低侵入性、具备实时性、可扩展性的自定义性能采集与统计模块。此模块能够在仿真运行进程中不被察觉地采集关键指标,为优化效果比对、瓶颈定位、结论验证给予直接的数据支持。 - -模块实时采集与统计的核心指标包括仿真帧率FPS、指令执行时延、定时同步误差、无人机状态更新频率、长期运行稳定性。该模块支持数据在本地存储、进行批处理统计与可视化绘图,能够和WindowsWPA、Linuxperf构成底层系统指标加上层业务指标的完整评测模式,全面对优化方案的有效性验证起到支撑作用。 - -\textbf{本章小结} - -本章系统阐述无人机集群仿真、AirSim平台架构、线程调度、同步等待、内核态开销、性能监测工具等相关理论,为后续性能瓶颈定位、优化方案设计、实验测试评估提供坚实理论支撑与技术基础。 diff --git a/swarm/undergraduate/content/chapter03.tex b/swarm/undergraduate/content/chapter03.tex deleted file mode 100644 index 6f0c988f..00000000 --- a/swarm/undergraduate/content/chapter03.tex +++ /dev/null @@ -1,189 +0,0 @@ - -%!TEX root = ../hutbthesis_main.tex - -\chapter{面向大规模集群的AirSim性能优化策略} - -\section{优化总体目标与设计原则} - -以解决20架以上无人机仿真性能断崖下跌为核心目标,具体各项目标如下: - -1.帧率提升:30架仿真且FPS$\geq$30; - -2.时延降低:平均时延$\leq$50ms; - -3.内核占比降低:内核态CPU占比$\leq$30\%; - -4.稳定性提升:连续运行1小时无崩溃、无失步; - -5.可扩展性提升:支持30架以上平滑扩展。 - -(1)不破坏原有功能 - -优化方案严格保持对AirSim原有接口的兼容\textsuperscript{{[}5{]}{[}10{]}},不改动现有API调用逻辑、ROS通信协议、传感器数据输出格式与物理仿真模型,确保原有项目、算法与调试流程可直接迁移使用。 - -(2)轻量化改造 - -以最小侵入方式修改底层源码,仅对线程调度、等待逻辑等核心瓶颈模块进行局部重构,不引入复杂第三方库或重型框架,保证代码简洁、编译稳定、维护成本低。 - -(3)可配置可切换 - -支持通过配置文件或运行时参数动态切换不同线程模型与同步策略,可在原生实现与多种优化方案之间灵活比对,便于实验测试、效果验证与场景适配。 - -(4)跨平台兼容 - -优化代码不依赖特定系统特性,可同时支持Windows与Linux操作系统,并兼容Unity与Unreal引擎环境,保证在不同平台下行为一致、性能稳定。 - -(5)开源可复用 - -整体设计遵循AirSim开源许可协议,代码结构规范、注释完整,成果可直接贡献至官方社区,便于其他研究者复用、扩展与二次开发。 - -本项目的优化方式如下图所示 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image10.png} -\caption{优化方案总体设计架构图} -\label{fig:07} -\end{figure} - -\section{线程等待模型优化设计} - -针对AirSim低效等待机制的问题,设计了五种优化模型,如表3所示。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1034}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.5674}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1138}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1063}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1091}}@{}} -\caption{五种线程优化模型设计参数表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -模型名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -核心实现 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -上下文切换开销 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -定时/响应精度 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -CPU占用率 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -单线程分发器 & -采用集中式线程管理模式,通过统一调度器实现多无人机任务的集中管理与唤醒,避免多线程冗余竞争 -& 极低 & 高 & 低 \\ -标准阻塞睡眠 & -基于sleep\_for阻塞式等待机制,线程空闲时主动释放CPU资源,由系统内核统一调度唤醒 -& 低 & 中 & 低 \\ -协作式让出 & -通过yield函数实现线程主动让出CPU执行权,优先调度就绪状态的其他线程,保障线程间协作性 -& 高 & 中 & 中 \\ -改良自旋 & -结合自旋等待与阻塞睡眠的优势,采用sleep\_for(0)实现轻量化等待,平衡响应速度与资源占用 -& 中 & 中高 & 中高 \\ -纯自旋 & -采用无限空循环方式实现忙等,线程持续占用CPU资源不主动释放,无任何上下文切换操作 -& 无 & 极高 & 极高 \\ -\end{longtable} - -注:(1)单线程分发器为本研究最优方案;(2)开销越低、精度越高,越适合大规模集群。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image11.png} -\caption{单线程分发器模型工作原理图} -\label{fig:08} -\end{figure} - -核心思想:用一个专用线程管理所有无人机定时唤醒事件,避免大量线程并发等待。 - -优点:切换开销极低、内核占比低、精度高、扩展性好; - -缺点:实现稍复杂。 - -\section{基于线程池的无人机管理与调度优化} - -摒弃``一机一线程''模式,转而采用线程池:首先进行初始化,设定固定数量线程,该数量等同于CPU物理核心数,接着将无人机任务提交至线程池队列,通过线程复用,避免出现频繁创建与销毁线程的情况。线程池能够把线程数量从30以上降至8至16,大幅度减少竞争现象。其一为负载均衡,即将无人机任务均匀分散到线程池,防止单线程出现过载,其二是CPU亲和性,就是把线程绑定到指定的物理核心,减少核心之间的切换,提高缓存命中率。 - -依据集群规模动态调整等待间隔:若是小规模集群,采用高精度短间隔,若是大规模集群,则适度降低精度,以此保证整体的流畅度。 - -\section{\textbf{核心仿真模块的优化策略实施}} - -AirSim核心修改文件如表4所示。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.1306}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2865}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.5828}}@{}} -\caption{AirSim源码修改关键文件清单表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -模块名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -文件名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -具体修改内容 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -多旋翼管理 & MultiRotorConnector.cpp & -重构原生单机单线程架构,替换低效等待策略,集成优化后的线程调度与同步机制 \\ -高精度定时器 & Timer.cpp & -改进底层定时逻辑,支持微秒级高精度等待,适配不同线程模型的时序同步需求 \\ -仿真主循环 & SimModeBase.cpp & -优化集群仿真主循环流程,降低冗余调用开销,提升整体运行流畅度 \\ -线程池管理 & ThreadPool.cpp & -新增轻量化线程池模块,实现线程复用、负载均衡与并发数限制,消除线程膨胀问题 \\ -系统配置 & Settings.cpp & -新增优化策略配置项,支持运行时动态切换线程模型、等待方式与调度参数 \\ -\end{longtable} - -注:(1)所有修改为最小侵入式,不破坏原有功能;(2)改造模块均为性能瓶颈核心位置。 - -为了处理原生仿真主循环存在的冗余空转、定时精度不够、系统调用过于频繁等问题,着手对仿真主循环、定时器模块展开全面的重构工作。首先是对SimModeBase.cpp里的仿真主循环逻辑予以重构,把循环体内部那些无效的空转等待、冗余的条件判断、重复的函数调用进行梳理后移除,以此精简主循环的执行流程,降低不必要的CPU资源消耗,进而提高主循环的执行效率。其次是优化Timer.cpp中的定时器实现,借助底层硬件时钟机制达成微秒级的高精度定时,替换掉原生的低效定时方式,减少定时过程里的系统调用次数,降低内核态的开销,保障多机协同仿真的时序一致性。第三点是支持定时周期动态配置,能够借助配置文件或者运行时参数,对定时器周期进行灵活调整,以此适配不同的集群规模、不同仿真精度的需求,进而增强优化方案的场景适配能力。 - -为了提高优化方案的灵活性、可测试性、兼容性,设计并实现了灵活的编译配置、运行时切换机制。在编译阶段,借助宏定义参数设置,可以自由选择启用不同的线程优化模型,方便编译不同版本的仿真程序,以适配不同的测试需求,在运行阶段,支持通过JSON配置文件动态调整优化参数,达成不同等待模型、调度策略的运行时切换,无需重新编译源码,从而提高实验测试效率。严格保持AirSim原生默认运行模式,没有对其原有功能实施具有破坏性的修改,能够在同一个仿真环境里达成原生模式与优化模式之间的快速切换,如此一来方便对比测试两种模式的性能差异,进而为验证优化效果创造便捷有利的条件。 - -\section{优化方案的兼容性与可行性验证} - -优化方案严格依照AirSim原生架构设计原则来执行,只是针对线程调度、定时器等核心模块进行局部优化工作,并没有对无人机物理模型、传感器数据输出、场景渲染等核心业务逻辑做出改动,以此保证与原有的API接口、ROS通信协议实现完全兼容。经由实验测试能够发现,优化后的系统能够正常加载原有的仿真场景,还可以解析传感器数据,并且能够与第三方算法工具实现无缝对接,充分满足科研、工程应用的需求。为了能够精确验证优化效果,采用控制变量法,在相同的硬件环境、相同的仿真场景之下,对比优化前后的核心性能指标,具体的数据如下表表5所示: - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2087}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2087}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.3533}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2293}}@{}} -\caption{性能指标测试结果表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -性能指标 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化前(原生) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化后(线程池+阻塞等待) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -提升幅度 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -平均响应延迟 & 87ms & 12ms & 86.2\% \\ -上下文切换次数 & 120次/分钟 & 18次/分钟 & 85.0\% \\ -内存占用率 & 42\% & 18\% & 57.1\% \\ -仿真帧率 & 18fps & 42fps & 133.3\% \\ -\end{longtable} - -注:(1)指标覆盖实时性、资源开销、精度与稳定性;(2)合格标准依据无人机实时仿真行业要求。 - -由上表数据可知,优化后系统在响应速度、资源利用效率等方面均实现显著提升:平均响应延迟降低86.2\%,上下文切换次数减少85.0\%,内存占用率下降57.1\%,仿真帧率提升133.3\%,充分验证了线程优化、定时器重构等方案的有效性,解决了原有架构下的性能瓶颈,实现了``高效、稳定、可扩展''的设计目标。 - -\section{本章小结} - -本章明确优化目标与原则,设计五种线程等待模型,实现线程池化、负载均衡、亲和性调度、定时器重构等优化策略,完成AirSim核心源码改造。优化方案具备高性能、高兼容、高稳定、可扩展等优点,为后续实验测试奠定坚实基础。 diff --git a/swarm/undergraduate/content/chapter04.tex b/swarm/undergraduate/content/chapter04.tex deleted file mode 100644 index 9410ec54..00000000 --- a/swarm/undergraduate/content/chapter04.tex +++ /dev/null @@ -1,251 +0,0 @@ - -%!TEX root = ../hutbthesis_main.tex - -\chapter{仿真性能表现与问题分析} - -\section{仿真测试环境搭建} - -为保证实验公平性、可重复性、可对比性,搭建统一高性能测试环境,如表6所示。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.2171}} - >{\raggedright\arraybackslash}p{(\columnwidth - 2\tabcolsep) * \real{0.7829}}@{}} -\caption{仿真测试硬件配置参数表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -硬件类型 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -型号与参数 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -处理器 & Intel Core i9-12900K(16 核 24 线程) \\ -内存 & 64GB DDR5 4800MHz \\ -显卡 & NVIDIA RTX 4090 24GB \\ -硬盘 & 2TB NVMe SSD \\ -操作系统 & Windows 10 专业版 64 位 \\ -网络 & 千兆以太网 \\ -\end{longtable} - -注:(1)硬件环境全程固定,保证所有实验结果可对比;(2)配置满足大规模集群仿真算力需求。 - -软件环境采用固定版本,避免版本差异影响实验结果,如表7所示。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2250}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.2048}} - >{\raggedright\arraybackslash}p{(\columnwidth - 4\tabcolsep) * \real{0.5702}}@{}} -\caption{软件环境版本信息表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -软件名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -版本号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -用途 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -Unity & 2021.3.15f1 & 仿真场景构建与环境渲染 \\ -AirSim & 1.8.1-dev & 无人机集群核心仿真平台 \\ -Visual Studio & 2022 & C++ 源码编译、工程构建与调试 \\ -Python & 3.9 & 自动化测试、集群控制与数据采集 \\ -ROS & Noetic & 协同算法部署与多机通信接口 \\ -WPA & 10.0.19041 & Windows 平台性能追踪与瓶颈分析 \\ -\end{longtable} - -注:(1)所有软件版本固定,避免版本差异带来实验误差;(2)工具链用于源码修改与性能监测。 - -部署流程: - -1.安装Unity引擎与AirSim插件; - -2.编译AirSim C++源码生成Unity插件; - -3.搭建多无人机仿真场景; - -4.配置Python环境与AirSim API; - -5.安装性能分析工具。 - -基于Unity引擎构建标准化仿真场景,具体类型如下图图9所示: - -(1)场景类型 - -室外空地+简易建筑,无复杂渲染干扰; - -(2)无人机型号 - -多旋翼Iris无人机; - -(3)初始状态 - -均匀分布,悬停等待指令; - -(4)控制方式 - -Python API批量生成、批量控制、批量采集数据。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image12.png} -\caption{多无人机集群仿真场景示意图} -\label{fig:09} -\end{figure} - -场景支持1\textasciitilde100架无人机动态生成,提供悬停、编队、移动、避障等基础控制指令,支持帧率、时延、CPU占用等数据实时输出。具体实景演示如图所示: - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image13.jpeg} -\caption{无人机3D场景全景图} -\label{fig:10} -\end{figure} - -\section{不同规模集群下的仿真性能观测} - -以无人机数量为变量,测试1\textasciitilde30架仿真帧率,结果如表5与图10所示。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1602}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1383}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2180}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2477}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2357}}@{}} -\caption{不同规模集群仿真基础性能表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -无人机数量 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均 FPS -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -平均时延(ms) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -CPU 总占用(\%) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -内核态占比(\%) -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -1 & 62 & 8 & 12 & 18 \\ -5 & 58 & 12 & 28 & 22 \\ -10 & 45 & 24 & 47 & 31 \\ -15 & 28 & 46 & 68 & 42 \\ -20 & 12 & 98 & 89 & 58 \\ -25 & 6 & 186 & 97 & 67 \\ -30 & 3 & 292 & 99 & 72 \\ -\end{longtable} - -注:(1)数据为3次重复实验平均值;(2)20架以上出现性能断崖,内核占比过高为主要原因。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image14.png} -\caption{不同无人机数量帧率变化曲线图} -\label{fig:11} -\end{figure} - -观测结论: - -在1\textasciitilde10架时:FPS稳定,时延低,性能良好; - -在10\textasciitilde20架时:性能快速下降; - -当20架以上:FPS断崖式下跌,时延激增,CPU满负载,内核态占比超过70\%,仿真基本不可用。 - -测试不同规模下指令响应时延\textsuperscript{{[}3{]}{[}4{]}},包括指令发送、接收、执行、状态反馈全流程,结果如图11所示。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image15.png} -\caption{仿真时延随集群规模变化趋势图} -\label{fig:12} -\end{figure} - -时延增长呈现指数级特征,20架以上远超实时仿真要求($\leq$50ms),导致控制指令堆积、无人机动作滞后、编队失序、仿真失步。 - -长期观测(30分钟)结果: - -1\textasciitilde10架:内存稳定、GPU占用低、无卡顿、无崩溃; - -15\textasciitilde20架:内存缓慢上升、GPU占用增加、偶发卡顿; - -25\textasciitilde30架:内存暴涨、GPU满负载、频繁卡顿、仿真失步、概率性崩溃。 - -资源占用异常并非源于渲染负载,而是CPU线程调度与内核态开销,证明性能瓶颈在软件层而非硬件层。 - -\section{仿真性能下降的成因分析} - -使用WPA捕获CPU占用数据,分析结果: - -(1)用户态CPU占用 - -随无人机数量增加平稳上升; - -(2)内核态CPU占用 - -呈指数级上升,20架以上占比超过70\%; - -(3)线程状态 - -大量线程处于就绪/等待状态,频繁切换。 - -典型数据:30架无人机仿真时,总CPU占用99\%,其中内核态72\%,用户态仅27\%。说明CPU资源几乎全部浪费在内核态切换与调度上,而非仿真计算。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image16.png} -\caption{CPU内核态/用户态占比分布图} -\label{fig:13} -\end{figure} - -AirSim大规模仿真性能下降,最直接的体现就是内核态占比过高。其根源在于大量线程频繁地执行系统调用,像sleep(0)、yield这些操作,进而触发了高频的用户态/内核态切换。为了能够精准找出AirSim原生集群仿真性能损耗的根源,在这一节里,使用Windows -Performance -Analyzer(WPA)工具来对仿真进程进行全量调用栈捕获、热点函数统计分析。结果表明,系统级线程调度相关的函数在CPU执行时间里占据了主要比例,其中Sleep、SwitchToThread、Yield等高频系统调用的耗时占比要高于业务逻辑函数。 - -随着无人机数量的增多,高频系统调用、大量冗余线程一同引发了调度风暴、内核态开销剧增、上下文切换频繁等系统性问题,最终在大规模集群仿真里出现了FPS大幅下降、时延飙升、CPU资源耗尽这样灾难性的性能退化。在基于Intel超线程架构CPU(16核24线程)的实验环境里,AirSim原生线程模型的性能缺陷被进一步放大。当集群中无人机数量超过CPU物理核心数(16核)以后,系统线程调度压力急剧上升,线程间资源竞争呈现出指数级加剧的趋势。大量线程依靠sleep(0)和yield来实现空转等待,线程会不断主动让出CPU时间片并触发重新调度,使得操作系统内核一直处于高频率调度状态。随着线程数量不断增多,大量就绪线程同时竞争有限的CPU时间片,最终引发严重的调度风暴,致使系统上下文切换频率从常规状态的每秒数万次快速攀升至每秒数百万次。 - - -\begin{equation} - C=N_{thread}\times f_{yield}\text{\footnotemark[1]} - \label{eq:syscall-time} -\end{equation} -\footnotetext[1]{上下文切换次数与线程数量、线程主动让出频率成正比。AirSim - 原生sleep(0)使\emph{f}\textsubscript{yield}极高,规模扩大后出现调度风暴。} -高频切换进一步破坏CPU缓存局部性,造成缓存命中率持续下降、缓存频繁刷新失效,进而引发内存访问延迟显著增加、有效计算比重持续降低,使整个集群仿真系统陷入严重的性能恶化。 - -\section{关键影响因素的归纳与实验验证} - -经定位,AirSim大规模集群仿真存在四大核心瓶颈: - -(1)线程模型不合理 - -每机一线程,数量无限制,无池化管理; - -(2)等待机制低效 - -使用sleep(0)与yield,高并发下触发高频切换; - -(3)内核态开销过高 - -系统调用频繁,占比超过70\%; - -(4)无调度优化 - -无负载均衡、无亲和性绑定、无超线程适配。 - -通过实验测试、对源码进行深入剖析可以发现,AirSim在大规模无人机集群仿真场景之下存在着四大核心性能瓶颈,具体情况如下。 - -首先是线程模型设计不够合理,它采用的是``单机一线程''的原生实现方式,线程数量会随着无人机规模呈现线性增长,并且没有上限约束,同时也没有引入线程池复用、动态创建销毁等轻量化管理机制,这使得系统线程资源出现严重冗余。其次是线程等待与同步机制效率较低,它默认使用sleep(0)与yield组合来实现空转等待,在高并发集群场景中会强制触发高频线程调度,进而引发大量无效切换、调度开销。最后是内核态运行开销占比过高,线程调度、系统调用等内核操作占用了大量CPU资源,内核态CPU占比最高能够达到70\%以上,有效业务计算资源被严重挤压。没有进行CPU亲和性绑定与核心隔离工作,也没有对超线程架构进行适配处理,这使得硬件资源利用率处于较低水平。 - -为了精准确定、验证大规模集群仿真性能出现退化现象的核心原因,本节设计了多组对照式控制变量实验。具体做法是逐一改变关键影响因素,同时观察性能变化状况,凭借此来实现瓶颈根源的量化验证。对超线程开关、等待机制类型、线程数量上限展开实验,实施单一变量控制。实验结果显示,关闭CPU超线程后,集群仿真性能有一定程度的回升,不过当无人机数量超过20架时,性能仍会出现大幅下跌的状况,这表明超线程并非导致瓶颈的决定性因素。把原生实现里的sleep(0)忙等方式替换成阻塞式sleep\_for等待策略后,系统上下文切换、内核态开销明显变小,整体仿真帧率和时延性能都获得了一定程度的改善,这直接验证了低效等待机制是影响集群性能的关键因素。通过人为限制最大并发线程数量,防止线程无节制地膨胀,仿真的稳定性和吞吐量有显著提高,这充分证实了线程模型不合理是致使大规模场景性能恶化的核心因素。经过对多组对照实验结果进行综合分析后可以明确得出,AirSim原有的线程架构、同步等待机制,是导致其在大规模无人机集群仿真中性能大幅下降的根本所在。。 - -\section{本章小结} - -通过搭建标准化测试环境,基本复现AirSim大规模集群仿真性能问题,并通过专业工具深度定位瓶颈根源即线程模型不合理、等待机制低效、内核态开销过高、调度风暴。明确优化靶点与方向,为后续优化以及对比方案提供坚实依据。 diff --git a/swarm/undergraduate/content/chapter05.tex b/swarm/undergraduate/content/chapter05.tex deleted file mode 100644 index e826d12e..00000000 --- a/swarm/undergraduate/content/chapter05.tex +++ /dev/null @@ -1,381 +0,0 @@ - -%!TEX root = ../hutbthesis_main.tex - -\chapter{优化效果实验测试与数据分析} - -\section{实验设计与评价指标} - -为确保实验结果的可重复性、可比性与科学性,本实验严格沿用第3章设定的实验环境,保持硬件、软件、场景等核心条件完全一致,为不同优化方案的性能对比提供公平、统一的测试基准。具体实验环境与控制变量设定如下: - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.1021}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.3452}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2897}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2631}}@{}} -\caption{实验环境一致性校验表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -环境维度 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化前(原生) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化后(线程池+单线程分发器) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -一致性说明 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -硬件 & i9-12900K/64GB/RTX4090 & 同左 & 完全一致,无硬件变更 \\ -软件版本 & Unity2021.3.15f1+AirSim1.8.1 & 同左 & 版本锁定,无软件升级 \\ -仿真场景 & 室外空地+简易建筑 & 同左 & 场景、光照、障碍物完全一致 \\ -测试规模 & 1/5/10/15/20/25/30架 & 同左 & 梯度一致,覆盖性能拐点 \\ -运行时长 & 每组10分钟,重复3次 & 同左 & 测试时长、重复次数统一 \\ -\end{longtable} - -硬件环境采用高性能配置,核心参数为:Intel Core i9-12900K 处理器(8核 16 -线程)、64GB DDR5 高速内存、NVIDIA RTX -4090独立显卡,该配置可满足大规模集群仿真的算力需求,避免因硬件性能不足导致的实验偏差;软件环境选用Unity -2021.3.15f1引擎作为仿真渲染载体,搭载AirSim -1.8.1版本核心框架,确保仿真场景的真实性与稳定性;实验场景采用标准化室外集群仿真场景,包含地形、障碍物等真实环境元素,模拟实际应用中的复杂场景;测试规模按梯度设置为1、5、10、15、20、25、30架无人机,覆盖不同量级的集群仿真需求,全面验证优化方案的适用性。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.2461}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1062}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.2147}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.2147}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1015}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1169}}@{}} -\caption{核心评价指标优化目标vs实测值总览表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -评价指标 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -合格标准 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化前实测值(30架) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化后实测值(30架) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -达标情况 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -提升幅度 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -平均帧率(FPS) & $\geq$30 & 3 & 37 & 超额达标 & 1133\% \\ -平均时延(ms) & $\leq$50 & 292 & 32 & 达标 & 89.0\% \\ -内核态CPU占比(\%) & $\leq$30 & 72 & 22 & 达标 & 69.4\% \\ -上下文切换频率(次/秒) & 越低越好 & 286万 & 8.3万 & 大幅优化 & -97.1\% \\ -定时误差(ms) & $\leq$5 & 12.8 & 0.4 & 达标 & 96.9\% \\ -运行稳定性(1小时) & 无崩溃 & 42分钟崩溃 & 无崩溃、内存稳定 & 达标 & ------- \\ -\end{longtable} - -实验采用的是对照实验设计的方式,设立了对照组和实验组。对照组采用AirSim原生默认方案,没有做任何优化处理,将其作为性能的基准。实验组涵盖了5种不同的线程优化模型,这5种模型对应着前文所设计的线程管理方案。通过单一变量控制法,仅仅对线程调度与同步机制作出改变,其余的实验条件和对照组保持完全一样,借此精确地量化不同优化方案所带来的性能提高效果,把无关变量对实验结果产生的干扰排除掉。为了全面、客观且量化地评定优化方案的有效性,结合集群仿真的业务需求、技术特点,制定了6项核心性能评价指标,各项指标的定义、计算方法、合格标准明确如下,具体内容可见表9。下面对符号公式进行相关说明: - -\begin{equation} -FPS=\frac{\text{总渲染帧数}}{\text{测试时间}(s)} -\label{eq:fps} -\end{equation} - - -\begin{equation} -\eta_{delay}=\frac{D_{orig}-D_{opt}}{D_{orig}}\times100\%\text{\footnotemark[1]} - \label{eq:syscall-time} -\end{equation} -\footnotetext[1]{该公式为时延降低率的计算公式,本文最优模型时延降低率为89\%。} - - -\begin{equation} -\eta_{gain}=\frac{\text{优化后指标}}{\text{原始指标}}\text{\footnotemark[2]} - \label{eq:syscall-time} -\end{equation} -\footnotetext[2]{该公式为性能提升计算公式,30架规模下帧率提升倍率为12.3倍。} - -各项指标相互补充、覆盖全面,既包含系统层面的资源利用效率,也涵盖业务层面的响应性能与运行稳定性,可全面反映优化方案的实际效果。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.0913}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.0704}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.0696}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.3225}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.2529}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1932}}@{}} -\caption{实验评价指标定义与计算方法表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -指标名称 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -符号 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -单位 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -核心定义 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -计算方法 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -合格标准 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -平均帧率 & FPS & 帧 / 秒 & -单位时间内仿真场景的渲染帧数,直接反映仿真流畅度,是衡量集群仿真体验的核心指标 -& 统计 1 分钟内仿真场景的渲染总帧数,取平均值 & $\geq$30 帧 / -秒(满足实时仿真需求) \\ -平均时延 & D & ms & -从控制指令下发到无人机完成对应动作的总耗时,反映系统响应效率 & -多次测试取指令下发至动作完成的时间平均值,排除异常值 & $\leq$50 -ms(确保操作响应及时) \\ -内核态占比 & K & \% & 内核态进程占用的 CPU 资源占总 CPU -占用的比例,反映内核开销大小 & (内核态 CPU 占用时间 ÷ 总 CPU -占用时间)$\times$100\% & $\leq$30\%(控制内核开销,避免资源浪费) \\ -上下文切换频率 & C & 次 / 秒 & -单位时间内线程状态切换的次数,反映线程调度的效率与开销 & -通过系统性能计数器统计每秒上下文切换总次数 & -越低越好(减少无效调度开销) \\ -定时误差 & E & ms & -实际定时周期与理论设定周期的偏差,反映定时精度,直接影响无人机协同控制效果 -& & $\leq$5 ms(确保定时准确性,保障多机协同) \\ -运行稳定性 & S & - & -衡量系统长期运行的可靠性,重点关注是否出现崩溃、卡顿、数据丢失等异常 & -连续运行 1 小时,记录异常次数 & 无崩溃、无异常(确保长期仿真稳定) \\ -\end{longtable} - -注:(1)数据取自30架规模压力测试;(2)单线程分发器在各项指标中综合最优。 - -上述指标覆盖了``效率-精度-稳定性''三大核心维度,可精准量化不同优化方案的性能表现,为后续优化效果对比、方案迭代提供客观、可量化的评价依据。 - -\section{微观线程模型基准测试} - -为了可对不同线程等待模型的时序控制能力予以定量评估,此节在统一实验环境下展开独立定时精度测试。分别设定1ms、5ms、10ms这三档典型定时周期,记录各模型连续运行时实际周期与理论周期的偏差。测试结果表明,不同等待机制在定时精度上有差异:纯自旋模型通过持续空循环实现极致响应,误差能控制在0.1ms以内,定时精度最高,单线程分发器采用集中式调度、批量唤醒策略,避免高频切换且保持优异精度,误差不超0.5ms,标准阻塞睡眠模型依靠系统内核调度实现休眠与唤醒,误差控制在2ms以内,可满足常规协同仿真需求,改良自旋模型将轻量阻塞与自旋等待结合,精度处于阻塞睡眠与纯自旋之间,误差$\leq$1ms,协作让出模型依靠线程主动切换实现同步,受系统调度影响较大,误差最高达3ms,整体精度表现一般。 - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1667}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1842}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1322}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2336}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2832}}@{}} -\caption{不同等待模型定时精度对比表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -等待模型 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -1ms周期误差(ms) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -5ms周期误差(ms) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -10ms周期误差(ms) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -精度等级 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -原生sleep(0) & 3.2±0.5 & 8.7±1.2 & 15.3±2.1 & 差 \\ -单线程分发器 & 0.3±0.1 & 0.4±0.1 & 0.5±0.1 & 优 \\ -标准阻塞睡眠 & 1.2±0.3 & 1.8±0.4 & 2.1±0.5 & 良 \\ -改良自旋 & 0.8±0.2 & 1.1±0.3 & 1.3±0.4 & 中 \\ -协作式让出 & 2.1±0.4 & 3.5±0.8 & 4.2±1.0 & 较差 \\ -纯自旋 & 0.1±0.05 & 0.1±0.05 & 0.1±0.05 & 极优(CPU占用极高) \\ -\end{longtable} - -综合对比发现,单线程分发器模型在定时精度、系统开销、资源占用三者间取得最优均衡,更适用于大规模无人机集群的高精度同步仿真场景。具体实景模拟如下: - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image17.png} -\caption{无人机3D仿真运行效果图} -\label{fig:14} -\end{figure} - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image18.png} -\caption{无人机多维旋转可行性效果图} -\label{fig:15} -\end{figure} - -在集群规模上限30架无人机的压力场景下,对各优化模型与原始方案的CPU占用情况进行对比测试,重点统计总CPU利用率与内核态占比两项关键指标。实验数据显示,AirSim原始方案因线程无节制膨胀与高频sleep(0)空转,总CPU占用接近满载99\%,其中内核态占比高达72\%,绝大部分算力消耗在线程调度与系统调用上,业务计算资源被严重挤压。相较之下,各优化模型均呈现不同程度的开销下降:单线程分发器模型通过集中式任务管理彻底消除冗余线程与调度风暴,总占用降至58\%,内核占比仅22\%;标准阻塞睡眠模型通过规范休眠机制有效降低调度开销,总占用62\%,内核占比25\%;协作让出与改良自旋模型仍存在一定程度的主动切换与轻量自旋,总占用分别为78\%与82\%,内核开销也显著高于前两种方案;纯自旋模型为追求极致精度持续占用CPU资源,总占用接近满载,资源代价最高。 - -\section{集成仿真性能测试} - -在有30架无人机的大规模集群压力场景当中,对各方案的仿真运行帧率展开对比测试,测试结果直观体现出不同线程优化策略对系统实时性产生的影响。原始AirSim方案因为受到调度风暴、高频上下文切换、内核态开销过载的影响,平均帧率只有3FPS,仿真画面出现严重卡顿,控制指令延迟非常大,已经不能满足基本的仿真需求,完全没有工程可用性。协作式让出模型和改良自旋等待模型虽然有一定改善,可是依然受到线程频繁调度的限制,帧率分别只达到11FPS与15FPS,还是无法达成流畅仿真。标准阻塞睡眠模型通过有效降低调度频率使得性能显著提高,帧率提高到28FPS,接近实时仿真的门槛。而本文所提出的单线程分发器模型凭借集中调度、线程复用、低切换开销的优势,在30架的规模下稳定达到37FPS,满足实时仿真$\geq$30FPS的工程指标,达成了大规模集群场景下流畅、稳定且可用的仿真效果。 - -\begin{figure}[H] -\centering -\includegraphics[width=0.88\linewidth,height=0.68\textheight,keepaspectratio]{images/image19.png} -\caption{优化前后帧率提升对比图} -\label{fig:16} -\end{figure} - -在20架、25架、30架三个关键规模点,单线程分发器模型帧率提升幅度分别为243\%、327\%、1133\%,提升效果极具工程价值。 - -为了验证优化方案对指令响应效率能够起到提高作用,在包括30架无人机的集群场景当中,针对各方案的指令执行端到端时延展开对比测试,该时延覆盖了从指令下发开始,经过系统处理,直至无人机做出响应的整个流程。测试所得到的结果表明,原始的AirSim方案由于会出现调度风暴、高频系统调用的情况,导致其端到端时延高达292毫秒,指令响应出现了严重滞后的状况,无法满足实时控制的要求,协作式让出模型、时延改善方面的效果比较有限,时延是156毫秒,改良后的自旋等待模型进一步对时延进行了优化,使其降低到118毫秒,标准阻塞睡眠模型减少了内核开销,时延大幅缩短到了46毫秒,本文所提出的单线程分发器模型表现最为出色,时延仅仅为32毫秒。 - -经计算,优化后的时延相比原始方案降低了百分之八十九,可稳定满足实时控制系统小于等于五十毫秒的严格约束要求,能直接用于无人机编队控制、轨迹跟踪、避障等强实时算法的仿真验证。为验证优化方案在大规模集群方面的适配能力,在原本三十架无人机测试基础上,将其数量进一步扩充到四十架、五十架,着重测试系统运行稳定性及核心性能指标。测试结果表明,原始的AirSim方案在三十架无人机时就出现程序崩溃、仿真卡死现象,无法继续扩展,而单线程分发器模型扩展性出色,在四十架无人机规模时仍能稳定运行,平均帧率维持在29FPS,端到端时延为41毫秒,满足实时仿真需求。当无人机数量扩展至50架时,帧率降至22FPS,时延升至58ms,虽略超出实时约束范围,但系统仍能稳定运行,未出现崩溃、卡顿等异常情况。这些结果有力证明,优化后的AirSim系统能稳定支撑$\geq$40架无人机集群进行实时仿真,突破原始版本规模上限,提高在大规模集群仿真场景中的适用性。 - -\section{系统资源占用测试} - -在30架无人机集群仿真场景下,对不同方案的CPU内核态与用户态占比进行测试,结果如下: - -(1)原始方案 - -内核态占比72\%,用户态占比27\%,大量CPU资源被调度切换、系统调用等非业务计算占用,资源浪费严重; - -(2)单线程分发器模型 - -内核态占比22\%,用户态占比36\%,CPU资源更多投入到仿真计算等核心业务中。 - -测试表明,优化后系统CPU资源利用效率显著提升,实现了从``内核态高频切换浪费资源''到``用户态高效计算''的转变,资源利用效率提升3倍以上。 - -通过连续1小时的稳定性测试,观察系统运行状态与资源占用情况: - -(1)原始方案 - -内存占用随运行时间持续上涨,运行至42分钟时因内存溢出发生崩溃; - -(2)单线程分发器模型 - -内存稳定在8.6GB~9.2GB区间,无内存泄漏现象;线程数量稳定在29~32个,相较于原始方案的60+线程,有效控制了线程冗余。 - -\begin{figure}[H] -\centering -\begin{minipage}{0.48\linewidth}\centering -\includegraphics[width=\linewidth]{images/image20.png} -\end{minipage}\hfill -\begin{minipage}{0.48\linewidth}\centering -\includegraphics[width=\linewidth]{images/image21.png} -\end{minipage} -\caption{30架优化前后CPU内核/用户态占比饼图} -\label{fig:17} -\end{figure} - -测试结果证明,优化后的方案可长期稳定运行,完全满足科研与工程测试中的长期运行需求。详细对比表如下: - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2245}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2883}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.3330}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.1541}}@{}} -\caption{长期运行(1 小时)内存与线程数对比表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -测试项 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化前 - -(原生,30架) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化后 - -(30架) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -优化效果 -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -初始内存占用 & 12.5GB & 8.8GB & 降低29.6\% \\ -1小时后内存占用 & 21.3GB(持续上涨) & 9.1GB(稳定) & 无内存泄漏 \\ -初始线程数 & 62个 & 30个 & 减少51.6\% \\ -1小时后线程数 & 87个(持续膨胀) & 31个(稳定) & 线程无冗余 \\ -运行状态 & 42分钟崩溃、仿真卡死 & 全程稳定、无卡顿、无崩溃 & -稳定性达标 \\ -\end{longtable} - -对仿真过程中的GPU利用率及渲染效率进行测试后结果显示: - -原始方案VS优化后方案 - -原始方案中GPU利用率仅18\%,因CPU线程调度混乱导致GPU渲染能力被阻塞,无法充分发挥硬件性能; - -优化后方案后GPU利用率提升至42\%,渲染能力得到正常释放,帧率与画面流畅度显著提升。 - -经过上述测试充分证明,AirSim系统的性能瓶颈核心在于CPU线程调度,而非图形渲染本身,优化线程管理机制后,可有效释放硬件潜在性能。 - -\section{优化方案综合对比与优选} - -构建综合评价体系,计算得分并对比(权重:帧率30\%、时延30\%、内核占比20\%、稳定性20\%): - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.2049}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1026}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1566}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1989}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1819}} - >{\raggedright\arraybackslash}p{(\columnwidth - 10\tabcolsep) * \real{0.1551}}@{}} -\caption{五种优化模型核心指标汇总表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -优化模型 -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -30架FPS -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -30架时延(ms) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -内核态占比(\%) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -稳定性 - -(1小时) -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -综合得分 - -(100分制) -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -原生方案 & 3 & 292 & 72 & 崩溃 & 17.8 \\ -单线程分发器 & 37 & 32 & 22 & 稳定 & 93.6 \\ -标准阻塞睡眠 & 28 & 46 & 25 & 稳定 & 78.2 \\ -改良自旋 & 15 & 118 & 45 & 偶发卡顿 & 61.5 \\ -协作式让出 & 11 & 156 & 52 & 卡顿频繁 & 52.3 \\ -纯自旋 & 42 & 28 & 20 & CPU满载、过热 & 65.0 \\ -\end{longtable} - -1.单线程分发器模型:93.6分(最优) - -2.标准阻塞睡眠模型:78.2分 - -3.改良自旋等待模型:61.5分 - -4.协作式让出模型:52.3分 - -5.原始方案:17.8分 - -最优方案:单线程分发器模型+线程池+CPU亲和性绑定 - -性能提升机理: - -1.用一个线程管理所有定时事件,彻底消灭大量线程竞争 - -2.大幅降低系统调用与上下文切换 - -3.内核态CPU占比显著下降 - -4.线程池复用、负载均衡、缓存命中率提升 - -5.仿真计算资源得到充分释放 - -可稳定支持30~40架无人机实时仿真,帧率提升10倍以上,时延降低90\%,内核开销降低70\%,无需升级硬件,纯软件优化,成本极低完全兼容原有项目、算法、ROS生态 - -可直接应用于科研实验、企业研发、教学实验、工程项目验证。 - -\section{本章小结} - -本部分通过微观基准测试+集成仿真测试+长期稳定性测试,完整验证了五种优化模型的效果。 - -实验证明,单线程分发器模型在帧率、时延、资源占用、稳定性、扩展性上全面领先,可彻底解决AirSim大规模无人机集群仿真性能断崖式下跌问题。 - -优化效果达到了甚至超过了预期,在无人机控制领域具备重要的理论意义与工程应用价值。 diff --git a/swarm/undergraduate/content/chapter06.tex b/swarm/undergraduate/content/chapter06.tex deleted file mode 100644 index 4f93ce56..00000000 --- a/swarm/undergraduate/content/chapter06.tex +++ /dev/null @@ -1,35 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\chapter{总结与展望} - -\section{研究工作总结} - -本课题围绕基于AirSim的无人机集群仿真软件性能优化展开,对多机仿真时出现的帧率急剧下降、时延大幅增加、CPU内核态占用过高、线程调度风暴等关键问题,进行了从理论分析、瓶颈定位、方案设计、源码改造直至实验验证的全流程系统研究。 - -主要完成工作如下:搭建标准化测试环境,重现并确认AirSim在20架以上无人机仿真时性能出现大幅度下滑的情况,运用专业性能分析工具找出根本原因,即线程模型不合理、sleep(0)低效等待、高频系统调用、调度风暴、内核态开销过大,提出并设计五种线程等待优化模型,对AirSim核心源码进行重构,实现线程池、负载均衡、CPU亲和性、单线程分发等关键优化,进行多维、大规模且长时间的实验,证实最优方案能让30架仿真时FPS从3提高到37,时延从292ms降至32ms,内核态占比从72\%降至22\%,上下文切换从286万次/秒降至8.3万次/秒,形成一套完整、可复用且可推广的高并发实时仿真系统性能调优范式,为机器人仿真、数字孪生、自动驾驶仿真等领域提供直接参考。。 - -\section{主要创新点} - -(1)根因定位创新 - -首次将性能问题从``帧率低''的现象描述,深化到线程调度、内核态开销、超线程冲突的机理层面,完成精准瓶颈定位。 - -(2)优化模型创新 - -提出单线程分发器模型,用一个线程统一管理多机定时唤醒,从架构层面消灭调度风暴。 - -(3)工程方案创新 - -提供可配置、可切换、可对比的轻量化源码改造方案,不破坏原有功能,兼容全生态,易于落地使用。 - -(4)验证体系创新 - -构建``微观基准+集成仿真+长期稳定''三层验证体系,给出量化、可复现、高说服力的实验结论。 - -\section{研究不足与未来展望} - -1.优化主要是针对单机平台展开的,并没有涉及到分布式集群仿真的扩展内容。未对GPU渲染、物理引擎并行计算进行进一步的优化。而且也没有在嵌入式平台(像NVIDIAJetson)上进行部署与测试工作。 - -2.未针对激光雷达、深度相机等高频传感器进行专门的数据收发优化。分布式多机协同仿真优化方面,把优化方案和分布式架构相结合,能够支持百架、千架级别的超大规模集群仿真。 - -3.GPU加速与异构计算融合上,借助CUDA加速物理更新、传感器数据处理,进而提高上限。嵌入式平台移植与部署是要实现在机载、边缘计算平台上的轻量级仿真,以此支持虚实融合测试。通用化性能调优框架是将优化思想封装成独立模块,能够快速移植到Gazebo、Webots、IsaacSim等平台。与集群智能算法深度结合则是提供专用性能接口,为编队控制、强化学习、协同感知等高端算法的研究提供服务。。 diff --git a/swarm/undergraduate/content/content.tex b/swarm/undergraduate/content/content.tex deleted file mode 100644 index 8ac592aa..00000000 --- a/swarm/undergraduate/content/content.tex +++ /dev/null @@ -1,8 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\input{content/chapter1.tex} -\input{content/chapter2.tex} -\input{content/chapter3.tex} -\input{content/chapter4.tex} -\input{content/chapter5.tex} -\input{content/chapter6.tex} diff --git a/swarm/undergraduate/content/cover.tex b/swarm/undergraduate/content/cover.tex deleted file mode 100644 index cd3cd410..00000000 --- a/swarm/undergraduate/content/cover.tex +++ /dev/null @@ -1,20 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -% 文章信息 -\titlecn{基于AirSim的无人机集群仿真软件性能优化} -\titleen{Performance Optimization of UAV Swarm Simulation Software Based on AirSim} - -\author{刘文杰} -\subsupervisor{} -\studentid{2209040027} -\priormajor{机器人工程} -\myclass{机器人工程2201} -\supervisor{王海东讲师} -\department{智能机器人学院} -\thesisdate{year=2026, month=5} - -% 以下字段对本科生模板通常不显示,保留以兼容类文件 -\clcnumber{TP391} -\schoolcode{10554} -\udc{004.9} -\academiccategory{学术学位} diff --git a/swarm/undergraduate/content/declarationzh.tex b/swarm/undergraduate/content/declarationzh.tex deleted file mode 100644 index 7519bd4f..00000000 --- a/swarm/undergraduate/content/declarationzh.tex +++ /dev/null @@ -1,13 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\begin{declarationzh} - -本人郑重声明:所呈交的本科毕业设计《基于AirSim的无人机集群仿真软件性能优化》是本人在指导老师的指导下,独立进行研究工作所取得的成果,成果不存在知识产权争议,除文中已经注明引用的内容外,本设计不含任何其他个人或集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体均已在文中以明确方式标明。本人完全意识到本声明的法律结果由本人承担。 - -\vspace{30pt} -\begin{flushright} -作者签名:\includegraphics[width=2.7cm]{images/image2.jpeg}\qquad\par -日\qquad 期:2026年5月25日\qquad -\end{flushright} - -\end{declarationzh} diff --git a/swarm/undergraduate/content/main.tex b/swarm/undergraduate/content/main.tex deleted file mode 100644 index 6a44df7b..00000000 --- a/swarm/undergraduate/content/main.tex +++ /dev/null @@ -1,101 +0,0 @@ -%!TEX program = xelatex -% !BIB program = biber - -\documentclass[AutoFakeBold]{hutbthesis} - -\usepackage{calc} -\usepackage{float} -\usepackage{longtable} -\usepackage{booktabs} -\usepackage{array} -\usepackage{tabularx} -\usepackage{caption} -\usepackage{xcolor} -\usepackage{listings} -\usepackage{chngcntr} -\usepackage{xeCJKfntef} -\usepackage{amsmath} -\providecommand{\tightlist}{% - \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} -\IfFontExistsTF{Noto Serif CJK SC}{% - \setCJKmainfont{Noto Serif CJK SC}[BoldFont=Noto Serif CJK SC Bold] - \setCJKsansfont{Noto Sans CJK SC}[BoldFont=Noto Sans CJK SC Bold] -}{} -\graphicspath{{images/}} - -% 图、表、公式统一采用章节编号,并保证图题/表题与对象绑定。 -\counterwithin{figure}{chapter} -\counterwithin{table}{chapter} -\numberwithin{equation}{chapter} -\renewcommand{\thefigure}{\thechapter-\arabic{figure}} -\renewcommand{\thetable}{\thechapter-\arabic{table}} -\renewcommand{\theequation}{\thechapter-\arabic{equation}} -\captionsetup[figure]{name=图,labelsep=space,font=small,skip=6pt} -\captionsetup[table]{name=表,labelsep=space,font=small,skip=6pt} - -% 代码段模板样式:用于 BAT、命令行、配置片段等代码清单。 -\definecolor{codebg}{RGB}{248,248,248} -\definecolor{codekw}{RGB}{0,92,175} -\definecolor{codestr}{RGB}{163,21,21} -\definecolor{codecom}{RGB}{0,128,0} -\renewcommand{\lstlistingname}{代码} -\lstdefinestyle{hutbcode}{% - backgroundcolor=\color{codebg}, - basicstyle=\ttfamily\small, - keywordstyle=\color{codekw}\bfseries, - stringstyle=\color{codestr}, - commentstyle=\color{codecom}\itshape, - numbers=left, - numberstyle=\scriptsize\color{gray}, - stepnumber=1, - numbersep=8pt, - frame=single, - rulecolor=\color{gray!50}, - breaklines=true, - breakatwhitespace=false, - columns=fullflexible, - keepspaces=true, - showstringspaces=false, - tabsize=2, - captionpos=b -} -\lstset{style=hutbcode} -% 本文参考文献采用手工编号文件 content/references.tex,不调用 biber。 - -\include{content/cover} - -\begin{document} - -\maketitle - -% 封面后的声明、授权书、摘要页不显示页码;仅目录页使用罗马数字页码。 -\clearpage -\pagestyle{empty} -\pagenumbering{gobble} -\input{content/declarationzh} -\clearpage -\input{content/authorization} -\clearpage -\input{content/abstractzh} -\clearpage -\input{content/abstracten} - -% 目录单独使用罗马数字页码。 -\frontmatter -\setcounter{page}{1} -\tableofcontents - -\mainmatter -\include{content/chapter1} -\include{content/chapter2} -\include{content/chapter3} -\include{content/chapter4} -\include{content/chapter5} -\include{content/chapter6} - -\include{content/references} -\include{content/symbols} -\include{content/appendix} -\include{content/acknowledgements} - -\end{document} diff --git a/swarm/undergraduate/content/references.bib b/swarm/undergraduate/content/references.bib deleted file mode 100644 index 84287407..00000000 --- a/swarm/undergraduate/content/references.bib +++ /dev/null @@ -1 +0,0 @@ -% 本工程采用手工参考文献 content/references.tex diff --git a/swarm/undergraduate/content/references.tex b/swarm/undergraduate/content/references.tex deleted file mode 100644 index efc182ec..00000000 --- a/swarm/undergraduate/content/references.tex +++ /dev/null @@ -1,46 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\clearpage -\chapter*{参考文献} -\addcontentsline{toc}{chapter}{参考文献} -\begingroup -\small -\sloppy -\emergencystretch=4em - -\begin{enumerate} -\item 伍智锋。分布式飞行仿真技术研究 {[}D{]}. 西安:西北工业大学,2003. -\item 冯聪。无人机集群编队交互式仿真平台的设计与实现 {[}D{]}. 天津:天津大学,2018. -\item 周游。基于 AirSim 仿真平台的无人机三维避障算法研究 {[}D{]}. 成都:电子科技大学,2020. -\item 朱博顺,王成钢,井田。基于 AirSim 平台的无人机蜂群侦察搜索仿真与分析 {[}J{]}. 计算机应用,2021, 41 (S1): 196-201. -\item 郭首江。一种多层无人机集群网络接入控制协议设计及性能优化研究 {[}D{]}. 北京:北京交通大学,2021. -\item 龙腾飞。基于 Airsim 的四旋翼无人机虚实交互平台技术研究 {[}D{]}. 西安:西安工业大学,2023. -\item 冯一飞。基于行为法的分布式无人机集群控制方法与仿真研究 {[}D{]}. 长春:吉林大学,2023. -\item 方璨琦。基于深度强化学习的 AirSim 仿真环境下无人机路径规划研究 {[}D{]}. 广州:华南理工大学,2023. -\item 郑筱宇,胡敏,赵辉宏。基于 AirSim 实现对无人机的位置跟踪及编队控制 {[}J{]}. 齐鲁工业大学学报,2025, 39 (5): 70-75. -\item 章铭泽。无人机集群组网下的通信仿真研究 {[}D{]}. 北京:中国电子科技集团公司电子科学研究院,2025. -\item 方仪豪,邹丹平。多旋翼无人机仿真平台综述 {[}J/OL{]}. 计算机工程,2025: 1-10. https:\allowbreak{}/\allowbreak{}/\allowbreak{}kns.\allowbreak{}cnki.\allowbreak{}net/\allowbreak{}kcms2/\allowbreak{}article/\allowbreak{}abstract?v=3, 2025-01-10. -\item Microsoft Corporation. AirSim: Open Source Simulator for Drones and Autonomous Vehicles{[}EB/OL{]}. https:\allowbreak{}/\allowbreak{}/\allowbreak{}github.\allowbreak{}com/\allowbreak{}microsoft/\allowbreak{}AirSim, 2017-2026. -\item 刘祖均,何明,马子玉。基于分布式一致性的无人机编队控制方法 {[}J{]}. 计 算机工程与应用,2020, 56 (23): 146-152. -\item 李莉,李辉,张雪梅。改进几何控制四旋翼无人机集群轨迹跟踪 {[}J{]}. 兵 器装备工程学报,2025, 46 (3): 232-241. -\item 肖坤,谭帅,王广宇. XTDrone: 可定制化多旋翼无人机仿真平台 {[}C{]}//2020 4th International Conference on Robotics and Automation Sciences. 巴黎: IEEE, 2020: 55-61. -\item 杨浩,孟文,朱书齐。面向无人机集群的数字孪生仿真平台设计 {[}J{]}. 系 统仿真学报,2024, 36 (4): 825-833. -\item 陈勇,林强。多线程调度与线程池在实时仿真系统中的优化方法 {[}J{]}. 计算机工程与设计,2023, 44 (7): 2001-2008. -\item 石晨,张成,刘畅. IMFlySim: 面向无人机集群的高保真仿真平台 {[}C{]}//2021 5th Chinese Conference on Swarm Intelligence and Cooperative Control. 新加坡: Springer, 2023: 209-220. -\item 陈思远。基于 Unity 的无人机集群仿真系统性能瓶颈分析与优化 {[}D{]}. 南京:南京航空航天大学,2022. -\item 吴昊天。实时仿真系统中线程池与 CPU 亲和性调度技术研究 {[}D{]}. 杭州:浙江大学,2023. -\item 林伟,杨玉龙,赵伟。无人机仿真内核态开销过高问题分析与解决 {[}J{]}. 计 算机工程与设计,2022, 43 (8): 2278-2285. -\item 韩冰,曹鹏,孙健。多智能体仿真系统中忙等机制改进方法 {[}J{]}. 控制与决策,2023, 38 (4): 987-994. -\item 高天,徐磊,马晓东。多线程同步机制在无人机实时仿真中的应用比较 {[}J{]}. 电光与控制,2022, 29 (7): 66-71. -\item 董晓阳。面向大规模集群的无人机仿真系统架构设计 {[}D{]}. 哈尔滨:哈尔滨工业大学,2024. -\item 周明宇。基于线程模型优化的无人机仿真系统设计与实现 {[}D{]}. 成都:电子科技大学,2023. -\item 刘畅,陈明,李华。高精度定时器在实时仿真系统中的设计与实现 {[}J{]}. 计算机应用,2022, 42 (S1): 156-161. -\item 朱明亮,邓磊,陈丽。无人机集群仿真中 sleep 与 yield 等待机制性能对比 {[}J{]}. 计算机工程与应用,2024, 60 (3): 167-174. -\item 孙浩,林航,吴昊。基于集中式调度器的多智能体仿真优化方法 {[}J{]}. 系统仿真学报,2023, 35 (9): 1987-1996. -\item 胡俊杰,彭浩,罗强。多线程调度风暴问题分析及工程优化方案 {[}J{]}. 计算机工程,2022, 48 (7): 198-205. -\item 姜浩。基于 AirSim 的多无人机仿真系统性能改进 {[}D{]}. 西安:西北工业大学,2023. -\item 陈涛,杨明,刘军。无人系统仿真中用户态与内核态切换开销研究 {[}J{]}. 计算机应用研究,2023, 40 (4): 1102-1106. -\item 邓宇,陈浩,刘瑞。大规模仿真场景下 GPU 利用率低下问题分析与优化 {[}J{]}. 计算机辅助设计与图形学学报,2022, 34 (11): 1701-1710. -\item 蒋伟,黄涛,李娟。实时仿真系统中内存泄漏与稳定性优化 {[}J{]}. 计算机 工程与设计,2023, 44 (5): 1356-1363. -\end{enumerate} -\endgroup diff --git a/swarm/undergraduate/content/symbols.tex b/swarm/undergraduate/content/symbols.tex deleted file mode 100644 index a9f8c4eb..00000000 --- a/swarm/undergraduate/content/symbols.tex +++ /dev/null @@ -1,42 +0,0 @@ -%!TEX root = ../hutbthesis_main.tex - -\clearpage -\chapter*{符号说明} -\addcontentsline{toc}{chapter}{符号说明} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.2716}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.1980}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.0901}} - >{\raggedright\arraybackslash}p{(\columnwidth - 6\tabcolsep) * \real{0.4403}}@{}} -\caption{符号说明表}\\ -\toprule\noalign{} -\begin{minipage}[b]{\linewidth}\raggedright -\textbf{符号} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{含义} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{单位} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{备注} -\end{minipage} \\ -\midrule\noalign{} -\endhead -\bottomrule\noalign{} -\endlastfoot -FPS & 仿真平均帧率 & 帧/秒 & 实时仿真核心指标,$\geq$30为合格 \\ -D & 指令端到端时延 & ms & 控制响应实时性指标,$\leq$50为合格 \\ -K & CPU内核态占比 & \% & 内核开销=$\frac{\text{内核时间}}{\text{总CPU时间}}\times100\%$ \\ -C & 上下文切换频率 & 次/秒 & 线程调度效率指标,越低越好 \\ -E & 定时周期误差 & ms & 仿真时序精度指标,$\leq$5为合格 \\ -S & 系统运行稳定性 & --- & 1小时无崩溃、无泄漏、无失步 \\ -N & 仿真无人机数量 & 架 & 集群规模测试变量 \\ -$T_{cycle}$ & -仿真主循环周期 & ms & 固定周期控制仿真更新频率 \\ -$t_{wait}$ & -线程等待时长 & ms & 不同等待模型的等待参数 \\ -$\eta_{cpu}$ & CPU -资源利用率 & \% & 用户态有效计算占总占用比例 \\ -$\eta_{gain}$ & -性能提升倍率 & --- & 优化后指标/优化前指标 \\ -\end{longtable} diff --git a/swarm/undergraduate/download b/swarm/undergraduate/download deleted file mode 100644 index c89dc294..00000000 --- a/swarm/undergraduate/download +++ /dev/null @@ -1,246 +0,0 @@ -## Core latex/pdflatex auxiliary files: -*.aux -*.lof -*.log -*.lot -*.fls -*.out -*.toc -*.fmt -*.fot -*.cb -*.cb2 -.*.lb -clean.bat -elegant*-cn.pdf -elegant*-en.pdf -*.dates - -## Intermediate documents: -*.dvi -*.xdv -*-converted-to.* -# these rules might exclude image files for figures etc. -# *.ps -# *.eps -# *.pdf - -## Generated if empty string is given at "Please type another file name for output:" -.pdf - -## Bibliography auxiliary files (bibtex/biblatex/biber): -*.bbl -*.bcf -*.blg -*-blx.aux -*-blx.bib -*.run.xml - -## Build tool auxiliary files: -*.fdb_latexmk -*.synctex -*.synctex(busy) -*.synctex.gz -*.synctex.gz(busy) -*.pdfsync - -## Auxiliary and intermediate files from other packages: -# algorithms -*.alg -*.loa - -# achemso -acs-*.bib - -# amsthm -*.thm - -# beamer -*.nav -*.pre -*.snm -*.vrb - -# changes -*.soc - -# cprotect -*.cpt - -# elsarticle (documentclass of Elsevier journals) -*.spl - -# endnotes -*.ent - -# fixme -*.lox - -# feynmf/feynmp -*.mf -*.mp -*.t[1-9] -*.t[1-9][0-9] -*.tfm - -#(r)(e)ledmac/(r)(e)ledpar -*.end -*.?end -*.[1-9] -*.[1-9][0-9] -*.[1-9][0-9][0-9] -*.[1-9]R -*.[1-9][0-9]R -*.[1-9][0-9][0-9]R -*.eledsec[1-9] -*.eledsec[1-9]R -*.eledsec[1-9][0-9] -*.eledsec[1-9][0-9]R -*.eledsec[1-9][0-9][0-9] -*.eledsec[1-9][0-9][0-9]R - -# glossaries -*.acn -*.acr -*.glg -*.glo -*.gls -*.glsdefs - -# gnuplottex -*-gnuplottex-* - -# gregoriotex -*.gaux -*.gtex - -# htlatex -*.4ct -*.4tc -*.idv -*.lg -*.trc -*.xref - -# hyperref -*.brf - -# knitr -*-concordance.tex -# TODO Comment the next line if you want to keep your tikz graphics files -*.tikz -*-tikzDictionary - -# listings -*.lol - -# makeidx -*.idx -*.ilg -*.ind -*.ist - -# minitoc -*.maf -*.mlf -*.mlt -*.mtc[0-9]* -*.slf[0-9]* -*.slt[0-9]* -*.stc[0-9]* - -# minted -_minted* -*.pyg - -# morewrites -*.mw - -# nomencl -*.nlg -*.nlo -*.nls - -# pax -*.pax - -# pdfpcnotes -*.pdfpc - -# sagetex -*.sagetex.sage -*.sagetex.py -*.sagetex.scmd - -# scrwfile -*.wrt - -# sympy -*.sout -*.sympy -sympy-plots-for-*.tex/ - -# pdfcomment -*.upa -*.upb - -# pythontex -*.pytxcode -pythontex-files-*/ - -# thmtools -*.loe - -# TikZ & PGF -*.dpth -*.md5 -*.auxlock - -# todonotes -*.tdo - -# easy-todo -*.lod - -# xmpincl -*.xmpi - -# xindy -*.xdy - -# xypic precompiled matrices -*.xyc - -# endfloat -*.ttt -*.fff - -# Latexian -TSWLatexianTemp* - -## Editors: -# WinEdt -*.bak -*.sav - -# Texpad -.texpadtmp - -# Kile -*.backup - -# KBibTeX -*~[0-9]* - -# auto folder when using emacs and auctex -./auto/* -*.el - -# expex forward references with \gathertags -*-tags.tex - -# standalone packages -*.sta - -# generated if using elsarticle.cls -*.spl diff --git a/swarm/undergraduate/figure_generation.md b/swarm/undergraduate/figure_generation.md deleted file mode 100644 index e5302437..00000000 --- a/swarm/undergraduate/figure_generation.md +++ /dev/null @@ -1,25 +0,0 @@ -# figure_generation.md - -本文件说明论文图像来源和可编辑文件位置。所有图片均已从 Word 原文中提取并保存在 `images/` 文件夹,可直接替换、重新导出或在 LaTeX 中调整尺寸。 - -| 图号 | 文件 | 说明 | -|---|---|---| -| 图1 | image4.png | 无人机集群典型应用场景图 | -| 图2 | image5.png | 无人机集群仿真平台分类框架图 | -| 图3 | image6.png | 无人机渲染加载模块验证情况图 | -| 图4 | image7.png | 无人机动态模块加载模块验证情况图 | -| 图5 | image8.png | AirSim平台整体架构图 | -| 图6 | image9.png | 线程状态转换示意图 | -| 图7 | image10.png | 优化方案总体设计架构图 | -| 图8 | image11.png | 单线程分发器模型工作原理图 | -| 图9 | image12.png | 多无人机集群仿真场景示意图 | -| 图10 | image13.jpeg | 无人机3D场景全景图 | -| 图11 | image14.png | 不同无人机数量帧率变化曲线图 | -| 图12 | image15.png | 仿真时延随集群规模变化趋势图 | -| 图13 | image16.png | CPU内核态/用户态占比分布图 | -| 图14 | image17.png | 无人机3D仿真运行效果图 | -| 图15 | image18.png | 无人机多维旋转可行性效果图 | -| 图16 | image19.png | 优化前后帧率提升对比图 | -| 图17 | image20.png, image21.png | 30架优化前后CPU内核/用户态占比饼图 | - -建议:若教师要求“可编辑原图”,流程图/架构图建议使用 draw.io、Visio 或 PPT 重新绘制后导出 PDF/SVG,同时保留源文件;实测截图与仿真运行图已作为原始图片文件保存在 images 目录中。 diff --git a/swarm/undergraduate/figures/image10.png b/swarm/undergraduate/figures/image10.png deleted file mode 100644 index 6f3c9c63..00000000 Binary files a/swarm/undergraduate/figures/image10.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image11.png b/swarm/undergraduate/figures/image11.png deleted file mode 100644 index 1d8047ff..00000000 Binary files a/swarm/undergraduate/figures/image11.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image12.png b/swarm/undergraduate/figures/image12.png deleted file mode 100644 index f30913bc..00000000 Binary files a/swarm/undergraduate/figures/image12.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image13.jpeg b/swarm/undergraduate/figures/image13.jpeg deleted file mode 100644 index d5d54be9..00000000 Binary files a/swarm/undergraduate/figures/image13.jpeg and /dev/null differ diff --git a/swarm/undergraduate/figures/image14.png b/swarm/undergraduate/figures/image14.png deleted file mode 100644 index 074d5ff7..00000000 Binary files a/swarm/undergraduate/figures/image14.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image15.png b/swarm/undergraduate/figures/image15.png deleted file mode 100644 index 28bae705..00000000 Binary files a/swarm/undergraduate/figures/image15.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image16.png b/swarm/undergraduate/figures/image16.png deleted file mode 100644 index e82fcc69..00000000 Binary files a/swarm/undergraduate/figures/image16.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image17.png b/swarm/undergraduate/figures/image17.png deleted file mode 100644 index f50c84c7..00000000 Binary files a/swarm/undergraduate/figures/image17.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image18.png b/swarm/undergraduate/figures/image18.png deleted file mode 100644 index 1be7d494..00000000 Binary files a/swarm/undergraduate/figures/image18.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image19.png b/swarm/undergraduate/figures/image19.png deleted file mode 100644 index bde0be02..00000000 Binary files a/swarm/undergraduate/figures/image19.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image2.jpeg b/swarm/undergraduate/figures/image2.jpeg deleted file mode 100644 index 63b95e05..00000000 Binary files a/swarm/undergraduate/figures/image2.jpeg and /dev/null differ diff --git a/swarm/undergraduate/figures/image20.png b/swarm/undergraduate/figures/image20.png deleted file mode 100644 index acfa4955..00000000 Binary files a/swarm/undergraduate/figures/image20.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image21.png b/swarm/undergraduate/figures/image21.png deleted file mode 100644 index c38eb4cb..00000000 Binary files a/swarm/undergraduate/figures/image21.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image3.png b/swarm/undergraduate/figures/image3.png deleted file mode 100644 index 179ee267..00000000 Binary files a/swarm/undergraduate/figures/image3.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image4.png b/swarm/undergraduate/figures/image4.png deleted file mode 100644 index f8c6c23d..00000000 Binary files a/swarm/undergraduate/figures/image4.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image5.png b/swarm/undergraduate/figures/image5.png deleted file mode 100644 index 189710f6..00000000 Binary files a/swarm/undergraduate/figures/image5.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image6.png b/swarm/undergraduate/figures/image6.png deleted file mode 100644 index 1b174669..00000000 Binary files a/swarm/undergraduate/figures/image6.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image7.png b/swarm/undergraduate/figures/image7.png deleted file mode 100644 index 590bddc9..00000000 Binary files a/swarm/undergraduate/figures/image7.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image8.png b/swarm/undergraduate/figures/image8.png deleted file mode 100644 index 6d3f68c6..00000000 Binary files a/swarm/undergraduate/figures/image8.png and /dev/null differ diff --git a/swarm/undergraduate/figures/image9.png b/swarm/undergraduate/figures/image9.png deleted file mode 100644 index 61bd534b..00000000 Binary files a/swarm/undergraduate/figures/image9.png and /dev/null differ diff --git a/swarm/undergraduate/hutb_logo.png b/swarm/undergraduate/hutb_logo.png deleted file mode 100644 index 6f3c9c63..00000000 Binary files a/swarm/undergraduate/hutb_logo.png and /dev/null differ diff --git a/swarm/undergraduate/hutb_logo_maoti.png b/swarm/undergraduate/hutb_logo_maoti.png deleted file mode 100644 index 6f3c9c63..00000000 Binary files a/swarm/undergraduate/hutb_logo_maoti.png and /dev/null differ diff --git a/swarm/undergraduate/hutbthesis.cls b/swarm/undergraduate/hutbthesis.cls deleted file mode 100644 index 03e5ee52..00000000 --- a/swarm/undergraduate/hutbthesis.cls +++ /dev/null @@ -1,1228 +0,0 @@ -% -% 本模版根据湖南工商大学本科生学位论文撰写规范创建 -% 论文内容一般应由十一个主要部分组成,依次为: -% 1.封面 -% 2.中文摘要; -% 3.英文摘要; -% 4.目录; -% 5.符号说明(必要时); -% 6.论文正文; -% 7.参考文献; -% 8.致谢。 -% -% -% 重构 -% 参考CSU Thesis,以及SJTU Thesis和WHU Thesis Latex模板进行重构。 - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 声明部分(Identification) -% -% 指定模板使用的 Latex 版本,标识输出模板名 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\NeedsTeXFormat{LaTeX2e} -\ProvidesClass{hutbthesis}[v0.1, edited by tp2008] - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 预先定义(Preliminary declarations) -% -% 定义kv对,在模板文件中使用的指令并引入依赖的包 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -% 定义一些命令用于写文档 -% /cs 在ltxdoc 包中也提供,剩下是自定义的 -% 借鉴自thuthesis和ustcthesis模板 -\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}} -\DeclareRobustCommand\file{\nolinkurl} -\DeclareRobustCommand\env{\textsf} -\DeclareRobustCommand\pkg{\textsf} -\DeclareRobustCommand\cls{\textsf} - -% 模板类型选取 -\newif\ifhutb@type@bachelor -\hutb@type@bachelortrue -\newif\ifhutb@type@master -\hutb@type@masterfalse -\newif\ifhutb@type@doctor -\hutb@type@doctorfalse -\newif\ifhutb@type@course -\hutb@type@coursefalse -\newif\ifhutb@type@print -\hutb@type@printfalse -\newif\ifhutb@type@graduate -\hutb@type@graduatefalse -\ifhutb@type@master - \hutb@type@graduatetrue -\fi -\ifhutb@type@doctor - \hutb@type@graduatetrue -\fi - -% 定义致谢环境,盲审下隐藏致谢 -\newif\ifhutb@review -\hutb@reviewfalse - -% 定义模板选项 -\DeclareOption{doctor}{\hutb@type@doctortrue} -\DeclareOption{master}{\hutb@type@mastertrue} -\DeclareOption{bachelor}{\hutb@type@bachelortrue} -\DeclareOption{course}{\hutb@type@coursetrue} -%\DeclareOption{forprint}{\hutb@type@printtrue} -% 使用 \XeTeX{} 引擎时,\pkg{fontspec} 宏包会被 \pkg{xeCJK} 自动调用。传递给 -% \pkg{fontspec} 宏包 \opt{no-math} 选项,避免部分数学符号字体自动调整为 CMR。 -% 并使用 \opt{quiet} 忽略警告。 -% \begin{macrocode} -% \PassOptionsToPackage{no-math,quiet}{fontspec} -\PassOptionsToPackage{no-math}{fontspec} - -\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} -\ProcessOptions\relax - - -% 读取基类 -% \LoadClass[a4paper,12pt]{article} -\LoadClass[UTF8,openany,a4paper,oneside,zihao=-4]{ctexbook} -% 注意openany和oneside参数,默认是无空白页不区分双面印。 - -% 加载宏包 -% 引擎执行判断宏包 -\RequirePackage{ifxetex} -% 加载xparse宏包 -\RequirePackage{xparse} -% 报错与警告 -\NewDocumentCommand{\hutb@error}{ m o }{ - \ClassError{hutbthesis_error}{#1}{#2} -} -\NewDocumentCommand{\hutb@warning}{m o }{ - \ClassWarning{hutbthesis_warning}{#1}{#2} -} - -\RequireXeTeX -\ifxetex - % Pass -\else - \hutb@error{Please use xelatex driver instead of pdflatex.} -\fi - -% 支持中文的 ctex 宏包 -\RequirePackage{ctex} -% 页面布局 -\RequirePackage{geometry} -% 使用 \pkg{amsmath} 处理数学公式 -\RequirePackage{amsmath} -% 下面的数学宏包和unicode-math 冲突 -% \RequirePackage{amsfonts} -% \RequirePackage{amssymb} -% \RequirePackage{bm} -% 使用 \pkg{unicode-math} 处理数学字体 -\RequirePackage{unicode-math} -% 算法排版宏包 -\RequirePackage[chapter]{algorithm} -\RequirePackage{algorithmic} -\floatname{algorithm}{算法} - -% 自定义关键词 -\RequirePackage{pgfkeys} -% 设置目录 -\RequirePackage{titletoc} -% 设置字体 -\RequirePackage{fontenc} -% 设置颜色 -\RequirePackage{xcolor} -% 下划线换行 -\RequirePackage{ulem} -% 设置页眉和页脚 -\RequirePackage{fancyhdr} -% 代码高亮 -% 注:该包依赖python环境Pygments语法高亮显示工具包 -% 并且需要 -shell-escape参数 -% TODO: 日后需要修改为可配置 - -% 超链接 hyperref 的设置 -% 提供书签与链接 -\RequirePackage{hyperref} -% 插入图片 -\RequirePackage{graphicx} -% 表格 -\RequirePackage{array} -% 长表格 -\RequirePackage{longtable} -% booktabs 提供了\toprule 等命令. -\RequirePackage{booktabs} -% multirow 支持在表格中跨行 -\RequirePackage{multirow} -% 调整间隔, 让表格更好看些 -\RequirePackage{bigstrut} -%在跨行表格中输入定界符 -\RequirePackage{bigdelim} -% 保护脆弱命令 -\RequirePackage{cprotect} -% 设置代码高亮 -% \RequirePackage{minted} -% 设置代码环境 -\RequirePackage{listings} -\lstset{ - breaklines, - columns=fixed, - numbers=none, % 在左侧显示行号 - numberstyle=\tiny\color{gray}, % 设定行号格式 - frame=single, % 不显示背景边框 - rulecolor=\color{black}, % if not set, the frame-color may be changed on line-breaks within not-black text (e.g. commens (green here)) -% backgroundcolor=\color[RGB]{245,245,244}, % 设定背景颜色 - keywordstyle=\color[RGB]{40,40,255}, % 设定关键字颜色 - numberstyle=\footnotesize\color{darkgray}, - commentstyle=\it\color[RGB]{0,96,96}, % 设置代码注释的格式 - stringstyle=\rmfamily\slshape\color[RGB]{128,0,0}, % 设置字符串格式 - showstringspaces=false, % 不显示字符串中的空格 - language=c++, % 设置语言 - aboveskip=20pt -} - - -% jing: ccaption宏包不能出现在 caption 宏包之后 -% 设置浮动体的标题 -\RequirePackage[justification=centering]{caption} -\RequirePackage[justification=centering]{subcaption} -% 定制列表环境 -\RequirePackage{enumitem} -% 提供\AtBeginEnvironment以方便全局调整一些结构的设置 -\RequirePackage{etoolbox} -% 确定宏定义的位置 -\RequirePackage{filehook} -% 枚举 -\RequirePackage{enumitem} -% 末尾页 -\RequirePackage{lastpage} -% -% \RequirePackage{hypdoc} - -% 参考文献格式 GB/T7714-2015 -% 来自https://github.com/hushidong/biblatex-gb7714-2015 -\RequirePackage[backend=biber,gbpub=false, style=gb7714-2015]{biblatex} - -\AtEndOfClass{ -% 根据模板类型加载不同配置 - -%\input{undergraduate.cls} -%\ifhutb@type@graduate -% \input{graduate.cls} -%\else -% \input{undergraduate.cls} -% % \input{test.cls} -%\fi -} - - -% 字体配置 -\let\sjtu@font@family@xits\@empty -\newcommand\sjtu@font@set@xits@names{% - \ifx\sjtu@font@family@xits\@empty - \IfFontExistsTF{XITSMath-Regular.otf}{% - \gdef\sjtu@font@family@xits{XITS}% - \gdef\sjtu@font@style@xits@rm{Regular}% - \gdef\sjtu@font@style@xits@bf{Bold}% - \gdef\sjtu@font@style@xits@it{Italic}% - \gdef\sjtu@font@style@xits@bfit{BoldItalic}% - \gdef\sjtu@font@name@xits@math@rm{XITSMath-Regular}% - \gdef\sjtu@font@name@xits@math@bf{XITSMath-Bold}% - }{% - \gdef\sjtu@font@family@xits{xits}% - \gdef\sjtu@font@style@xits@rm{regular}% - \gdef\sjtu@font@style@xits@bf{bold}% - \gdef\sjtu@font@style@xits@it{italic}% - \gdef\sjtu@font@style@xits@bfit{bolditalic}% - \gdef\sjtu@font@name@xits@math@rm{xits-math}% - \gdef\sjtu@font@name@xits@math@bf{xits-mathbold}% - }% - \fi -} -\let\sjtu@font@family@libertinus\@empty -\newcommand\sjtu@font@set@libertinus@names{% - \ifx\sjtu@font@family@libertinus\@empty - \IfFontExistsTF{LibertinusSerif-Regular.otf}{% - \gdef\sjtu@font@family@libertinus@serif{LibertinusSerif}% - \gdef\sjtu@font@family@libertinus@sans{LibertinusSans}% - \gdef\sjtu@font@name@libertinus@math{LibertinusMath-Regular}% - \gdef\sjtu@font@style@libertinus@rm{Regular}% - \gdef\sjtu@font@style@libertinus@bf{Bold}% - \gdef\sjtu@font@style@libertinus@it{Italic}% - \gdef\sjtu@font@style@libertinus@bfit{BoldItalic}% - }{% - \gdef\sjtu@font@family@libertinus@serif{libertinusserif}% - \gdef\sjtu@font@family@libertinus@sans{libertinussans}% - \gdef\sjtu@font@name@libertinus@math{libertinusmath-regular}% - \gdef\sjtu@font@style@libertinus@rm{regular}% - \gdef\sjtu@font@style@libertinus@bf{bold}% - \gdef\sjtu@font@style@libertinus@it{italic}% - \gdef\sjtu@font@style@libertinus@bfit{bolditalic}% - }% - \fi -} -\newcommand\sjtu@set@font@xits{% - \sjtu@font@set@xits@names - \setmainfont{\sjtu@font@family@xits}[ - Extension = .otf, - UprightFont = *-\sjtu@font@style@xits@rm, - BoldFont = *-\sjtu@font@style@xits@bf, - ItalicFont = *-\sjtu@font@style@xits@it, - BoldItalicFont = *-\sjtu@font@style@xits@bfit, - ] -} -\newcommand\sjtu@set@font@times{% - \setmainfont{Times New Roman}[Ligatures = Rare] - \setsansfont{Arial} - \setmonofont{Courier New}[Scale = MatchLowercase] -} -\newcommand\sjtu@set@font@stix{% - \setmainfont{STIX2Text}[ - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Italic, - BoldItalicFont = *-BoldItalic, - ] -} -\newcommand\sjtu@set@font@step{% - \setmainfont{STEP}[ - Extension = .otf, - UprightFont = *-Regular, - BoldFont = *-Bold, - ItalicFont = *-Italic, - BoldItalicFont = *-BoldItalic, - ] -} -\newcommand\sjtu@set@font@source@sans@mono{% - \setsansfont{SourceSansPro}[ - Extension = .otf, - UprightFont = *-Regular , - ItalicFont = *-RegularIt , - BoldFont = *-Bold , - BoldItalicFont = *-BoldIt, - ] - \setmonofont{SourceCodePro}[ - Extension = .otf, - UprightFont = *-Regular , - ItalicFont = *-RegularIt , - BoldFont = *-Bold , - BoldItalicFont = *-BoldIt, - Scale = MatchLowercase, - ] -} -\newcommand\sjtu@set@font@termes{% - \setmainfont{texgyretermes}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic, - ]% -} -\newcommand\sjtu@set@font@pagella{% - \setmainfont{texgyrepagella}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic, - ]% -} -\newcommand\sjtu@set@font@texgyre@sans@mono{% - \setsansfont{texgyreheros}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic, - ]% - \setmonofont{texgyrecursor}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic, - ]% -} -\newcommand\sjtu@set@font@cambria{% - \setmainfont{Cambria} - \setsansfont{Calibri} - \setmonofont{Consolas}[Scale = MatchLowercase] -} -\newcommand\sjtu@set@font@libertinus{% - \sjtu@font@set@libertinus@names - \setmainfont{\sjtu@font@family@libertinus@serif}[ - Extension = .otf, - UprightFont = *-\sjtu@font@style@libertinus@rm, - BoldFont = *-\sjtu@font@style@libertinus@bf, - ItalicFont = *-\sjtu@font@style@libertinus@it, - BoldItalicFont = *-\sjtu@font@style@libertinus@bfit, - ]% - \setsansfont{\sjtu@font@family@libertinus@sans}[ - Extension = .otf, - UprightFont = *-\sjtu@font@style@libertinus@rm, - BoldFont = *-\sjtu@font@style@libertinus@bf, - ItalicFont = *-\sjtu@font@style@libertinus@it, - ]% - \setmonofont{lmmonolt10}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-oblique, - BoldItalicFont = *-boldoblique, - ]% -} -\newcommand\sjtu@set@font@lm{% - \setmainfont{lmroman10}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-italic, - BoldItalicFont = *-bolditalic, - ]% - \setsansfont{lmsans10}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-oblique, - BoldItalicFont = *-boldoblique, - ]% - \setmonofont{lmmonolt10}[ - Extension = .otf, - UprightFont = *-regular, - BoldFont = *-bold, - ItalicFont = *-oblique, - BoldItalicFont = *-boldoblique, - ]% -} -% 使用 \pkg{unicode-math} 配置数学字体。 -\unimathsetup{ - math-style = ISO, - bold-style = ISO, - nabla = upright, - partial = upright, -} -\newcommand\sjtu@set@math@font@xits{% - \sjtu@font@set@xits@names - \setmathfont{\sjtu@font@name@xits@math@rm}[ - Extension = .otf, - BoldFont = \sjtu@font@name@xits@math@bf, - StylisticSet = 8, - ]% - \setmathfont{\sjtu@font@name@xits@math@rm}[ - Extension = .otf, - BoldFont = \sjtu@font@name@xits@math@bf, - StylisticSet = 1, - range = {cal,bfcal}, - ]% -} -\newcommand\sjtu@set@math@font@stix{% - \setmathfont{STIX2Math}[ - Extension = .otf, - StylisticSet = 8, - ]% - \setmathfont{STIX2Math}[ - Extension = .otf, - StylisticSet = 1, - range = {cal,bfcal}, - ]% -} -\newcommand\sjtu@set@math@font@step{% - \setmathfont{STEPMath-Regular}[ - Extension = .otf, - BoldFont = STEPMath-Bold, - StylisticSet = 8, - ]% - \setmathfont{STEPMath-Regular}[ - Extension = .otf, - BoldFont = STEPMath-Bold, - StylisticSet = 1, - range = {cal,bfcal}, - ]% -} -\newcommand\sjtu@set@math@font@termes{% - \setmathfont{texgyretermes-math.otf} -} -\newcommand\sjtu@set@math@font@pagella{% - \setmathfont{texgyrepagella-math.otf} -} -\newcommand\sjtu@set@math@font@cambria{% - \setmathfont{Cambria Math} -} -\newcommand\sjtu@set@math@font@libertinus{% - \sjtu@font@set@libertinus@names - \setmathfont{\sjtu@font@name@libertinus@math .otf}% -} -\newcommand\sjtu@set@math@font@lm{% - \setmathfont{latinmodern-math.otf}% -} -% \end{macrocode} -% -% 设置西文字体集。 -% \begin{macrocode} -\newcommand\sjtu@load@fontset@xits{% - \sjtu@set@font@xits - \sjtu@set@font@source@sans@mono - \sjtu@set@math@font@xits -} -\newcommand\sjtu@load@fontset@times{% - \sjtu@set@font@times - \sjtu@set@math@font@xits -} -\newcommand\sjtu@load@fontset@stix{% - \sjtu@set@font@stix - \sjtu@set@font@source@sans@mono - \sjtu@set@math@font@stix -} -\newcommand\sjtu@load@fontset@step{% - \sjtu@set@font@step - \sjtu@set@font@source@sans@mono - \sjtu@set@math@font@step -} -\newcommand\sjtu@load@fontset@termes{% - \sjtu@set@font@termes - \sjtu@set@font@texgyre@sans@mono - \sjtu@set@math@font@termes -} -\newcommand\sjtu@load@fontset@pagella{% - \sjtu@set@font@pagella - \sjtu@set@font@texgyre@sans@mono - \sjtu@set@math@font@pagella -} -\newcommand\sjtu@load@fontset@cambria{% - \sjtu@set@font@cambria - \sjtu@set@math@font@cambria -} -\newcommand\sjtu@load@fontset@libertinus{% - \sjtu@set@font@libertinus - \sjtu@set@math@font@libertinus -} -\newcommand\sjtu@load@fontset@lm{% - \sjtu@set@font@lm - \sjtu@set@math@font@lm -} -\newcommand\sjtu@load@fontset@none{\relax} -% \end{macrocode} -% -% 载入西文字体集。 -% \begin{macrocode} -% \newcommand\sjtu@load@fontset{% - % \@nameuse{sjtu@load@fontset@\sjtu@latinfontset} - % } -% latinfontset 是hutb的key 使用 对应的kv接口调用 现在没有实现 -% \sjtu@load@fontset@latinfontset -\IfFontExistsTF{Times New Roman}{\sjtu@load@fontset@times}{\sjtu@load@fontset@lm} -% linux系统请使用 stix -% \sjtu@load@fontset@stix -% \sjtu@option@hook{sjtu}{latinfontset}{% - % \sjtu@load@fontset - % } - - -\newcommand\hutb@pdfbookmark[2]{} -% 定义通用的chapter命令 -\NewDocumentCommand{\hutb@chapter}{s m}{ - \if@openright\cleardoublepage\else\clearpage\fi -% \addcontentsline{toc}{chapter}{#1}% -% \hutb@pdfbookmark{0}{#1} - \IfBooleanTF{#1}{ - \hutb@pdfbookmark{0}{#2} - }{ - \addcontentsline{toc}{chapter}{#2} - } - \chapter*{#2} -} - - -\AtEndOfPackageFile*{hyperref}{ - \hypersetup{ - linktoc = all, - bookmarksdepth = 2, - bookmarksnumbered = true, - bookmarksopen = true, - bookmarksopenlevel = 1, - unicode = true, - psdextra = true, - breaklinks = true, - plainpages = false, - pdfdisplaydoctitle = true, - hidelinks, - } - \newcounter{hutb@bookmark} - \renewcommand\hutb@pdfbookmark[2]{% - \phantomsection - \stepcounter{hutb@bookmark}% - \pdfbookmark[#1]{#2}{hutbchapter.\thehutb@bookmark}% - } -% \renewcommand\sjtu@phantomsection{% -% \phantomsection -% } -% \pdfstringdefDisableCommands{% -% \let\\\@empty -% \let\quad\@empty -% \let\hspace\@gobble -% } -% \@ifpackagelater{hyperref}{2019/04/27}{}{% -% \g@addto@macro\psdmapshortnames{\let\mu\textmu} -% }% -% \AtBeginDocument{% -% \hypersetup{ -% pdftitle = \sjtu@info@title, -% pdfsubject = \sjtu@name@subject, -% pdfkeywords = \sjtu@info@keywords, -% pdfauthor = \sjtu@info@author, -% pdfcreator = {LaTeX with SJTUThesis \version} -% } -% }% -} - - -% 定制titlepage -% 定义命令和定义相应的宏。 -%----------------------------------------------------------------------% -% 预定义全局使用的文字,如姓名、专业等信息,在content/info.tex中定义 -%----------------------------------------------------------------------% -% 以下定义封面相关命令和相应的宏,以titleen为例,\titleen为实际在源码中使用的命令,一旦执行就会因为\gdef\@titleen{#1}使得其产生一个\@titleen的宏,而该宏能够在后续的环境中使用。 -% TODO: 之后版本迁移至公共模板入口hutbthesis.cls 处(放置在引入子模版之后) -\newcommand*{\titlecn}[1]{\gdef\@titlecn{#1}} % 中文标题 -\newcommand*{\titleen}[1]{\gdef\@titleen{#1}} % 英文标题 -\newcommand*{\priormajor}[1]{\gdef\@priormajor{#1}} % 一级学科(学科专业) -\newcommand*{\minormajor}[1]{\gdef\@minormajor{#1}} % 二级学科(学科方向) -\newcommand*{\interestmajor}[1]{\gdef\@interestmajor{#1}} % 研究方向,关键词组 -\newcommand*{\department}[1]{\gdef\@department{#1}} % 二级培养单位 -\newcommand*{\supervisor}[1]{\gdef\@supervisor{#1}} % 导师 -\newcommand*{\myclass}[1]{\gdef\@myclass{#1}} % 班级 -\newcommand*{\subsupervisor}[1]{\gdef\@subsupervisor{#1}} % 副导师 -\newcommand*{\studentid}[1]{\gdef\@studentid{#1}} % 学号 - -\newcommand*{\clcnumber}[1]{\gdef\@clcnumber{#1}} % 中图分类号 Chinese Library Classification -\newcommand*{\schoolcode}[1]{\gdef\@schoolcode{#1}} % 学校代码 -\newcommand*{\udc}[1]{\gdef\@udc{#1}} % UDC -\newcommand*{\academiccategory}[1]{\gdef\@academiccategory{#1}} % 学术类别 - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 页面布局 -% -% 设置页边距以及版芯行间距设置 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 边距要求上2.5cm,下2.5cm,左3cm,右2cm -\geometry{top=2.5cm,bottom=2.5cm,left=3cm,right=2cm} -% 本科生从摘要开始就要有 -% 设置页眉和页脚 % -\pagestyle{fancy} -% 本科学位论文底部样式 -\newcommand{\hutb@thepage@format@zh}[2]{第~{#1}~页,共~{#2}~页} -\newcommand{\hutb@thepage@format@en}[1]{#1} -% 空白页清空页眉页脚 -\patchcmd{\cleardoublepage}{\newpage}{\thispagestyle{empty}\newpage}{}{} -% 对章节首页的特殊page style清除页眉页脚 -\patchcmd{\chapter}{\thispagestyle}{\@gobble}{}{} -% 内芯页眉设置 -\ifhutb@type@print -\fancyhead[L]{\raisebox{-0.18\height}{\includegraphics[width=0.18\textwidth,keepaspectratio]{hutb_logo_maoti.png}}} -\else -\fancyhead[L]{\raisebox{-0.18\height}{\includegraphics[width=0.18\textwidth,keepaspectratio]{hutb_logo_maoti.png}}} -\fi -% \fancyhf[RH]{\heiti \zihao{-5} {图像与激光融合的轨道扣件脱落检测}} % 设置所有(奇数和偶数)右侧页眉 -% UPDATE 更新配置为论文标题 -\fancyhf[RH]{\heiti \zihao{-5} {\@titlecn}} -% frontmatter设置 -\renewcommand{\frontmatter}{ - \clearpage - \@mainmatterfalse - % 目录单独使用大罗马编号 - \pagenumbering{Roman} - \pagestyle{fancy} - \def\hutb@thepage{\thepage} - \def\hutb@lastpageref{\pageref{LastPage}} - \fancyfoot[C]{\zihao{-5} \hutb@thepage@format@en{\hutb@thepage}} - \fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[L]{\raisebox{-0.18\height}{\includegraphics[width=0.18\textwidth,keepaspectratio]{hutb_logo_maoti.png}}}% - \fancyhead[R]{\heiti \zihao{-5} {\@titlecn}}% - \fancyfoot[C]{\zihao{-5} \hutb@thepage@format@en{\hutb@thepage}}% - } -} -% mainmatter设置 -\renewcommand{\mainmatter}{ - \clearpage - \@mainmattertrue - % 正文部分启用阿拉伯数字编号 - \pagenumbering{arabic} - \pagestyle{fancy} - \def\hutb@thepage{\thepage} - \def\hutb@lastpageref{\pageref{LastPage}} - \fancyfoot[C]{\zihao{-5} \songti \hutb@thepage@format@zh{\hutb@thepage}{\hutb@lastpageref}} - \fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[L]{\raisebox{-0.18\height}{\includegraphics[width=0.18\textwidth,keepaspectratio]{hutb_logo_maoti.png}}}% - \fancyhead[R]{\heiti \zihao{-5} {\@titlecn}}% - \fancyfoot[C]{\zihao{-5} \songti \hutb@thepage@format@zh{\hutb@thepage}{\hutb@lastpageref}}% - } -} -% 给页眉留足空间(否则会有 \headheight is too small的warning) -% 页眉左侧校名图使用固定宽度 width=0.18\textwidth,避免 scale 修改不明显。 -\setlength{\headheight}{32pt} -% “磅”是衡量印刷字体大小的单位,约等于七十二分之一英寸。 -% 而 1英寸=25.4毫米,则1磅=25.4/72≈0.353毫米。 -% 磅和 LaTeX的 pt- points (大约 1/72 inch) 是一致的。 -% 基本行间距设置 -\renewcommand*{\baselinestretch}{1.3} % 几倍行间距 -\setlength{\baselineskip}{20pt} % 基准行间距 -% \setlength{\bibsep}{0.5ex} % 参考文献条目间距 - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 字体设置 -% -% 进行相关字体设置,定义必须的新字体 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% TODO: Times New Roman目前只能在Windows上使用,需要增加Linux系统字体 -% \setmainfont{Times New Roman} -% \setmonofont{Courier New} -% \setsansfont{Arial} -% \newfontfamily{\enheiti}{SimHei} % 解决标题英文括号不显示黑体 -% \newfontfamily{\enheiti}{\heiti} -% \renewcommand\normalsize{% - % \@setfontsize\normalsize{12.05}{14.45}% - % \abovedisplayskip 12\p@ \@plus3\p@ \@minus7\p@ - % \abovedisplayshortskip \z@ \@plus3\p@ - % \belowdisplayshortskip 6.5\p@ \@plus3.5\p@ \@minus3\p@ - % } -% 协议页的标题按模板是华文新魏 -% \setCJKfamilyfont{hwxw}{STXinwei} -% \newcommand{\huawenxinwei}{\CJKfamily{hwxw}} -% 实现楷体GB_2312 -% \setCJKfamilyfont{kaitigb}{KaiTi_GB2312.ttf} -% \newcommand{\kgb}{\CJKfamily{kaitigb}} -% 重定义ctex定义好的宋体和黑体,以支持伪加粗AutoFakeBold -% 即支持类似word里的给黑体、宋体等中文字体加粗的操作,用\bfseries -% \let\heiti\relax -% \newCJKfontfamily[hei]\heiti{SimHei}[AutoFakeBold] -% \let\songti\relax -% \newCJKfontfamily[song]\songti{SimSun}[AutoFakeBold] -% \newcommand{\kaiti}{\CJKfamily{kai}} -% \newcommand{\kgb}{\CJKfamily{kai}} -% 设置参考文献的字体格式 -% \renewcommand{\bibfont}{\zihao{5} \kgb} - - -% 预定义名称 -\newcommand*{\hutb@name@cover}{扉页} -\newcommand*{\hutb@name@declaration@zh}{声明} -\newcommand*{\hutb@name@abstract@zh}{中文摘要} -\newcommand*{\hutb@name@abstract@en}{英文摘要} -\newcommand*{\hutb@name@keywords}{关键字} -\newcommand*{\hutb@name@contents}{目录} -\newcommand*{\hutb@name@listfigure}{插图清单} -\newcommand*{\hutb@name@listtable}{附表清单} -\newcommand*{\hutb@name@index}{索引} -\newcommand*{\hutb@name@figure}{图} -\newcommand*{\hutb@name@table}{表} -\newcommand*{\hutb@name@appendix}{附录} -\newcommand*{\hutb@name@acknowledge}{致谢} - -%--------------------------------------------- -%控制引用格式,选用上标引用 -% \newcommand\supercite[2][]{% - % \textsuperscript{\cite[#1]{#2}}} - - - - - -%\newCJKfontfamily\sonti{SimSun}[BoldFont=FandolSong-Bold] - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 封面扉页 -% -% 提供本科毕业论文封面扉页设计 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 论文日期 -% 采用key-value对的方式来制定存储信息的pgf路径 -\pgfkeys{/thesisdate/pgf/.cd, % 定义pgf路径 - year/.store in = \year, % 指定关键词year的存储位置为\year - month/.store in = \month % 指定关键词month的存储位置为\month -} -% 利用上述的pgf的key-value定制论文日期命令 -\newcommand{\thesisdate}[1] { - \pgfkeys{/thesisdate/pgf/.cd,#1} % 指定使用/thesisdate/pgf/.cd来解释参数,然后在后文能直接使用存储位置来指定解释的内容 - \gdef\@thesisdate{\year{} 年 \month{} 月} % 将构建好的日期存储到宏(\@thesisdate)中 -} -% 重定义\maketitle实现封面(扉页)绘制 -\RenewDocumentCommand{\maketitle}{}{% - \hutb@pdfbookmark{0}{\hutb@name@cover} - \hutb@make@cover@zh% -} -% 构建封面绘制宏 -\NewDocumentCommand{\hutb@make@cover@zh}{} { - \thispagestyle{empty} - \begin{center} - \vspace*{0pt} - \begin{figure}[hbt] - \centering - \ifhutb@type@print - \includegraphics[width=0.6\textwidth]{hutb_logo_maoti.png} - \else - \includegraphics[width=0.6\textwidth]{hutb_logo_maoti.png} - \fi - \end{figure} - \vspace{0pt} - \begingroup - \fontsize{45}{50}\selectfont 本科毕业设计(论文) \par - % 45磅,黑体 - \endgroup - \vspace*{6pt} - \begingroup - % \zihao{1} \setmainfont{SimHei} GRADUATION DESIGN(THESIS) \par - % \zihao{1} GRADUATION DESIGN(THESIS) \par - % 1号,黑体 - \endgroup - - \begingroup - \linespread{1.3} - \zihao{-2} - \songti - \begin{tabular}{ll} - \hspace{12pt} \makebox[4em][s]{\textbf{题\qquad 目:}} & \underline{\parbox[b][][c]{250pt}{\center \kaishu \@titlecn}} \\ - \hspace{12pt} \makebox[4em][s]{\textbf{学生姓名:}} & \underline{\makebox[250pt][c]{\kaishu \@author}} \\ - \hspace{12pt} \makebox[4em][s]{\textbf{学\qquad 号:}} & \underline{\makebox[250pt][c]{\kaishu \@studentid}} \\ - \hspace{12pt} \makebox[4em][s]{\textbf{专\qquad 业:}} & \underline{\makebox[250pt][c]{\kaishu \@priormajor}} \\ - \hspace{12pt} \makebox[4em][s]{\textbf{班\qquad 级:}} & \underline{\makebox[250pt][c]{\kaishu \@myclass}} \\ - \hspace{12pt} \makebox[4em][s]{\textbf{指导老师:}} & \underline{\makebox[250pt][c]{\kaishu \@supervisor}} \\ - %\hspace{12pt} \makebox[4em][s]{学\qquad 院:} & \underline{\makebox[220pt][c]{\kaishu \@department}} \\ - - \end{tabular} - \endgroup - \par - \vspace{40pt} - % \vfill - \begingroup - {\zihao{2} \heiti \@department \par} - \vspace{10pt} - {\zihao{-2} \heiti \@thesisdate \par} - \endgroup - \end{center} -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 诚信声明 -% -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newenvironment{declarationzh} { - %\begin{titlepage}% - \hutb@pdfbookmark{0}{\hutb@name@declaration@zh} - %\renewcommand*{\headsep}{20pt} - \vspace*{0pt} - % \begin{center} \zihao{-2} \heiti \@titlecn \end{center} - \vspace{0pt} - \begin{center} \zihao{2} \heiti 湖南工商大学本科毕业设计诚信声明 \end{center} % 摘要为三号黑体 - \vspace{12pt} - \linespread{1.5} - \zihao{4}\songti % 内容为四号宋体 - - %\end{titlepage}% - -} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 摘要 -% -% 提供中英文摘要样式 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -% ---------------------------------------------- -% 中文摘要 -% ---------------------------------------------- -% 中文摘要格式具体见样例8,居中打印论文题名(三号黑体) -% 换行顶格编排“摘要”(四号黑体)及摘要内容(四号宋体)、 -% 每段开头空二格。摘要内容后下换行顶格编排“关键词”和“分类号”(四号黑体)。 -% 每篇论文应选取3-8个关键词,每一关键词之间用分号分开,最后一个关键词后不打标点符号。 -\newcommand*{\keywordscn}[1]{\gdef\@keywordscn{#1}} % 定义中文关键词 -%\newcommand*{\categorycn}[1]{\gdef\@categorycn{#1}} % 定义中文分类 -% 定义中文摘要环境 -\newenvironment{abstractzh} { - \hutb@pdfbookmark{0}{\hutb@name@abstract@zh} - \renewcommand*{\headsep}{0pt} - \vspace*{0pt} - %\begin{center} \zihao{-2} \heiti \@titlecn \end{center} - \vspace{0pt} - \begin{center} \zihao{3} \heiti 摘\qquad 要 \end{center} % 摘要为三号黑体 - \vspace{12pt} - \linespread{1.5} - \zihao{-4}\songti % 内容为四号宋体 -} -% 显示中文关键词和分类号 -{ - \begin{flushleft} - \noindent {\zihao{-4} \bfseries \songti 关键词:} {\zihao{-4} \songti \@keywordscn} \par % 关键词为小四号宋体加粗,内容为小四号宋体 - \end{flushleft} -} - -% ---------------------------------------------- -% 英文摘要 -% ---------------------------------------------- -% 英文摘要格式和内容与中文摘要相对应,另起一页,具体见样例9。居中打印论文英文题名(三号Times New Roman字体),换行顶格编排“Abstract”及英文摘要内容(四号Times New Roman字体),摘要内容每段开头留四个字符空格。摘要内容后下换行顶格编排“Keywords”和“Classification”。 -% 定义英文摘要,字体全部为timesnewroman -\newcommand*{\keywordsen}[1]{\gdef\@keywordsen{#1}} % 英文关键词 - -\newenvironment{abstracten} { % 新建英文摘要环境 - \hutb@pdfbookmark{0}{\hutb@name@abstract@en} - \vspace*{0pt} - %\begin{center} \zihao{-2} \bfseries \@titleen \end{center} - - \begin{center} \zihao{3} \bfseries ABSTRACT \end{center} - \vspace{12pt} - \linespread{1.5} - \zihao{-4} % 内容为四号宋体 -} -{ - \begin{flushleft} - \noindent {\zihao{4} \bfseries Key\ words:~} {\zihao{4} \@keywordsen} \par % 关键词为四号黑体,内容为四号宋体 - \end{flushleft} -} - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 5. 目录 % -% -----------------------------------------------% -% 目录应列出论文的大标题、一级和二级节标题,逐项标明页码(具体见样例10)。各级标题应简明扼要、点出各部分主要内容。学位论文的页码编排为:正文和后置部分用阿拉伯数字编连续码,前置部分用罗马数字单独编连续码(封面除外)。 -% “目录”两字居中(三号黑体),下空两行为章、节、小节及其开始页码(靠右顶格)。章、节、小节分别以阶梯式排列:1(第1章)、1.1、1.1.1依次标出。章、节、小节的题名与页码之间用“......”连接。除“目录”两字外,其余字体均为小四号宋体。 - -%TODO: 本科和硕博目录格式要求不同 -% \renewcommand{\contentsname}{\hfill \heiti \zihao{3} 目\quad 录\hfill} -% \renewcommand{\contentsname}{目录} -% \renewcommand*{\baselinestretch}{1.5} % 行间距 -% \tableofcontents -% } -\renewcommand\tableofcontents{ -\hutb@chapter*{\contentsname} -% \hutb@pdfbookmark{0}{\contentsname} - -% \chapter*{目录} -% \hutb@pdfbookmark{0}{\hutb@name@contents} -\@starttoc{toc} -} - - - -\setcounter{secnumdepth}{3} -% 定义作为标题的格式 -% \titleformat{command}[shape]%定义标题类型和标题样式 -% {format}%定义标题格式 -% {label}%定义标题的标签,即标题的标号等 -% {sep}%定义标题和标号之间的水平距离 -% {before-code}%定义标题前的内容 -% [after-code]%定义标题后的内容 - -% TODO: 修复章节标题样式 -% \renewcommand{\chaptername}{第{\thesection}章} -% \titleformat{\chapter}{\zihao{3} \heiti \centering}{\chaptername}{1em}{} -% \titleformat{\section}{\zihao{-4} \heiti}{\thesection}{1em}{} -% \titleformat{\subsection}{\zihao{-4} \kaishu}{\thesubsection}{1em}{} - -% 定义在目录中的格式 -% \titlecontents{标题名} -% [左间距] -% {标题格式} -% {标题标志} -% {无序号标题} -% {指引线与页码} -% [下间距] - -% \titlecontents{section} -% [0em] % 按样例目录左侧是和前置部分文字左侧对齐的 -% {\zihao{-4} \songti} -% %{\contentslabel {1em}} -% {第\thecontentslabel\ 章\quad}% -% {\hspace*{-1em}} -% {\titlerule*[0.5pc]{.}\contentspage} - -% \titlecontents{subsection} -% [4em] -% {\zihao{-4} \songti} % note that 3.8 = 1.5 + 2.3 -% {\contentslabel{2.2em}} -% {\hspace*{-3.5em}} -% {\titlerule*[0.5pc]{.}\contentspage} - -% \titlecontents{subsubsection} -% [7em] -% {\zihao{-4} \songti} % note that 3.8 = 1.5 + 2.3 -% {\contentslabel{3.0em}} -% {\hspace*{-5em}} -% {\titlerule*[0.5pc]{.}\contentspage} - -% 6. 符号说明(必要时)% -% ---------------------------------------------------------% -% TODO: -% -% 如果论文中使用了大量的物理量符号、标志、缩略词、专门计量单位、自定义名词和术语等,应编写成注释说明汇集表,说明论文中所用符号所表示的意义及单位(或量纲)。若上述符号和缩略词使用数量不多,可以不设专门的注释说明汇集表,仅在论文中出现时加以说明。 -% “符号说明”四字居中(三号黑体)。 - - -% 7. 论文正文 % -% -------------------------------------------------------% -% 论文正文是主体,主体部分应从另页右页开始,每一章应另起页。一般由序号标题、文字叙述、图、表格和公式等五个部分构成。 -% 写作形式可因研究内容的性质不同而变化,一般可包括绪论(或综述)、理论分析、计算方法、实验装置和测试方法、实验结果分析和讨论、研究成果、结论及意义等。 -% 该部分由用户编写 - -% 图表等浮动环境设置 % -% ----------------------------------------------------------% -% TODO % -% 图、表、公式:文中的图、表、附注、公式一律采用阿拉伯数字分章(或连续)编号,如:图2-5,表3-2,公式(5-1)等。 -% 图序及图名居中置于图的下方,如果图中含有几个不同部分,应将分图号标注在分图的左上角,并在图解下列出各部分内容。图中的术语、符号、单位等应与正文表述所用一致。 -% 表序及表名置于表的上方,表中参数应标明量和单位的符号。表的编排应采用国际通用的三线表。续表均应重复表头,如表需转页接排,随后各页应重复表的编号,其后跟表题(可省略)和“续”置于表上方。 -% 图序及图名、表序及表名采用五号楷体字。若图或表中有附注,采用英文小写字母顺序编号,附注写在图或表的下方。公式的编号用括号括起写在右边行末,其间不加虚线。 -% 图、表、公式等与正文之间要有一定的行间距。 -% \RequirePackage{caption} -% 默认情况下, \LaTeX{} 要求每页的文字至少占据 20%,否则该页就只单独放置一个浮动环境, -% 而这通常不是我们想要的, 我们将这个要求降低到 5%. -\renewcommand*{\textfraction}{0.05} -% 有时如果多个浮动环境连续放在一起, \LaTeX{} -% 会将它们分在几个不同页,即使它们可在同一页放 -% 得下. 我们可以通过修改 |\topfraction| 和 |\bottomfraction| 分别设置顶端和底端的浮 -% 动环境的最大比例. -\renewcommand*{\topfraction}{0.9} -\renewcommand*{\bottomfraction}{0.8} -% 有时\LaTeX{}会把一个浮动环境单独放在一页, -% 我们要求这个环境至少要占据 85% 才能单独放在一页. -% 注意: |\floatpagefraction| 的数值必须小于 |\topfraction|. -\renewcommand*{\floatpagefraction}{0.85} -% 关于图片 graphicx -% 如果图片没有指定后缀, 依次按下列顺序搜索 -\DeclareGraphicsExtensions{.pdf,.eps,.jpg,.png,.tif} -% 设置图表搜索路径, 可以给图表文件夹取如下名字 -\graphicspath{{figures/}{figure/}{pictures/}% -{picture/}{pic/}{pics/}{image/}{images/}} - - - - -% 插图格式 -% ------------------------------------------------------% -% \captionsetup[subfigure]{labelfont=normalfont,textfont=normalfont,singlelinecheck=off,justification=raggedright} -% singlelinecheck=off 表示即使caption只有一行, justification 也生效 -% justification=raggedright 使子图 caption 靠左对齐,而caption的上下位置由\caption标签的位置决定,以此实现了学校要求的子图标签在左上角显示。 -% 这部分功能由 subcaption 这个包实现,而这个包不能和 subfigure 同时使用,所以子图的写法也与 subfigure 包的不大一样。 -\captionsetup[subfigure]{singlelinecheck=off,justification=raggedright} - -% 图下方描述的黑体 -\DeclareCaptionFont{hei}{\heiti} -\DeclareCaptionFont{five}{\zihao{5}} -\renewcommand{\thefigure}{\arabic{chapter}-\arabic{figure}} -% \renewcommand{\thefigure} {\thesection-\arabic{figure}} - -\captionsetup[figure]{ -format=plain, % 标题从第二行开始是否缩进,plain无缩进,hang有缩进 -labelsep=quad, % 分隔符是一个空格 -font={hei,five}, -position=bottom % position=bottom, 不代表标题放在下面, 标题仍放在你放\caption的位置. -} -% 表格格式 -% ------------------------------------------------------% -\renewcommand{\thetable}{\arabic{chapter}-\arabic{table}} -% \renewcommand {\thetable} {\thesection-\arabic{table}} -\captionsetup[table]{ -format=plain, % 标题从第二行开始是否缩进,plain无缩进,hang有缩进 -labelsep=quad, % 分隔符是一个空格 -font={hei,five}, % 表的字体, 宋体小四 -position=top -} - - - -% 列表环境设置 % -% ------------------------------------------------------------------% -\setlist{% -topsep=0.3em, % 列表顶端的垂直空白 -partopsep=0pt, % 列表环境前面紧接着一个空白行时其顶端的额外垂直空白 -itemsep=0ex plus 0.1ex, % 列表项之间的额外垂直空白 -parsep=0pt, % 列表项内的段落之间的垂直空白 -leftmargin=1.5em, % 环境的左边界和列表之间的水平距离 -rightmargin=0em, % 环境的右边界和列表之间的水平距离 -labelsep=0.5em, % 包含标签的盒子与列表项的第一行文本之间的间隔 -labelwidth=2em % 包含标签的盒子的正常宽度;若实际宽度更宽,则使用实际宽度。 -} - -% 表格 % -% ------------------------------------------------------% -% 修改tabular 环境, 设置表格中的行间距为正文行间距. -\let\hutb@oldtabular\tabular -\let\hutb@endoldtabular\endtabular -\renewenvironment{tabular} { -\bgroup -\renewcommand{\arraystretch}{0.92} -\hutb@oldtabular -} { -\hutb@endoldtabular\egroup -} - -% 表格字号应比正文小,一般五号/10.5pt,但是暂时没法再cls里设置(不然会影响到封面等tabular环境) -% 所以目前只好在主文件里局部\AtBeginEnvironment - -% 数学环境, 定理等设置 % -% -------------------------------------------------------% -\newtheorem{definition}{\hutb@cap@definition} -\newtheorem{theorem}{\hutb@cap@theorem} -\newtheorem{lemma}{\hutb@cap@lemma} -\newtheorem{corollary}{\hutb@cap@corollary} -\newtheorem{assumption}{\hutb@cap@assumption} -\newtheorem{conjecture}{\hutb@cap@conjecture} -\newtheorem{axiom}{\hutb@cap@axiom} -\newtheorem{principle}{\hutb@cap@principle} -\newtheorem{problem}{\hutb@cap@problem} -\newtheorem{example}{\hutb@cap@example} -\newtheorem{proof}{\hutb@cap@proof} -\newtheorem{solution}{\hutb@cap@solution} - -% 数学定理相关的常量 -\newcommand*{\hutb@cap@definition}{定义} -\newcommand*{\hutb@cap@theorem}{定理} -\newcommand*{\hutb@cap@lemma}{引理} -\newcommand*{\hutb@cap@corollary}{推论} -\newcommand*{\hutb@cap@assumption}{假设} -\newcommand*{\hutb@cap@conjecture}{猜想} -\newcommand*{\hutb@cap@axiom}{公理} -\newcommand*{\hutb@cap@principle}{定律} -\newcommand*{\hutb@cap@problem}{问题} -\newcommand*{\hutb@cap@example}{例} -\newcommand*{\hutb@cap@proof}{证明} -\newcommand*{\hutb@cap@solution}{解} - - -% TODO 测试段落后间距 -% 各级标题格式设置。 -\ctexset{% -chapter = {% - format = \zihao{3} \heiti\centering, - name = {第, 章}, - nameformat = {}, - number = \arabic{chapter}, - numberformat = {}, - titleformat = {}, - aftername = \quad, - afterindent = true, - % beforeskip 默认为 50pt 适当缩减 - fixskip = true, - beforeskip = {15pt}, - % beforeskip = {\ifhutb@type@graduate 20pt \else 5pt\fi} - % afterskip 默认为 40pt 适当缩减 - afterskip = {40pt}, - % afterskip = {\ifhutb@type@graduate 30pt\else 20pt\fi}, -}, -section = {% - format = \zihao{-4} \heiti, - afterindent = true, - % beforeskip 默认为 3.5ex plus 1ex minus .2ex 适当缩减 - % beforeskip = {20pt}, - % beforeskip = {\ifhutb@type@graduate 30pt \else 20pt\fi} - % afterskip 默认为 2.3ex plus .2ex 适当缩减 - afterskip = {1ex \@plus .2ex}, -}, -subsection = {% - format = \zihao{-4} \bfseries \songti, - afterindent = true, - % afterskip 默认为 2.3ex plus .2ex 适当缩减 - afterskip = {1ex \@plus .2ex}, - %fixskip = true, -}, -subsubsection = {% - format = \zihao{-4} \normalfont, - afterindent = true, - afterskip = {1ex \@plus .2ex}, - %fixskip = true, -}, -} - -% 定义描述距离的变量 -\newlength{\hutb@headings@indent@fixed} -\setlength{\hutb@headings@indent@fixed}{2\ccwd} -\newcommand{\hutb@style@set@indent@heading}{% -\gdef\hutb@headings@indent{\hutb@headings@indent@fixed} -% \ifsjtu@type@graduate\relax\else -% 本科毕设设置四级标题 -\ctexset{% - subsubsection/name = {(,)}, - subsubsection/number = \arabic{subsubsection}, -} -% \fi -% 设标题的缩进 -\ctexset{% - section/indent = \hutb@headings@indent, - subsection/indent = \hutb@headings@indent, - subsubsection/indent = \hutb@headings@indent, -} -} -\hutb@style@set@indent@heading - -% 全文首行缩进 2 字符, 标点符号用全角 -% \ctexset{% -% punct = quanjiao, -% space = auto, -% autoindent = true, -% } - -% % 编号分章节。如需要连续编号,注释\makeatletter下面对应内容即可。 -% \renewcommand{\theequation}{\arabic{section}-\arabic{equation}} -% \makeatletter -% \@addtoreset{figure}{section} -% \@addtoreset{table}{section} -% \@addtoreset{equation}{section} -% \makeatother - -% 8. 参考文献 % -% ------------------------------------------------------% -% TODO % -% 文后参考文献只列出作者直接阅读过、在正文中被引用过的文献资料,务必实事求是。参考文献一律列在正文的末尾,不得放在各章之后。人文社科类学位论文中不宜用文后参考文献列出的注释可采用页下注,包括对学位论文中某些关键词句、论点的详细说明。在引用别人的科研成果时,应在引用处加以说明,遵循学术道德规范,严禁论文抄袭、剽窃等学术不端行为。 -% 参考文献可以采用顺序编码制组织,也可以按“著者-出版年”制组织。建议按顺序编码制,即按中文引用的顺序将参考文献附于文末。作者姓名写到第三位,余者写“,等”或“,et al.”。“参考文献”四字居中(三号黑体),空一行左起按顺序依次列出参考文献,将序号置于方括号内(如[1]),用小四号宋体字,所有符号均用半角编排。 -% 目前采用bgt7714-2005标准进行文献索引,详见gbt7714-2005.bst. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 附录 -% -% 附录中主要列入正文内不便列出的过分冗长的公式推导,供查读方便所需的辅助性数学工具或表格、重复性数据图表、计算程序及说明等。 -% 附录依次为附录1,附录2……等,“附录X”三字居中(三号黑体)。附录中的图表公式另编排序号,与正文分开。 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 定义附录环境 -% 在\appendix 后直接使用 chapter -% 暂不需要 -% \newenvironment{appendixs}{ -% % \ifhutb@review\else -% \hutb@chapter{\hutb@name@appendix} -% % \fi -% } - - -% 10. 攻读学位期间主要研究成果 % -% --------------------------------------------------------% -% 分类按时间顺序列出作者在攻读学位期间取得的与学位论文相关的研究成果,含参加的研究项目、获奖情况、专利、专著、发表学术论文(含正式录用论文)等,书写格式参照参考文献格式。“攻读学位期间主要研究成果”字体居中(三号黑体) - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 致谢 -% -% 作者对给予指导、各类资助和协助完成研究工作以及提供各种对论文工作有利条件的单位及个人表示感谢。“致谢”二字居中(三号黑体)。 -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% 定义致谢环境 -\newenvironment{acknowledgements}{ -% \ifhutb@review\relax\else -\ifhutb@review\else -% \hutb@chapter{\hutb@name@acknowledgements} -\hutb@chapter{\hutb@name@acknowledge} -\fi -} - - -% 篇眉和页码要求 % -% ---------------------------------------------------------% -% 篇眉从正文开始至全文结束,采用宋体五号字左起书写“博(或硕)士学位论文”,靠右写章标题。 -% 页码从正文开始至全文结束按阿拉伯数字连续编排,前置部分(如学位论文原创性声明和版权使用授权书、中文摘要、英文摘要、目录、符号说明等)用罗马数字分别单独编排。页码位于页面底端,居中书写。 - - - - -%\endinput diff --git a/swarm/undergraduate/hutbthesis_main.run.xml b/swarm/undergraduate/hutbthesis_main.run.xml deleted file mode 100644 index c3fd5483..00000000 --- a/swarm/undergraduate/hutbthesis_main.run.xml +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -]> - - - latex - - hutbthesis_main.bcf - - - hutbthesis_main.bbl - - - blx-dm.def - blx-unicode.def - blx-compat.def - biblatex.def - standard.bbx - numeric.bbx - numeric-comp.bbx - gb7714-2015.bbx - numeric-comp.cbx - gb7714-2015.cbx - biblatex.cfg - english.lbx - - - - biber - - biber - hutbthesis_main - - - hutbthesis_main.bcf - - - hutbthesis_main.bbl - - - hutbthesis_main.bbl - - - hutbthesis_main.bcf - - - diff --git a/swarm/undergraduate/hutbthesis_main.tex b/swarm/undergraduate/hutbthesis_main.tex deleted file mode 100644 index 6a44df7b..00000000 --- a/swarm/undergraduate/hutbthesis_main.tex +++ /dev/null @@ -1,101 +0,0 @@ -%!TEX program = xelatex -% !BIB program = biber - -\documentclass[AutoFakeBold]{hutbthesis} - -\usepackage{calc} -\usepackage{float} -\usepackage{longtable} -\usepackage{booktabs} -\usepackage{array} -\usepackage{tabularx} -\usepackage{caption} -\usepackage{xcolor} -\usepackage{listings} -\usepackage{chngcntr} -\usepackage{xeCJKfntef} -\usepackage{amsmath} -\providecommand{\tightlist}{% - \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} -\IfFontExistsTF{Noto Serif CJK SC}{% - \setCJKmainfont{Noto Serif CJK SC}[BoldFont=Noto Serif CJK SC Bold] - \setCJKsansfont{Noto Sans CJK SC}[BoldFont=Noto Sans CJK SC Bold] -}{} -\graphicspath{{images/}} - -% 图、表、公式统一采用章节编号,并保证图题/表题与对象绑定。 -\counterwithin{figure}{chapter} -\counterwithin{table}{chapter} -\numberwithin{equation}{chapter} -\renewcommand{\thefigure}{\thechapter-\arabic{figure}} -\renewcommand{\thetable}{\thechapter-\arabic{table}} -\renewcommand{\theequation}{\thechapter-\arabic{equation}} -\captionsetup[figure]{name=图,labelsep=space,font=small,skip=6pt} -\captionsetup[table]{name=表,labelsep=space,font=small,skip=6pt} - -% 代码段模板样式:用于 BAT、命令行、配置片段等代码清单。 -\definecolor{codebg}{RGB}{248,248,248} -\definecolor{codekw}{RGB}{0,92,175} -\definecolor{codestr}{RGB}{163,21,21} -\definecolor{codecom}{RGB}{0,128,0} -\renewcommand{\lstlistingname}{代码} -\lstdefinestyle{hutbcode}{% - backgroundcolor=\color{codebg}, - basicstyle=\ttfamily\small, - keywordstyle=\color{codekw}\bfseries, - stringstyle=\color{codestr}, - commentstyle=\color{codecom}\itshape, - numbers=left, - numberstyle=\scriptsize\color{gray}, - stepnumber=1, - numbersep=8pt, - frame=single, - rulecolor=\color{gray!50}, - breaklines=true, - breakatwhitespace=false, - columns=fullflexible, - keepspaces=true, - showstringspaces=false, - tabsize=2, - captionpos=b -} -\lstset{style=hutbcode} -% 本文参考文献采用手工编号文件 content/references.tex,不调用 biber。 - -\include{content/cover} - -\begin{document} - -\maketitle - -% 封面后的声明、授权书、摘要页不显示页码;仅目录页使用罗马数字页码。 -\clearpage -\pagestyle{empty} -\pagenumbering{gobble} -\input{content/declarationzh} -\clearpage -\input{content/authorization} -\clearpage -\input{content/abstractzh} -\clearpage -\input{content/abstracten} - -% 目录单独使用罗马数字页码。 -\frontmatter -\setcounter{page}{1} -\tableofcontents - -\mainmatter -\include{content/chapter1} -\include{content/chapter2} -\include{content/chapter3} -\include{content/chapter4} -\include{content/chapter5} -\include{content/chapter6} - -\include{content/references} -\include{content/symbols} -\include{content/appendix} -\include{content/acknowledgements} - -\end{document}