关闭

ROS连载系列第23期 灵巧手抓取规划

2017-8-9 13:48:09

1 灵巧手简介

随着机器人领域的飞速发展及人工智能技术的逐渐成熟,机器人灵巧手在现代生活和工业生产中有诸多应用。机械手现在已经被用于国防安全中,例如机械手排爆,精密仪器维修,核设施维护,空间飞行器检查,远程设备操作,医学和服务机器人等等。灵巧手的普及将促进相关行业的发展,极大的推动行业领域自动化、智能化的发展进程。

Shadow 灵巧手是世界上模拟人手性能最好的一款机械手,由世界上著名的 Shadow公司研制,如图1所示。Shadow灵巧手的形状、尺寸都是依照成年人手的规格设计,共由 5 根手指和 1 个手掌组成,整个机械手具有 24 个自由度,拇指的方位也依照人手的拇指进行布置,并由单独的驱动器驱动控制,灵巧手基本能像人手一样运动,并具备人手大部分的抓取功能。该款机械手集成多种传感器,例如关节位置传感器,温度传感器,力反馈传感器,肌腱张力、指尖触觉传感器等。

图1 Shadow灵巧手

本章将以Shadow灵巧手为例详细介绍如何利用Moveit!搭建多指灵巧手的抓取仿真系统。读者也可参考https://github.com/guihomework/dexterous-manipulation-tutorial/wiki上的介绍。

2 创建灵巧手抓取规划功能包

2.1 Shadow手模型描述

Shadow手的模型描述保存在.xacro文件中,其中包括指节模型、关节定义、传感器定义等。Shadow手模型的结构如图2所示。

 

 

在灵巧手运动规划中,为了提高碰撞检测的实时性,一般采用简化的模型来代替不规则的结构模型。图3是Shadow手的原模型和简化后的碰撞检测模型。

 

2.2 创建Shadow手功能包

1)将.xacro文件转换为.urdf文件

由于MoveIt! 要求机器人的模型文件是一个单一、静态的.urdf文件,因此需将.xacro模型文件转换为.urdf格式,运行如下的命令:

(1)在工作空间中,创建一个名为moveit_hand_config的文件夹。

(2)在终端窗口上运行如下命令,启动Moveit安装助手(MoveitSetup Assistant),如图4所示:

 

 

(3)点击图4中的Create New Moveit Configuration Package按钮,并加载shadow机械手的URDF文件,如图5所示,该文件可以在下面找到:

(a)选择URDF模型

(b)加载完成

图5 加载模型文件

(4)生成自碰撞矩阵

设置一个中低密度,然后点击RegenerateDefault Collision Matrix ,如图6所示。

6 生成碰撞矩阵

自动检查通常是不够充分的,还应该重新验证每一对连杆,尤其是激活Show Non-disabled Link Parirs以添加更多连杆,简化碰撞检测。在shadow机械手中,xxknuckle 和 thbase|hub是关节中心,不需要进行碰撞检测。由于是指关节,一些相邻关节不会被自动视为相邻。因此,通常手动禁止这些连杆间的碰撞,如图7所示。

图7 手动禁止碰撞检测

(5)定义虚拟关节

为机器人模型定义一个虚拟关节,如图8所示。

图8 定义虚拟关节

(6)定义规划组

点击AddGroup,创建一个规划组,如图9所示,使用AddJoint 的方式,Kinematic Solver 设置为None 。

图9 定义规划组

为每个手指创建一个规划组,如图10所示,采用Add Kin.Chain方式,将Kinematic Solver设置为kdl_kinematics_plugin/KDLKinematicsPlugin。

(a)选择运动求解器

(b)设定规划关节

图10 定义手指规划组

(7)定义灵巧手默认姿势

我们可以定义几个灵巧手经常到达的姿势,以作为灵巧手的初始抓取状态,如图11所示。

图11 定义灵巧手姿势

(8)定义末端执行器

为每个手指定义一个末端执行器,以实现对手指末端位置的控制。创建一个名为 fftip_ee末端执行器, first_finger作为末端执行器组,fftip为父连杆,shadow_hand为父规划组,如图12所示。

图12 定义末端执行器

(9)生成Moveit配置功能包

选择moveit_hand_config文件夹所在的路径,点击Generate Package,生成Shadow手的功能包。

 


 

为了验证上述功能包的有效性,在终端窗口上运行下面的命令:

roslaunch moveit_hand_config demo.launch

运行结果如图13所示,说明所创建的功能包是正确的。

图13 运行demo.launch

2.3 创建灵巧手逆运动学插件

Moveit!一般使用基于KDL的运动学插件,该插件可以求解由模拟标记(mimic tag)描述的耦合关节。但Shadow手不能使用模拟关节,因为所有关节角都是可获得的,由于主动关节的模拟,被动关节不能被joint_state_publisher覆盖。下面将介绍创建Shadow手逆运动学求解器插件的方法。

1)准备工作

目前使用的求解器(sr_hand_kinematics)很复杂。为此,这里提出了一个简单的版本,它适用于除拇指之外的手指。

(1)可求解耦合关节的简化IK

²  该实例的代码位于 hand_ik_coupling_plugin

²  相关函数定义在hand_ik_utils.cpp

²  KDL库扩展在kdl_coupling_extension

(2)基本的运动学模板

²  Moveit!提供一个运动学插件的基类,包含一些虚函数

²  根据基类的定义,我们的插件至少包含如下的函数:

u  initialize()

u  getJointNames()

u  getLinkNames()

u  getPositionFK()

u  getPositionIK()

u  searchPositionIK()

2)运动学插件代码

hand_ik_coupling_plugin.cpp文件的主要内容如下:

(1)插件描述

(2)initialize()

我们通过机器人描述名称、关节组、坐标系等初始化插件,具体如下:

4)使用运动学求解插件

重新运行下面的命令:

在Rviz中设置手指的期望位置,然后点击plan,运行结果如图4.14所示。

(a)手指起始状态

(b)手指目标状态

(c)规划完成

图14 手指运动规划结果

3 综合抓取仿真实验

为了实现灵活的抓取操作,将Shadow灵巧手安装在UR10机械臂上,如图15所示。

 

图15 抓取仿真系统

运行下面的命令,启动仿真系统:

运行结果如图16所示:

 

图16 启动抓取仿真系统

运行抓取程序:

运行结果如图17所示。


 

 

图17 建立抓取环境

下面将进行抓取图17中钢笔的仿真实验。

首先新建一个Grasp.msg,该消息主要包括抓取和预抓取姿态(关节角)、相对于坐标系的抓取姿态、预抓取路径方向和距离、后抓取离开参数等。

这个方法是从yaml文件中加载抓取数据,避免使用抓取数据库或者抓取生成器。在源文件中提供一个grasps.yaml文件。

1)加载抓取指令库。

2)从列表中加载4个手指,以进行水平抓取

3)抓取必须参考被抓取的物体,这里将钢笔作为参考。

4)从手臂规划组删除之前附加的钢笔。

5)控制两个手指实现抓取操作。

我们可能会在终端上看到如下信息:

为了更好地监视在什么地方抓取失败,在rviz中添加MarkerArray插件并让它指向主题/move_group/display_grasp_markers。

重新启动应用程序,运行结果如图4.18所示,从中可以看到,灵巧手在杯子附近显示红色,表示发生了碰撞。


 

 

图18 抓取碰撞检测

抓取失败是由于手指与杯子发生了碰撞,重新进行规划,得到的结果如图4.19所示。


 

 

图19抓取成功

6)   从列表中加载两个手指的精确水平抓取

7)控制两个手指实现抓取操作

规划成功之后的抓取效果如图4.20所示。

 


 

图20 抓取成功

下面将笔放回杯子中。

1)首先创建一个位置作为钢笔的备份位置,小拇指将它丢到杯子中。

2)翻转杯子

3)计划和执行一个平面运动到达放置地点。

4)规划失败,提示发现碰撞,如图4.21所示。

 


 

21 提示发生碰撞

5)删除杯子,并重新添加

 

6)重试放置,如图22所示。

 

22 重新放置成功

 

 

 

上海硅步科学仪器有限公司

电话:021-52585085

邮箱:sales@gaitech.net

网址:www.gaitech.net

地址:上海市闵行区中春路7755号宝虹中心704室

 

ROS连载系列第17期 硅步RO...
首页
机器人
生命科学
新闻动态
视频&资料
服务支持
关于我们

群海设计Copyright © 2016-2026 Shanghai Gaitech Scientific Instruments Co.,Ltd 沪ICP备05039062号-1所有版权归上海硅步科学仪器有限公司