Moveit!简介
Moveit!是ROS中的一个集成开发平台,由多种用于操纵机械臂的功能包组成,包括:运动规划、操作、控制、逆运动学、3D感知和碰撞检测等。
运动规划
什么是运动规划?简单地说,就是应用插补算法计算出机械臂从空间的一个点移动到另一个点的运动轨迹的过程。当然,并不是简单的计算,在运动规划的过程中,要结合碰撞检测和约束条件等,计算出较优的运动轨迹。
操作
操作器操作机械臂终端抓取和放置物体。
控制
控制器控制机械臂终端按运动规划器计算出的运动轨迹进行运动。
ros_control提供了常用的控制器,如位置控制、速度控制、力控制,还有一个虽然没有控制功能,但依然称为controller的关节状态控制器,完成机器人关节状态的周期反馈。
逆运动学
什么是逆运动学?简单地说,即是由已知的机械臂终端坐标和姿态推算出各关节角度的过程。Moveit!中提供了几种运动学插件:
- KDL:Moveit!默认使用的基于数值解的运动学插件,可求解封闭情况下的逆运动学,但求解成功率不高,效率比较低;
- TRAC-IK:同KDL一样是基于数值解的运动学插件,但在算法上做了很多优化,求解成功率较高,但结果不稳定,即每次求解得的关节角度不一定相同;
- IKFAST:是一种基于解析法的运动学插件,求解成功率高,结果稳定,速度快,但存在多解选择问题。
机械臂的逆运动学问题是轨迹规划与控制的基础,求解是否快速准确将直接影响到后续轨迹规划与控制的精度,而有效的轨迹规划能够确保运动轨迹在满足约束条件的前提下平滑准确。
3D感知
采集深度相机和激光距离传感器等传感器的数据,生成点云,用于感知机械臂自身与周围环境的信息。
碰撞检测
检测机械臂是否会与自身或者周围环境的障碍物发生碰撞,是运动规划过程中的一个必要环节。
Moveit!总体框架
图片引自古月居前辈
move_group插件
- 使用ROS动作和服务向用户提供通信服务;
- 使用ROS参数服务器获取URDF、SRDF和Config文件,加载机械臂的运动学模型;
- 通过ROS动作与控制器进行通信;
- 通过ROS话题获取点云数据和机械臂的关节状态。