大家如果完成了连载4的内容,接下来面临的就是如何驱动机械臂了,那么这一节的主要目标就是全面介绍在Vrep、Matlab和Simulink中,如何使用Vrep自带的Lua脚本和Matlab结合Peter Corke的Robitic Toolbox以及Simulink的VrepLib库,来控制机械臂,完成一些有趣的运动。

前言

这篇文章距离上一篇文章时隔太久了,一方面是最近几个月事情太多,没有抽出太多时间;另一方面是准备一篇手把手的文字教程实在是很耗时间。所以这次我想稍微改变一下,文档的内容我只列出提纲和大概的内容,完成的过程和讲解通过录制视频来完成,这样更加生动一些,这次先尝试一下,看看大家的反馈吧^_^
本节教程需要大家熟悉 连载 2连载 3这一节的内容,并要有基本的机械臂基础知识,我这里主要是参考的这两本书——《机器人学导论(原书第4版)》《机器人学、机器视觉与控制――MATLAB算法基础》。推荐大家入手这两本书,是非常好用的工具书。

此教程是基于vrep 3.5.0版本制作的,初学可以先安装此版本进行学习,后面再使用更新的版本。(旧版下载链接:链接:https://pan.baidu.com/s/1PIl5t-Pwx2dawOIHfzDelA提取码:qirx)

本节介绍

本节主要分为三个部分:

  1. 使用Vrep的RML库控制机械臂各个关节,实现关节空间的控制
  2. 使用Vrep自带的IK模块(逆运动学求解器)进行机械臂工作笛卡尔空间的运动控制
  3. 使用Matlab驱动机械臂各个关节,实现关节空间的控制
  4. 使用Matlab Robitic Toolbox对机械臂进行建模,建立机械臂DH矩阵,并使用工具箱的逆运动学求解工具(ikine6s、ikine)实现matlab控制机械臂
  5. 使用VrepLib,通过Simulink快速搭建vrep控制模型(推荐阅读!!!)。
    本节的知识容量比较大,但是可以归为三个部分且互相独立,大家可以根据自己的需求进行选择学习。第一部分:内容1和2是基于vrep自身的编程工具实现的;第二部分:内容2和3是基于Vrep与Matlab的接口以及Matlab Robitic Toolbox实现的;第三部分:内容4是基于我自己的写的Vrep的Simulink工具箱——VrepLib实现的,给大家介绍一下基于Simulink非常简便的Vrep控制流程的开发。
    完整的例程模型请点击购买

基础知识

对于机械臂的操作来说,大家必须具备一些基本知识,下面列出的这些内容并不是让大家立即翻书弄明白了再来看教程,而是先有一个初步概念,我会在视频讲解中介绍一下,大家看完整个教程之后再补充相关的知识就可以了。
基础知识:理解 坐标变换->正运动学、机械臂求解->逆运动学 是非常重要的。坐标变换的基础需要大家要熟知齐次变换矩阵、欧拉角、四元数,明确它们表达的含义和优缺点;机械臂描述需要大家知道DH矩阵或者其变种的计算方式;正运动学的意义和逆运动学的解析解和数值解的大概计算方式。

1.Vrep驱动PUMA560机械臂

这一部分采用Lua 与 Reflexxes Motion Library的方式,去驱动各个关节的位置进行变化,也可以采用程序直接控制关节位置,这一部分内容比较常规,大家可以浏览[连载 2]Vrep小车建模——内嵌脚本熟悉Lua的基本编程,听结合本节视频和源码实现下图的功能,详细介绍请看视频教程。
知乎上所有的动图全部挂掉了!!!!大家请去简书上看更方便

https://vdn1.vzuu.com/SD/35a10bca-2384-11eb-9c6a-16e11600bfd3.mp4?disable_local_cache=1&auth_key=1632478117-0-0-42696cbcacedd328d47d964a6be0072d&f=mp4&bu=pico&expiration=1632478117&v=hw

Lua脚本关节驱动示例

2.Vrep逆运动学求解工具IK驱动机械臂

上一节采用直接驱动机械臂关节,控制的是机械臂的关节空间上的变化,但是实际控制过程中,我们更关心机械臂末端的笛卡尔空间的状态,因此需要求解机械臂逆解去计算不同状态下对应的关节角度。本节视频中会详细介绍Vrep中IK的搭建方式和注意事项。本节的最终效果如下:

视频1

机械臂末端达到空间指定位置

机械臂末端形成复杂轨迹

视频3

3.Matlab驱动机械臂

这一部分采用Matlab驱动机械臂,与内容1类似,大家要熟悉[连载 3]Vrep小车建模——matlab控制的内容,掌握Matlab与Vrep通信的基本知识(为了结果更加真实,因此要开启Vrep与Matlab的同步机制)。同时在本节会介绍Matlab Robitic Toolbox的函数(jtraj)使用方法,从而用于关节空间的驱动。本节的最终效果如下

Matlab驱动机械臂

4.Matlab Robitic Toolbox控制机械臂

本节内容较多,涉及到的知识点也比较多,大家要具有耐心。首先讲一下标准DH矩阵的建立方式,这里请注意由于三维模型的差异和关节坐标系的设置导致本节给出的puma560机械臂与《机器人学、机器视觉与控制――MATLAB算法基础》书中给出的DH矩阵略有不同。(注:大家都很疑惑一个puma560机械臂的DH矩阵为什么不是唯一的,甚至不同的教科书上给出来的不一样,这是和DH矩阵本身的的特点密切相关的,对于DH矩阵大家不要生搬硬套,直接根据计算方式求一个自己可以用的就可以了。)
建立DH矩阵后,给大家介绍一下如何采用Matlab Robitic Toolbox计算运动学逆解,以及不同的求解方式的注意事项。
最后用matlab实现机械臂末端位置和姿态的跟随控制。

5 使用VrepLib,通过simulink快速搭建vrep控制模型(推荐阅读!!!)

很多同学和我反馈控制算法都是使用simulink搭建的,而vrep并没有很好的simulink接口,很难将自己的控制算法与vrep结合起来,我也是深受苦恼,因此花了很长时间开发了vrep与simulink接口库——VrepLib,VrepLib主要功能是建立simulink与vrep的连接,并利用封装好的模块搭建仿真程序,减轻工作量,加快算法验证速度。目前这个库我已经发布出来了,感兴趣的同学可以点击购买。下面展示一下如何用这个库实现内容3和内容4的功能。

只需要少数几个模块即可完成内容3的功能.png


完成内容4的程序框图

结语

本节介绍基于Vrep开发环境的机械臂三种控制方法,分别介绍了采用Lua控制、matlab控制和simulink控制,并给出详细的示例;同时也介绍了机械臂关节空间运动和笛卡尔空间运动的差别,结合Vrep自带的IK计算模块和Matlab Robitic Toolbox的工具箱函数讲述逆运动学求解、轨迹生成等。总的来说是Vrep——机械臂这一内容的引路石,机械臂控制仍然有很多内容需要大家去研究,希望本教程可以给大家一定的帮助。本节更多内容请点击视频教程、源代码,谢谢大家的支持。