ROS launch文件

ROS launch文件

      • 1.arg标签
      • 2.group标签
      • 3.param标签
      • 4.ns标签

<!--指明了一个 xml 的版本><?xml version="1.0"?><launch><!-- support multi robot --><arg name="robot_name" default=""/>   <!-- support multi robot --><!-- robot frame --><arg name="base_frame"       default="base_footprint" />    <arg name="odom_frame"       default="odom" /><arg name="imu_frame"       default="imu" /> <!-- pub topic --><arg name="odom_topic"       default="odom" /><!-- do NOT use '/' in topic name--><arg name="imu_topic"       default="imu" /><arg name="battery_topic"       default="battery" /><!-- sub topic --><arg name="cmd_vel_topic"       default="cmd_vel" /> <!-- do NOT use '/' in topic name--><arg name="ackermann_cmd_topic"       default="ackermann_cmd" /><!-- config param --><arg name="pub_imu"       default="False" /><arg name="sub_ackermann"       default="False" /><arg name="pub_sonar"       default="False" /><!-- base control node --><!--ros namespace name can NOT be empty,so need evaluate use multi robot or not--><group if="$(eval robot_name == '')"><node name="base_control"   pkg="base_control"  type="base_control.py" output="screen"><param name="baudrate"   value="115200"/>  <param name="port"  value='/dev/move_base'/><param name="base_id"    value="$(arg base_frame)"/> <!-- base_link name --><param name="odom_id"    value="$(arg odom_frame)"/>      <!-- odom link name --><param name="imu_id"    value="$(arg imu_frame)"/>      <!-- imu link name --><param name="sub_ackermann" value="$(arg sub_ackermann)"/> <!-- sub ackermann topic or not --></node></group>--><group unless="$(eval robot_name == '')"><group ns="$(arg robot_name)"><node name="base_control"   pkg="base_control"  type="base_control.py" output="screen"><param name="baudrate"   value="115200"/>  <param name="port"  value='/dev/move_base'/><param name="base_id"    value="$(arg robot_name)/$(arg base_frame)"/> <!-- base_link name --><param name="odom_id"    value="$(arg robot_name)/$(arg odom_frame)"/>      <!-- odom link name --><param name="imu_id"    value="$(arg robot_name)/$(arg imu_frame)"/>      <!-- imu link name --><param name="sub_ackermann" value="$(arg sub_ackermann)"/> <!-- sub ackermann topic or not --></node></group></group></launch>

1.arg标签

这里面arg标签用来在 launch 文件中声明参数。

default的内容则是对参数赋值。如无参数传入则使用 launch 文件中定义的值。

也可在启动launch文件时传入参数的值。

传入 pub_imu 的值为 true
roslaunch base_control base_control.launch pub_imu:=ture

2.group标签

group标签会将group里的内容划分成一个组。

里面用到了一个if unless语句,如下。意思是如果robot_name为空,执行第一个group的内容;否则执行第二个。

<group if="$(eval robot_name == '')"><group unless="$(eval robot_name == '')">

下面这个代码:节点的名称name、该节点所在的包名pkg,节点的可执行文件type、输出方式output,“screen”表示输出在当前终端屏幕。

<node name="base_control"   pkg="base_control"  type="base_control.py" output="screen">

3.param标签

下面这个代码:param标签也是用来声明参数。

param声明的变量是节点所接收的,用来设置传入节点的参数,arg的参数是launch文件所接收的。

参数的值是通过value直接传入的。

可以传入固定值,如下。

 <param name="baudrate"   value="115200"/>  

可以传入参数,如下。下面这个value值是arg标签声明的参数base_frame

<param name="base_id"    value="$(arg base_frame)"/> <!-- base_link name -->
<param name="odom_id"    value="$(arg odom_frame)"/>      <!-- odom link name -->

4.ns标签

第二个group里面还有group标签,对应ns。

<group unless="$(eval robot_name == '')"><group ns="$(arg robot_name)">

以imu_id话题为例,传入robot_name为abc,查看话题列表显示的就是abc/imu_id,这样可防止话题名重名。

下面是之前写的一个例子https://blog.csdn.net/qq_40828914/article/details/120977892

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

此处我们创建了两个分组,并以命名空间(namespace)标签来区分,其中一个名为turtulesim1,另一个名为turtlesim2,两个分组中都有相同的名为sim的turtlesim节点。这样可以让我们同时启动两个turtlesim模拟器,而不会产生命名冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560183.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RNNLM

RNNLM 基于RNN的语言模型称为RNNLM(Language Model)。 Embedding 层&#xff1a;将单词ID转化为单词的分布式表示&#xff08;单词向量&#xff09;。 RNN层&#xff1a;向下一层(上方)输出隐藏状态&#xff0c;同时也向下一时刻的RNN层(右边)输出隐藏状态。 对于“you say …

使用c#制作赛尔号登录器

使用c#制作赛尔号登录器 需求&#xff1a; 打开赛尔号官网&#xff0c;发现我的chrome浏览器无法运行Flash。这是因为Adobe 公司放弃了对 Flash Player 的支持。 那么如果我想要玩游戏&#xff0c;又不想下载别的浏览器&#xff0c;只好自己写一个登陆器了。 创建项目 首先…

普通RNN的缺陷—梯度消失和梯度爆炸

之前的RNN&#xff0c;无法很好地学习到时序数据的长期依赖关系。因为BPTT会发生梯度消失和梯度爆炸的问题。 RNN梯度消失和爆炸 对于RNN来说&#xff0c;输入时序数据xt时&#xff0c;RNN 层输出ht。这个ht称为RNN 层的隐藏状态&#xff0c;它记录过去的信息。 语言模型的任…

LSTM的结构

RNN和LSTM 简略表示RNN层&#xff1a;长方形节点中包含了矩阵乘积、偏置的和、tanh函数的变换。将下面这个公式表示成一个tanh节点。 LSTM&#xff1a;Long Short-Term Memory&#xff08;长短期记忆&#xff09;&#xff0c;长时间维持短期记忆。 LSTM与RNN的接口(输入输出)…

STM32 USART 补充

串口通讯的数据包&#xff1a;发送设备通过自身的TXD接口传输到接收设备的RXD接口。 串口通讯的协议层中&#xff0c;规定了数据包的内容&#xff0c;由起始位、主体数据、校验位、停止位组成&#xff0c;通讯双方的数据包格式要约定一致才能正常收发数据。 异步通讯&#xf…

ROS TF变换

静态坐标转换&#xff1a;机器人本体中心到雷达中心的转换。因为激光雷达可能没安装到机器人的中心。 动态坐标转换&#xff1a;机器人中心和里程计坐标的变换。机器人从起点出发后&#xff0c;里程计坐标相对于本体就会产生一个偏移&#xff0c;这个偏移随着机器人的运动不断…

ROS底盘控制节点 源码分析

先在机器人端通过launch文件启动底盘控制。 robot:~$ roslaunch base_control base_control.launch ... logging to /home/jym/.ros/log/3e52acda-914a-11ec-beaa-ac8247315e93/roslaunch-robot-8759.log Checking log directory for disk usage. This may take a while. Pres…

ROS + OpenCV

视觉节点测试 先进行一些测试。并记录数据。 圆的是节点&#xff0c;方的是话题。 1.robot_camera.launch robot:~$ roslaunch robot_vision robot_camera.launch ... logging to /home/jym/.ros/log/bff715b6-9201-11ec-b271-ac8247315e93/roslaunch-robot-8830.log Check…

ROS+雷达 运行数据记录

先测试一下雷达&#xff0c;记录数据。方便接下来分析源码。 1.roslaunch robot_navigation lidar.launch robot:~$ roslaunch robot_navigation lidar.launch ... logging to /home/jym/.ros/log/7136849a-92cc-11ec-acff-ac8247315e93/roslaunch-robot-9556.log Checking l…

ROS 找C++算法源码的方法

在gmapping的launch文件中看到&#xff0c;type“slam_gmapping”&#xff0c;这里的slam_gmapping是c编译后的可执行文件。 如果想要修改gmapping算法&#xff0c;就需要找到slam_gmapping的c源码。 但是这是用apt下载的包&#xff0c;是二进制类型的&#xff0c;没有下载出…

ros 雷达 slam 导航 文件分析

ros 雷达 slam 导航 文件分析robot_slam_laser.launchrobot_lidar.launchlidar.launchraplidar.launchkarto.launchgmapping.launchcartographer.launchrobot_navigation.launchmap.yamlmap.pgmamcl_params.yamlmove_base.launchcostmap_common_params.yamllocal_costmap_param…

Apprentissage du français partie 1

Apprentissage du franais partie 1 键盘转换图&#xff1a; 字母&#xff1a;26个 元音字母&#xff1a;a、e、i、o、u、y b浊辅音(声带)-p清辅音 d-t 音符 音符&#xff1a;改变字母发音。 &#xff1a;闭音符 [e] &#xff1a;开音符 /ε/ &#xff1a;长音符 /ε/…

stm32基本定时器

定时器分类 stm32f1系列&#xff0c;8个定时器&#xff0c;基本定时器(TIM6,7)、通用定时器(TIM2,3,4,5)、高级定时器(TIM1,8)。 基本定时器&#xff1a;16位&#xff0c;只能向上计数的定时器&#xff0c;只能定时&#xff0c;没有外部IO 通用定时器&#xff1a;16位&#…

Apprentissage du français partie 2

元音 /ə/ 1.e在单音节 Ce je 2.e在词首开音节 cela venais /y/ u 鱼 lu sur lunette 辅音 /m/ m mre /ʃ/ ch chic chute chemise chaise /v/ v vive venir vitesse /z/ 1.z zle zut 2.s在元音字母之间 valise physique mise 连读和联诵 连读&#x…

stm32高级定时器 基础知识

stm32高级定时器 高级定时器时基单元&#xff1a; 包含一个16位自动重装载寄存器 ARR 一个16位的计数器CNT&#xff0c;可向上/下计数 一个16位可编程预分频器PSC&#xff0c;预分频器时钟源有多种可选&#xff0c;有内部的时钟、外部时钟。 一个8位的重复计数器 RCR&…

Apprentissage du français partie 3

元音 /e/ 1. t fe 2.es在单音节词尾 mes tudes(这个不是单音节词尾&#xff0c;不读/e/) 3.er ez在词尾 chez aller /u/ ou o pour 辅音 /ʒ/ je jupe geler /g/ 1.g在a、o、u、辅音前 gare glace 2.gu在e&#xff0c;i&#xff0c;y前。 guerre gout Guy g…

stm32 PWM互补输出

stm32高级定时器例子—stm32 PWM互补输出 定时器初始化结构体 TIM_TimeBaseInitTypeDef 时基结构体&#xff0c;用于定时器基础参数设置&#xff0c;与TIM_TimeBaseInit函数配合使用&#xff0c;完成配置。 typedef struct { TIM_Prescaler /*定时器预分频器设置&…

stm32 输入捕获 测量脉宽

选用通用定时器TIM5的CH1。 PA0接一个按键&#xff0c;默认接GND&#xff0c;当按键按下时&#xff0c;IO口被拉高&#xff0c;此时&#xff0c;可利用定时器的输入捕获功能&#xff0c;测量按键按下的这段高电平的时间。 宏定义方便程序升级、移植&#xff0c;举个例子&#…

stm32 PWM输入捕获

普通的输入捕获&#xff0c;可使用定时器的四个通道&#xff0c;一路捕获占用一个捕获寄存器. PWM输入&#xff0c;只能使用两个通道&#xff0c;通道1和通道2。 一路PWM输入占用两个捕获寄存器&#xff0c;一个捕获周期&#xff0c;一个捕获占空比。 这里&#xff0c;用通用…

直流有刷减速电机结构及其工作原理

寒假无聊拆了个直流有刷减速电机。下面介绍一下它的结构和工作原理 直流电机 直流电机和直流减速电机&#xff1a; 构造上相差的是一个减速齿轮组。 普通的直流电机当空载时&#xff0c;电机的转速由电压决定&#xff0c;直流减速电机的转速由齿轮组和电压决定。 齿轮组作…