运动学配置
本节介绍一些用于配置机器人运动学(kinematics)的参数。
kinematics.yaml 文件
Section titled “kinematics.yaml 文件”由 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 运动学插件
Section titled “KDL 运动学插件”KDL 运动学插件封装了 Orocos KDL 包提供的数值逆运动学求解器。
- 这是 MoveIt 目前使用的默认运动学插件。
- 它遵守 URDF 中指定的关节限位(如果 URDF 中指定了安全限位,则使用安全限位)。
- KDL 运动学插件目前仅适用于串联链(serial chain)。
LMA 运动学插件
Section titled “LMA 运动学插件”LMA(Levenberg-Marquardt)运动学插件同样封装了 Orocos KDL 包提供的数值逆运动学求解器。
- 它遵守 URDF 中指定的关节限位(如果 URDF 中指定了安全限位,则使用安全限位)。
- LMA 运动学插件目前仅适用于串联链。
- 用法:
kinematics_solver: lma_kinematics_plugin/LMAKinematicsPlugin
Cached IK 插件
Section titled “Cached IK 插件”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。
仅位置 IK
Section titled “仅位置 IK”只需在 kinematics.yaml 文件中为需要求解 IK 的特定规划组添加以下一行,即可启用仅位置 IK(仅适用于 KDL 运动学插件):
position_only_ik: True