Skip to content

运动学

MoveIt 采用插件架构,允许用户自行编写逆运动学(inverse kinematics)算法。正运动学(forward kinematics)及雅可比矩阵(Jacobian)的求解则集成在 RobotState 类内部。MoveIt 的默认逆运动学插件基于 KDL 的数值雅可比求解器进行配置,由 MoveIt Setup Assistant 自动完成设置。

MoveIt 中的碰撞检测在规划场景(Planning Scene)内通过 CollisionWorld 对象配置。得益于 MoveIt 的设计,用户通常无需关心碰撞检测的底层实现细节。碰撞检测主要由 FCL 库完成——这是 MoveIt 的核心碰撞检测库。

MoveIt 支持对多种类型物体的碰撞检测,包括:

  • 网格 (Meshes) - 可使用 .stl(标准三角形语言,standard triangle language)或 .dae(数字资产交换格式,digital asset exchange)格式来描述机器人连杆等物体。

  • 基本形状 (Primitive Shapes) - 例如长方体、圆柱体、圆锥体、球体和平面

  • Octomap - Octomap 对象可直接用于碰撞检测

碰撞检测是一项开销高昂的操作,在运动规划期间通常占近 90% 的计算开销。Allowed Collision Matrix(允许碰撞矩阵,简称 ACM)以二进制值编码一对物体(可以是机器人上的连杆,也可以是世界中的物体)之间是否需要检查碰撞。如果 ACM 中某对物体对应的值为 true,则不会对这两个物体执行碰撞检测。例如,两个始终相距很远、永远不会碰撞的物体,无需进行碰撞检测。另一种情况是,两个物体默认状态下本就彼此接触(如相邻的连杆),此时也应在 ACM 中禁用这对物体的碰撞检测。