MoveIt简析

moveit是ros中一系列移动操作的功能包的组成,主要包含运动规划,碰撞检测,运动学,3D感知,操作控制等功能。

MoveIt简析_第1张图片

1.move_group:move_group是moveit的核心部分,可以综合机器人的各独立组件,为用户提供一系列的动作指令和服务。move_group类似于一个积分器,本身并不具备丰富的功能,主要做各功能包和插件的集成。它通过消息或服务的形式接收机器人上传的点云信息,joints的状态消息,还有机器人的tf tree,另外还需要ros的参数服务器提供机器人的运动学参数,这些参数会在使用setup assistant的过程中根据机器人的URDF模型文件,创建生成,包括SRDF文件和配置文件。

2.motion panning(运动规划):在moveit中,运动规划算法是由运动规划器(motion planner)完成,而规划器是作为插件来安装的,可以通过ROS的pluginlib接口来加载需要的规划器。运动规划算法有很多,每一个运动规划器都是moveit的一个插件,可以根据需求选用不同的规划算法,move_group默认使用的是OMPL算法。

3.Planning Scene(规划场景):可以为机器人创建一个具体的工作环境,加入一些障碍物。

4.Kinematics(运动学):运动学算法是机械臂各种算法中的核心,尤其是逆运动学算法IK(inverse kinematics)。什么是逆运动学(IK)?简单说,就是把终端位姿变成关节角度,q=IK(p)。p是终端位姿(xyz),q是关节角度。为什么要用IK?OMPL是采样算法,也就是要在关节空间采样。 这与无人车的规划有一个最明显的区别,无人车的目标就是在采样空间, e.g. 目标是(x,y), 采样空间也是(x,y). 但是对于机械臂,目标是终端空间位置(xyz), 但采样空间却是关节空间(q0,q1,…qN)。有了IK之后,我们就可以把三维空间的目标p转化为关节空间的目标q。那么这样就会让采样算法能算的更快,具体方法不赘述,这样的算法有RRT-Connect,BKPIECE等等双向采样算法。moveit使用插件的形式可以让用户灵活的选择需要使用的反向运动学算法,也可以选择自己的算法。moveit中默认的IK算法是numerical jacobian-base算法。

5.collision checking(碰撞检测):moveit使用CollisionWorld对象进行碰撞检测,采用FCL(Flexible Collision Library)功能包。碰撞检测是运动规划中最耗时的运算,往往会占用90%左右的时间,为了减少计算量,可用通过设置ACM(Allowed Collision Matrix)来进行优化,如果两个bodys之间的ACM设置为1,则意味着这两个bodys永远不会发生碰撞,不需要进行碰撞检测。

6.OMPL(open motion planning library):开源运动规划库,是一个运动规划的C++库,其中包含了很多运动规划领域的前沿算法。虽然OMPL里面提到了最优规划,但总体来说OMPL还是一个采样规划算法库。而采样规划算法中,最出名的莫过于RRT(rapidly-exploring random trees)和PRM(probabilistic roadmap)。 OMPL能做什么? 简单说,就是提供一个运动轨迹。给定一个机器人结构(假设有N个关节),给定一个目标(比如终端移到xyz),给定一个环境,那么OMPL会提供给你一个轨迹,包含M个数组,每一个数组长度是N,也就是一个完整的关节位置。沿着这个轨迹依次移动关节,就可以最终把终端移到xyz,当然,这个轨迹应当不与环境中的任何障碍发生碰撞。为什么用OMPL? 运动规划的软件库和算法有很多,而OMPL由于其模块化的设计和稳定的更新,成为最流行的规划软件库之一。很多新算法都在OMPL开发。很多其他软件(包括ROS/MoveIt)都使用OMPL做运动规划。

7.用moveit控制机器人大概分以下几步:
a.建立机器人URDF模型
b.建立机器人ros驱动
c.生成moveit配置文件
d.标定相机
e.修改moveit配置文件和launch文件
其中在进行仿真操作过程中,不需要b,d,e三个步骤。

你可能感兴趣的:(ROS学习)