Skip to content

MoveIt 配置

为机器人配置 MoveIt 的推荐做法是创建一个包含 MoveIt 配置的 colcon 包。

假设你要为某个名为 my_robot 的机器人创建配置包,可以创建一个名为 my_robot_moveit_config 的 colcon 包,其结构如下:

my_robot_moveit_config
config/
kinematics.yaml
joint_limits.yaml
*_planning.yaml
moveit_controllers.yaml
moveit_cpp.yaml
sensors_3d.yaml
...
launch/
.setup_assistant
CMakeLists.txt
package.xml

你可以手动创建这样的包,也可以使用 MoveIt Setup Assistant 根据机器人描述文件(URDF 或 xacro)自动生成。

请参阅 moveit_resources 仓库,获取 MoveIt 配置包的工作示例。

MoveIt 配置包的 config/ 文件夹包含若干文件,用于描述 MoveIt 各项功能的参数。

注意,其中部分文件是可选的,具体取决于运行时需要用到哪些功能。

这是 MoveIt 配置包中最重要的信息。该文件夹中必须包含 URDF 和 SRDF 文件,用于描述机器人的运动学、规划组、碰撞规则等。要了解更多信息,请参阅 URDF/SRDF 概述。

URDF 规范允许设置关节位置和速度限制。但你可能希望在不修改底层机器人描述文件的情况下,为 MoveIt 的运动规划定义不同的关节限制。此外,MoveIt 中的某些功能使用额外类型的关节限制,例如加速度和加加速度(jerk)限制,这些无法在 URDF 中指定。

该文件的默认位置是 config/joint_limits.yaml。

下面是一个包含两个关节的简单机器人的关节限制文件示例:

joint_limits:
joint1:
has_velocity_limits: true
max_velocity: 2.0
has_acceleration_limits: true
max_acceleration: 4.0
has_jerk_limits: false
panda_joint2:
has_velocity_limits: true
max_velocity: 1.5
has_acceleration_limits: true
max_acceleration: 3.0
has_jerk_limits: false

MoveIt 中的许多运动规划应用都需要求解逆运动学。

所使用的 IK 求解器插件及其参数通过一个文件进行配置,该文件的默认位置是 config/kinematics.yaml。

更多信息,请参阅 运动学配置。

对于 MoveIt 中可用的每种运动规划器插件类型,都有一个对应的 config/*_planning.yaml 文件描述其配置。例如,一台既可以使用 OMPL 又可以使用 Pilz 工业运动规划器 的机器人将具有以下目录结构:

my_robot_moveit_config
config/
ompl_planning.yaml
pilz_industrial_motion_planner_planning.yaml
...
...

默认情况下,所有匹配 config/*_planning.yaml 模式的参数文件都会被加载。如果 OMPL 被配置为规划管线,那么它将是默认管线;否则将使用列表中的第一条管线。

要了解各规划配置文件的内容,请参阅相应规划器的配置文档。

MoveIt 通常将机械臂运动命令发布到 JointTrajectoryController。要了解更多信息,请参阅 低层控制器 部分。

轨迹执行信息的默认位置是 config/moveit_controllers.yaml。

如果你正在使用 MoveItCpp,可以定义一个包含所有必要参数的文件。

该文件的默认位置是 config/moveit_cpp.yaml。

如果你使用的感知传感器能够为运动规划生成 3D 点云,可以为 MoveIt 配置这些设置。更多信息,请参阅 感知管线教程。

该文件的默认位置是 config/sensors_3d.yaml。

为了方便地从 MoveIt 配置包加载参数供 ROS 2 启动文件使用,MoveIt 提供了一个 MoveItConfigsBuilder 工具。要从你的 my_robot_moveit_config 包加载配置参数:

from moveit_configs_utils import MoveItConfigsBuilder
moveit_config = (
MoveItConfigsBuilder("my_robot")
.to_moveit_configs()
)

然后,你可以在启动节点时使用完整的配置参数集:

from launch_ros.actions import Node
my_node = Node(
package="my_package",
executable="my_executable",
parameters=[moveit_config.to_dict()],
)

或者,你可以按如下方式选择加载特定的子组件:

from launch_ros.actions import Node
my_node = Node(
package="my_package",
executable="my_executable",
parameters=[
moveit_config.robot_description,
moveit_config.robot_description_semantic,
moveit_config.robot_description_kinematics,
],
)

注意,上述语法会自动查找符合本文档描述的默认文件命名模式的文件。如果你使用了不同的命名约定,可以使用 MoveItConfigsBuilder 提供的方法直接指定文件名。例如,要使用非默认的机器人描述和 IK 求解器文件路径,并配置规划管线:

from moveit_configs_utils import MoveItConfigsBuilder
moveit_config = (
MoveItConfigsBuilder("my_robot")
.robot_description(file_path="config/my_robot.urdf.xacro")
.robot_description_kinematics(file_path="config/my_kinematics_solver.yaml")
.planning_pipelines(
pipelines=["ompl", "pilz_industrial_motion_planner"],
default_planning_pipeline="pilz_industrial_motion_planner",
)
.to_moveit_configs()
)

阅读本页后,你应该对 MoveIt 2 教程中使用的启动文件有了更清晰的理解,也能更轻松地上手其他 MoveIt 配置包。