1. 创建launch文件 name.launch.py
2. 导入创建launch文件包
from launch import LaunchDescription
def generate_launch_description():
# 创建节点
return LaunchDescription([
# 节点。。。
])
3. 为了创建节点导包
from launch_ros.actions import Node
4. 创建节点
暂时将URDF参数保存在robot_description中
# 创建一个状态发布节点
robot_state_publisher = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
parameters=[{"robot_description": robot_description}] # "robot_description"参数是文件描述路径
)
4.1 要声明一个启动文件的参数:
from launch.actions import DeclareLaunchArgument
# 定义一个启动参数 model
model_arg = DeclareLaunchArgument(name="model", # 参数名称
default_value=os.path.join(arduinobot_description_dir, "urdf", "arduinobot.urdf.xacro"),# 参数默认值
description="Absolute path to robot urdf file" # 参数描述:这是URDF文件的绝对路径
)
这里为了指定urdf的目录,使用Python的os.path.join函数,导包:
import os
为了获取包'arduinobot_description'的共享目录:
from ament_index_python.packages import get_package_share_directory # 获取包的共享目录
arduinobot_description_dir = get_package_share_directory("arduinobot_description")
4.2 生成最终的参数
robot_description参数
# 通过xacro命令将xacro文件转换为urdf文件
# 这里使用了ParameterValue来将xacro文件的内容传递给robot_description参数
robot_description = ParameterValue(Command(["xacro ", LaunchConfiguration("model")]),
value_type=str)
不能简单地包含机器人的URDF模型的路径,因为没有使用纯URDF约定,而是使用了xacro,所以
还要导入Command将 xacro文件 转换为 URDF.
使用LaunchConfiguration将'modle'里的参数获取出来.
最终robot_description是完整的robot描述.
导包:
from launch_ros.parameter_descriptions import ParameterValue
from launch.substitutions import Command, LaunchConfiguration
5. 发布robot描述:
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
import os # 导包
from ament_index_python.packages import get_package_share_directory # 获取包的共享目录
from launch.substitutions import Command, LaunchConfiguration
from launch_ros.parameter_descriptions import ParameterValue
def generate_launch_description():
arduinobot_description_dir = get_package_share_directory("arduinobot_description")
# 定义一个启动参数 model
# arduinobot_description_dir 是包的共享目录
model_arg = DeclareLaunchArgument(name="model", # 参数名称
default_value=os.path.join(arduinobot_description_dir, "urdf", "arduinobot.urdf.xacro"),# 参数默认值
description="Absolute path to robot urdf file" # 参数描述:这是URDF文件的绝对路径
)
# 通过xacro命令将xacro文件转换为urdf文件
# 这里使用了ParameterValue来将xacro文件的内容传递给robot_description参数
robot_description = ParameterValue(Command(["xacro ", LaunchConfiguration("model")]),
value_type=str)
robot_state_publisher = Node(
package="robot_state_publisher",
executable="robot_state_publisher",
parameters=[{"robot_description": robot_description}]
)
return LaunchDescription([
model_arg,
robot_state_publishe,
])
6. RVIZ2节点
rviz_node = Node(
package="rviz2",
executable="rviz2",
name="rviz2",
output="screen",
# rviz2的配置文件路径
arguments=["-d", os.path.join(arduinobot_description_dir, "rviz", "display.rviz")],
)