Moveit!系统架构

Moveit!系统架构

Moveit!为开发者提供了一个易于使用的集成化开发平台。由一系列移动操作的功能包组成,包括运动规划、操作控制、3D感知、运动学、控制与导航算法等。这些功能算法的实现都是通过插件的方式在Moveit!中集成,并提供友好的GUI,,可广泛应用于工业、商业、研发和其他领域。

一、运动组(move_group)

move_group是Movert!的核心节点,可以综合其他独立的功能组件为用户提供ROS中的动作指令和服务。
核心框架Moveit!的核心节点——Move Group
Moveit!的核心节点——Move Group,相当于是功能集成的集散地中心,负责所有功能的调用。
move_group本身并不具备丰富的功能,主要完成各功能包、插件的集成。
(1)用户接口
Moveit!提供三种可供调用的接口:

  • C++, 利用move_group_interface包提供的API。
  • python,利用moveit_commander包提供的API。
  • GUI,利用Moveit!的rviz插件。
    (2)ROS参数服务器
  • URDF,从ROS参数服务器中查找robot_description参数,获取机器人描述信息,它是机器人的描述文件。用来抽象的描述一个机器人的模型而创建的XML格式文件,这样就可以让机器人在模拟的环境当中进行运行。
  • SRDF,从ROS参数服务器中查找robot_description_semantic参数,获取机器人模型的一些配置信息,它一般通过MoveIt! Setup Assistant生成。包含机器人的位姿、控制组的信息、碰撞免检测矩阵的定义信息。SRDF也是XML格式的,可以配合URDF来使用。
  • Config,从ROS参数服务器中获取更多信息,如joint limits, kinematics, motion planning, perception and other information(关节限位、运动学插件、运动规划插件)等。
    (3)机器人
    move_group和机器人之间通过Topic和Action通讯方式与机器人通信,获取机器人当前的状态(例如当前每个关节的位置)、各个传感器的数据等。通过TF库获取坐标系变换数据,包括机器人的位姿、其他物体位姿等全局信息。机器人控制器——另外一个很重要的模块,用来控制机器人的每个关节做运动,机器人控制器和Move_Group的通信方式是Action,将规划好的关节信息告诉机器人控制器,机器人控制器还会提供反馈信息给move_group。
    Moveit!通过插件机制与各个功能实现包括运动学、碰撞检测、适配器、运动规划器进行交互的。
    在这里插入图片描述

二、运动规划器

在百度百科中,对于运动规划(Motion Planning)的解释就是在给定的位置A 与位置 B 之间为机器人找到一条符合约束条件的路径,这个约束可以是无碰撞、路径最短、机械功最小等,是机器人学的一个重要研究领域。机器人和环境的模型静态参数由URDF文件提供,在某些场景下还需要加入3D摄像头、激光雷达来动态检测环境的变化,避免与障碍物发生碰撞。
在Moveit!中,运动规划算法由运动规划器完成。运动规划算法有很多种,每一个运动规划器都是Moveit!中的一个插件。move_group默认使用的是OMPL(The Open Motion Planning Library)基于采样方法的开源机器人运动规划库。
运动规划器的结构
首先要向规划器发送一个运动规划请求(如一个期望的终端姿态)。但是,运动规划也不能随意计算,可以根据实际情况设置一些约束条件。
1)位置约束(Position constraints)- 限制link在某个空间区域
2)方向约束(Orientation constraints)- 限制link的方向在指定的roll, pitch和yaw范围
3)可视化约束(Visibility constraints)- 限制link上的点在特定传感器的一个可视化的锥形范围
4)节点约束(Joint constraints)- 限制joint位于两个值之间
5)自定义约束(User-specified constraints)- 利用自定义回调函数来指定自定义的约束。
根据这些约束条件和用户的规划请求,运动规划器通过算法计算得到一条合适的运动轨迹,并发送给机器人的控制器。
运动规划器的两侧还分别有一个planning request adapters。作为一个适配器接口,主要功能是预处理运动规划请求和响应的数据,使之满足规划和使用的请求。值得注意的是,adapters带有一个“s",说明适配器的种类很多,不止一种。
Moveit!中提供的一些适配器:
1)FixStartStateBounds,这个适配器修复在URDF文件里面描述的关节限制的开始状态。用于仿真器中,当机器人配置不正确的时候。当有一个或多个关节稍微超出限制,机器人可能会结束。在这种情况下,运动规划就不能正常执行,因为它认为已经超出了关节限制。FixStartStateBounds请求适配器会修复开始状态到设置的关节限制内。但这不是每一次都是合适的解决方案。例如有多少关节超出限制。适配器参数则指定有多少关节超出限制才启用修复。
2)FixWorkspaceBounds,这个适配器会为规划指定一个默认的工作空间,一个立方体的大小为10米×10米×10米。如果规划请求的规划器没有填充这些区域,将会指定工作空间。
3)FixStartStateCollision,修复开始状态碰撞适配器将通过少量干扰关节值来尝试在指定配置(碰撞中)附近采样新的无碰撞配置。 它会干扰值的数量由“ jiggle_factor”参数指定,该参数控制干扰占关节总运动范围的百分比。 此适配器的另一个参数指定在放弃之前适配器将采样多少随机扰动。
4)FixStartStatePathConstraints,当运动计划的开始状态不遵守指定的路径约束时,将应用此适配器。 它将尝试规划机器人当前配置与遵守路径约束的新位置之间的路径。 新位置将用作计划的开始状态。
5)AddTimeParameterization,运动计划者通常会生成“运动路径”,即不遵循任何速度或加速度约束并且没有时间参数化的路径。该适配器将通过应用速度和加速度约束来“时间参数化”运动计划。

三、规划场景

规划场景可以为机器人创建一个工作环境,包括外界环境中的桌面、工件等物体。这一功能主要由move_group节点中的规划场景监听器(Planning Scene Monitor)实现。
在这里插入图片描述在这里插入图片描述规划场景模块的结构
该插件会监听以下几方面信息。
1)状态信息(State Information):机器人的关节话题joint_states 主题
2)传感器信息(Sensor Information):机器人的传感器数据
3)外界环境信息(World geometry information):通过传感器建立的周围环境信息

四、3D感知(3D Perception)

在这里插入图片描述在MoveIt,3D感知是由occupancy map monitor处理,它使用插件结构处理不同的传感器输入。
MoveIt有两个内置支持可以处理两种输入:

  • Point clouds: handled by the point cloud occupancy map updater plugin
  • Depth images: handled by the depth image occupancy map updater plugin
    可以为occupancy map monitor编写自己的插件。
    Octomap:实际上可以编码有关单个单元格的概率信息,尽管该信息当前尚未在MoveIt!中使用。 Octomap可以直接传递到FCL(MoveIt!的碰撞检查库)中。
    深度图像栅格地图的更新器(Depth Image Occupancy Map Updater)包括它自己的过滤器,例如:它可以从深度图消除机器人的可见部分。它使用目前有关的机器人的信息(机器人状态)进行此操作。

五、运动学求解器(Kinematics)

运动学算法是机械臂各种算法的核心,包含正向运动学(Forward Kinematics,FK)和反向运动学(Inverse Kinematics,IK)等算法。Moveit!中的运动学插件允许开发者灵活选择多种可供使用的运动学求解器,默认的运动学求解器是从Orocos项目中移植过来的KDL,可以在Moveit! Setup Assistant工具中进行配置,也可以选择自己的运动学求解器。

六、碰撞检测

Moveit!使用CollisionWorld对象进行碰撞检测(Collision Checking),采用FCL(Flexible Collision Library)功能包实现。碰撞检测是运动规划中最耗时的运算之一,往往会占用90%左右的时间。为了减少计算量,可以在Moveit! Setup Assistant工具中设置免检冲突矩阵(Allowed Collision Matrix,ACM)进行优化,如果两个刚体之间的ACM设置为1,则意味着这两个刚体永远不会发生碰撞,即不需要碰撞检测。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我不是“耀”神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值