1.一种基于Unity3D引擎的虚拟智能骑行系统,其特征在于:所述系统包括基于Unity3D引擎的虚拟3D场景、虚拟场景阻力模拟模块和虚拟自行车的运动控制模块;
其中,所述基于Unity3D引擎的虚拟3D场景,用于利用Unity3D中的模型和动画创建虚拟场景,以作为骑行赛道;
所述虚拟场景阻力模拟模块,用于根据不同地形的不同阻力系数和所处位置的相应坡度值,模拟出合理真实的骑行阻力感受;
所述虚拟自行车的运动控制模块包括:基于Unity3D中transform类中Translate方法的自行车模型移动控制部分,基于transform类中Rotate方法的自行车模型转向控制部分,以及用于运动状态更新和同步协同部分。
2.如权利要求1所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于:所述虚拟场景阻力模拟模块中,计算骑行用户所处虚拟赛道中位置的阻力档位以传递给下位机,步骤如下:步骤1.1,首先要为搭建好的虚拟场景赋予不同地表的摩擦阻力系数n;
步骤1.2,场景初始化时获取整个场景所有的坡度值p,坡度值p为用户骑行方向与水平正方向夹角,上坡时为正,下坡时为负,场景初始化时,获取到整个场景中的所有坡度值数列p;
步骤1.3,计算获得场景单个档位的坡度值,即该场景的一个坡度单位,记录最大坡度值pMax和最小值pMin,上坡的档位划分单位值就可以表示为pMax/(Max(A,B)-1),下坡的划分为pMin/(Min(A,B)),其中A和B为该场景的坡度系数,这里A和B中,上坡档位系数为正数,下坡档位系数为负数;
步骤1.4,用户骑行过程中,通过触发器时会判断其所处位置地表,获取相应的摩擦阻力系数n;
步骤1.5,用户骑行过程中,通过固定物理时间轴FixedUpdate()实时判断其所处位置地表,获取相应的坡度值数据Slope;
步骤1.6,依据获取到的摩擦阻力系数n和坡度值数据Slope,精确模拟出骑行阻力,计算用户所处位置的阻力档位Stalls,公式如下:步骤1.7,将阻力档位信息传递给下位机,下位机的阻力模拟模块依据阻力档位模拟出对应强度的阻力。
3.如权利要求2所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于,所述步骤
1.4中,获取摩擦阻力系数的方法如下:
步骤1.4.1:假设虚拟骑行场景包含i个不同路面场景:R1,R2…Ri,路面R1是场景的基础路面形态,初始化时直接将路面R1的摩擦阻力系数保存为自行车的摩擦阻力系数的默认值;
步骤1.4.2:设置i-1个全局触发器,每个触发器的范围都覆盖对应一个路面场景的所有控件;
步骤1.4.3:当自行车模型进入某个路面Rj的瞬间,便会触发该触发器的功能函数OnTriggerEnter,将路面Rj的摩擦阻力系数赋给自行车的摩擦阻力系数,并传给下位机;
步骤1.4.4:当自行车模型离开某个路面Rj的瞬间,便会触发该触发器的功能函数OnTriggerExit,自行车的摩擦阻力系数恢复为默认值,并传给下位机;
步骤1.4.5:如此循环1.4.3、1.4.4直到骑行终点,触发所有i-1个触发器,实时获取过程中不同路面的摩擦阻力系数。
4.如权利要求2所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于,所述步骤
1.5中,获取的坡度值数据Slope的方法如下:
步骤1.5.1:自行车模型的Transform组件中的Rotation属性中以四元数的形式存储着模型的三维角度信息,其中z属性值恰好对应着自行车在斜坡上的角度,为了获取欧拉角度,调用localEulerAngles方法以欧拉角度形式读取当前位置的自行车模型位置的z属性值;
步骤1.5.2:自行车模型与水平正方向与夹角A即为坡度Slope,上坡时A和实际倾斜角度z之和为360度,下坡时A即为实际倾斜角度z,因此当前角度A按如下公式计算:步骤1.5.3:通过固定物理时间轴的FixedUpdate()定时刷新,实时获取到当前自行车模型位置的坡度信息。
5.如权利要求1~4之一所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于:所述虚拟自行车模型的运动控制模块包含虚拟自行车模型的前进速度控制和用于转弯的角速度控制,步骤如下:步骤2.1:通过固定物理时间轴的FixedUpdate()定时刷新整个工程;获取下位机的运动信息;
步骤2.2:使用transform组件中的Translate方法,来控制自行车模型的前进速度;使用transform组件中的Rotate方法,来控制自行车模型的转弯角速度;
步骤2.3:协同程序对固定时间轴函数进行调整,让动画的更新能在图形渲染时间轴上进行更新,即Update()。
6.如权利要求5所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于,所述步骤
2.2中,使用transform组件中的Translate方法来控制自行车模型的前进运动,需要设置两个参数为物体运动的距离或方程s,以及坐标系;
其中第一个参数为物体运动速度方程,这里的速度结果为矢量:
s=Vector3.forward×Time.deltaTime×speed×speedCoefficientVector3(x,y,z)存储的是自行车模型的位置信息,这里将单位方向设置为Vector3.forward,即保证速度方向和虚拟自行车方向一致,Time.deltaTime为增量时间,以秒为单位,speed为下位机传来的速度数据,是个标量,由于虚拟场景和真实场景之间还是存在差异,下位机传输过来的真实数据并不能直接使用,通过乘以在测试中获取的速度协调系数speedCoefficient来得到虚拟自行车在场景中的前进速度;
第二个参数表示使用的坐标系,将第二个属性设置为Space.Self,即为自身坐标系,虚拟自行车在窗口中就能保证运动的正方向了。
7.如权利要求5所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于,所述步骤
2.2中,使用transform组件中的Rotate方法来控制自行车模型的转向运动,当半径一定时,线速度与角速度成比例关系,那么可以将虚拟自行车的前进速度和角速度关联起来;
Rotate方法的三个参数为分别为模型在三维世界中X、Y、Z轴旋转的单位距离,转向只会影响Y轴,故而第一个参数和第三个参数都是0,第二个参数即为转向角速度方程:其中a是转向系数,有正负之分,由于Rotate方法中参数是距离而不是角度,因此需要先通过角速度的基准值Aspeed来转换为角速度,AspeedCoefficient为角速度系数,在测试中获取。
8.如权利要求7所述的基于Unity3D引擎的虚拟智能骑行系统,其特征在于:控制虚拟自行车模型转向运动算法中,对角度进行了一次划分,以降低通信上的负担,同时给用户带来更好的体验,转向角档位moto具体计算公式如下:θ为下位机传过来的转向角度,角度为正代表左转,角度为负代表右转,公式中round是对括号内求四舍五入,因此档位moto符号为负代表左转,为正代表右转,0档为自行车直行,-5°~5°为它的范围,如此按照10°作为区分。