ROS启动多launch文件
在ROS工程中经常需要启动好几个launch文件,比较不方便,有下面两种方法可以更高效些:
- 重写一个大型的launch文件,将所有的节点的启动配置信息都包含进去。
- 通过bash写一个xxx.sh文件,将命令行一起写入一个脚本。
launch文件中则如下进行设置:
pkg对应文件的包名。
type是CMakeList.txt中对应该文件add_executable(pcan_test src/pcan_test)中可执行文件的名称,在python中则是文件名,因为Python的可执行文件就是文件本身(解释性语言,同Matlab),所以若用C++编程不要误写为文件名全称。
name表示节点启动后的名称,该名称会覆盖ros::init中初始化的名称。
output后参数表示从屏幕输出打印信息,否则打印信息会存储到某个临时文件里。
<launch>
<node pkg="uav_dl" name="position_control" type="position_control.py" output="screen" />
<node pkg="uav_dl" name="action_control" type="action_control.py" output="screen" />
<node pkg="uav_dl" name="goto_position_server" type="goto_position_server.py" output="screen" />
<node pkg="uav_dl" name="detect_object_server" type="detect_object_server.py" output="screen" />
<node pkg="uav_dl" name="tensorflow_detection" type="tensorflow_detection.py" output="screen" />
</launch>
注:只需要在src下建立launch文件夹,然后在其中创建launch文件即可,不需要做其他工作。
参数里name是ros::param::get()中第一个字符串去掉“~”后的名称,launch会在运行时进行查找匹配,type是变量类型,value是具体值。以下launch文件(包含私有变量和公有变量)。
<launch>
<arg name="fcu_url" default="serial:///dev/ttyACM0:921600" />
<arg name="gcs_url" default="udp://:14556@192.168.150.2:14550" />
<arg name="tgt_system" default="1" />
<arg name="tgt_component" default="50" />
<node name="mavros" pkg="mavros" type="mavros_node" output="screen">
<param name="fcu_url" value="$(arg fcu_url)" />
<param name="gcs_url" value="$(arg gcs_url)" />
<param name="target_system_id" value="$(arg tgt_system)" />
<param name="target_component_id" value="$(arg tgt_component)" />
<rosparam command="load" file="$(find mavros)/launch/px4_blacklist.yaml" />
<!-- enable heartbeat send and reduce timeout -->
<param name="conn_heartbeat" value="5.0" />
<param name="conn_timeout" value="5.0" />
<!-- automatically start mavlink on USB -->
<param name="startup_px4_usb_quirk" value="true" />
</node>
<node name="camera" pkg="usb_cam" type="usb_cam_node">
<param name="video_device" value="/dev/video0" />
<param name="image_width" value="800" />
<param name="image_height" value="600" />
<param name="pixel_format" value="mjpeg" />
<param name="framerate" value="30" />
<param name="camera_frame_id" value="webcam" />
</node>
<node name="viewer" pkg="image_view" type="image_view">
<remap from="image" to="/camera/image_raw" />
</node>
</launch>
在ubuntu下进行节点启动顺序控制的简单策略就是通过shell实现
新建文件后命名为xxx.sh
#!/bin/bash
roslaunch bhand_controller bhand_controller.launch &
sleep 5
echo "bhand controller starting success!"
roslaunch beginner_tutorials bhand_force_control.launch &
sleep 0.1
wait
exit 0
代码解释:第一行表示用bash执行,sleep表示演示,echo用来输出一定内容,注意不要忘记句子后的”&“符号。注:若ROS的关键词不能在终端识别,需先source下ROS环境。
节点启动顺序控制策略就是如果某个节点必须先执行,可以单独为其写一个launch文件,然后通过shell控制先行启动。
参考链接:https://wangcong.info/article/ROSLaunchTips.html
ROS启动多launch文件的更多相关文章
- python ros 使用launch文件启动脚本
目录结构 在包里面新建scripts文件夹,里面放运行的脚本文件,记得设置执行权限 然后新建launch文件夹,新建launch文件按照如下格式写: <node pkg="initia ...
- ros 使用python代码启动launch文件
在开发中我们经常会遇到使用python代码启动launch文件这样的问题.一般的做法是使用subprocess调用roslaunch.但是这种方法使用起来并不方便.要涉及到自己去控制进程的状态.由于r ...
- ROS Learning-010 beginner_Tutorials 编写简单的启动脚本文件(.launch 文件)
ROS Indigo beginner_Tutorials-09 编写简单的启动脚本文件 我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.0 ...
- ROS的launch文件
ROS中可以把很多的命令以描述的形式写成launch文件,然后用roslaunch命令执行launch文件.它的使用方法如下: roslaunch [package] [filename.launch ...
- (八) .launch文件 ---编写简单的启动脚本文件
下面我们将介绍,如何编写一个启动脚本程序:(.launch文件) 还记得我们在 创建ROS软件包教程 中创建的第一个程序包(beginner_tutorials)吗,现在我们要使用它. 在 begin ...
- Ros学习——launch文件解析
launch文件的重点是:节点(node)元素的集合. roslaunch 则是让所有的节点共享同一个终端. 1.标签(元素)说明 1. group标签 2. node标签 <group ns= ...
- ROS学习笔记六:xxx.launch文件详解
每当我们需要运行一个ROS节点或工具时,都需要打开一个新的终端运行一个命令.当系统中的节点数量不断增加时,每个节点一个终端的模式会变得非常麻烦.那么有没有一种方式可以一次性启动所有节点呢?答案当然是肯 ...
- 4.2 ROS节点运行管理launch文件
4.2 ROS节点运行管理launch文件 关于 launch 文件的使用我们已经不陌生了,在第一章内容中,就曾经介绍到: 一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌 ...
- ros 编译包含脚本文件以及launch文件
目录结构如下: 修改CMakeLists.txt文件 install(PROGRAMS scripts/initial_pos.py DESTINATION ${CATKIN_PACKAGE_BIN_ ...
随机推荐
- tsc.exe 已退出 代码为 1
从微软官网下载TypeScript_Dev14Full,解决问题,下载地址https://www.microsoft.com/zh-CN/download/confirmation.aspx?id=4 ...
- Retrofit原理
Retrofit原理解析最简洁的思路 Retrofit 工作原理总结 从架构角度看Retrofit的作用.原理和启示 Retrofit主要是在create方法中采用动态代理模式实现接口方法:这个过程构 ...
- Oracle字符串行拆分成列的三种方式
Oracle字符串行拆分成列的三种方式 --muphy 开发过程中经常会遇到将前台多个值用逗号连接一同传递到后台查询,这个用逗号连接的字符串分隔的每个字符串分别对应Oracle数据库表的不同行. 如下 ...
- windows系统下升级nodejs
别整那些有的没得,直接Win+R 输入:npm config ls 找到nodejs安装路径 然后上nodejs官网,下载最新安装程序,指定旧版本目录,直接安装覆盖掉 啥用n模块啥得,不适合俺们微软体 ...
- Wireshark显示结果过滤基本语法
按IP地址过滤:1.仅显示源地址为192.168.1.95的项目: ip.src eq 192.168.1.95 2.仅显示目的地址为192.168.1.95的项目: ip.dst eq 192.16 ...
- vue+axios实现文件下载
功能:点击导出按钮,提交请求,下载excel文件: 第一步:跟后端童鞋确认交付的接口的response header设置了 axios({ method: 'post', url: 'api/user ...
- mysql8.0.15二进制安装
mysql8.0.15二进制安装 今天有幸尝试安装了社区版本的mysql8.0.15,记录下来,供以后方便使用.特此感谢知数堂的叶老师,提供了配置文件的模板. # 第一部分:系统配置 # 1.安装系统 ...
- current account(经常账户)
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- Java 集合系列之二:List基本操作
1. Java List 1. Java List重要观点 Java List接口是Java Collections Framework的成员. List允许您添加重复元素. List允许您拥有'nu ...
- Airflow Comman Line 测试
官网文档:https://incubator-airflow.readthedocs.io/en/latest/cli.html clear (1)clear 指定日期某一个dag下的任务,任务名可以 ...