Skip to content

运动学配置

本节介绍一些用于配置机器人运动学(kinematics)的参数。

由 MoveIt Setup Assistant 生成的 kinematics.yaml 文件是 MoveIt 运动学的主要配置文件。你可以在 panda_moveit_config GitHub project 中查看 Panda 机器人的完整示例文件:

panda_arm:
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin
kinematics_solver_search_resolution: 0.005
kinematics_solver_timeout: 0.05
kinematics_solver_attempts: 3

可用的参数包括:

  • kinematics_solver:运动学求解器插件的名称。注意,此名称必须与你在插件描述文件中指定的名称匹配,例如 example_kinematics/ExampleKinematicsPlugin
  • kinematics_solver_search_resolution:指定求解器进行逆运动学求解时在冗余空间上搜索所使用的分辨率。例如,可以将 7 自由度机械臂的某一个关节指定为冗余关节。
  • kinematics_solver_timeout:逆运动学求解器每次内部迭代的默认超时时间(以秒为单位)。一次典型迭代(例如对数值求解器而言)包括从种子状态随机重启,然后执行一个求解周期——该超时适用于这个求解周期。求解器可能会尝试多次重启,默认重启次数由下面的 kinematics_solver_attempts 参数定义。
  • kinematics_solver_attempts:求解器执行的随机重启次数。每次重启后的求解周期都有一个由上面的 kinematics_solver_timeout 参数定义的超时。一般来说,最好将超时设置得较低,以便在单个求解周期中快速失败。

KDL 运动学插件封装了 Orocos KDL 包提供的数值逆运动学求解器。

  • 这是 MoveIt 目前使用的默认运动学插件。
  • 它遵守 URDF 中指定的关节限位(如果 URDF 中指定了安全限位,则使用安全限位)。
  • KDL 运动学插件目前仅适用于串联链(serial chain)。

LMA(Levenberg-Marquardt)运动学插件同样封装了 Orocos KDL 包提供的数值逆运动学求解器。

  • 它遵守 URDF 中指定的关节限位(如果 URDF 中指定了安全限位,则使用安全限位)。
  • LMA 运动学插件目前仅适用于串联链。
  • 用法:kinematics_solver: lma_kinematics_plugin/LMAKinematicsPlugin

Cached IK 运动学插件会创建 IK 求解结果的持久缓存,用于加速任何其他 IK 求解器。调用 IK 求解器时,会使用缓存中的相似状态作为种子。如果该调用未能返回解,则使用用户指定的种子状态再次调用 IK 求解器。与缓存中状态差异足够大的新 IK 解会被添加到缓存中。缓存会定期保存到磁盘。

要使用 Cached IK 运动学插件,需要修改机器人的 kinematics.yaml 文件。将类似这样的行:

manipulator:
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin

改为:

manipulator:
kinematics_solver: cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin
# optional parameters for caching:
max_cache_size: 10000
min_pose_distance: 1
min_joint_config_distance: 4

缓存大小可以通过绝对上限(max_cache_size)、末端执行器位姿的距离阈值(min_pose_distance)或机器人关节状态的距离阈值(min_joint_config_distance)来控制。通常,缓存文件会保存到当前工作目录(一般是 $\{HOME\}/.ros,而非运行 roslaunch 的目录)下每个机器人的子目录中。kinematics_solver 的可能取值有:

  • cached_ik_kinematics_plugin/CachedKDLKinematicsPlugin:默认 KDL IK 求解器的包装器。
  • cached_ik_kinematics_plugin/CachedSrvKinematicsPlugin:使用 ROS 服务调用与外部 IK 求解器通信的求解器的包装器。
  • cached_ik_kinematics_plugin/CachedTRACKinematicsPlugin:TRAC IK 求解器 的包装器。只有在编译时检测到 TRAC IK 运动学插件时才可用。
  • cached_ik_kinematics_plugin/CachedUR5KinematicsPlugin:UR5 机械臂解析 IK 求解器的包装器(UR3 和 UR10 存在类似的求解器)。此选项仅用于说明目的——缓存只会给解析求解器增加额外开销。

更多信息请参阅 Cached IK README。

只需在 kinematics.yaml 文件中为需要求解 IK 的特定规划组添加以下一行,即可启用仅位置 IK(仅适用于 KDL 运动学插件):

position_only_ik: True