最近用simscape进行机器人的仿真,记录和总结一下学习心得和踩过的坑。
参照B站一位up主的视频做的仿真:
4自由度机械臂从Solidworks to Simscape 实现运动仿真
我也做了一个自己的简单小demo:
注意几点:
- simscape的数据是物理信号(PS:Physics Signal),和simulink信号之间需要进行转换。
- 从simulink到simscape需要用
Simulink-PS Converter
模块
- 从simscape到simulink需要用
PS-Simulink Converter
模块
- 仿真可以设置我们要使用的求解器和仿真步长(可变或者不可变)。点击模型设置。
求解器我们就可以选择开始时间和停止时间,求解器是否变步长、求解器类型等等。我选择的是停止时间是无穷大inf,定步长,求解器自动,求解步长0.001。
- 为了实现下面的实时拖动效果,需要添加一个增益模块Slider Gain和常数模块Constant,拖动增益模块的进度条就可以进行控制。
①仿真时把速度调到最大 256
×
\times
× 可以实现实时拖动实时显示。
②仿真时坐标系角度不对,原因是导出的坐标系可能定义和我们的定义不一样,比如实际转角为0度,simulink里却转动了90度。为了统一定义采用相对角度的思路,是通过子系统来实现的。
打开内部其实就是和90度做个加减法运算:
子系统封装可以参考文章
这就不用我们去想怎么把坐标系和我们定义的坐标系统一起来,同样可以得到正确的仿真运动。
另外这个90度是怎么来的呢,我们打开旋转副Revolute,
关注这个初始角:
在我的上一篇文章simscape仿真总结1-坐标系查看和自定义坐标系说的,这个数据在同文件目录下的***_DataFile.m
下定义。
找到这个smiData.RevoluteJoint(2).Rz.Pos的角度,我们看到确实是90度。
smiData.RevoluteJoint(2).Rz.Pos
③各个旋转副要注意使用位置输入,力矩Torque设置为Automatically Computed,位置Motion设置为Provided by Input,不能都设置成Provided by Input,会报错的。
关于具体的设置建议还是看matlab的官方文档,很详细,每个控件的定义都很详细,不过都是英文,要锻炼自己看英文的能力!
④把文件夹移动到了其他地方打开初始化出现了错误Cannot reload workspace from non-existing data source file,原因是找不到原来的Data_File文件了,解决办法:
关于打开Simulink文件报Cannot reload workspace from non-existing data source file警告的解决方案