四、使用MoveGroup C++接口——运动学(二)

目录

前言

1.运动学插件(Kinematics Plugin)

2.碰撞检测(Collision Checking)

3.碰撞对象(Collision Objects)

4.允许碰撞矩阵(Allowed Collision Matrix, ACM)


前言

        运动学是研究物体运动的几何属性而不涉及力或质量的科学。在机器人学中,运动学涉及到机器人的机械臂和关节如何运动。

1.运动学插件(Kinematics Plugin)

        MoveIt使用插件架构,允许用户编写自己的逆运动学算法。正运动学和雅可比矩阵(逆运动学)的计算已经集成在RobotState类中。MoveIt默认的逆运动学插件使用基于KDL(运动学和动力学库)的数值雅可比求解器,这个插件可以通过MoveIt设置助手自动配置。

         KDL,即 Kinematics and Dynamics Library(运动学和动力学库),是一个用于机器人运动学和动力学计算的库。它提供了一系列的数据结构和算法,用于描述和处理机器人的关节、连杆、运动链、运动树等,以及相关的运动学和动力学问题。KDL 库可以独立于 Orocos 使用,并且广泛应用于 ROS(Robot Operating System)中,特别是在 MoveIt! 运动规划框架里作为默认的运动学插件。

2.碰撞检测(Collision Checking)

        在MoveIt中,碰撞检测是在规划场景(Planning Scene)中配置的。MoveIt主要使用FCL(Flexible Collision Library)包来执行碰撞检测,这是MoveIt的主要碰撞检测库。

3.碰撞对象(Collision Objects)

        MoveIt支持多种类型对象的碰撞检测,包括网格(Meshes,如STL或DAE格式)、原始形状(Primitive Shapes,如盒子、圆柱体、圆锥体、球体和平面)以及八叉树(Octomap)。

        八叉树(Octree)是一种用于三维空间的树状数据结构,它将空间递归地划分为八个相等的子区域(或称为“单元”),每个子区域代表原始空间的一个八分之一。这种结构通常用于表示三维空间中的体积数据,特别是在需要快速空间搜索和空间局部性处理的应用中,例如在三维建模、医学成像和机器人导航等领域。

4.允许碰撞矩阵(Allowed Collision Matrix, ACM)

        允许的碰撞矩阵(Allowed Collision Matrix, ACM)是 MoveIt! 中的一个重要概念,它用于定义在碰撞检测过程中应该考虑或忽略的碰撞对。具体来说,ACM 可以指定某些机器人部件之间是否应该进行碰撞检查。例如,有些部件我们知道它们在任何情况下都不会相互碰撞,或者它们总是接触的,那么在运动规划时就不需要对这些部件进行碰撞检测,从而提高计算效率。

        在 MoveIt! 中,ACM 可以手动设置,也可以通过 MoveIt! Setup Assistant 自动生成。自动生成时,工具会分析每个连杆对,并将其分类为“总是处于碰撞状态”、“永远不会碰撞”、“默认处于碰撞状态”、“禁用相邻连杆”和“有时处于碰撞状态”,并相应地禁用碰撞检测。

        如果ACM中两个物体对应的值被设置为true,则指定这两个物体之间的碰撞检查是不需要的,即“总是处于碰撞状态”或“永远不会碰撞”的状态。在实际使用中,可以通过编程方式修改 ACM,以适应特定的应用场景。例如,可以复制当前的 ACM 和状态,修改它们,然后将它们传递给碰撞检查函数,以实现对特定碰撞对的忽略。

你可能感兴趣的:(MoveIt,2机器人运动规划,c++)