ROS--Launch文件

本文深入解析ROS中的launch文件,介绍其特殊XML格式及如何通过roslaunch命令启动多个节点。涵盖launch文件结构、arg参数设置、param参数使用、include元素复用及node节点配置等关键内容。

ROS采用rosrun命令可以启动一个节点,如果需要同时启动节点管理器(master)和多个节点,就需要采用launch文件来配置。launch文件是一种特殊的XML格式文件,通常以.launch作为文件后缀。每个launch文件都必须要包含一个根元素。

roslaunch的使用方法为: 

$ roslaunch pkg-name launch-file-name
或
$ roslaunch [package] [filename.launch]

下面以一个典型的launch文件举例说明:

<launch>

  <!-- these are the arguments you can pass this launch file, for example paused:=true -->
  <arg name="debug" default="true"/>

  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
   <include file="$(find gazebo_ros)/launch/empty_world.launch"> 
    <arg name="debug" value="$(arg debug)" />
  </include>

  <!-- Load the URDF into the ROS Parameter Server -->
  <arg name="model" />
  <param name="robot_description" 
     command="$(find xacro)/xacro.py $(arg model)" />

  <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
   <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
    args="-urdf -model robot1 -param robot_description -z 0.05"/> 

</launch>

launch 

每个launch文件都必须且只能包含一个根元素。根元素由一对launch标签定义,其他所有元素标签都应该包含在这两个标签之内。

<launch>
...
</launch>

arg

 roslaunch支持启动参数arg,可以通过设置arg来改变程序的运行。name为启动参数的名称,default为该参数的默认值,value为该参数的参数值。 
default与 value两者的唯一区别在于命令行参数roslaunch pkg-name launch-file-name arg-name:=”set-value”可以覆盖默认值default,但是不能覆盖参数值 value。在launch文件中出现$(arg arg-name)的地方,运行时roslaunch 会将它替换成参数值。并且可以在include元素标签内使用arg来设置所包含的launch文件中的参数值。

param 

在ROS中prarmeter和argument 是不同的,虽然翻译一样。parameter是运行中的ROS系统使用的数值,存储在参数服务器(parameter server)中,每个活跃的节点都可以通过 ros::param::get 函数来获取parameter的值,用户也可以通过rosparam来获得parameter的值而argument只在启动文件内才有意义他们的值是不能被节点直接获取的。

include 

在launch文件中复用其他launch文件可以减少代码编写的工作量,提高文件的简洁性。使用包含元素include在launch文件中可包含其他launch文件中所有的节点和参数。

 <include file="$(find pkg-name)/launch/launch-file-name"> 
     <arg name="arg_name" value="set-value"/>
  </include>

node 

节点的形式为:

<node name="node-name" pkg="pkg-name" type="executable-name" />

node的三个属性分别为节点名字、程序包名字和 可执行文件的名字。 name属性给节点指派了名称,它将覆盖任何通过调用 ros::init来赋予节点的名称。另外node标签内也可以用过arg设置节点参数值。如果node标签有children标签,就需要显式标签来定义。即末尾为/node>


示例

切换到beginner_tutorials文件下:

roscd beginner_tutorials

 创建launch文件夹,切换到该文件夹下:

mkdir launch
cd launch
gedit turtlemimic.launch

   将下面的内容复制到文件中:

<launch>
 
  <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>
 
  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>
 
  <node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
  </node>
 
</launch>

保存退出就可以了。
现在使用如下命令载入:

roslaunch beginner_tutorials turtlemimic.launch

就可以看到新打开一只乌龟节点。

再一个新打开的终端中输入:

rostopic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

就可以看到两只乌龟都在运动。下面来解释一下原因:

<lanuch>标签用来识别这是一个launch文件,

 <group ns="turtlesim1">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>
 
  <group ns="turtlesim2">
    <node pkg="turtlesim" name="sim" type="turtlesim_node"/>
  </group>

上面这些内容表示我们启动了两只乌龟,
 

<node pkg="turtlesim" name="mimic" type="mimic">
    <remap from="input" to="turtlesim1/turtle1"/>
    <remap from="output" to="turtlesim2/turtle1"/>
</node>

上面的这些被荣使turtlesim2模仿turtlesim1。所以虽然我们只向turtlesim1发布了话题,turtlesim2也做出了反应。 

原文:https://blog.youkuaiyun.com/wangchao7281/article/details/53494996
原文:https://blog.youkuaiyun.com/xiaocainiaoshangxiao/article/details/13629103 

<think>好的,我现在需要帮助用户在ROS Noetic中安装rviz和hector-slam相关软件包,并解决可能的依赖问题。首先,用户提到了之前的引用内容,其中提到安装hector-slam时遇到了依赖问题,以及安装路径的问题。我需要结合这些信息给出正确的安装步骤。 首先,ROS Noetic的软件包通常通过apt安装,所以用户应该使用sudo apt install命令。但根据引用[2],安装hector-slam时可能出现依赖问题,需要先运行apt --fix-broken install来修复。因此,我应该建议用户先更新系统并修复可能的损坏包。 接下来,rviz是ROS桌面完整版的一部分,通常安装ros-noetic-desktop-full会包含rviz。但用户可能已经安装了这个,所以可能需要单独安装ros-noetic-rviz。不过,为了确保依赖项正确,还是建议用户先安装桌面完整版,如果还没安装的话。 然后是hector-slam的安装。根据引用[2],用户需要安装ros-melodic-hector-slam,但这里用户使用的是Noetic,所以包名应该是ros-noetic-hector-slam。但需要注意,Noetic的hector-slam可能有不同的依赖关系,或者可能某些包未被移植。因此,可能需要从源码构建。 步骤大致如下: 1. 更新系统和已安装的包。 2. 安装ROS Noetic桌面完整版(如果尚未安装),以确保rviz及其依赖项。 3. 使用apt安装hector-slam,如果可用的话。 4. 如果遇到依赖问题,运行apt --fix-broken install并重复安装步骤。 5. 如果官方源中没有hector-slam的Noetic版本,则从源码克隆仓库并编译。 另外,用户提到引用[1]中安装Hector到系统目录的问题,可能需要建议用户使用catkin工作空间从源码安装,这样可以避免修改系统目录,便于管理自己的launch文件。 需要验证hector-slam在Noetic中的可用性。查阅资料发现,hector-slam确实有Noetic的版本,可以通过apt安装,但可能存在依赖问题。因此,如果apt安装失败,源码安装是备选方案。 最后,安装完成后,建议用户运行测试,例如使用hector_slam的launch文件,并确保rviz正确显示数据。可能还需要设置环境变量和工作空间。 需要确保步骤清晰,并提醒用户注意依赖问题的解决方法,如使用apt --fix-broken install,以及在必要时使用rosdep安装依赖项。</think>在ROS Noetic中安装rviz和hector-slam需要分步骤处理依赖关系和安装方式,具体流程如下: --- ### 一、基础环境准备 1. **更新软件源** ```bash sudo apt update sudo apt upgrade ``` 2. **安装ROS桌面完整版**(若未安装) ```bash sudo apt install ros-noetic-desktop-full ``` 此步骤已包含rviz核心组件[^1]。 --- ### 二、单独安装rviz(可选) 若已安装桌面完整版但需要更新: ```bash sudo apt install ros-noetic-rviz ``` --- ### 三、安装hector-slam #### 方法1:通过apt安装(推荐尝试) 1. **尝试直接安装** ```bash sudo apt install ros-noetic-hector-slam ``` 2. **修复依赖问题** 若出现类似引用[2]的依赖错误,执行: ```bash sudo apt --fix-broken install sudo apt install -f # 再次修复 ``` #### 方法2:源码编译(apt失败时使用) 1. **创建catkin工作空间** ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 2. **克隆hector-slam源码** ```bash cd ~/catkin_ws/src git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam.git ``` 3. **安装依赖并编译** ```bash rosdep install --from-paths src --ignore-src -y catkin_make source devel/setup.bash ``` --- ### 四、验证安装 1. **rviz验证** ```bash rosrun rviz rviz ``` 2. **hector-slam验证** ```bash roslaunch hector_slam_launch tutorial.launch ``` --- ### 五、常见问题解决 1. **依赖缺失问题** - 手动安装缺失依赖(示例): ```bash sudo apt install ros-noetic-hector-geotiff ros-noetic-hector-map-tools ``` - 使用`rosdep`自动处理: ```bash rosdep update rosdep install --from-paths <package_path> --ignore-src -y ``` 2. **文件路径问题**(如引用[1]) - 源码编译方式会将包存放在用户工作空间(`~/catkin_ws`),避免系统目录权限问题 - 修改launch文件时直接编辑`~/catkin_ws/src/hector_slam`中的文件 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值