1、ROS 官网学习资料整理 1 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 目 录 目录 . 1 一、基本命令 . 3 二、创建一个 WorkSpace 3 三、创建一个 Package . 3 3.1 一个包的组成 3 3.2 包与 catkin WorkSpace 空间关系 . 3 3.3 创建一个 catkin Package . 4 3.4 包的依赖 5 3.4.1 First-order dependencies 5 3.4.2.Indirect dependencies . 5 3.5 定制自己的包 5 3.5.1 认识
2、package.xml 文件各部分含义 . 5 四、编译一个 ROS 包 6 4.1 Building Packages . 6 五、理解 ROS 节点 6 5.1 熟悉如下几个概念 7 5.2 Client Libraries 7 5.3 roscore . 7 5.4 开始使用 rosnode 8 5.5 用 rosrun. 9 六、理解 ROS 中的 Topics . 10 6.1 键盘遥控乌龟 11 6.2 ROS Topics 11 6.3 介绍 rostopic 12 6.3.1 rostopic echo 12 6.3.2 rostopic list . 13 6.4 ROS M
3、essages. 13 6.4.1 用 rostopic type . 14 6.4.2 用 rostopic pub 命令 . 15 6.4.3 用 rostopic hz 命令 . 16 七、理解 ROS 中的 Services 和 Parameters 18 7.1 ROS Services. 18 7.2 用 rosservice 命令 18 7.2.1 rosservice list 19 7.2.2 rosservice type 19 7.2.3 rosservice call . 20 7.3 用 rosparam 21 7.3.1 rosparam list . 21 7.3
4、.2 rosparam set 和 get 命令 21 7.3.3 rosparam dump 和 rosparam load 命令 . 23 八、使用 rqt_console 和 roslaunch . 24 8.1 安装 rqt 和 turtlesim 包。 . 24 8.2 rqt_console 和 rqt_logger_level 的用法 . 24 ROS 官网学习资料整理 2 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 8.2.1 关于 logger 的输出等级。 . 26 8.2.2 roslaunch 的用法 . 2
5、7 8.2.3 roslaunching . 27 九、用 rosed 编辑文件 29 9.1 rosed 的使用 . 29 9.2 用 tab 键编辑一个包下的所有文件。 . 30 9.3 Editor . 30 十、创建一个 ROS msg 和 srv . 31 10.1 msg 和 srv 介绍 31 10.2 msg 32 10.2.1 创建一个 msg . 32 10.2.2 使用 rosmsg 33 10.3 使用 srv 34 10.3.1 创建一个 srv . 34 10.3.2 使用 rossrv 35 10.4 msg 和 srv 的一般步骤 35 10.5 一些帮助工具
6、37 十一、写一个简单的发布者 Publisher 和订阅者( Subscriber) (C+语言 ). 37 11.1 写一个 Publisher 节点 . 37 11.2 写一个 Subscriber 节点。 . 39 11.3 编译你的节点 40 十二、测试发布节点和订阅节点。 . 41 12.1 运行 Publisher 41 12.2 运行 Subscriber 42 十三、写一个简单的 Service 和 Client . 42 13.1 写一个 Service 节点 42 13.2 写一个 Client 节点 43 13.3 编译你的节点 44 十四、测试 Service 和 C
7、lient . 45 14.1 运行 Service(记得先运行 roscore) 45 14.2 运行 Client . 45 十五、记录数据以及回复数据 . 46 15.1 记录数据(创建 bag 文件) 46 15.1.1 记录所有发布的 topics 46 15.2 查看 bag 文件及 playing bag 文件 47 15.3 记录数据的一部分 48 十六、 roswtf 的使用 . 48 ROS 官网学习资料整理 3 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 一、 基本命令 cd file_name: 进入某一文件
8、路径 cd : 返回上一级目录 ls:列出当前路径下的所有 文件 rospack find package_name: 返回所要找的包的路径 roscd: 将当前路径设置为某一个 ROS 包或栈的路径或其子路径 pwd: 显示出当前 roscd log:将路径设置为 ROS 存储日志文件的路径。 rosls locationname/subdir:直接将路径改为某个包下的某个子目录 TAB 键,相当于 Eclipse 里面的 ALT+/。 但没有 ALT+/功能那么强大,只能在路径唯一时才会自动出来。不会给出 可选列表 二、创建一个 WorkSpace $ mkdir -p /catkin_w
9、s/src $ cd /catkin_ws/src $ catkin_init_workspace 初始化了工作空间,创建了一个 catkin_ws空间,在该空间下有一个 src文件夹。 $ cd /catkin_ws/ $ catkin_make 执行完该命令后,查看当前路径,会发现该空间除了 src,又多了 build和 devel 文件夹。这两个文件夹中是一些配置信息、编译信息等。 三、创建一个 Package 3.1 一个包的组成 必须满足三个要求: 1. 一 个包里必须包含一个 package.xml 文件,用于说明关于包的基本信息( meta information) 相当于 An
10、droid 里德 Manifest.xml 文件。 2. 包必须包含一个 CMakeLists.txt 文件。 3. 一个文件 夹 里只能有一个包。这也意味着,不会有多个包共用相同的路径。 3.2 包与 catkin WorkSpace 空间关系 一个包通常要在一个 catkin WorkSpace 中。也可以单独创建包。 包在 WorkSpace 空间中的结构是这样的: workspace_folder/ - WORKSPACE src/ - SOURCE SPACE CMakeLists.txt - Toplevel CMake file, provided by catkin packa
11、ge_1/ ROS 官网学习资料整理 4 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU CMakeLists.txt - CMakeLists.txt file for package_1 package.xml - Package manifest for package_1 . package_n/ CMakeLists.txt - CMakeLists.txt file for package_n package.xml - Package manifest for package_n 3.3 创建 一个 catkin Pack
12、age 首先要先进入之前创建的一个 WorkSpace 的 src 目录中 $ cd /catkin_ws/src 然后用 catkin_create_pkg depend1 depend2 depend3创建一个包。 $ catkin_create_pkg beginner_tutorials std_msgs rospy roscpp 依照上述命令,创建了一个名为 beginner_tutorials 的包。 这个包里包含了一个 package.xml 和CMakeList.txt 文件。进入 src 文件可以看到多了一个名为 beginner_tutotials 的包。 进入 begin
13、ner_tutorials 查看一下。里面有如下文件: ROS 官网学习资料整理 5 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 那么,什么是 包的依赖呢?上述的命令里,有三个依赖, std_msgs rospy roscpp,他们分别是什么含义呢? 3.4 包的依赖 3.4.1 First-order dependencies 一个包直接依赖的文件?类?包?库? 3.4.2.Indirect dependencies 包所依赖的文件可能还依赖别的文件。 用 rospack depends1 查询想要查询的类的依赖 rospack
14、depends 列出包所有依赖的对象 3.5 定制自己的包 3.5.1 认识 package.xml 文件各部分含义 1. description 标签 this can be your description 2. maintainer 标签 user 这个标签描述了谁是这个包的维护者。至少需要一个维护者。 标签中给出了维护者的邮箱 3. license 标签 BSD 需要选择一个开放源码许可证。开放源码许可证有: BSD, MIT, Boost Software License, GPLv2, GPLv3, LGPLv2.1, and LGPLv3 等 ,在 ROS 里采用 BSD 开源许
15、可证 4. dependencies 标签 给出了该包依赖于哪些包或文件 默认为 buildtool_depend、编译 build_depend、运行 run_depend 切换行号显示 12 catkin 13 14 roscpp 15 rospy 16 std_msgs 17 18 roscpp 19 rospy 20 std_msgs 5. 去掉各种注释和无用的标签之后的 packag.xml 文件如下: beginner_tutorials 0.1.0 The beginner_tutorials package Li Gaofeng ROS 官网学习资料整理 6 Version:
16、1.0; Date: 20140430; Author: LiGaofeng, NKU BSD http:/wiki.ros.org/beginner_tutorials Li Gaofeng catkin roscpp rospy std_msgs roscpp rospy std_msgs 四、编译一个 ROS 包 4.1 Building Packages 1. 利用 catkin_make 命令 该命令是一个命令行工具,为标准 catkin 工作流程提供了方便。可以看做 catkin_make 命令把 Cmake工作流程中的 cmake 和 make 的响应结合到了一起。 $ catk
17、in_make make_targets -DCMAKE_VARIABLES=. 2. Building Your Package $ cd /catkin_ws/ $ catkin_make 首先必须进入一个 catkin 空间,不然在进行 catkin_make 编译时, catkin_make 默认的编译路径是空间下的 src 目录,如果不在空间目录,则找不到 src 文件,编译不成功。 如果更改编译路径: # In a catkin workspace $ catkin_make -source my_src $ catkin_make install -source my_src #
18、 (optionally) 编译之后,在工作空间中除了 src 文件夹,还有 build 和 devel 文件夹。 build 是 cmake 和 make 在编译包时生成的一些设置文件。查看该文件夹会发现其中多了一个 beginner_tutorials 的包。 devel 文件夹是默认的 devel 空间路径,是安装包之前的一些必要的可执行文件和库。 五、理解 ROS 节点 我们会用到一个轻量级的模拟器,用下面命令安装: $ sudo apt-get install ros-ros-tutorials ROS 官网学习资料整理 7 Version: 1.0; Date: 20140430;
19、 Author: LiGaofeng, NKU 将其中的 distro 替换成自己安装的 ros 版本的名字,比如 ros-hydro 5.1 熟悉如下几个概念 Nodes: 节点 Messages: 消息。一种数据类型,用来向一个 Topic 订阅或发布数据。 Topics: 话题 Master: 主节点 rosout: 标准输出 /标准错误的输出 roscore: Master+rosout+parameter server 5.2 Client Libraries ROS client library 允许节点以不同的变成语言与其他节点通信。其中有两个包: rospy = python
20、client library roscpp = c+ client library 5.3 roscore 在运行 ROS 时应该首先运行的。运行: $ roscore 会看到如下样式的输出: . logging to /.ros/log/9cf88ce4-b14d-11df-8a75-00251148e8cf/roslaunch-machine_name-13039.log Checking log directory for disk usage. This may take awhile. Press Ctrl-C to interrupt Done checking log file
21、disk usage. Usage is -rqt $ sudo apt-get install ros-rqt-common-plugins 同样, 其中的 distro 要替换成自己安装的 ROS 系统的版本名,如 hydro。 在新的 terminal 中运行下列命令,能看到如下结果: $ rosrun rqt_graph rqt_graph ROS 官网学习资料整理 12 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 如果把鼠标放在上图中的 /turtle1/cmd_vel 上,与 /turtle1/cmd_vel 相关的节点
22、会高亮。 turtlesim_node和 turtle_teleop_key 节点是通过一个叫 /turtle1/cmd_vel 的 Topic 通信。 6.3 介绍 rostopic 可以用 rostopic 工具来得到关于 ROS Topics 的信息。可以用帮助命令查看命令参数 $ rostopic -h 命令列表如下: rostopic bw display bandwidth used by topic rostopic echo print messages to screen rostopic hz display publishing rate of topic rostopi
23、c list print information about active topics rostopic pub publish data to topic rostopic type print topic type 6.3.1 rostopic echo 用 rostopic echo topicName可查看一些中间信息。 $ rostopic echo /turtle1/cmd_vel 输出结果如下图所示: ROS 官网学习资料整理 13 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 这时再看看 rqt_graph 图(可以
24、按左上角的刷新按钮): 6.3.2 rostopic list 该命令列出当前活动的 topics。 用 -h 命令可以查看 list 命令下有哪些可选参数。 $ rostopic list -h 我们可以用 rostopic list v 来列出发布和订阅的 Topics。 6.4 ROS Messages 话题 (Topics)上的通信在节点间传递消息 (Messages)时发生。为完成发布者 (publisher: ,如ROS 官网学习资料整理 14 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU turtle_teleop_ke
25、y 节点 )和订阅者 (subscriber,如 turtlesim_node 节点 )之间的通信,发布者和订阅者必须发送和接收相同类型的消息。这意味着一个 topic 的类型是由发布到这个 topic 上的 message 的类型定义的。发布到 topic 上的 message 的类型可用 rostopic type 命令来决定。 6.4.1 用 rostopic type 该命令返回任意被发布的 topic 的 message 类型。 rostopic type topic 对于 Hydro 和之后的版本,运行命令: $ rostopic type /turtle1/cmd_vel 会返回
26、如下信息: geometry_msgs/Twist 我们可以用 rosmsg 命令查看一下这个 message 的详细信息: $ rosmsg show geometry_msgs/Twist 返回如下信息: geometry_msgs/Vector3 linear float64 x float64 y float64 z geometry_msgs/Vector3 angular float64 x float64 y float64 z 见下图: ROS 官网学习资料整理 15 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 分析
27、上述数据,应该分别是绕 x/y/z 轴的线速度和角速度 6.4.2 用 rostopic pub 命令 rostopic pub 命令可以向一个 topic 上发布数据。命令格式如下: rostopic pub topic msg_type args 对于 Hydro 和其之后的版本,命令实例如下: $ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist - 2.0, 0.0, 0.0 0.0, 0.0, 1.8 命令解析:该命令向 /turtle1/cmd_vel 这个 topic 上发布了一个消息,这个消息的类型是geometry_ms
28、gs/Twist类型的(分别来表征小龟的线速度和角速度),这个消息的值为“ 2.0, 0.0, 0.0 0.0, 0.0, 1.8” 。 也就是说小龟在 x 轴(这个坐标系是固结在小龟身上的,以小龟向前的方向为 x 轴,垂直于小龟移动平面 ,从小龟腹部指向龟壳的方向 为 z 轴, y 轴方向以右手坐标系标准确定)方向速度为 2.0, y 方向线速度为 0, z 轴方向速度为 0.绕 x 轴角速度 为 0,绕 y 轴角速度为 0,绕 z 轴角速度为 1.8。因此,小龟就开始绕圈跑,绕圈半径为 2/1.8。 参数 -1 的含义是 rostopic 只发布一个 message然后退出。 在命令行里,
29、 -称为 dash,意思是短横,单个短横称为 dash-one。含义是该参数是可缺省的。 -称为double-dash。是双短横,表示这之后的参数是不可缺省的。 这是 linux 命令的规则。 执行完上面的命令后,小龟在 运行一小段后就停了下来,这是因为 turtle 要求一个 1HZ 的持续不断的命令流,才能使小龟持续不断的运动,不然小龟在运动 3s 后就停了下来。我们可以用 rostopic pub r 命令来发布一个持续的命令流: $ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 - 2.0, 0.0,0.0 0.0, 0.
30、0, 1.8 可以看到,小龟在不停滴转圈。 ROS 官网学习资料整理 16 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 这样就发布了一个 1HZ 的速度命令到 topic 上。 把 线速度改成 3.0 之后: 把 x 方向线速度改为 0, y 方向改为 3.0 后,小龟原地转圈 可用 rqt_graph 和 rostopic echo /turtle1/cmd_vel 等命令来查看当前的一些信息。这里就不再贴图了。 6.4.3 用 rostopic hz 命令 rostopic hz 命令报告每一个数据发布的频率。 格式: rost
31、opic hz topic 如: $ rostopic hz /turtle1/pose ROS 官网学习资料整理 17 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 可以看出, turtlesim 向小龟发布数据的频率是 62Hz,我们也可以用 rostopic type 配合 rosmsg show 命令得到关于一个 topic 的更多信息: $ rostopic type /turtle1/cmd_vel | rosmsg show 6.4.4 用 rqt_plot 命令 rqt_plot 可以动态显示发布到 topic 中的数
32、据。我们可以用 rqt_plot 命令画出发布到 /turtle1/pose 这个Topic 上的数据。首先,用下面命令启动 rqt_plot. $ rosrun rqt_plot rqt_plot 运行后会弹出一个新的窗口 : ROS 官网学习资料整理 18 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 七、理解 ROS 中的 Services 和 Parameters 本节的学习中,需要运行 turtlesim_node。看看 turtlesim 提供了什么服务。 7.1 ROS Services Services 是另一种节点间
33、通信的方式, Services 允许节点发布一个请求并接收一个响应。 7.2 用 rosservice 命令 rosservice 命令可以很容易地连接到 ROS 的 client/service 框架。 rosservice 有很多命令: rosservice list print information about active services rosservice call call the service with the provided args rosservice type print service type rosservice find find services by
34、 service type rosservice uri print service ROSRPC uri 接下来挨个讲解各个命令 ROS 官网学习资料整理 19 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 7.2.1 rosservice list $ rosservice list 这个命令列出了当前活动的 turtlesim 提供了 9 种 服务: /clear /kill /reset /rosout/get_loggers /rosout/set_logger_level /spawn /teleop_turtle/get
35、_loggers /teleop_turtle/set_logger_level /turtle1/set_pen /turtle1/teleport_absolute /turtle1/teleport_relative /turtlesim/get_loggers /turtlesim/set_logger_level 上面表中, /teleop_turtle/get_loggers /teleop_turtle/set_logger_level 这两个是跟 teleop_turtle 相关的,如果没有开启键盘控制小龟的节点,则不会有这两项。 而 /rosout/get_loggers /
36、rosout/set_logger_level 是跟 rosout 节点相关的。 7.2.2 rosservice type rosservice type service 我们可以用这个命令看看 clear 服务是什么样的: $ rosservice type clear 这个 service 是空的,这意味着当使用 service call 命令时,不带参数。 (当他发布请求或接收响应时ROS 官网学习资料整理 20 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 没有传递数据)。我们可以用 rosservice call 命令进行
37、 service call. 7.2.3 rosservice call rosservice call service args 因为 clear 服务没有参数,所以我们直接输入如下命令: $ rosservice call clear 这个命令会清除 turtlesim_node 的背景。 如果服务是有参数的,如 spawn(这个单词的意思是“卵” )服务。 $ rosservice type spawn| rossrv show 这个服务让我们产生一个新的 turtle。然后用下面命令产生一个新的 turtle,给出小龟的 x,y,theta 和名字。 $ rosservice call
38、 spawn 2 2 0.2 turtle2 ROS 官网学习资料整理 21 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 7.3 用 rosparam rosparam 允许你存储和操作 ROS Parameter Server 上的数据。 Parameter Server 可以存储 integers、 floats、boolean、 dictionaries、 lists。 rosparam 用 YAML 标记语言( YAML markup language)做句法 (syntax)。在简单的情形, YAML 很接近于自然形式,如
39、, 1 是 integers, 1.0 是 float, one 是 String, true 是 boolean。1, 2, 3是整型数组, a:b,c:d是字典。 rosparam 命令列表如下: rosparam set set parameter rosparam get get parameter rosparam load load parameters from file rosparam dump dump parameters to file rosparam delete delete parameter rosparam list list parameter names
40、 如上表所示, 我们可以用 rosparam list 查看一下当前都有哪些参数在 param server 上。 7.3.1 rosparam list $ rosparam list 可以看到 turtlesim 节点有三个与北京颜色相关的参数存储在 param server 上。 /background_b /background_g /background_r /roslaunch/uris/aqy:51932 /run_id 7.3.2 rosparam set 和 get 命令 rosparam set param_name rosparam get param_name 比如我们
41、可以把背景色的红色分量设为 150.如 $ rosparam set background_r 150 这个命令改变了参数的值,但是你会看到还没什么变化啊。接下来我们必须调用 clear service 使参数变化生效: $ rosservice call clear ROS 官网学习资料整理 22 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 笔者按:从这里我们可以体会到 topic 和 service 之间的一点不同。 topic 用于异 步通信, 建立 topic和订阅及发布节点间的联系,命令发布后 响应,命令结束后动作停止。比
42、如直接我们让小龟移动,小龟 3s 之后就会停下来,如果我们想让小龟不停地运动,我们必须持续不断地向 topic 发布命令。而 service 用于同 步通讯, 先下达多个命令设置,然后调用 service call 服务 统一响应 。 这时我们可以查看一下颜色的其他分量值,比如: $ rosparam get background_g 我们可以把背景设成绿色。即其他两个分量置 0,绿色分量置为 255。 . ROS 官网学习资料整理 23 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 命令执行效果: 我们也可以用下面这个命令,得到 p
43、arameter server 上所有参数的值。 $ rosparam get / 这个颜色不好看,我们还是恢复成之前的: g:86,b:255,r:0。 有可能你会想要把这些参数信息存到一个文件中以备以后 重新装载 。可以用下面的命令方便的实现。 7.3.3 rosparam dump 和 rosparam load 命令 命令格式: rosparam dump file_name rosparam load file_name namespace 比如,我们可以把所有参数写入一个名为“ params.yaml”的文件 $ rosparam dump params.yaml 也可以把这些 y
44、aml 文件装载如一个 namespaces,比如一名名为 copy 的 namespaces。 $ rosparam load params.yaml copy ROS 官网学习资料整理 24 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 我们可以查看下这个数据 $ rosparam get copy/background_b 可以看到返回值是 255。 八、使用 rqt_console 和 roslaunch rqt_console 和 ros_logger_level 用于 debug 调试, roslaunch 用于一次打开多
45、个节点。 ROS fuerte 及之前的版本不支持 rqt。 8.1 安装 rqt 和 turtlesim 包。 本节中需要用到 rqt 和 turtlesim 包,如 果还没有安装,需要提前安装。安装方式: $ sudo apt-get install ros-rqt ros-rqt-common-plugins ros-turtlesim 其中 替换为你的 ROS 的版本的名字,比如 Hydro。 8.2 rqt_console 和 rqt_logger_level 的用法 rqt_console 与 ROS 的日志框架相连,可以输出节点信息。 rqt_logger_level 可以改变节
46、点要输出的信息的级别( DEBUG, WARN, INFO 或 ERROR)。 下面我们试着用用这两个工具。 在我们打开 turtlesim 节点前,让我们在两个新的 terminal 中打开 rqt_console 和 rqt_logger_level。 (我在用的时候已经打开 turtlesim 节点了,所以直接打开两个工具即可。) $ rosrun rqt_console rqt_console $ rosrun rqt_logger_level rqt_logger_level 然后会看到两个弹出窗口: ROS 官网学习资料整理 25 Version: 1.0; Date: 20140
47、430; Author: LiGaofeng, NKU 以及: 默认的输出等级是 INFO,所以你可以看到当 turtlesim 运行时,你可以看到他发布的所有信息。 笔者按:由于我是先打开的 turtlesim 后打开的 log 窗口,所以 turtlesim 启动时输出的一些信息,我们暂时看不到。但是,我们之前在运行 turtlesim 的那个 terminal 里也能看到这些输出信息。 我们可以把输出信息的等级,改为 warn。 ROS 官网学习资料整理 26 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU 然后点 Refresh
48、。 接下来,我们可以让小车不停向前走,直到撞到墙: rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 - 2.0, 0.0, 0.0 0.0, 0.0, 0.0 运行效果如图: 8.2.1 关于 logger 的输出等级。 五个输出等级从 高到低 ,从最不详细到最详细的顺序如下: ROS 官网学习资料整理 27 Version: 1.0; Date: 20140430; Author: LiGaofeng, NKU FatalErrorWarnInfoDebug 可以通过设置来改变要输出的等级。这与其他程序的调试方式都是相同的。 现在我们可以关掉我们的 turlesim 节点了。让我们用 roslaunch 来产生多个 turtlesim 节点( 2 个):一个模仿节点,一个主动节点。实现让其中一个节点模仿另一个节点的动作。 8.2.2 roslaunch 的用法 roslaunch 的使用需要一个 launch 文件, roslaunch 通过 launch 文件中的描述打开节点。使用格式: $ roslaunch package filename.launch 首先,我们进入之前建的 beginner_tutorials