import os
from ament_index_python.packages import get_package_share_directory
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, IncludeLaunchDescription
from launch.launch_description_sources import PythonLaunchDescriptionSource
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node
def generate_launch_description():
# 获取 MoveIt 配置包的路径
moveit_config_package = "fairino3_v6_left_arm"
moveit_config_directory = get_package_share_directory(moveit_config_package)
moveit_config = os.path.join(moveit_config_directory, "config")
# 定义启动参数
use_sim_time = LaunchConfiguration("use_sim_time", default="false")
# 定义 MoveIt move_group 节点的参数文件路径
move_group_params = os.path.join(moveit_config, "move_group_params.yaml")
# 创建 launch description 对象
ld = LaunchDescription()
# 添加启动参数声明
ld.add_action(
DeclareLaunchArgument(
"use_sim_time",
default_value="false",
description="Use simulation (Gazebo) clock if true",
)
)
# 添加 move_group 节点
ld.add_action(
Node(
package="moveit_ros_move_group",
executable="move_group",
name="move_group",
output="screen",
parameters=[
{"use_sim_time": use_sim_time},
move_group_params,
],
remappings=[
("~move_group", "/move_group"),
],
)
)
return ld
示例解释:
-
导入必要的模块:
os
:用于文件路径操作。get_package_share_directory
:从ament_index_python
模块导入,用于获取 ROS2 包的路径。LaunchDescription
、DeclareLaunchArgument
、IncludeLaunchDescription
、PythonLaunchDescriptionSource
、LaunchConfiguration
:从launch
模块导入,用于定义启动描述和参数。Node
:从launch_ros.actions
模块导入,用于定义 ROS2 节点。
-
定义
generate_launch_description
函数:- 获取 MoveIt 配置包的路径,并构建配置文件目录的路径。
- 定义启动参数
use_sim_time
,用于指定是否使用仿真时间(例如在 Gazebo 中). - 定义 MoveIt
move_group
节点的参数文件路径move_group_params
。
-
创建启动描述对象
ld
:- 使用
DeclareLaunchArgument
添加启动参数声明,允许用户在启动时指定参数值。 - 使用
Node
添加 MoveItmove_group
节点的配置,指定节点的包名、可执行文件名、节点名、输出方式、参数文件路径和重映射等信息。
- 使用
-
返回启动描述对象:
return ld
:返回构建好的启动描述对象,用于启动 MoveItmove_group
节点。
这个示例展示了如何在 ROS2 中使用 Python 脚本定义 move_group.launch.py
文件,启动 MoveIt 的 move_group
节点,并配置相关参数。你可以根据实际需求调整包名、参数文件路径和其他配置项。