笔者在做Adams与Matlab联合仿真过程中,设置驱动函数发现与理想的情况不符合。最后通过与同学讨论与自己的实验找到了一点规律,希望对有同样的问题的同学有些帮助。
同时,由于实验不充分,许多问题没有得到充分的验证,希望大家以怀疑与纠错的态度阅览本文,若其中有不正确的地方,望多多批评指正。
d
的联系d
。d
,理解数值参数单位为弧度;数值参数后加d
,理解数值参数单位为角度。虽然在软件中设置了默认角度单位值(一般机械设计行业默认MMKS
,角度单位为度),但是在转动关节中若数值后不加符号d
,默认为弧度。
例如,设置一个幅值为90度,周期为10s的驱动函数,有以下可能情况,但仅方法1满足要求:
# 方法1 (正解)
step (MOD( time , 10 ),0,0d,5,90d) + step (MOD( time , 10 ),5,90d,10,0d) -90d
# 方法2 (所有角度数值均理解为弧度单位)
step (MOD( time , 10 ),0,0,5,90) + step (MOD( time , 10 ),5,90,10,0) -90
# 方法3 (混合方法1与2)
step (MOD( time , 10 ),0,0,5d,90d) + step (MOD( time , 10 ),5,90d,10d,0) -90
d
的理解所有表达式、函数的输入、输出参数均无单位(角度无单位换算后即rad)。
若要输入单位为角度的数值参数进行计算,通过将其乘以pi/180,换算为弧度大小,再代入函数实现。为了表述简便,令d = *pi/180
。
对于输入为角度参数的函数,有两种实现方法:
[数值]d
视为角度进行表达式的正常计算(调用的函数形参单位可以度时),可以认为d
表示前一个数值参数单位为度。30d # --> 30度
30d * time # --> 30*t 度*s
step(time, 0, 0d, 5, 90d) # step中参数为单位为度
1 + 1d # --> 1rad + 1度 = 58.296度 (交换律)
1 - 1d # --> 1rad - 1度 = 56.296度 (交换律)
2 * 45d # --> 90度 (交换律)
sin(90d) # --> sin(90d) = 1 = 1rad = 57.296度
[角度数值]d(单位: 度)
转化为[弧度数值](单位:rad)
代入计算。可以理解为# 除法
1 / 1d # --> 42.8064度
"""
计算过程:
∵d不可直接视为单位进行除法
∴1 / 1d
= 1 / (1 * (pi/180))
= 1 / (1 * (pi/180)) rad
= 180 / pi rad
= 180 / pi * (180/pi) 度
= 3282.80635 度
= 9 * 360度 + 42.806358 度
= 42.806358 度
"""
# 开方
sqrt(1d) # --> 7.5694度
"""
计算过程:
∵d不可直接视为单位进行开方运算
∴sqrt(1d)
= sqrt(1 * (pi / 180) rad)
= sqrt(1 * (pi / 180))
= sqrt(1 * (pi / 180)) rad
= 0.1321109099 rad
= 7.569397566 度
"""
d
表示时间微分结果(待研究)DTOR * 779737d # --> 0
# 期望得到180度
3.1415926 # --> 180度
pi # --> 180度
# 期望得到180度
180d # --> 180度
# 期望得到0~180度的动态变化
step(time, 0, 0d, 5, 180d)
# 期望得到一个度数为表达式的返回值的角度(expression = 180, 单位: 度)
# DTOR 为度单位变化为rad的值 = pi/180
DTOR * [expression] # --> 180度
[注意] 语法要求不可直接在表达式之后+d。 例如,表达大小等于10度的角度大小: 不可使用:sqrt(100)d 可替换为:DTOR * sqrt(100)
[数值参数]d
的方法。180d
180d * time
varval(系统变量)
),使用DTOR * [expression]
的方法。DTOR * varval(InputFromMatlab_UintInDegree)
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删