关于Adams驱动函数单位与符号d的问题

关于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

对于输入为角度参数的函数,有两种实现方法:

  1. 输入角度参数单位为弧度,直接代入函数进行计算。
    输入参数为弧度

  2. 输入角度参数单位为角度,将角度参数后加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)
  • 12
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值