基于单MEMS惯性传感器的运动追踪与轨迹重建*

2022-11-21 10:05王一峰赵
传感技术学报 2022年10期
关键词:拐点惯性轨迹

王一峰赵 毅

(哈尔滨工业大学(深圳)理学院,广东 深圳 518055)

MEMS惯性传感器是市场上重要的产品类型,它具有体积小、集成化程度高、功耗低、适合于批量化生产等优点,在智能手机创新空间逐步收窄以及市场增量接近饱和的情况下,基于惯性传感器的智能可穿戴设备成为了智能终端产业的热点。随着“中国制造2025”的提出,国家出台了可穿戴产业的扶持政策,与此同时,地方政府也出台相关的扶持和资助政策。例如,深圳市人民政府印发了关于可穿戴设备和智能装备产业发展规划。然而,由于MEMS惯性传感器的测量精度有限,因此大多只能用于姿态估计[1-4],振动检测[5],倾斜感知[6],简单动作识别[7-8]或是一些人体运动的定性分析[9-10],这些简单任务很难呈现运动过程中的细节信息。因此,基于MEMS惯性传感器的运动追踪技术将是可穿戴设备的主攻方向。对于运动追踪问题而言,运动轨迹的捕捉、还原是核心、基础性工作,在此之上,可以实现无卫星条件下的定位与导航,或对运动过程中的动能、运动消耗、力量变化做出分析。综合而言,如何可靠获取运动数据,精确还原运动轨迹,这是目前亟待解决的技术问题。

目前,基于惯性传感器的轨迹还原任务还处于起步阶段,文献[11]实现了水平桌面上的惯性传感器轨迹还原任务,该方法要求传感器紧贴桌面,因此运动过程十分稳定,这很大程度上减小了数据采集过程中的噪声,但也限制了该方法的应用场景。此外,该方法要求传感器每运动一小段距离,都需要静止一段时间,通过静止状态对运动过程进行分割,该方法最终实现了二维平面内轨迹的分段重建。类似地,文献[12]通过在笔中集成加速度计以及多个陀螺仪的方式实现了二维平面内轨迹的分段重建。但由于笔在使用过程中不会发生较大的姿态变化,且该方法仍然依靠静止状态对运动过程进行分割,因此很难适用于三维空间中的任意运动轨迹重建。文献[13]使用支持向量机对三维空间中的手部运动进行了分割,但分割点的确定仍然依靠静止状态的特征。文献[14]使用BiLSTM模型实现了对三维空间中高尔夫挥杆运动的准确分割,但由于该分割方法的特征工程高度依赖于高尔夫运动的特性,因此该方法并不能推广至任意运动过程的分割,因此无法用于任意运动轨迹的分段重建。

本文设计了一款基于惯性传感器的运动追踪模块,该模块搭载了数据增强算法,可有效提升传感器在姿态解算与轨迹重建任务中的效果。此外,本文设计了一套基于运动分割的轨迹还原方案,该方案中的分割算法不依赖于静止状态,而是根据运动过程中方向变化较大的时刻自适应地完成分割。由于该分割算法是以深度学习模型为基础的,随着数据集中分割点标签的变化,它所关注的分割点特征也会随之变化,因此该算法可以适应不同场景的运动分割要求,具有很强的泛化能力。

1 搭载数据增强算法的运动追踪模块

1.1 基于信号重建的数据增强算法

本文设计的数据增强算法借助经验模态分解、小波变换以及一维卷积神经网络来实现惯性传感器信号重建。由于双正交小波可以同时具备紧支撑特性、高消失矩特性和对称性,因此我们选择双正交小波族作为小波变换的基函数。此外,尽管增加小波基函数的数量有助于信号增强,但这种提升并不显著,并且会带来巨大的计算消耗,因此我们选择了15种较为典型的双正交小波基函数。数据增强算法整体可以分为两步:模型驱动式信号重建、数据驱动式信号重建,前者为后者提供训练所需的数据集。

1.1.1 模型驱动式信号重建

模型驱动式信号重建方案如图1所示。将运动追踪模块置于转台上进行多次转动,每次运动结束时借助转台记录本次运动过程中传感器姿态的变化情况,如图2所示。设某次运动过程中,运动追踪模块内惯性传感器采集到的6轴原始信号样本为X,其中第i轴信号表示为x i(x i∈X,i=1,2,3…6),则信号X的模型驱动式重建过程如下:

图1 模型驱动式信号重建方案

图2 传感器姿态变化测量平台

①对信号x i(x i∈X,i=1,2,3…6)进行经验模态分解,得到若干本征模态函数(Intrinsic Mode Function,IMF),其中X为一个6轴惯性传感器原始数据样本。经验模态分解的具体过程为:首先通过三次样条插值求出输入信号X(t)的上下包络线:u(t),d(t),及其均值m(t)。将输入信号X(t)减去包络线均值m(t)后得到信号h(t)。对信号h(t)进行判断,若满足允许条件,则将其作为IMF分量输出,更新X(t)后重复上述过程,直到满足停止条件;若h(t)不满足允许条件,则将h(t)作为新的输入信号并重复上述过程,直到满足停止条件。

②对得到的每一个IMF分量分别进行15种小波变换模式(不同的小波基,即视作一种小波变换模式,本文设置了15种不同的双正交小波基函数,它们分别是:‘bior1.1’,‘bior1.3’,‘bior1.5’,‘bior2.2’,‘bior2.4’,‘bior2.6’,‘bior2.8’,‘bior3.1’,‘bior3.3’,‘bior3.5’,‘bior3.7’,‘bior3.9’,‘bior4.4’,‘bior5.5’,‘bior6.8’)。此时,可以得到一个IMF分量y j(y j∈Y x i,j=1,2,3…M)的15种小波变换结果,其中Yx i为信号x i所分解出的所有IMF分量所构成的集合,M为集合中的IMF分量个数;

③将这15种小波变换结果分别替换原始IMF分量y j,再分别重建原始信号,得到了原始信号的15种信号重建结果;

④使用这15种原始信号重建结果分别进行姿态解算,得到15种姿态解算结果,将这15种姿态解算结果与测量数据时记录的真实的姿态变化进行对比,得到15个信号的姿态解算误差;

⑤将最小的姿态误差所对应的小波变换模式βk(βk∈{‘bior1.1’,‘bior1.3’,‘bior1.5’,‘bior2.2’,‘bior2.4’,‘bior2.6’,‘bior2.8’,‘bior3.1’,‘bior3.3’,‘bior3.5’,‘bior3.7’,‘bior3.9’,‘bior4.4’,‘bior5.5’,‘bior6.8’},k=1,2,3…15)记录下来,同时用该小波对IMF分量的处理结果替换原始的IMF分量;

⑥继续对下一个IMF分量进行操作。重复步骤②~步骤⑥。

通过采用模型驱动式信号重建,可以获得原始信号X所分解出的不同IMF分量y j的最优小波变换模式βk,因此,对于每个输入的信号样本X,及其分解出的IMF分量y j,都可以得到一组“IMF-小波模式匹配关系”:{[X,y j],βk}。

1.1.2 数据驱动式信号重建

本文进行了261次有效运动实验,在每次运动中采集6轴惯性传感器数据,共获得了1 566个单轴传感器信号。每个一维传感器信号都被经验模态分解为4到7个IMF分量,共获得了6 841个IMF分量,每个IMF分量都对应一种最优小波变换模式,最终得到了6 841组“IMF-小波模式匹配关系”,它们将作为训练集对一维卷积神经网络进行训练,使其可以根据输入信号智能地选择合适的小波处理模式。该过程即为数据驱动式信号重建。首先,本文需要基于6 841组“IMF-小波模式匹配关系”训练一个小波模式匹配器,即图3中的1DCNN模块,具体操作流程如下:①1DCNN模型的输入数据:“IMF-小波模式匹配关系”中的[X,y j]即为1DCNN模型的输入数据,它由原始信号X与由其分解出的IMF分量y j并联而构成,数据结构为7×N,其中N为信号长度;②1DCNN模型的输出数据:将并联数据输入一维卷积神经网络(1DCNN),输出为该并联数据中IMF分量对应的小波变换模式^βk;③1DCNN模型的训练:将模型输出的小波变换模式^βk与预先得到的“IMF-小波模式匹配关系”中的理想小波变换模式βk进行对比,计算误差,并根据误差更新1DCNN模型。重复步骤①~步骤③。

图3 小波模式匹配器的训练

经训练后的1DCNN模型可以根据输入的原始信号以及由其分解出的IMF分量判断出该IMF分量最适合的小波变换方式,此时可以将其作为一个固定的功能性模块嵌入到最终的数据驱动式信号重建流程之中,如图4所示,具体操作流程如下:①对6轴惯性传感器原始信号X的每一轴信号x i(x i∈X,i=1,2,3…6)分别做经验模态分解,得到若干IMF分量;②将每个IMF分量分别与原始信号合并,组成7×N的输入数据;③将数据输入训练好的1DCNN模型,得到该IMF所适合的小波变换模式;④对该IMF分量做对应的小波变换后,替换掉原始的IMF分量;⑤在替换完所有IMF分量后,对原始信号进行重构,得到新的6轴惯性传感器数据,完成数据增强。

图4 模型驱动式信号重建流程

由于MEMS惯性传感器具有较大误差,而运动追踪过程中二次积分的操作将显著放大该误差,并使得最终解算出的轨迹严重失真。因此,对MEMS惯性传感器采集的原始信号进行数据增强是非常必要的。为了减小惯性传感器误差,提升轨迹还原精度,本文设计了一种基于时间序列分解与重建的数据增强算法。为了便于集成该数据增强算法,本文设计了一款可协同运动追踪模块。

1.2 运动追踪模块研发

为了同时实现惯性运动数据采集与数据增强,本文设计的运动追踪模块可以分成两个主要的子模块:MEMS惯性传感器模块,以及数据增强模块。其中MEMS惯性传感器模块用于采集9轴惯性运动数据:三轴加速度、三轴角速度以及三轴磁力计数据,并将加速度、角速度数据输入数据增强模块。数据增强模块按照本文1.1节所提出的算法对收到的加速度、角速度信号进行经验模态分解,对得到的IMF分量进行小波变换后再重建加速度、角速度信号,从而实现数据增强,最终提升惯性传感器信号对姿态与轨迹的解算精度。完整的运动追踪模块设计如图5所示。

图5 运动追踪模块设计框图

MEMS惯性传感器模块与数据增强模块分别搭配有一个微控制单元(型号分别为:nRF51422以及STM32F),此外,MEMS惯性传感器模块还搭配有带电可擦可编程只读存储器(Electrically Erasable Programmable Read Only Memory,EEPROM),9轴惯性传感器,LED指示灯,采用频率切换开关等装置,其电路设计如图6所示。数据增强模块则搭配有电池电压检测器,LED指示灯,闪存等装置,其电路设计如图7所示。由于磁力计极易受测量环境的干扰,因此数据增强模块仅对6轴惯性数据(3轴加速度、3轴角速度)进行数据增强。

图6 MEMS惯性传感器模块电路设计图

图7 数据增强模块电路设计图

该运动追踪模块包含一个支持标准和快速模式的I2C串行总线接口(100 kHz和400 kHz)以及两个SPI串行标准接口,并通过蓝牙4.0通信协议实现与终端的实时通讯,经委托公司和我们实际测试发现,该运动追踪模块通信范围可达10 m,待机时间可达8 d以上。此外,惯性传感器模块通过通用异步收发传输器向数据增强模块发送数据,数据增强模块将接受到的数据储存于FLASH中,并通过集成于STM32芯片的算法完成数据增强。为了便于实现运动追踪,本文设计的运动追踪模块尺寸在2 cm×3 cm之内,模块实物如图8所示。

图8 运动追踪模块实物图

2 基于惯性传感器的智能运动分割

现有的惯性传感器轨迹还原方案大都借助运动过程中的静止状态实现对轨迹的分段重建。然而,这种重建方案破坏了运动过程中的连贯性,因此无法实现实时运动轨迹的还原。同时,由于惯性传感器的严重误差,分段重建是目前唯一一种可行的惯性传感器轨迹还原方式[15],因此,运动的智能分割技术就变得尤为关键。本文基于惯性传感器解算出的失真轨迹的形态学特征,借助多分辨率Fréchet距离[16-17]与深度学习模型提出了一种智能运动分割算法,该分割算法不依赖运动过程中的静止状态,而是凭借运动过程中方向的剧烈变化而检测分割点,因此不需要对运动做出限制,这是任意轨迹还原的先决条件。

2.1 基于惯性传感器失真轨迹的分割点检测

在一般的时间序列研究中,提取信号的波形特征是通用的做法[18]。然而,由于惯性传感器信号中存在严重的噪声干扰[19],加速度计信号中存在迟滞效应[20],并且陀螺仪信号中存在时间漂移现象[21],因此实际运动过程中方向剧烈变化的位置往往并不是原始信号的极值点[22],如图9所示,圆点表示借助光学传感器确定的运动分割点(方向剧变点),实线为由此得到的数据和轨迹片段,虚线为原始的未分割数据。

图9 光学-惯性轨迹与原始数据

可以发现,无论是原始的6轴传感器数据,还是加速度、角速度的矢量和数据,波形的极值点与真实的运动分割点(图9中圆点)都不会完全重合,甚至会相去甚远。因此,仅依赖原始信号的波形特征很难实现精确到帧的运动分割。然而从图9中可以发现,在由惯性传感器数据解算出的失真轨迹中,运动分割点刚好对应着轨迹的拐点,其原因在于,计算轨迹时的二次积分操作虽然放大了惯性传感器误差,但也同时放大了运动方向剧烈变化时产生的波动,而这种波动又往往会使得解算出的失真轨迹中出现明显的拐点。这种现象为运动分割任务提供了良好的特征。

然而,由于惯性传感器累计误差与时间漂移的影响,轨迹的解算结果中并非总是存在由运动方向剧变而产生的拐点,一个原因是:由原始信号解算出的世界坐标系下的三轴加速度可能会偏离坐标轴(由惯性制导理论,通过惯性传感器原始数据进行姿态解算,去除加速度计中的重力分量后,进行坐标系变换,得到世界坐标系下的加速度[23])。

例如,借助光学传感器采集物体运动的真实轨迹,如图10所示,可以看出,轨迹在Z轴运动时方向发生了剧变。而在原始的Z轴加速度信号中,其数值整体位于0坐标轴以下,如图11(a)所示,这意味着物体始终沿着Z轴的负方向运动,即便有一部分位于坐标轴上方,这部分数据所起的作用也仅仅是使得物体在负方向适当减速,而不足以导致物体向正方向运动,运动方向始终不变,轨迹中也自然不会出现拐点,如图11(b)所示。同理,XY方向加速度也会出现同样的问题。因此,为了呈现出失真轨迹中的拐点,需要对原始信号进行处理。值得注意的是,这部分数据处理的目的是突出轨迹中的拐点,从而实现精确到帧的运动分割,因此无需关注轨迹的失真程度。

图10 光学传感器采集的物体运动真实轨迹

图11 未经处理的世界坐标系加速度(Z轴)与对应轨迹

首先,将每轴信号都减去它的均值,即将其平移至坐标轴附近,如图12(a)所示。该操作使得失真轨迹由最初运动方向几乎恒定的直线变化为运动方向缓慢变化的弧线,如图12(b)所示。此外,去均值化操作也可以使得后续的操作更为稳定。

图12 去均值化的世界坐标系加速度与对应轨迹

然而,轨迹中运动方向的变化不够剧烈,缓慢变化的轨迹是不足以提供明确拐点信息的。该问题在加速度数据上的表现为:拐点处加速度值不具有明显优势,因此无法迅速改变此前积累的运动速度,即短时间内扭转运动方向。因此,需要增强分割点附近的信号强度,并对非拐点信号做适当削弱。可以发现,拐点处数据波形频率较低,因此方差较小。利用该特征,本文设置了一个滑动窗口,将窗口内加速度数据除以对应的方差,实现拐点处数据的放大以及其余部分数据的抑制,如图13所示。

从图13中世界坐标系加速度与对应轨迹中可以看出,由于拐点处的数据在数值上具有明显优势,因此轨迹的变化几乎完全由拐点处的数据决定,该特性保证了本文对拐点处数据的操作可以最大限度地对轨迹产生影响。由于本文需要拐点处运动方向的变化更为剧烈,因此拐点后半段的数据需要被适当放大,具体操作如下:

图13 除方差后的世界坐标系加速度与对应轨迹

①检测拐点的大致位置;在经过上一步处理后,三轴加速度在拐点处的数值被放大,在非拐点处的数值被缩小,因此通过设定合适的阈值即可确定拐点的大致区间。由于此前曾对信号进行过“去均值化”处理,因此在该区间内三轴加速度会分别存在一个过零点,三个过零点的均值Q即确定为拐点的大致位置;

②对Q点之前的数据不做处理,对其之后的数据乘以一个衰减的增益函数f(t):

式中:t是时间轴的对应帧,σ是人为设置的大于零的超参数,可根据需要调整,σ越小对信号的增益越强。

该增益函数可以增强运动方向变化的剧烈程度,使轨迹中的拐点更为明显。最终,本文得到了具有明显拐点的运动轨迹,如图14所示。

图14 加增益后的世界坐标系加速度与对应轨迹

在得到具有明显拐点的失真运动轨迹之后,本文利用轨迹的形态学特征对拐点进行检测,即可得到相对精准的分割点。本文设置了一个多尺度样条函数在轨迹上滑动,每次滑动都可以看成是样条函数对窗口内轨迹的一次拟合,Fréchet距离被用来衡量样条函数与窗口内轨迹片段的拟合效果或接近程度。一般情况下,样条函数可以很好地拟合对应轨迹片段,此时Fréchet值较小,然而当它滑动到运动方向剧烈变化的位置,样条函数很难拟合拐点处的失真轨迹,Fréchet值会陡然增加,由此可以得到分割点位置。由于不同尺度的样条函数对不同轨迹形状的敏感度不同,本文设置了多尺度样条函数实现对分割点的精确检测。

2.2 基于惯性传感器原始波形的分割点检测

虽然基于失真轨迹的分割点检测模型已经实现较好的分割效果,但由于该模型不具有可学习的参数,它对于分割点检测的规则是固定的,因此很难根据不同的要求自适应地调整分割的严苛程度,例如,在一些动作轨迹中(如手写数字、字母)即使存在剧烈的方向变化,我们也不希望该运动被模型分割,同理,在两个包含完整语义信息的动作之间,即使动作方向变化的剧烈程度不高,我们也希望模型能将其分割,这就需要预先根据人为需要标注大量分割点,并借助深度学习模型进行训练。因此,本文借助光学传感器捕捉到的信息对惯性传感器原始波形中的分割点进行标注,实验过程如图15所示。

图15 借助光学传感器对惯性传感器进行标注

在得到惯性传感器数据中的分割标签之后,本文训练1D-CNN模型实现基于6轴传感器数据波形的分割点检测任务。具体做法是:设置一个在原始数据上滑动的窗口,并将窗口内的6轴数据输入1D-CNN模型,该模型将对窗口内的潜在分割点进行预测,通过对比预测结果与预先标注好的分割标签可以得到预测误差,随着窗口的滑动,大量的误差被反向传播回1D-CNN模型使其得到训练。最终,经过充分训练的模型具备了根据输入的波形数据预测潜在分割点的能力。

为了结合基于波形特征与轨迹形态特征检测到的两类潜在分割点,本文设置了一个“与”门。当基于轨迹形态特征检测到的分割点附近存在基于波形特征检测到的分割点时,则将二者的中点判定为最终的分割点;当基于轨迹形态特征检测到的分割点附近不存在基于波形特征检测到的分割点时,则将该点删除。该“与”门融合了形态与波形两种特征,且融入了人为的分割意图,在精确检测运动分割点的同时保证了最终得到的分割点可以适应不同的需要。

3 结果与讨论

3.1 数据增强结果

由于姿态解算任务是轨迹重建任务的核心,因此本文通过姿态解算任务衡量数据增强算法的效果。将运动追踪模块置于转台之上,每次转动时记录初始时刻与运动终止时刻的姿态变化情况。表1第一列展示了5次测试中的姿态转动情况。

表1 仿真数据表

对每次转动过程中采集到的原始惯性传感器信号进行姿态解算,结果如表1第二列所示。对经数据增强后的惯性传感器信号进行姿态解算,结果如表1第三列所示。可以看出,本文提出的数据增强算法显著提升了基于惯性传感器的姿态解算结果。

3.2 运动分割结果

为了验证本文所提出的智能运动分割模型的实际效果,测试人员手持惯性传感器以0.5 m/s~1.5 m/s的速度进行连续手部运动。在约165 s(32 887帧,采样频率为200 Hz)的运动过程中共执行了62个包含完整语义信息的手势动作(26种字母大小写以及数字0~9)。本文所提出的智能运动分割算法从32 887帧数据中检测出124个分割点,如图16所示,圆点即为模型检测出的分割点,二者之间的曲线即为不同手势动作所对应的惯性运动数据。

图16 包含62个手势动作的惯性运动数据分割结果

通过对比光学传感器标注的数据分割点可以发现,该智能运动分割模型不仅准确地识别出了62个包含完整语义信息的手势动作,同时对每个动作起始与终止帧的位点检测也可以精确到个位。该算法的智能之处在于,即使这62个手势动作中包含大量运动方向剧烈变化的位置,该分割模型也并不会将其判定为分割点。以手势动作“9”为例,该动作在运动过程中存在运动方向剧烈变化的情况。本文提出的“基于失真轨迹的分割点检测算法”虽然可以准确检测该手势动作的起始与终止时刻,并将其对应数据从长达数万帧的原始数据流中提取出来,但由于这是一种非智能运动分割算法,因此它会对手势动作内部运动方向剧烈变化的位置也进行分割,导致一个完整的动作轨迹被分开重建,如图17(a)、(b)轨迹还原结果所示。而结合基于深度学习的分割点检测算法之后,由于数据标注者在制作数据集以及模型训练过程中融入了分割意图,因此手势动作内部数据不会再被判定为分割点,最终可以实现动作轨迹的完整重建,如图17(c)所示。

图17 运动分割算法轨迹重建对比

值得注意的是,模型检测出的分割点位置确实并非波形数据中的极值点,而该模型能够从单调或平缓的不具有明显特征的波形中准确检测出运动分割位点,这证明该智能分割模型对于轨迹形态特征的引入是成功的,这也与本文此前的分析一致。

3.3 轨迹重建结果

本文设计的运动追踪模块通过集成数据增强算法,显著提升了对物体运动过程中姿态变化的解算能力,这使得小尺度、高精度的运动追踪与任意轨迹重建成为了可能。而本文提出的智能运动分割算法又将长时间的运动过程分割为若干短时间的轨迹片段,通过将数据增强算法与运动分割算法相结合,本文实现了对任意轨迹的分段精确重建,如图18所示。

图18 基于惯性传感器增强数据的轨迹分段重建结果

由于本文提出的智能分割算法可以根据不同动作所包含的语义信息实现精准的运动分割,因此最终得到的轨迹分段重建结果中包含的语义信息十分完整,即使运动内部出现运动方向剧烈变化的位置,该分割算法也不会强行将其分割。此外,运动轨迹重建结果中的首尾部分也基本不会出现多余的轨迹片段,这也证明了该运动分割算法的准确性。由于本文提出的数据增强算法可以实现对运动过程中姿态角(方向角)的高精度实时解算,因此与未经过数据增强的轨迹还原结果相比(如图19所示),增强之后的惯性传感器数据可以显著提升轨迹的还原精度,特别是对于一些较为复杂的无法一笔完成的轨迹动作,例如手势“4”,即使连笔部分会对运动方向造成巨大的干扰,本文所提出的轨迹还原方案依然可以对运动轨迹实现高精度重建。

图19 基于惯性传感器原始数据的轨迹分段重建结果

4 结论

本文实现了基于单MEMS惯性传感器的运动追踪与轨迹重建任务。为了解决MEMS惯性传感器精度较低的缺陷,提出了一种基于时间序列分解与重建的数据增强算法,通过将该算法集成于芯片之中,设计了一款基于MEMS惯性传感器的可协同运动追踪模块,该模块具备蓝牙通讯功能,经实际测试,通信范围可达10 m,待机时间8 d以上。该运动追踪模块通过集成数据增强算法,可以实现对短时轨迹的精准重建。为了达到对任意轨迹的重建,提出了一种智能运动分割算法,该算法通过融合信号的波形信息与轨迹的形态信息实现了精确到帧的运动分割,且不需要对运动过程做任何约束。此外,该智能分割算法可以借助机器学习模型融入数据标注者的分割意图,因此可以适应不同的分割需求与应用场景。通过结合数据增强算法与智能运动分割算法,实现了对任意轨迹的精确重建。

猜你喜欢
拐点惯性轨迹
冲破『惯性』 看惯性
轨迹
轨迹
秦国的“拐点”
新拐点,新机遇
恢复高考:时代的拐点
轨迹
无处不在的惯性
《廉洁拐点》
进化的轨迹(一)——进化,无尽的适应