GR-Fusion:强鲁棒低漂移的多传感器融合系统(IROS2021)

article/2025/9/2 18:19:20

9964ee08c82c1902a8e79fb799856868.png

来源:GR-Fusion Multi-Sensor Fusion SLAM for Ground Robots with High Robustness and Low Drift IROS 2021

单位:中科院沈阳自动化研究所

针对问题:

针对地面机器人的多传感器融合SLAM系统

提出方法:

系统融合紧耦合IMU、轮速计、视觉、LiDAR和GNSS多源观测信息,并结合地面机器人平面运动约束,构建了融合多模态观测信息的因子图优化模型,针对各种传感器退化场景提出了有效的运动退化检测方法,使得系统能够在复杂环境中仍保持较强的鲁棒性和较低的漂移。

达到效果:

所提出系统在室内数据集、地下数据集、开放式草坪数据集以及校园场景数据集中进行了广泛测试,与现有方案对比达到了最先进的效果。数据集开源地址https://drive.google.com/drive/folders/110Hko3z PcDmY0_bnZdXxJXJKe6wr3t10?usp=sharing

Abstract

本文提出了一个紧耦合LiDAR、相机、IMU、轮速计和GNSS信息的SLAM系统。系统通过将LiDAR点云和地面投影到图像中恢复视觉特征深度,选择跟踪的高质量视觉特征和LiDAR特征,并紧耦合IMU和轮速计的预积分值来优化机器人的状态增量。我们使用估计的相对位姿来重新度量局部滑窗中特征之间的关联距离,并去除动态物体和异常值。在建图节点中,我们使用精炼的特征,并紧耦合GNSS测量值、增量因子和局部平面约束,通过将LiDAR特征与全局地图对齐,进一步优化机器人的全局状态。此外,该方法可以检测传感器的退化情况并自动重新配置优化过程。系统基于一个六轮地面机器人在室内和室外环境中进行了广泛的实验,证明了所提出的GR-Fusion在精度和鲁棒性方面优于最先进的SLAM方法。

Introduction

主要贡献:

  1. 本文提出了一个可以融合来自LiDAR、相机、IMU、轮速计、GNSS和局部平面约束的多模态观测的框架,用于机器人状态估计;

  2. 系统将LiDAR点云和地面被投影到图像中,以提取视觉特征的深度。该方法可以检测每个传感器的退化情况,并重新配置优化过程,以应对各种具有挑战性的情况;

  3. 所构建系统在真实的地面机器人上进行了广泛的实验,表明GR-Fusion具有高鲁棒性和低漂移性。

The proposed GR-Fusion

1.系统概述

cfac9cc2d865037118cafe076ff81aff.png

所提方法的流程图如上图所示,系统包含四个节点。每个传感器的测量量分别为:轮速计100HZ,IMU 100HZ,相机30HZ,LiDAR 10HZ,GNSS 5HZ。测量预处理节点首先进行数据缓存和同步。然后根据时间戳对轮速计和IMU的测量进行预积分,以消除LiDAR点云的运动失真。根据我们之前研究中提出的地面测量模型,提取地面点,并拟合地平面参数。然后将计算出的局部平面和LiDAR点云投影到图像中,计算出视觉特征的深度。里程计节点通过紧耦合多模态的局部约束因素来估计机器人在滑动窗口中的运动增量。建图节点将LiDAR特征与全局地图对齐,并将本地约束和GNSS约束紧耦合起来,以优化机器人的全局状态。闭环节点接收来自GR-mapping的位姿和特征,并进行闭环检测和优化以消除漂移。

2.Measurement pre-processing 测量数据预处理

(1)轮速计IMU预积分

我们使用了[10]中提出的流形上的轮速计增量模型,它可以融合轮速计和IMU的测量值,计算机器人在复杂地形(如斜坡、楼梯和草坪)上的三维位置增量,如下图所示。接下来,轮速计和IMU的测量结果根据LiDAR和图像的时间戳进行预积分,以计算帧之间的位姿增量。在正常情况下,位置增量由轮速计提供,旋转增量由IMU提供。如果检测到机器人的车轮在打滑,则由IMU提供全部增量。

914ab0c6bd7ceda653957abdfb6e512b.png

(2)LiDAR和相机观测预处理

首先,根据帧间的运动增量,去除点云的运动失真。为了去除噪声和不稳定的点,我们按照[13]提出的方法进行点云分割。根据粗糙度提取了角和平面特征。由于机器人总是在地面上运行,我们提出使用局部平面约束来优化机器人的位姿。我们使用之前研究中提出的地面测量模型来提取地面点,之后我们拟合地面平面参数来计算当前可见的地面区域。

对于来自双目相机的图像,进行角点检测。通过设置两个相邻特征之间的最小像素间隔,实现了特征的均匀分布。这些特征使用KLT光流算法进行追踪,同时我们还使用KLT跟踪器来匹配左右图像之间的特征。

在大规模环境中,由于基线较小,使用视觉特征的三角测量法得到的深度有很大的误差。因此,我们通过[20]介绍的方法,将LiDAR点云投射到图像中,以提取视觉特征的更鲁棒的深度。地面点被投影到图像中,以分割地面上的视觉特征。相机投影模型被用来计算地面特征的深度。实验发现,位于地面的视觉特征移动速度快,跟踪时间短,往往无法通过三角测量法获得准确的深度。因此,利用LiDAR拟合的地面参数可以直接计算出地面特征的深度。此外,它还隐式地提供了地面视觉特征的共面约束。

3.GR-odometry

里程计节点被设计为选择少量但高质量的特征,以快速估计机器人在局部滑窗内的运动增量。同时,优化过程根据传感器的退化情况进行了重新配置。此外,在当前LiDAR帧被发送到建图线程之前,利用里程计的结果对当前帧的特征进行细化调整,位于动态目标上的特征和不稳定的特征点将被剔除。

(1)状态向量

本文所提出的方法以LiDAR帧为优化节点,选择最近的图像作为视觉约束。状态向量表示如下:

c3ae0a074d1905577921efcfa0780109.png

我们使用IMU时间戳作为基准,将LiDAR和相机的测量时间对齐IMU的时间戳。然后与IMU的观测一起进行优化,以估计传感器之间的时间偏移。

(2)因子图优化模型

c3eecfec22d0faf5d566e450d6193019.png

我们在里程计部分维护一个滑窗,如上图所示。有n+1个节点,优化窗口包含三个最新的连续节点。其他节点根据移动距离被选为关键帧,并将其保留在滑动窗口中,为优化窗口提供约束。滑动窗口中的LiDAR特征被用来维护本地点云地图,最新的帧被投影到图像中。对于每个视觉特征,相邻的点云块被提取出来并进行深度估计。对于深度已经从地面参数获得的特征点,其深度值保持不变。此外,当从新的图像中提取特征时,在点云覆盖的区域,视觉特征间距被设定为其他区域的一半。这种策略能够从点云覆盖的图像区域中提取更多的特征,而且深度可以直接估算,更加鲁棒。

一个特征点被追踪的次数越多,它的质量就越高。因此,我们将跟踪次数超过阈值的点加入到优化中。接下来,根据跟踪结果构建了以下重投影误差约束:

dc48f55747d5ae806a670ed1570719a6.png

ee0700466bc1394d60834b2f2c5a9681.png

我们将从LiDAR点云中提取的角点和平面特征与当前的局部地图相匹配,并使用点到线和点到面的距离来构建LiDAR约束因子。此外,轮速计和IMU的测量结果通过预积分构建一个增量约束因子。

(3)局部平面约束

我们认为,当机器人在地面上移动时,局部平面在两个连续的帧之间是不变的,如果平坦的地面被拟合,那么在局部平面的Z轴上的位移接近于零。为了确保我们的公式的鲁棒性,我们考虑了法向量、地面粗糙度和地面连续性等因素来决定是否添加地面约束。

地面的法向量和机器人的Z轴之间的角度必须小于设定的阈值;

分割的地面点与拟合的地面之间的距离的平方之和必须小于设定的阈值;

最远点和最近点地面之间的距离必须小于设定的阈值。

(4)传感器退化检测

在弱纹理环境或黑暗环境中,相机无法提取鲁棒的特征进行跟踪。当场景中存在大量的动态目标时,也会出现较大的跟踪误差。首先,我们统计了当前帧中每个特征的跟踪时间,如果小于设定的阈值,就降低视觉特征的权重。如果所有特征的跟踪时间之和小于设定的阈值,则被认为是不稳定的,这时,视觉约束将不被用于后续的优化过程。

LiDAR在高度重复的场景中会退化,例如走廊或开放的户外环境。因此,我们区分了最新一帧点云的深度和优化窗口外的第一帧点云的深度,并计算出平均深度差。接下来,我们得到了所有点深度差的直方图统计。如果深度差大于阈值点的数量很少,则LiDAR被认为是退化的。这时,LiDAR约束将不会被添加到优化中,优化滑窗的大小也被调整。该系统退化为GR-SLAM,并将相机、轮速计和IMU紧耦合在一起进行状态估计。然而,局部的点云仍然被维护,建图节点仍然运行以维护全局地图。

由于IMU是一个内置的传感器,不受外部环境的影响,在短时间内的估计结果是相对准确的。机器人车轮的滑动不可避免地增加了轮速计的预积分值。因此,我们计算了轮速计的预积分值与IMU的预积分值比率。如果它大于设定的阈值,则认为车轮在打滑,轮速计的约束就不会被添加到优化中。此外,实验结果显示,机器人在转弯时很容易打滑,而轮速计在直线运动时的精度更高。因此,我们也用机器人的转动来调整轮速计的优化权重。

(5)局部因子图优化

通过BA优化所有因素的残差,并获得机器人状态的最大后验估计,如下所示。

c985a72c4e22ea681dd5f0eec94b0cbd.png

其中ro(.)代表局部地面约束。值得注意的是,这里优化的是图4所示优化窗口中节点的状态增量。只有当节点滑出优化窗口后,才会被送至建图节点进行全局优化。

另外,我们使用GR-odometry的结果来去除动态物体和不稳定的特征。首先,当前的LiDAR特征被投影到局部滑窗的起始帧,以计算匹配距离。对于静态环境,投影的LiDAR点是重合的,或者匹配距离很小。对于移动物体,投影点的匹配距离较大。因此,根据匹配距离对LiDAR特征进行排序,匹配距离超过设定阈值的点被判断为动态物体而被剔除。最大剔除率被设定为10%。这一策略利用了动态物体的运动特征,并使用滑动窗口的时间跨度,这样可以突出动态物体的投影误差。最后,提炼出的特征点将被送到GR-Mapping节点。

4.GR-建图和闭环检测

(1)GNSS 权重

尽管我们可以融合多模态的测量来进行机器人的状态估计,但长期运行仍会产生累积误差。GNSS可以提供绝对位置。然而,实验结果显示,当GNSS受到建筑物或树木的阻挡时,GNSS的测量会发生跳跃,导致大的误差甚至失败。因此,我们根据卫星使用数量、精度衰减因子、局部增量方差评估GNSS的质量。

搜索的卫星越多,GNSS的测量就越准确。然而,这也与卫星的空间几何分布有关。因此,我们也使用GNSS输出的DOP值来评估测量误差。此外,我们还计算了局部GNSS增量和里程计增量的方差来评价GNSS的测量质量。尽管里程计测量法会产生累积误差,但其局部精度相对较高。因此,里程计可以用来确定GNSS测量是否有跳跃,以及本地测量的质量是否下降,以避免大的误差。

(2)全局因子图优化

我们在全局优化中加入的制约因素有里程计增量因子、局部平面约束因子、来自IMU的角度预测因子、GNSS因子、地图因子。闭环因子使用里程计测量的估计结果作为初始值,我们将LiDAR特征与全局地图对齐,同时耦合其他局部约束和全局约束,以优化机器人的全局状态。闭环因子来自于闭环检测节点,我们使用了[21]提出的点云描述符进行位置识别。它还可以保存和重用地图,并快速重定位到当前地图,值得注意的是,我们的方法支持只包含轮速计、IMU和GNSS的低成本配置,并对地面机器人进行有效的状态估计。

Experiments

我们在不同的环境中收集了多个数据集。这些数据集分别被称为室内、地下、露天草坪和校园。

0d5438b35c780cfd5f91dedef167669e.png

1.室内数据集

这个数据集包含了室内走廊环境,以及楼梯。轨迹的起点和终点是重合的,我们用离线批量优化和闭环优化的结果作为真值。结果显示在图6中。机器人在图6(b)中圆圈标记的地方上下楼。由于LiDAR视角的急剧变化,LIO_SAM和LOAM_IMU都产生了很大的误差。LIOM[14]与IMU紧耦合,误差很小。GR_Fusion将摄像头、IMU、轮速计和LiDAR紧耦合在前端,快速估计机器人的状态增量,可以应对观察角度急剧变化的情况。图6(b)底部的曲线是算法在Z轴上的位移。由于GR_Fusion在优化时考虑了局部平面的约束,所以它的精度更高。

980b95a4f7d1a65fc990ba10bf8eac94.png

所有方法的绝对平移误差见表二。LOAM_IMU是优化的LOAM。我们增加了IMU的局部姿态增量和全局重力约束,以提高其估计的准确性。

1f7576f3df2b5a2f769ee3b1a2d60963.png

2.地下数据集

在这个数据集中,机器人从校园出发,经过地下车库,然后返回地面校园。地下车库的通道有一个旋转通道和一个直线通道,如图7(a)所示。这些通道的环境是高度重复的,造成LiDAR的退化。

图7(b)中显示了每种算法的结果。可以看出,LIOM、LIO_SAM和LOAM_IMU由于LiDAR的退化,在地下通道中都有明显的错误。GR_Fusion仍然可以依靠视觉、IMU和轮速计增量模型进行连续状态估计。当GR_Fusion检测到LiDAR的退化时,它将减少LiDAR的优化权重。而在现有状态的基础上,局部滑动窗口的大小将逐渐增加,并包含更多的数据进行优化。在保证位姿不跳跃的同时,保证了状态估计的准确性。

759400e2236c223f415c16fbc728bb60.png3.开放式草坪数据集

在这个测试中,我们评估了所提方法在户外大规模开放环境中的表现。在开放草坪数据集中,机器人穿越了一个非常开放的草坪,在远处只能看到一些稀疏的树木,如图8所示。在穿越草坪时,从LiDAR中提取的大部分特征都分布在地面上,使运动估计发生退化。从图8(b)中可以看出,LIOM和LOAM_IMU由于LiDAR的退化而产生了明显的误差。因为LIO_SAM融合了GNSS测量,所以估计的全局姿态可以保证一定的精度。但是当我们去掉GNSS测量时,LIO_SAM估计的状态会出现跳变,由此产生的误差比LOAM_IMU更大。这是因为LIO_SAM在估计时使用的特征比LOAM_IMU少。此外,我们发现在室外环境中,从LiDAR中提取的特征相对稀疏,所以与室内环境相比,所评估的其他算法的性能有所下降。GR_Fusion结合了LiDAR、相机、IMU和轮速计的测量结果,以确保无论在室内还是室外环境下都有相同的精度。而通过融合GNSS测量,GR_Fusion可以输出全局无漂移的估算结果。

6888e76b80cc86ece707c8a8e63250f0.png

4.校园数据集

在这个测试中,我们评估了GR_Fusion在不同配置下的性能。GR_Fusion_Local使用LiDAR、照相机、IMU和轮速计作为传感器。GR_Fusion_GNSS进一步融合了GNSS测量。GR_Fusion_Low_Cost只使用低成本的传感器配置,包括GNSS、IMU和轮速计。GR_Fusion_Loop有闭环优化。应该注意的是,在以前的实验中没有使用闭环优化。

结果显示在图9中。GR_Fusion_Loop的精度最高,可以消除累积误差。GR_Fusion_Local的精度比GR_Fusion_GNSS的精度高。这是因为在轨迹的某一段中,GNSS的测量质量降低了,这导致了全局优化的误差。然而,GR_Fusion_GNSS在长时间运行时具有更高的精度。GR_Fusion_LowCost只使用IMU和轮速计增量模型进行局部估计,并使用GNSS进行全局状态优化。它的精度很容易受到GNSS测量的影响,但它仍然可以提供可接受的结果,对低成本机器人非常有用。

e4f78683307e78d60bf51470b8d79c65.png

5.动态物体剔除

我们还测试了环境中出现动态物体时GR_Fusion的建图性能。图10显示了车辆经过时的建图结果。可以看出,其他算法在地图中包括了所有移动车辆的点云。GR_Fusion可以有效地消除动态物体,建立一个更合理的静态环境地图。

6e6bc1ddb92ec16545e0e76022277ba3.png

此外,我们还对算法的实时性能进行了统计,如下表所示。可以看出,虽然GR_Fusion融合了更多的传感器,但通过对信息的仔细处理和选择,以及工程实施中的有效策略,它可以提供高效和准确的估计结果。

e44dd1d73fd89085a4e188ab7dbd641b.png

Conclusions And Future work

我们提出了一种多模态的传感器融合方法,可以鲁棒且准确地估计机器人的状态。通过对各传感器数据的精心选择和细化,在提高精度的同时,还可以消除动态目标和不稳定的特征。它可以实时检测传感器的退化情况,并可以灵活地配置为多种工作模式。目前,视觉信息仅在前端用于估计机器人的局部状态。在未来,我们将结合视觉和LiDAR来创建具有全局描述符的地标,以进一步优化机器人的全局状态。

备注:作者也是我们「3D视觉从入门到精通」特邀嘉宾:一个超干货的3D视觉学习社区

原创征稿

初衷
3D视觉工坊是基于优质原创文章的自媒体平台,创始人和合伙人致力于发布3D视觉领域最干货的文章,然而少数人的力量毕竟有限,知识盲区和领域漏洞依然存在。为了能够更好地展示领域知识,现向全体粉丝以及阅读者征稿,如果您的文章是3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、硬件选型、求职分享等方向,欢迎砸稿过来~文章内容可以为paper reading、资源总结、项目实战总结等形式,公众号将会对每一个投稿者提供相应的稿费,我们支持知识有价!

投稿方式

邮箱:vision3d@yeah.net 或者加下方的小助理微信,另请注明原创投稿。

4ed236dc7272309cfe1d386a7f17f41c.png

▲长按加微信联系

654371a2d6f099b8e44398fd85e0aa74.png

▲长按关注公众号


http://chatgpt.dhexx.cn/article/a4tqqjJ8.shtml

相关文章

MOSFET 和 IGBT 栅极驱动器电路的基本原理学习笔记(六)变压器耦合栅极驱动

变压器耦合栅极驱动 1.单端变压器耦合栅极驱动电路 2.双端变压器耦合栅极驱动 在高电压栅极驱动 IC 出现以前,使用栅极驱动变压器是唯一一种在离线或类似高电压电路中驱动高侧开关的可行解决方案。 现在,两种解决方案同时存在并且各有利弊,…

雷达多普勒频率计算公式_使用MATLAB工具箱进行雷达信号回波仿真

这篇文章的前提条件是在大家已经清楚整个雷达仿真的基本原理并且能自己熟练的根据公式写出雷达信号仿真的距离和相位变化信息。如果这里概念不清楚,请看这 qwe14789cn:雷达信号仿真的基本原理——时延与相位的变化​zhuanlan.zhihu.com 如果你能够熟练的完成上述要求,那么今…

loam框架的注意点,公式推导细节,lego-loam对其的改进及自身不足,

目录 前端流程及注意细节: 总体结构: 特征提取部分: 特征关联匹配部分: 最小二乘优化部分: 后端部分: lego-loam对其的改进: 前端流程及注意细节: 总体结构: 1.激…

神经元振荡中相位幅值耦合的量化:锁相值、平均向量长度、调制指数和广义线性模型交叉频率耦合

相位振幅耦合是研究脑电和脑磁图中认知过程的一个很有前途的方法。由于概念新颖,文献中采用了多种方法来计算相幅耦合。本文利用模拟数据对锁相值(PLV)、平均向量长度(MVL)和调制指数(MI)这三种最常用的相幅耦合测量方法和广义线性模型交叉频率耦合(GLM-CFC)方法的性…

从LVI-SAM来看激光与视觉的紧耦合系统

0.简介 快过年了,这里打算以这一篇博文作为结尾,来迎向2022春节。同时也希望新的一年能够继续不断提升自我。 1. 系统介绍 本文提出了一种紧耦合的雷达视觉惯导SLAM系统,可以实时高精度鲁棒的进行状态估计和建图。 LVI-SAM构建在因子图之上…

武汉大学《GNSS、INS和激光雷达的紧密耦合预积分,用于城市环境中的车辆导航》

摘要 定位和导航的需求不断增长。目前,全球导航卫星系统(GNSS)被认为是全球定位服务的重要手段。然而,由于严重的信号衰减、反射和阻塞,其在城市地区的应用受到了限制。惯性导航系统(INS)可以在…

运放放大倍数计算公式_放大器设计100问

噪声是电子设计中必须处理等信号之一,我们都知道放大器的噪声有两种类型:一种是外部噪声,来源于放大器外部;另一种是内部噪声,来源于器件本身,处理放大器的噪声对于提升电子产品的性能至关重要,这里我们以问答形式对放大器噪声原理进行阐述,并阐述一些如何处理放大器噪…

slam框架:紧耦合激光视觉惯性里程计的统一多模态地标点跟踪

论文题目: Unified Multi-Modal Landmark Tracking for Tightly Coupled Lidar-Visual-Inertial Odometry 紧耦合激光视觉惯性里程计的统一多模态地标点跟踪 参考链接: 【泡泡点云时空】紧耦合激光视觉惯性里程计的统一多模态地标点跟踪 摘要&#…

RF-LIO:面向高动态场景的紧耦合LiDAR惯导融合里程计(IROS 2021)

RF-LIO: 面向高动态场景的紧耦合LiDAR惯导融合里程计 单位:西安交通大学 针对问题: 实际场景中动态因素的引入造成基于静态假设的LIO严重位姿漂移 提出方法: 提出基于自适应的多分辨率Range Image的动态点移除算法,并使用紧耦合的…

经典文献阅读之--Globally Consistent and Tightly Coupled 3D LiDAR Inertial Mapping(紧耦合3D激光雷达)

0. 简介 传统的地图生成方法一般是依靠Lidar和IMU结合的,但是问题在于,目前Lidar和IMU的紧耦合主要集中在前端里程计,基本没有涉及到后端全局优化以及建图的融合。为此文章《Globally Consistent and Tightly Coupled 3D LiDAR Inertial Map…

MD5加密的应用

简单介绍一下MD5加密的使用方法; MD5的全称是Message-Digest Algorithm 5(信息-摘要算法); 特点是不可逆的,一般解密不了; MD5Util工具类: package com.java.util;import java.io.UnsupportedE…

python md5加密解密_python md5加密解密

md5加密以后的字符串长度 我下了一段用JAVA实现MD5加密的算法,不管输入字符串多长,加密后的字符加密后为128位(bit),按照16进制(4位一个16进制数)编码后,就成了32个字符。MD5并不是加密算法zhidao,而是摘要算法。加密算法是可逆的,摘要算法是理专论上不可逆的,详细…

Java MD5 加密工具类

一、MD5简介 MD5消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确…

为什么md5不可逆,却还可能被md5免费解密网站解密

md5在网络安全中起到非常重要的作用,它被用于保证数据的完整性,以及数据不被篡改。同时,md5还被用来进行密码加密。一些朋友不了解为什么md5不可逆,却还可能被号称能解密md5的网站解密。因此,有人说md5不够安全&#x…

matlab中进行多行注释,取消

在MATLAB中可以在行首部加 1 %来进行注释, 2 加%%空格来进行划分不同的程序段。 但在进行多行注释时,针对单行进行操作过于麻烦,可以利用快捷键进行多行注释。 可以先选中需要注释的行,然后按“ctrlR”进行注释, 多…

Matlab多行注释单行程序分行写

2019独角兽企业重金招聘Python工程师标准>>> 一、Matlab注释 1)、单行注释:当然是行首加‘%’了。 2)、多行注释: a、选中你要加注释的内容,然后选择工具菜单“text|comment”就可以了, 快捷键是…

funcode游戏实训,java及C/C++,网上整理

软件,常见错误都有。 所有资源可到公众号获取(源码也是),不再直接分享

funcode环境配置(亲测有效)

vmware 虚拟机版本是15.5.1 虚拟机版本链接 win7专业版镜像文件 迅雷(打开迅雷复制即可) ed2k://|file|cn_windows_7_enterprise_with_sp1_x64_dvd_u_677685.iso|3265574912|E9DB2607EA3B3540F3FE2E388F8C53C4|/ 过程可供参考 vc2012任何版本均可 设置过程: 打…

funcode实验--海底世界(c++实现)

C语言课程设计一海底世界 一、实验内容 海底有若干条鱼,其中若干条相同的鱼向一个方向游动,另一条来回随机游动,由玩家用键盘W A S D控制另外一条游动。 要求如下: 1、 来回游动的鱼,从屏幕左边游进来,…

FunCode太空战机C++实现

仅供交流学习使用,因博主水平有限,有错误欢迎批评指正 作者(即博主本人): Akame Qixisi / Excel Bloonow IDE:Code::Blocks 17.12 编译器需要支持C14或以上标准(Code::Blocks如何设置见附录Ⅰ&…