ROS 总结(四):Moveit!系统概述

Moveit!是目前针对机械臂移动操作的最先进的软件。它综合了运动规划、控制、3D感知、运控学、控制和导航的最新成果,提供了开发先进机器人应用的易用平台,为工业、商业和研发等领域的机器人新产品的设计和集成体用评估。

目前,Moveit!广泛应用了开源的软件,目前已经应用在了超过65个机器人平台上。

一、系统架构

ROS 总结(四):Moveit!系统概述_第1张图片

上图显示的是 Moveit!提供的主要节点 move_group 的高层结构,它像一个组合器:把所有单独的组件集成在一起,提供一系列的 actions 和 services 供用户使用。

1、用户接口:

C++: move_group_interface package

Python: moveit_commander package

GUI: Motion Planning plugin to Rviz

2、配置

move_group 是一个 ROS 节点,它通过参数服务器获得三种信息:

URDF

SRDF

MoveIt!配置文件

3、机器人接口

move_group通过ROS topics和actions与机器人通讯,获取机器人的状态(位置,节点等),获取点云或其他传感器数据再传递给机器人的控制器。

  • 关节状态信息

    监听 /joint_states 主题确定状态信息

  • 变换信息

    通过ROS TF库来监视变换信息

  • 控制器接口

    通过ROS的action接口,FollowJointTrajectoryAction接口来使用控制器。

  • 场景规划

    move_group使用规划场景监视器来维护规划场景。

  • 可扩展能力

    可以很容易进行扩展:可以把运动学、抓取、运动控制等独立的包作为插件供 moveit!使用。

二、运动规划

1、 The Motion Planning Plugin

Moveit!通过插件进行运动规划,使其容易和不同的运动规划库链接,方便扩展。

接口由 ROS Action 或者 Service 提供

默认的规划器是 OMPL,其接口通过 MoveIt! Setup Assistant 配置

2、The Motion Plan Request

描述需要运动规划做什么任务。

请求规划器移动机械臂到新的位置,或者移动末端执行器到新的位姿。

默认进行碰撞检测(包括自身干涉)

可以加对象到末端执行器

可以添加运动学约束:

  • Position constraints - 连杆的运动空间

  • Orientation constraints - 连杆的RPY角

  • Visibility constraints - 连杆的某一点在某传感器的可视化锥形区域内

  • Joint constraints - 关节范围

  • User-specified constraints - 自定义约束回调函数

3、The Motion Plan Result

move_group 节点会根据运动规划请求产生需要的轨迹。

move_group 节点会根据速度加速度的极值来产生符合速度加速度约束的轨迹

ROS 总结(四):Moveit!系统概述_第2张图片

4、Pipeline

Motion planners and Plan Request Adapters

完整的运动规划管道链把 运动规划器 和 planning request adapters 集成在了一起

规划请求适配器允许预处理运动规划请求,后处理运动规划相应

预处理对以下情况有效:例如机器人的开始状态超出了其关节约束范围

后处理对一下情况是必须的:把规划路径转换为轨迹

Moveit!提供了一组默认的运动规划器适配器,每一个都执行特定的功能:

  • FixStartStateBounds

    此适配器修复开始状态超出关节范围的状态。

  • FixWorkspaceBounds

    此适配器指定默认的规划轨迹的工作空间

  • FixStartStateCollision

    此适配器通过轻微扰动关节的值,对特定配置下的无碰撞配置进行采样

  • FixStartStatePathConstraints

    当初始状态不符合特定的路径约束时使用

  • AddTimeParameterization

    根据速度和加速度约束,把路径规划成轨迹。

三、OMPL

OMPL (Open Motion Planning Library) 是一个开源的运动规划库,主要是执行随机规划器。MoveIt使用其库里的运动规划器作为主要/默认的一套规划器。

1、规划场景
场景规划用来表现机器人所在的世界并储存机器人的状态信息。它由planning scene monitor 来保持。planning scene monitor 主要收听的信息有:

  • 状态信息:joint_states 主题发布

  • 传感器信息:利用世界几何信息

  • 世界几何信息:planning_scene 主题发布

ROS 总结(四):Moveit!系统概述_第3张图片

2、World Geometry Monitor

世界几何监视器,用传感器的信息和使用者的输入信息来建立世界的几何描述。使用 occupancy map monitor 描述机器人周围的3D环境。

3、3D Perception
ROS 总结(四):Moveit!系统概述_第4张图片

3D感知使用 occupancy map monitor。它使用插件来管理不同的传感器输入,包括:

  • 点云:point cloud occupancy map updater 插件使用

  • 深度图像:depth image occupancy map updater 插件使用

4、Octomap

Occupancy map monitor使用Octomap维持Occupancy map的环境

5、Depth Image Occupancy Map Updater

包含其自身过滤器。用来更新 depth map。

四、运动学

运动学采用运动学插件(The Kinematics Plugin),也可以自己编写自己的运动学个逆运动学算法。Forward kinematics(正向运动学) and finding jacobians(查找雅可比矩阵) 被整合到自己的RobotState类。默认逆运动学插件配置使用KDL numerical jacobian-based solver.由MoveIt! Setup Assistant自动配置。

# kinematics.yaml
manipulator:
  kinematics_ solver: kdl_ kinematics_plugin/KDLKinematicsPlugin
  kinematics_ solver_search_resolution: 0.005
  kinematics_ solver_timeout: 0.005
  kinematics_ solver_attempts: 3

使用插件,可以很方便地求出运动学、逆运动学、雅可比矩阵。使用的函数是:

getGlobalLinkTransform
setFromIK
getJacobian
  • IKFast Plugin(IKFast插件)

    用来生成自己的运动学求解器插件

  • Collision Checking(冲突检测)

    在场景规划中,检查是否冲突

  • Collision Objects(冲突对象)

    定义检查是否冲突的组件的形状

  • Allowed Collision Matrix (ACM)(免检冲突矩阵)

    定义不需要检测冲突的组件矩阵,节省时间和资源。

五、轨迹处理

时间参数化

运动规划器只是产生路径,而不是包含时间参数的轨迹。它对路径和速度加速度等(joint_limits.yaml)来产生轨迹。

参考:

http://moveit.ros.org/
http://docs.ros.org/indigo/api/moveit_tutorials/html/
http://moveit.ros.org/robots/
http://www.ncnynl.com/archives/201610/1028.html
R. Patrick Goebel,ROS By Example(Volume 2),chapter 11:July 2014

你可能感兴趣的:(ROS)