OS: Win10 x64
V-REP: V-REP PRO EDU 3.5.0
MATLAB: 2016b
下面我们来聊一聊V-REP中的机械臂逆向运动学问题。这里我们以UR5的为例进行介绍。对于想要深入了解V-REP逆向运动学的读者,请参考官方手册和官方教程。
我们假设你对V-REP的基本操作有一定了解。
实用性考虑,我们这里介绍V-REP逆解的快速玩法,对于细节不做过多深究。你没有必要完全掌握V-REP逆解基础,但是也建议稍加了解。
V-REP逆解概述
V-REP提供多种求逆解的模式,每种各有特色,当然你也可以穿插着使用,但同一时间智能用一种。穿插使用的方法是设定不同的范围启用不同的逆解模式,这种方式有些复杂。V-REP安装文件夹下提供了各种不同方式的示例场景,在
YOUR_INSTALL_PATH\V-REP3\V-REP_PRO_EDU\scenes\ik_fk_simple_examples
下可以找到。建议学习之前先看一下每一个例子,当然不看也不影响你阅读下面的内容。
一个例子:UR5的V-REP逆解
这里我们仅以UR5为例,一步一步介绍如何在V-REP中添加逆解。注意此时我们采用的是V-REP模型浏览器中自带的UR5,也不修改各个模块的名称。这里我们从零开始搭建。官方也给出了一个完整的实验环境:
YOUR_INSTALL_PATH\V-REP3\V-REP_PRO_EDU\scenes\ur5WithRg2Grasping
下面我们一步一步来搭建我们的环境。
Step 1: 搭建你的V-REP仿真环境。
新建一个V-REP环境,将UR5拖拽到环境中,并将RG2安装在UR5末端即可。主要不要修改每个模块的名称。如果你对这些操作不太熟悉,建议直接从Github上下载这个工具包:
[email protected]:philthinker/ICECUBE-VREPToolbox.git
打开其中的 UR5plusRG2.ttt 环境。
Step 2: 添加你的 IKTip。
添加一个dummy,dummy在V-REP 中是最简单的模型。然后调整其位置到(-3.7658e-1,+0e+0,+1.0013e+0),注意此时我们假设你的UR的坐标是(+0e+0,+0e+0,+1.4650e-2)。如果你调整的UR的位置,那么这个dummy的位置也需要左相应的调整。当然也没有这么死板,只要将其放在你认为的夹持器工作中心即可。然后将其重命名为 UR5_tip。
添加完成后,将其与UR5建立关联。选中UR5_tip,然后按住Ctrl按键再选中UR6_link7,然后[Menu bar –> Edit –> Make last selected object parent]。
Step 3:添加你的 IKTarget。
复制 UR5_tip,黏贴并重命名为 UR5_target。
Step 4:创建你的Tip-Target对。
打开UR5_tip的属性窗口,按照下图设置:
完成后你可以看到UR5_tip 和 UR5_target 由一条红线连接。配对完成。
Step 5:创建 IK Group。
现在你只是创建了两个关联的dummy,下面我们为其指定逆解组。打开Inverse kinematics dialog,添加一个新的 IK group,并将其更名为UR5:
完成后按照上图进行设置,点击 Edit IK elements。在IK Group dialog中,在左上角的下拉菜单中选择UR5_tip,然后点击 Add new IK elemtn with tip。此时IK elements 列表中会添加一项 UR5_tip。点击UR5_tip,在下方的Kinematic chain section 中,将Base设置为 UR5。在下方的Constraints section 中勾选所有复选框,完成后关闭IK Group dialog。
此处关于 Inverse kinematics dialog中各个复选框的含义请参考官方文档说明。
Step 5:完成。
好了,现状你已经基本完成逆解的配置,你可以将UR5_target dummy合并到UR5下,并将UR5_tip 和 UR5_target的 Visibility 属性调整到第11层使它们隐藏。当然这都不是必须的。
下面做一个简单的测试。注意这里的测试方法与官方教程中给出的不同,对于想深入了解V-REP逆解机制的读者可以参考官方教材进行操作,然而对于想快速入门的读者不建议这样做,因为因为太费时,而且是没必要的。测试方式如下:
- 打开UR5的script。
- 删除原有代码,输入如下代码。
- 运行仿真,观测UR5的动作。可以看到它的末端走了一个方形的四个顶点。
有关逆解的常用API
下面列举一些常用的有关逆解的Lua API。
- sim.getObjectMatrix 获取场景中对象的变换矩阵(H)。
- sim.setObjectMatrix 设置场景中对象的变换矩阵(H)。
- sim.setJointMode 设置某关节控制模式。
- sim.getIKGroupHandle 获取IK Group的引用。
- sim.getObjectPosition 获取场景中某个对象的位置。
- sim.getObjectQuaternion 获取场景中某个对象的姿态(四元数)。
- sim.rmlMoveToJointPosition 关节空间运动规划。
- sim.rmlMoveToPosition 笛卡尔空间运动规划。
以上是常用的,其它相关的请参考这里。