MoveIt!是一个用于ROS的开源运动规划库,提供多种功能,包括用于运动规划的快速逆运动学分析、用于操纵的高级算法、机械手控制、动力学、控制器和运动规划。(通过提供一个GUI来协助MoveIt!所需的各种设置,它允许使用RViz进行视觉反馈。)
MoveIt! 组件和模块:
MoveGroup:这是MoveIt!的核心节点,负责管理和执行运动规划任务。它提供了许多服务和动作接口供用户调用。
Planning Scene:这是一个内部表示,包含机器人当前的状态(如关节位置、末端执行器姿态)、环境模型(如静态和动态障碍物)以及相关的元数据。
Robot Model:包含了机器人的完整描述,包括关节、连杆、链接、传感器等信息。
Robot State Publisher:发布机器人当前状态的信息,如关节角度和末端执行器的位置。
Motion Planning Plugins:MoveIt!支持多种路径规划算法,这些算法以插件的形式集成,可以根据需要选择和配置。
Controllers:这部分与实际的机器人硬件接口交互,将规划出的运动轨迹转化为控制信号发送给机器人驱动器。
3D Sensors:支持加载和处理来自RGB-D相机或激光雷达等设备的点云数据,用于抓取、避障等任务。
1、核心组件:
move_group是一个ROS节点,它负责处理与机器人臂运动相关的各种任务,包括路径规划、碰撞检测、姿态目标设定以及执行运动指令等。它主要通过MoveIt!的规划接口(Planning Interface)和操控接口(Manipulation Pipeline)来实现这些功能。
核心节点,可以综合其他独立的功能组件为用户提供ROS中的动作指令和服务
本身不具备丰富的功能,主要完成各功能包、插件的集成
通过消息或服务的方式接收服务器发布的点云信息、关节状态信息、以及机器人的TF坐标变换
需要ROS参数服务器提供机器人的运动学参数
Planning Scene Interface (PSI):这是一个接口,允许用户与机器人的当前环境交互,包括添加、删除和更新场景中的对象。
如图所示 move_group节点可以使用ROS动作和服务与用户交换命令。
提供各种用户界面的MoveIt!为C++语言提供move_group interface,为Python语言提供move_commander,而且构建了允许很多用户利用“Motion Planning plugin to RViz”选择自己熟悉的界面与move_group节点通信的服务。
move_group节点从URDF、SRDF和MoveIt! Configuration接收关于机器人的信息。URDF使用先前创建的文件,而SRDF和MoveIt! Configuration将通过MoveIt!提供的Setup Assistant创建。
move_group节点通过ROS话题和动作提供机器人的状态与控制,还提供周围环境。关节状态是通过sensor_msgs/JointStates消息,变换信息是通过tf库,控制器是通过FollowTrajectoryAction接口向用户发送关于机器人的信息。另外,通过planning scene向用户提供关于机器人工作的环境信息和机器人的状态。
move_group为其可扩展性提供了一个plugin功能,并提供了一个通过开源库将各种功能(控制、路径生成、动力学等)应用到用户的机器人的机会。
2、主要功能:
路径规划:MoveIt!可以生成从起始位置到目标位置的平滑路径,同时避免与环境中的障碍物发生碰撞。
碰撞检测:通过集成的碰撞检测引擎(如FCL或Bullet),MoveIt!可以在规划过程中检查机器人及其环境的碰撞情况。
姿态规划:在需要精确末端执行器定位的情况下,MoveIt!可以帮助计算出达到目标姿态的最佳关节配置。
操作空间运动控制:MoveIt!支持在操作空间中直接对机器人进行运动控制,而无需直接操作关节。
3、设置MoveIt!:
首先,机器人创建一个MoveIt!配置包,这通常可以通过MoveIt! Setup Assistant工具来完成。这个工具会自动生成所需的文件和参数,包括URDF模型、SRDF描述、控制器配置等。
4、编程接口:
MoveIt提供了两种主要的编程接口:MoveGroupInterface 和 PlanningSceneInterface。
MoveGroupInterface:这个接口主要用于与运动规划和执行交互。可以使用它来设置目标位姿、规划路径、执行动作以及获取状态信息。
PlanningSceneInterface:这个接口用于操作和查询规划场景,包括添加、删除物体,以及查询碰撞信息。
5、可视化和调试:
MoveIt!与Rviz(ROS的3D可视化工具)紧密集成,可以使用Rviz来可视化机器人的模型、规划的路径、碰撞状态等。
6、插件机制和扩展:
MoveIt!采用插件机制,允许用户替换或添加自己的组件,例如路径规划算法、碰撞检测器等。
用户可以通过实现特定的接口来自定义MoveIt!的行为,例如编写自定义的约束满足求解器或者运动规划器。