1.launch文件功能
使用launch文件,可以同时启动多个ros节点,包括master节点。其基本思想是在一个XML格式的文件内将需要同时启动的一组节点罗列出来。launch 文件可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。
roslaunch package-name launch-file-name
2.launch文件作用
简化节点的配置与启动,提高ROS程序的启动效率。
3.新建launch文件
在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件
<launch>
<node pkg="turtlesim" type="turtlesim_node" name="myTurtle" output="screen" />
<node pkg="turtlesim" type="turtle_teleop_key" name="myTurtleContro" output="screen" />
</launch>
4.调用 launch 文件
roslaunch 包名 xxx.launch
注意:roslaunch 命令执行launch文件时,首先会判断是否启动了 roscore,如果启动了,则不再启动,否则,会自动调用 roscore
5.launch文件的详细解释
参考机器人launch文件:
XML文件的声明:
<?xml version="1.0" ?>
ROS launch文件的根元素,定义了这是一个ROS启动文件:
<launch xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://gist.githubusercontent.com/nalt/dfa2abc9d2e3ae4feb82ca5608090387/raw/roslaunch.xsd">
接下来是一些参数定义和节点的启动:
<arg>
: 定义了两个参数,hardware_version
和 joints_gui
。
hardware_version
默认值为 "ned2"
,joints_gui
默认值为 "true"
<!-- Arguments -->
<arg name="hardware_version" default="ned2"/>
<arg name="joints_gui" default="true"/>
<arg>
: 定义了一个名为 urdf_path
的参数,它是一个URDF文件的路径。使用了ROS的$(find ...)
语法来查找包中的路径,并结合 hardware_version
参数来构建URDF文件的路径。
<arg name="urdf_path" value="$(find niryo_robot_description)/urdf/$(arg hardware_version)/niryo_$(arg hardware_version).urdf.xacro"/>
<param>
: 定义了一个参数 robot_description
,它的值是通过执行一个命令得到的。命令是 $(find xacro)/xacro $(arg urdf_path)
,这会执行xacro处理URDF文件并将结果作为参数传递。
<param name="robot_description" command="$(find xacro)/xacro $(arg urdf_path)"/>
<node> 启动一个ROS节点。根据 joints_gui
参数的值来决定是否启动 joint_state_publisher_ gui
节点或 joint_state_publisher
节点。if
和 unless
属性根据参数值来条件启动节点。
<node if="$(eval arg('joints_gui'))" name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui"/>
<node unless="$(eval arg('joints_gui'))" name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher"/>
<node>
: 启动 robot_state_publisher
节点,用于发布机器人的状态信息。
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"/>
<node>
: 启动 rviz
节点,用于可视化机器人。-d
参数指定了RViz的配置文件路径。
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find niryo_robot_description)/config/default_config.rviz"/>
</launch>
6.关于节点的操作
1.列出活动节点:
使用 rosnode list 命令可以列出当前所有活动的 ROS 节点。这对于快速查看系统中运行了哪些节点非常有用。
2.获取节点信息:
rosnode info [node_name] 会显示特定节点的详细信息,包括它订阅的话题、发布的话题、服务以及与其他节点的联系等。
3.检查节点是否运行:
rosnode ping [node_name] 命令用于测试特定节点是否正在运行。如果节点响应,则说明它是活动的。
4.清理僵尸节点:
有时候,节点可能会在没有正确关闭的情况下终止,这可能会留下所谓的僵尸节点。rosnode cleanup 命令会移除任何没有响应的节点。