MoveIt教程6 - 机器人描述文件(II) SRDF
SRDF
SRDF, 全称为Semantic Robot Description Format,是MoveIt针对控制机器人关节运动使用的一种机器人描述文件格式。它基于URDF对机器人的描述,对以下内容进行定义:
- 关节组 joint groups
- 默认状态配置 default robot configurations
- 额外的碰撞检测信息 additional collision checking information
- 额外的坐标系变换 additional transforms (使得可以完全的定义机器人的姿态)
可以使用MoveIt提供的配置助手MoveIt Setup Assistant生成SDRF文件,前提是有一个完整的URDF文件。具体操作参考[MoveIt教程3](https://www.jianshu.com/p/16e0a4dd4b0c)
SDRF中具体定义了以下信息:
虚拟关节Virtual Joints
URDF中定义了机器人上真实存在的关节信息,SDRF中加入了虚拟关节的概念,可以添加非真实存在于机器人上的关节。通常,我们利用虚拟关节将机器人的根关节root joint和world坐标系关联起来。
例如:
- 添加一个planar virtual joint将可以移动的机器人base frame和世界坐标系关联
- 添加一个fixed virtual joint将机械臂基座坐标系固定到世界坐标系
被动关节Passive Joints
被动关节指的是不受直接控制的关节。例如移动底盘的从动轮。通过将此类关节添加为被动关节,让MoveIt在运动规划的时候知道这些关节是无法直接控制的。被动关节需要在SRDF中被另外定义出来。
规划组Planning Groups
规划组 Planning Groups, (有时叫JointGroup)是MoveIt中的一个核心概念。MoveIt中所有运动都是基于特定的规划组进行规划,每次规划只会控制该规划组包含的关节,而保持其余的关节不变。
一个规划组通常是由一系列joint和link组成,一般有以下几种定义方式:
- Collection of Joints
通过一组joint来定义一个规划组,所有joint的子链接(child link)都会自动被添加到规划组。 - Collection of Links
通过一组link来定义一个规划组,所有link的父关节(parent joint)都会自动被添加到规划组。 - Serial Chain
通过串联链来定义一个规划组,用一个base link和一个tip link来指定一个串联链,base link为这个链中第一个joint的parent link,tip link为这个链中最后一个joint的child link - Collection of Sub-Groups
一个规划组可以是多个规划组的集合。例如定义了机器人左臂为规划组left_arm,右臂为规划组right_arm,可以再用一个总的规划组arms来包含这两个规划组。
末端执行器End-Effectors
MoveIt中加入了一类特殊的group - 末端执行器,区分于一般的规划组。可以将末端执行器(例如机械手、夹爪)的规划组定义成End-Effectors,通过固定关节fixed joint和手臂关联。需要注意的是,定义末端执行器规划组时,要保证和与之相关联的规划组没有共有的link。
自碰撞Self-Collisions
在MoveIt的配置助手MoveIt Setup Assistant中可以通过Default Self-Collision Matrix Generator来检测机器人的自碰撞。该工具会在所有link中搜索出以下几种情况:
- 总是碰撞 always in collision
- 从不碰撞 never in collision
- 初始姿态碰撞 in collision in the robot’s default position
- 相邻链接 adjacent links
符合这些情况的link在MoveIt运动规划的时候会跳过计算,这样可以大大减少运算时间。
姿态Robot Poses
SRDF文件中可以定义一些姿态,给定名称(生成string id),方便程序中调用。最常见的是定义一个初始姿态 HOME
SRDF的语法和案例,参考http://wiki.ros.org/srdf