遭遇瓶颈

学习资料:

如何想用APP Designer做出来的GUI控制机器人,可以查看下面的两个方法:(但是效果不好,下方有解释)

在命令行中输入:

% 查看MATLAB自带的 S 函数的例子
sfundemos

本文使用的控制方法目前没有找到参考资料。

1. 一次失败的尝试(不感兴趣可以直接看第二部分)

在上一节的学习中,我们成功的用APP修改了工作空间的变量,这时的我认为simulink可以直接读取workspace中的实时数据。然后我直接把simulink中slider的值写成了J1in,进行了仿真。但我还是太天真了,simulink的实际运行逻辑并不是这样的。这里放一个我失败的尝试-视频。

从视频我们可以看出来,APP的滑块确实更改了工作空间中的J1in变量,但是无法控制机械臂的关节运动,而simscape中的滑块也可以修改工作空间中的J1in变量,并且机械臂会受到其控制。

反思了一下,可能是因为我在simscape中只是输出了J1in变量,但并没有导入。于是我去掉了slider直接将工作空间的J1in作为外部输入,导入机械臂的控制系统。结果依然是失败的。进行了一些资料搜索后,我发现Mathwork中讨论这个问题的人其实不少,导致这个问题的原因是Simulink并不是一个实时系统,它只会读取我们点击Run那一时刻的工作空间变量,在开始仿真后,我们对工作空间的变量再怎么修改对与仿真都没有任何的作用了。这样的结果对我们很不利。

以上的思考都是基于把MATLAB的workspace作为中间平台,将两个程序通过MATLAB这个平台建立联系,但实际的操作是比较困难,并且效率很低,在视频中可以看到明显看到数据传输上的延迟。

那么能不能将我们做的APP作为Simscape框图中的一部分,让其在simulink的环境下运行呢?基于以上思考,便有了第二部分的内容。

2. simscape内的APP搭建

首先将之前搭建slider gain删除,保留其他的方块。C就是之前的1方块,只不过现在的Constant变成了时变量。

此后,创建6个slider(不是slider gain),用area将其框起来。

鼠标放在slier上,找到三个点,停留一会儿它就会变成如下的图示,找到connect,点击。

进入output中,点击constant的方块,将constant前面的标点一下,就连接好了。

然后回到表层就能看到刚才被我们连过的Output变成了紫色。

将所有的都连上后,测试结果如下。

可以看出这个Simulink内的GUI是可以控制机器人的运动的,但是视觉效果相比APP Designer做出来的差很多,并且不稳定。

总结:

日志4和5是比较失败的两篇,并没达到我想要的效果,此处放一个我希望达到效果的视频:

视频里展示的效果非常好,并且符合真实的机器人控制方式。视频里的人做到了这样的效果,但我这段时间的搜索,并没有发现他的这个解决方案,几天的摸索也只做出来了一些残次品。实在惭愧。但这也让我发现了自身的基础薄弱,以及MATLAB中一些不便的地方。

因此,可能在跟着MATLAB的教学视频走一段时间后,我就会逐渐向C++和ROS方向发展。

由于工作原因,本系列的文章会停更一段时间,一方面我需要沉淀一下知识,另外一方面是其他的事情比较忙。