哇居然有小朋友关注我,为我唯一的粉丝更新一下hhh。考虑以后把记录都写在上面好啦
看到一篇写的很全的文章,mark一下,也是方便以后查阅
https://blog.csdn.net/qq_33444963/article/details/77893881
wiki连接
http://wiki.ros.org/roslaunch/XML
机器人是一个系统工程,通常一个机器人运行操作时要开启很多个node,对于一个复杂的机器人的启动操作应该怎么做呢?当然,我们并不需要每个节点依次进行rosrun,ROS为我们提供了一个命令能一次性启动master和多个node。该命令是:
roslaunch pkg_name file_name.launch
roslaunch命令首先会自动进行检测系统的roscore有没有运行,也即是确认节点管理器是否在运行状态中,如果master没有启动,那么roslaunch就会首先启动master,然后再按照launch的规则执行。launch文件里已经配置好了启动的规则。所以roslaunch就像是一个启动工具,能够一次性把多个节点按照我们预先的配置启动起来,减少我们在终端中一条条输入指令的麻烦。
<launch> <!--根标签-->
<node> <!--需要启动的node及其参数-->
<include> <!--包含其他launch-->
<machine> <!--指定运行的机器-->
<env-loader> <!--设置环境变量-->
<param> <!--定义参数到参数服务器-->
<rosparam> <!--启动yaml文件参数到参数服务器-->
<arg> <!--定义变量-->
<remap> <!--设定参数映射-->
<group> <!--设定命名空间-->
</launch> <!--根标签-->
用好group,remap,arg,可以省很多事。arg和param作为单独的标签出现,则作用在整个文件;如果出现在node标签下,则作为局部变量作用该节点下。因为参数名后面跟的是缺省值,给过一次后参数值会从外向里一层层传递下去,就是说可以在已有的launch文件上再封装一层,改变参数值更安全。
贴一个在写的launch文件
<?xml version="1.0"?>
<launch>
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<arg name="model" default="$(find hector_quadrotor_description)/urdf/quadrotor.gazebo.xacro" />
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="gui" value="$(arg gui)"/>
<arg name="headless" value="$(arg headless)"/>
<arg name="debug" value="$(arg debug)"/>
</include>
<group ns="uav1">
<include file="$(find hector_quadrotor_gazebo)/launch/spawn_quadrotor.launch">
<arg name="name" value="uav1" />
<arg name="tf_prefix" value="uav1" />
<arg name="model" value="$(arg model)" />
<arg name="y" value="-1.0" />
</include>
</group>
<node pkg="rosservice" type="rosservice" name="enable_motors" args="call --wait /uav1/enable_motors true"/>
</launch>
附:launch文件中起service的方法
<node pkg="rosservice" type="rosservice" name="enable_motors" args="call --wait /uav1/enable_motors true"/>
https://answers.ros.org/question/11271/call-a-service-at-startup-with-a-launch-file/