关于Adams驱动函数单位与符号d的问题
笔者在做Adams与Matlab联合仿真过程中,设置驱动函数发现与理想的情况不符合。通过上网查资料、问前辈,前后花费了近一个月的时间仍然没有解决问题┗( T﹏T )┛太迷惑了。
最后通过与同学讨论与自己的实验找到了一点规律,希望对有同样的问题的同学有些帮助。
同时,由于实验不充分,许多问题没有得到充分的验证,希望大家以怀疑与纠错的态度阅览本文,若其中有不正确的地方,望多多批评指正。
驱动函数单位与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
视为角度进行表达式的正常计算(调用的函数形参单位可以度时),可以认为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度
- 数值参数 + d
# 期望得到180度
180d # --> 180度
- 数值参数 + d 并配合可用表达式
# 期望得到0~180度的动态变化
step(time, 0, 0d, 5, 180d)
- DTOR * 非数值表达式(返回一个无单位数值参数)
# 期望得到一个度数为表达式的返回值的角度(expression = 180, 单位: 度)
# DTOR 为度单位变化为rad的值 = pi/180
DTOR * [expression] # --> 180度
[注意] 语法要求不可直接在表达式之后+d。
例如,表达大小等于10度的角度大小:
不可使用:sqrt(100)d
可替换为:DTOR * sqrt(100)
总结
- 如果有一个确定的角度数值参数(实际的数值,如180,90之类的数),使用
[数值参数]d
的方法。
180d
180d * time
- 如果有一个返回值单位为角度的表达式(例如
varval(系统变量)
),使用DTOR * [expression]
的方法。
DTOR * varval(InputFromMatlab_UintInDegree)