由于现有的仿真环境缺少对黏附力的定义,所以在仿真过程中只能以正压力来代替机器人脚掌所受的黏附力,而在仿壁虎机器人运动过程中,用正压力很难模拟出类似脚掌黏附阵列所产生的黏附力,为进一步完善机器人仿真系统,本书利用弹簧-阻尼模型来模拟脚掌所受的黏附力,以求更好地模拟机器人运动的真实情况,创建更加符合现实状况的仿真环境,使得仿真结果更加具有分析和研究价值。
本书利用Kelvin模型来计算弹簧-阻尼系统中的受力情况,典型的Kelvin模型如图7.4所示,其由两个基本的力学元件构成,即理想弹性元件和理想黏性元件。
对于理想弹性元件应力应变关系为τ=Eγ,对于理想黏性元件应力应变关系为τ=F,由于Kelvin模型是由弹性元件和黏性元件并联而成,总的应力可以看作是由弹性变形和黏性阻力产生的应力之和,即式中E为弹性元件的弹性常数;F为黏滞系数;γ为应变;γ˙为应变速率。
图7.4 Kelvin模型
仿壁虎机器人脚掌受的黏附力是由高分子材料构成的黏附阵列产生的,具有各向异性。由于该高分子材料具有黏附特性,而且其各向异性可以通过给定不同方向的弹性常数和黏滞系数来获得,所以利用Kelvin模型建立脚掌的黏附力模型是可行的。
在已经建立的动力学模型的基础上,加入必要的传感器、反馈力判断函数和力驱动模块就可建立机器人脚掌黏附力模型,具体流程如图7.5所示。
图7.5 黏附力工作流程
加入黏附力模型以后的左前腿模型框图如图7.6所示。
图7.6 加入黏附力模型的左前腿系统框图
从模型框图中可以看到脚掌上连有传感器,采集脚掌在运动过程中在x、y和z轴方向的位移与速度信号,经过三个力反馈函数(Fx_Function、Fy_Function和Fz_Function)的判断、运算得到相应的接触面对于机器人脚掌的作用力,最后通过驱动模块作用于相应的脚掌。
从图7.3中可以看出z轴方向为垂直于机器人身体的方向,y轴方向为机器人前进方向,x轴方向垂直于前进方向,同时机器人脚掌受到三个方向的力,分别为Fz、Fy和Fx。
相应三个方向上的脚掌力反馈判断函数流程图如下所示。
(1)z轴方向上的力反馈函数流程如图7.7所示。
图7.7 z轴方向上的力反馈函数流程
相应的判断函数中使用switch语句嵌套if语句进行位移和力的判断、反馈,kp和kv分别代表相应方向的E和F,其左前脚掌相应函数的核心代码如下:
switch CONTACT_L1
caseˈnˈ
if Z<=0
f=kp*Z+kv*Vz;
CONTACT_L1=ˈyˈ;
else
f=0;
end
caseˈyˈ
if Z<0
f=kp*Z+kv*Vz;
else
f=kp1*Z+kv1*Vz;
if f<=-fz;
f=0;
CONTACT_L1=ˈnˈ;
I_L1=0;Y_L1=0;K_L1=0;X_L1=0;
end
end
end
(2)y轴方向上的力反馈函数流程如图7.8所示。
在y轴方向的判断函数中也使用switch语句嵌套if语句进行位移和力的判断、反馈,kp和kv分别代表相应方向的E和F,但是在y轴方向要分别设定向前运动和向后运动的kpY1和kvY1,其左前脚掌相应函数的核心代码如下:
switch CONTACT_L1
caseˈyˈ(www.daowen.com)
f=kpY1*(Y-Y_L1)+kvY1*Vy;
if f>=fy1||f<=fy2
f=0;
CONTACT_L1=ˈnˈ;
I_L1=0;Y_L1=0;K_L1=0;X_L1=0;
end
f=kpY2*(Y-Y_L1)+kvY2*Vy;
if f>=fy1||f<=fy2
f=0;
CONTACT_L1=ˈnˈ;
I_L1=0;Y_L1=0;K_L1=0;X_L1=0;
end
return;
caseˈnˈ
f=0;
return;
end
图7.8 y轴方向上的力反馈函数流程
(3)x轴方向上的力反馈函数流程如图7.9所示。
图7.9 x轴方向上的力反馈函数流程
同样的在x轴方向的判断函数中也使用switch语句嵌套if语句进行位移和力的判断、反馈,kp和kv分别代表相应方向的E和F,在x轴方向也要分别设定向左运动和向右运动的kpX1和kvX1,其左前脚掌相应函数的核心代码如下:
switch CONTACT_L1
caseˈnˈ
f=0;
caseˈyˈ
if(X-X_L1)<=0
f=kpX1*(X-X_L1)+kvX1*Vx;
if abs(f)>=fx;
f=0;
CONTACT_L1=ˈnˈ;
I_L1=0;Y_L1=0;K_L1=0;X_L1=0;
end
else
f=kpX2*(X-X_L1)+kvX2*Vx;
if abs(f)>=fx;
f=0;
CONTACT_L1=ˈnˈ;
I_L1=0;Y_L1=0;K_L1=0;X_L1=0;
end
end
end
在函数中有些变量是需要在同一个脚掌的三个方向的判断函数中共同调用的,如CONTACT_L1,有些变量是需要在四只脚掌相同方向的函数中共同调用的,如kpY1和kvY1等,所以这些变量需要在每个程序的开始部分设置成全局变量,即global类型。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。