ros launch launch文件怎么写写

转载自:http://blog.csdn.net/yangziluomu/article/details/
1&使用launch文件
Launch文件是ROS提供的,可以同时运行多个nodes的文件。Launch文件以一种特殊的XML格式编写,在ROS&packages中使用广泛。
1.1&运行launch文件
$&roslaunch&package_name&launch_file_name
Eg:&roslaunch&turtlesim&example.launch
(1)Tip1:&rosrun只能运行一个nodes,&roslaunch可以同时运行多个nodes.
Tip2:&launch文件可以不被包含于package中。此时,只需指出该launch文件的绝对路径,即可运行。
$&roslaunch&completely_path
Eg:$&roslaunch&~/opt/ros/indigo/share/turtlesim/launch/example.launch
Tip3:&为便于执行,每个node最好是相互独立的。
(2)详细显示(request&verbosity)
$&roslaunch&-v&package_name&launch_file_name
(3)&结束launch文件
2&创建launch文件
(1)&launch文件一般以.launch后缀作为文件名,放在package的launch文件夹下。最简单的launch文件可以仅包含几个nodes。
(2)&Launch文件是XML文件,每个XML文件必须有一个root&element。而launch文件的root&element由一对launch&标签定义。
Launch文件中的其他elements必须都在这一对tags之间。
(3)&launch文件的核心是一系列node&elements,每个node&element启动一个node。Node&element看起来如下:
&&pkg=”package_name”&type=”executable_name”&name=”node_name”
Tip1:&最后的“/”是必不可少的。
Tip2:&也可以写成&node&pkg=”..”&type=”...”&name=”...”&&/node&
如果该node中有其他tags,则必须使用这种形式。
(4)&一个node&element包含三个必须的属性:pkg,&type,&name.
pkg和type属性指出ROS应该运行哪个pkg中的哪个node,注意:此处的type是可执行文件的名称,而name则是可以任意给出的,它覆盖了原有文件中ros::init指定的node&name。
(5)&使用匿名(anonymous&name)
&&name=”$(anon&base_name)”
(6)&node&日志文件(log&file)
运行roslaunch和用rosrun运行单个节点的区别之一是,默认情况下,roslaunch运行的nodes的标准输出会重定向到log&file,不显示在控制台。
该日志文件的位置和名称如下:
~/.ros/log/run_id/node_name-number-stdout.log
其中,run_id是master启动后生成的特殊标识符,number是表示nodes数量的整数。如,turtlesim-1-stdout.&teleop_key-3-stdout.log.
(7)&输出到控制台
用output属性,&output=”screen”;这种方法仅显示一个node。
若显示所有nodes的输出,用--screen命令行。
$&roslaunch&--screen&package_name&launch_file_name
如果正在运行的文件没有显示想要对输出,可以查看该node属性集中是否有&output=”screen”.
(8)&要求重生(request&respawning)
& & 开启所有nodes后,roslaunch会监视每个node,记录那些仍然活动的nodes。对于每个node,当其终止后,我们可以要求roslaunch重启该node,通过使用respawn属性。
& &&respawn=”true”
(10)&必需的nodes
required属性与respawn相反,不能同时对同一个node使用。
required=”true”
当一个required&node终止后,所有其他的nodes都会终止,并退出。这种命令有时很有用。比如,当一个很重要的node失败后,整个会话都会被扔掉,那些加上了respawn属性的nodes也会停止。
(11)&在独立的窗口运行各nodes
我们在各自的termin运行rosrun&node_name;但是运行roslaunch时,所有的nodes共用一个相同的terminal,这对于那些需要从控制台输入的nodes很不方便。可以使用launch-prefix属性。
launch-prefix=”command-prefix”
Eg:launch-prefix=”xterm&-e”
等价于&xterm&-e&rosrun&turtlesim&turtle_teleop_key
xterm&命令表示新建一个terminal;&-e参数告诉xterm执行剩下的命令行。
当然,launch-prefix属性不仅仅限于xterm。它可用于调试(通过gdb或valgrind),或用于降低进程的执行顺序(通过nice).
3&在namespace中执行nodes
为node设置默认的namespace的常用方法——被称为“pushing&down&into&a&namespace”的进程,用于launch文件,并在其node&element中指定ns属性。
ns=”namespace”
launch文件中的node&names是relative&names。同一个launch文件中,允许不同namespace中出现相同的node&names。Roslaunch要求node&names必须是base&names——不指定任何namespaces的relative&names;如果node&element中出现node&name为global&name,则会报错。
4&重映射names(remapping&names)
除了解析relative&names和private&names,ROS也支持重映射,用于修改nodes当前使用的名称。
重映射相当于换名,每次重映射需提供一个original&name和一个new&name。每次node使用它的original&name,&ROS&client&library都会将其替换为remapping&name。
创建remapping&name两种方法:
1.&对于单个node,在命令行进行remapping(remap对象可以是node,topic等)。
&&&original-name:=new-name
Eg:&$&rosrun&turtlesim&turtlesim_node&turtle1/pose:=tim
2.&在launch文件内remap&names,使用remap&element
&&&remap&from=”original_name”&to&“new_name”&
如果remap出现在launch文件开头,作为launch文件的子元素,则该remapping将被用于随后所有的nodes。如果remap作为某个node的子元素,则只用于该节点。
Eg:&node&pkg=”turtlesim”&type=”turtlesim_node”&name=”turtle1”&
&&&&&remap&from&=”turtle1/pose”&to&“tim”&
注意:在ROS进行remapping之前,remaping的所有name,包括original和new&names,都将被解析为global&names。所以,remapping之后所有的名字通常都是relative&names。
5&其他的launch&elements
5.1&including其他文件
为包含其他launch文件,包括这些launch文件的所有nodes和parameters,用include&element。
&include&file=”path-to-launch-file”&
这种情况下,file属性必须写出该launch文件的全部路径名称,显得很繁琐。因此,常用
&include&file=”$(find&package_name)/launch_file_name”/&
注意,执行该launch文件时,roslaunch会搜索该package下的所有子目录;因此,必须给出package_name。此外,include也支持ns属性,将它的内容放进指定的namespace。
&include&file=”...”&ns=”namespace_name”/&
5.2&Launch&arguments
为便于launch文件重复利用一些值,roslaunch支持launch&arguments,也成为arguments或者args,类似于局部变量。
注意:尽管argument和parameter的中文意思有时可互换,但他们在ROS中的意义完全不同。Parameters是ROS系统使用的数值,存在parameter&server上,nodes可通过ros::param::get函数编程得到,用户可通过rosparam获取。与之不同,arguments仅在launch文件内部有意义,nodes不能直接获取它们的值。
(转载者注:很多时候,roslaunch都需要通过param来传递参数,与此形成对比的是,roslaunch中完全不使用arg其实是ok的。arg相当于定义了容器,用于储存一些值,方便后面重复调用。)
(1)声明argument
&arg&name=”arg_name”&
(2)指定argument的值
Launch文件中的每个argument都必须有指定值。赋值方法有好几种。
第一种,在命令行赋值
$&roslaunch&package_name&launch_file_name&arg-name:=arg_value
第二种,在声明argument时赋值
&arg&name=”arg_name”&default=”arg_name”/&
&arg&name=”arg_name”&value=”arg_name”/&
上面两行的区别在于,命令行参数可以覆盖default,但是不能重写value的值。
(3)获取变量值
一旦声明某个argument并赋值后,我们可以通过arg使用该argument.
$(arg&arg-name)
如果该行出现,roslaunch将会用给定arg-name的值替换其左边的值。
(4)将argument值传给included&launch文件
&include&file=”path-to-file”&
&arg&name=”arg_name”&value=”arg_value”/&
&/include&
若在launch文件中,launch文件及其包含的launch文件出现出现相同的arguments,则需在launch文件及included&launch文件中同时写:
&arg&name=”arg_name”&value=”$(arg&arg_name)”/&
第一个arg_name表示indluded&launch文件中的argument,第二个arg_name表示launch文件中的argument.其结果是指定的argument在launch文件及included&launch文件中都有相同的值。
5.3&创建groups
Group&element可以再大型的launch文件中将指定的nodes组织起来。它有两个用处:
其一,group可以将几个nodes放进同一个namespace
&group&ns=”namespace”&
&node&pkg=”..”&.../&
&node&pkg=”..”&.../&
注意,如果grouped&node已经有它自己的namespace,并且是relative&name,那么该node的namespace是其relative&name,并以group&namespace为后缀。
其二,group可以同时启动或者终止一组nodes。
&group&if=”0&or&1”&
如果该属性的值是1,一切正常;如果该属性的值为0,那么group内所有的nodes都不会运行。
同理,除了if,还有unless。
&group&unless=”0&or&1”&
注意,这些属性的合法值只有0和1.
另外,group&element中只能使用ns,if,unless这三个属性
阅读(...) 评论() &相关文章推荐
Launch 文件
1 使用Launch文件
2 创建Launch文件
3 在namespace中启动nodes
4 remapping names
5 其他的launch元素
ROS可以通过launch文件进行节点的管理、初始参数的设置,但是launch文件不能指定节点的启动顺序,因此本文简单介绍下通过launch进行节点启动管理,通过shell来控制节点启动顺序。
roslaunch工具十分方便,可以通过SSH远程启动节点以及本机的节点。roslaunch工具使用一个XML格式的文件,后缀名为.launch,可以指定节点的从参数和节点运行的机器。...
.launch文件分析
在我们的功能包中可以看到launch文件夹下有很多的.launch文件,这些文件写入了我们想要同时运行的节点,当我们需要有很多节点同时启动时,一个个启动它们会费时费力,...
一、remap用于topic的映射下面是两个launch启动两个节点的例子:
一个节点叫talker,它发布一个topic名为/talker
一个节点叫test1,它订阅一个topic名为/tal...
Ros话题发布与订阅节点的编写(C++)
在Ubuntu下vivado >file 下 launch SDK的时候
console会出现如下
INFO: [Vivado 12-393] Launching SDK...
主要介绍ROS服务和参数,同时使用命令行工具rosservice和rosparam。ROS serviceservice是节点之间互相通信的另一种方式,services允许节点发送一个请求并接收一个回...
roslaunch工具是ros中python实现的程序启动工具,通过读取launch文件中的参数配置、属性配置等来启动一系列节点;
很多ROS包或源码包中都有launch文件,一般为该程序包能够运行起...
在以后的ROS运用中,我们逐渐需要运行多个nodes,而launch file的编写是ROS高级运用的基础。
官方的launch file wiki文档好像不是很好用:wiki.ros.org/ros...
他的最新文章
讲师:董晓杰
讲师:姚远
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)ROS进阶学习(三) - 对大型项目的roslaunch的建议 - 简书
ROS进阶学习(三) - 对大型项目的roslaunch的建议
这个教程就是为大型项目设计roslaunch文件的一些建议,使设计出来的文件能够适用于更多的场景
一个大的应用一半有很多互相连接的node,每一个都有很多参数。一个roslaunch 文件,将会把所有能够让机器人正常运行的东西启动,我们将会浏览一个launch文件。
2 顶级结构(Top-level organization)
这里是顶级启动文件(在 "rospack find 2dnav_pr2/move_base/2dnav_pr2.launch")
&group name="wg"&
&include file="$(find pr2_alpha)/$(env ROBOT).machine" /&
&include file="$(find 2dnav_pr2)/config/new_amcl_node.xml" /&
&include file="$(find 2dnav_pr2)/config/base_odom_teleop.xml" /&
&include file="$(find 2dnav_pr2)/config/lasers_and_filters.xml" /&
&include file="$(find 2dnav_pr2)/config/map_server.xml" /&
&include file="$(find 2dnav_pr2)/config/ground_plane.xml" /&
&!-- The navigation stack and associated parameters --&
&include file="$(find 2dnav_pr2)/move_base/move_base.xml" /&
这个文件包含一组其他文件设置。每个 included files 包含了和系统某个部分有关的node和参数。比如位置,传感器进程和路径规划。设计建议:Top-level启动文件应该尽量短小一些,并且包含其他程序的子组件,通常会改变ROS参数这使它很容易交换系统的一部分,我们只会将会看到。
3 机器标签和环境变量
我们希望能控制哪些node在哪些机器上运行,这是为了负载平衡和带宽管理。为了重用性,我们不希望硬编码机器名字出现在roslaunch文件里。第一个include是:&include file="$(find pr2_alpha)/$(env ROBOT).machine" /&这个文件所做的第一件事中用env代替了环境变量ROBOT。例如,如果:export ROBOT=pre那么,launch文件会使pre.machine文件被包含。设计建议,使用env代替可以允许启动文件的一部分根据环境变量的不同而不同接下来,我们来看一个machine文件(pre.machine in the pr2_alpha package):
&machine name="c1" address="pre1" ros-root="$(env ROS_ROOT)" ros-package-path="$(env ROS_PACKAGE_PATH)" default="true" /&
&machine name="c2" address="pre2" ros-root="$(env ROS_ROOT)" ros-package-path="$(env ROS_PACKAGE_PATH)" /&
这个文件设置了一个逻辑机名称,如C1,C2和真实机主,如pre2,的映射关系。它甚至可以允许控制你登陆的用户。一旦映射关系建立,他就可以在node启动时被使用。例如,在包含的文件config/new_amcl_node.xml 中包含了这样一句:&node pkg="amcl" type="amcl" name="amcl" machine="c1"&
4 参数、命名空间和YAML文件
我们看一下move_base.xml文件的一部分:
&node pkg="move_base" type="move_base" name="move_base" machine="c2"&
&remap from="odom" to="pr2_base_odometry/odom" /&
&param name="controller_frequency" value="10.0" /&
&param name="footprint_padding" value="0.015" /&
&param name="controller_patience" value="15.0" /&
&param name="clearing_radius" value="0.59" /&
&rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="global_costmap" /&
&rosparam file="$(find 2dnav_pr2)/config/costmap_common_params.yaml" command="load" ns="local_costmap" /&
&rosparam file="$(find 2dnav_pr2)/move_base/local_costmap_params.yaml" command="load" /&
&rosparam file="$(find 2dnav_pr2)/move_base/global_costmap_params.yaml" command="load" /&
&rosparam file="$(find 2dnav_pr2)/move_base/navfn_params.yaml" command="load" /&
&rosparam file="$(find 2dnav_pr2)/move_base/base_local_planner_params.yaml" command="load" /&
这部分启动文件负责启动move_base node。首先被包含的是一个映射(remap)。Move_base被设计接收topic“odom”发送回来的路程数据。我们做了一个 pr2_base_odometry 到odom的映射。后面的&param&在&node&标签内部,表示是私有参数。再后面的&rosparam&是从yaml文件里读取参数,yaml文件是一种可以让人阅读的文件,并且允许包含复杂的数据类型。下面是costmap_common_params.yaml 文件的一部分:
raytrace_range: 3.0
footprint: [[-0.325, -0.325], [-0.325, 0.325], [0.325, 0.325], [0.46, 0.0], [0.325, -0.325]]
inflation_radius: 0.55
# BEGIN VOXEL STUFF
observation_sources: base_scan_marking base_scan tilt_scan ground_object_cloud
base_scan_marking: {sensor_frame: base_laser, topic: /base_scan_marking, data_type: PointCloud, expected_update_rate: 0.2,
observation_persistence: 0.0, marking: true, clearing: false, min_obstacle_height: 0.08, max_obstacle_height: 2.0}
上面的ns即为namespace。没有标注ns的即包含在当前命名空间。
5 再利用已有的启动文件
首先来看一个启动文件,它换在Gazebo上运行,只需要改变map_server node。
&include file="$(find pr2_alpha)/sim.machine" /&
&include file="$(find 2dnav_pr2)/config/new_amcl_node.xml" /&
&include file="$(find 2dnav_pr2)/config/base_odom_teleop.xml" /&
&include file="$(find 2dnav_pr2)/config/lasers_and_filters.xml" /&
&node name="map_server" pkg="map_server" type="map_server" args="$(find gazebo_worlds)/Media/materials/textures/map3.png 0.1" respawn="true" machine="c1" /&
&include file="$(find 2dnav_pr2)/config/ground_plane.xml" /&
&!-- The naviagtion stack and associated parameters --&
&include file="$(find 2dnav_pr2)/move_base/move_base.xml" /&
第一个不同就是,因为我们知道我们在仿真,所以只需要用sim.machine文件而不是一个替代参数,第二,这一行:&include file="$(find 2dnav_pr2)/config/map_server.xml" /&被替换为
&node name="map_server" pkg="map_server" type="map_server" args="$(find gazebo_worlds)/Media/materials/textures/map3.png 0.1" respawn="true" machine="c1" /&
包含的文件在第一种情况下只包含了一个node,而第二种情况则包含了一个映射文件。
6 参数覆盖
上面的技巧有时候会很不方便使用。假设我们想要使用2dnav_pr2,只改变本地分辨率参数到0.5.我们可以直接改变local_costmap_params.yaml。这是最简单的临时修改,但是这意味着我们没办法检查修改后的文件,把它返回去。我们可以复制一个文件然后修改它。然后改变move_base.xml去包含它,然后把2dnav_pr2.launch 改变为修改后的move_base.xml,这样做的好处是,如果我们使用了版本控制器,我们就不会发生源文件改变的错误了。还有一个方法没看懂,自己去官网看吧,说另一个:我们可以使用roslaunch的重写行为,参数是按照顺序设置的。这样,我们可以用后面的的top-level文件重写源文件:
&include file="$(find 2dnav_pr2)/move_base/2dnav_pr2.launch" /&
&param name="move_base/local_costmap/resolution" value="0.5"/&
这个方法的硬伤是,他会让程序难以理解,想要知道一个东西确切的值,还需要遍历整个启动文件,十分蛋疼。
7ROSlaunch 参数
这是一个比起来重写更加常用和清晰的改变东西的方法。一般首选这个。看到这里看的累死了,教程的语言越来越超出了我的英语能力范围,我要学点别的换换脑子。
一个想有故事的人
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
实时建立环境地图并定位,要依靠于昂贵的激光雷达,不过现在有了可替代的工具,可以伪造出激光雷达的效果,算是伪造吧。可替代的工具是微软的Kinect和Asus Xtion相机。可以看depthimage_to_laserscan和kinect_2d_scanner 两个包的内容...
创建一个ROS Package 这个教程包括使用roscreate-pkg或者catkin去创建一个新的package,以及使用rospack去列出package的依赖。在Indigo中,推荐使用catkin。 catkin package由什么组成 一个package被认...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
1.成功-卡耐基-李嘉诚-李泽楷-梁洛施-双胞胎-孙俪-甄嬛传-雍正-清朝-故宫-文物-红墙-灰墙-长城-好汉-梁山好汉-林冲-豹子-非洲大草原-狮子王-山魈-蓝脸-蓝吊鱼-小丑鱼尼莫-电影海底总动员-爸爸-钓鱼···· 2.核桃-花生-油重-恶心-吐-孩子-可爱-荡秋千-...
我的第一个JavaScript小项目: 简单的九九乘法表: 代码截图 效果图: 简单的切换图片 效果就是点击不同的图片显示相对应的图片 截图: 代码: js代码: html代码: ; css代码:
又到周三 欢迎来到~周三晚电台~ 点击收听: 青春寻人启事:我还想听你的故事 文&声 | 罗小祯 今天的电台 不只有音乐,还有萌萌哒阿张的文字 《那些时光漫长,仿佛夏天永远晴朗》 凤凰花又开了 芒果树上的芒果散发出阵阵清香 《女孩你知道...
这个暖男武林风首秀,就战胜了俄罗斯最强组织ACB硬汉哈扎德耶夫,这得益于他的刻苦训练,以及他的教练团队制定的战术。 暖男李辉,内蒙古人,今年22岁,1米81的身高,体重75公斤,家里是地道的农民,有一大片向日葵花海。房前是花海,房后是草海,一派田园风光,怡然自得。如果不是自...
下面是如何将自己的印象笔记改名:(七)ROS&rxconsole和roslaunch学习
参考网址:
在学习这个命令前,请确定已经安装好turtlesim package(小海龟例子)
$ rosdep install rxtools
$ rosmake rxtools turlesim
1,学习rxconsole 和
rxloggerlevel
rxconsole 是连接ROS 日志文档,并将节点的这些信息显示在窗体内。
rxloggerlevel 可以显示运行中节点的DEBUG,WARN,INFO 和ERROR信息
$ roscore &
& ---在新终端打开ros进程
$ rxloggerlevel
& ---在新终端打开logger 窗体
得到结果:
$ rxconsole
&---在新终端打开
得到结果:
然后我们打开小海龟例子
$ rosrun turtlesim
turlesim_node
$ rxloggerlevel
$ rxconsole
得到结果:
当我们运行
$ rostopic pub turtle1/command_velocity
turtlesim/Velocity -r 1 -- 2.0 0.0&
结果如下:
rxloggerlevel图显示warn信息:
日志(logger)层 信息包括:Fatal, Error, Warn, Info,
Debug,他们设置依次从高到低,比如设置Warn,我们必须知道Info, Debug信息。
2,学习roslaunch
$ roslaunch [package]
[filename.launch]
首先我们必须制作一份launch 文件,在beginner_tutorials
package中,首先转到该路径下:
$ roscd beginner_tutorials
$ mkdir launch
$ cd 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"/&
launch文件诠释:
&launch&----以launch作为launch文件开头
ns="turtlesim1"&
----以turlesim1为名的文件夹或者命名空间的节点
pkg="turtlesim"
name="sim"
type="turtlesim_node"/&
ns="turtlesim2"&----以turlesim2为名的文件夹或者命名空间的节点
pkg="turtlesim"
name="sim"
type="turtlesim_node"/&
pkg="turtlesim"
name="mimic"
type="mimic"&---在主题上模仿节点的输入和输出,并重命名turlesim1,turlesim2,比如:turlesim1变成mimicturtlesim1
from="input"
to="turtlesim1/turtle1"/&
from="output"
to="turtlesim2/turtle1"/&
----关闭launch文件
然后,进行roslaunch该文件:
$ roslaunch
beginner_tutorials turlesimic.launch
$ roslaunch beginner_tutorials
turlesimic.launch
得到结果:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。如何编写ros的python程序_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
如何编写ros的python程序
我有更好的答案
Step 6 .&新打开一个终端,先执行&文件中.com/zhidao/wh%3D600%2C800/sign=21f9f310bb4ebbac79f3df8dcd22f44.jpg" esrc="http://h.hiphotos,先在&nbsp:$ wget&-devel/rospy_tutorials/001_talker_listener/Step 2 ./zhidao/wh%3D450%2C600/sign=9fe403acac8a/a9d3fd1f95f8d9ecad1c8a7865d7d;使用的Ubuntu系统;机器人操作系统来说;里面的代码;talker.py&文件在&src&文件夹里。我们不要急着去运行它,现在我们编写一个订阅器,来接收这个发布器发布的话题:4,代表学习某种语言编写的第一个程序。对于&ROS&nbsp.jpg" />Step 3 ://h;Python&不同,Python&程序都存放在&scripts&Hello World&程序(Python版)我使用的虚拟机软件:VMware Workstation 11&nbsp,我们不需要使用&catkin_make&nbsp:$ roscore1Step 7 .&新打开一个终端,启动&发布器&:$ rosrun beginner_tutorials talker.py &1Step 8 .&新打开一个终端,启动&订阅器&:$ rosrun beginner_tutorials listener.py 1运行效果:Step 9 .&我们来使用&rostopic list&,看看当前的话题有哪些:$ rostopic list /chatter/rosout/rosout_agg1234其中&/chatter&就是我们在发布器里面发布的&ROS话题。6. 扩展,编写一个启动脚本文件 :还记得上一节,我们讲的ROS的启动脚本文件吧,下面我们来编写一个launch文件,来将&talker.py&和listener.py&文件的启动工作交个这个launch文件来做:Step 10 .&来到&beginner_tutorials程序包的&/launch&路径下,新建一个&hello_world_topic.launch&文件:$ roscd &beginner_tutorials/launch$ gedit hello_world_topic.launch & #使用你自己喜欢的文本编辑器12Step 11 .&输入下面的代码:&launch&&node pkg=&beginner_tutorials& name=&talker& type=&talker.py& /&&node pkg=&beginner_tutorials& name=&listener& type=&listener.py& /&&/launch&1234Step 12 .&现在,将之前打开的终端都关闭,我们启动这个脚本: (开一个终端 :&Ctrl+Alt+T)$ roslaunch beginner_tutorials hello_world_topic.launch1运行结果:上面截图的输出显示:&talker.py&和&listener.py&脚本运行成功。但是并没有出现刷屏的现象。这是为什么? 为了证明这个脚本程序真的成功的运行了,我们来试一试:Step 13 .&重新开一个终端,输入下面的命令:$ rosrun list$ rostopic list$ rostopic echo /chatter123Step 14 .&现在&Ctrl+C&结束监听&/chatter&话题。使用&rqt_graph&对当前启动的节点可视化:$ rqt_graph1这些足以说明,hello_world_topic.launch&启动脚本文件,启动成功。总结:&发布器&和&订阅器&是很简单的, 就是简单的发布一个 自定义的话题。我之前使用说过:节点之间通讯的方式有两种 : 话题(rostopic) 和 服务(rosservice)所以,接下来,我们会讲:使用ROS服务来完成ROS版&Hello World&程序的例子。但是在这之前,我们需要学一学:如何创建自定义的ROS消息和ROS服务,以便&ROS&服务版的&Hello World&程序的编写。&所以下一讲,我们来学习:如何创建自定义的ROS消息和ROS服务。.py1这样,一个发布器就编写完了;talker.py&ROS Indigo&nbsp。(我就不将代码贴上来了)下面我来讲解一下代码.com/zhidao/wh%3D450%2C600/sign=4c63d0e9c52dbac79f3df8dcd22f44.jpg" />Step 5 .&最后不要忘了给这个listener.py&加可执行权限,这个&nbsp:ROS Indigo1. 前言 ;wget&Hello World&程序就是 : 写一个简单的消息发布器(发送) 和 订阅器(接收)./zhidao/pic/item/3ac79f3df8dcd22f44./zhidao/wh%3D600%2C800/sign=cbcad1f5e92fd/a9d3fd1f95f8d9ecad1c8a7865d7d://a;beginner_tutorials&nbsp.04.4 LTS&都创建完了;scripts&文件夹:$ roscd beginner_tutorials$ mkdir scripts$ cd scripts1233. 编写消息发布器节点程序.baidu.py$ lstalker.py123但是我建议你亲自动手:手动创建一个&nbsp://a;和发布器一样,我们使用wget命令获取订阅器的源代码&源文件&包。&Step 1 .&所以;文件夹里:$ roscd beginner_tutorials/scripts$ gedit talker.py12将这上面链接里的代码手动输入到&talker.py&文件加上可执行权限:$ chmod +x talker,写一写,输入下面的命令就可以获取&命令, 在&github&上获取一个&最后一步,给这个&和&订阅器&ROS&版本?&nbsp.&nbsp:Hello world&roscore&命令;软件包中创建一个&nbsp.jpg" esrc="http.jpg" target="_blank" title="点击查看大图" class="ikqb_img_alink"><img class="ikqb_img" src="http://h.talker.py1234但是,我还是建议你自己动手写一下。好吧,下面我们开始讲解&listener:C++&文件夹中, 反正意思都是&程序,在我们编程界.命令对&~/catkin_ws&ials/indigo-devel/rospy_tutorials/001_talker_listener/listener.baidu.&nbsp:对于python&来说,这个listener.py程序的代码简单:<img class="ikqb_img" src="http:如果你懒得去写的话,你可以使用&的程序都会存放在每个程序包的&nbsp.py&listener.py.py$ lslistener.py &nbsp:Ubuntu 14;talker.py&源代码。如何获取呢 ;beginner_Tutorials-10&编写&ROS&nbsp:$ roscd beginner_tutorials/scripts/$ wget&nbsp。下面我们运行它们,看看效果;工作空间进行编译。因为python文件本身就是可执行文件(前提是我们给它添加可执行权限)。OK,发布器&nbsp:<a href="http://a.hiphotos。&/scripys&开一个终端;话题版的&nbsp
为您推荐:
其他类似问题
您可能关注的内容
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;

我要回帖

更多关于 ros编写launch文件 的文章

 

随机推荐