第一章 ROS空间创建、helloworld的实现、开启多个节点
第二章 话题通信
第三章 服务通信
第四章 参数服务器
第五章 常用指令
第六章 通信机制实操
第七章 ROS通信机制进阶(常用API、Python模块的导入)
第八章 元功能包、节点运行管理launch文件(teleop_twist安装方法)
第九章 重名问题、分布式通信
- 系列文章目录
- 前言
- 一、ROS元功能包
- 二、ROS节点运行管理launch文件
- 1.引入
- 2.launch文件标签之launch
- 3.launch文件标签之node
- 4.launch文件标签之include
- 5.launch文件标签之remap(teleop_twist_keyboard功能包安装)
- 6.launch文件标签之param
- 7.launch文件标签之rosparam
- 8.launch文件标签之group
- 9.launch文件标签之arg
- 总结
前言
现在大二,之前大一有幸参加了2021的国赛,很壮烈的拿了个江苏赛区的二等奖。但发现无人机这个题,真的是往堆钱上走了。不上ROS不行,现在来记录一下一个纯小白学习ROS的过程和遇到的问题。防止学弟、学妹们再走我走过的弯路。板子用的是学长给的Jetson Nano(4GB),版本是Ubuntu18.04(已配置好基础ROS所需配置)
一、ROS元功能包显而易见的,逐一安装功能包的效率低下,在ROS中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。
- 新建一个功能包 (依赖项为空即可)
修改package.xml ,内容如下:
51行:
catkin plumbing_pub_sub plumbing_server_client plumbing_param_server
59行:
- 修改 CMakeLists.txt,内容如下:(把原有的所有行都删除)
cmake_minimum_required(VERSION 3.0.2) project(plumbing_my) find_package(catkin REQUIRED) catkin_metapackage()二、ROS节点运行管理launch文件 1.引入
launch 文件是一个 XML 格式的文件,可以启动本地和远程的多个节点,还可以在参数服务器中设置参数。简化节点的配置与启动,提高ROS程序的启动效率。
- 建立功能包,(依赖: roscpp rospy std_msgs turtlesim)在功能包下添加 launch目录, 目录下新建
xxxx.launch 文件,编辑 launch 文件。 代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle.launch
注意:roslaunch 命令执行launch文件时,首先会判断是否启动了 roscore,如果启动了,则不再启动,否则,会自动调用 roscore
2.launch文件标签之launch- 建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件。
代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle.launch3.launch文件标签之node
- pkg=“包名”
节点所属的包 - type=“nodeType”
节点类型(与之相同名称的可执行文件) - name=“nodeName”
节点名称(在 ROS 网络拓扑中节点的名称) - argv=“xxx xxx xxx” (可选)
将参数传递给节点 - machine=“机器名”
在指定机器上启动节点 - respawn=“true | false” (可选)
如果节点退出,是否自动重启 - respawn_delay=" N" (可选)
如果 respawn 为 true, 那么延迟 N 秒后启动节点 - required=“true | false” (可选)
该节点是否必须,如果为 true,那么如果该节点退出,将杀死整个 roslaunch - ns=“xxx” (可选)
在指定命名空间 xxx 中启动节点 - clear_params=“true | false” (可选)
在启动前,删除节点的私有空间的所有参数 - output=“log | screen” (可选)
日志发送目标,可以设置为 log 日志文件,或 screen 屏幕,默认是 log
- 建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件。
代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle.launch4.launch文件标签之include
- 在launch目录下新建 xxxx.launch 文件,编辑 launch 文件。 代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle_use.launch
注意:若被调用的launch文件指定了命名空间,则在调用他的launch中也需指定命名空间导入文件
ns=“xxx” (可选)
在指定命名空间导入文件
用于话题重命名
- 安装teleop_twist_keyboard功能包
在工作空间下,安装功能包。
cd 工作空间/src git clone https://github.com/ros-teleop/teleop_twist_keyboard cd 工作空间 catkin_make source ~/工作空间/devel/setup.bash source ~/.bashrc
将编译好的功能包路径添加到环境变量中,在其他终端也可以使用teleop_twist_keyboard功能包了。操作如下:
新开一个终端:gedit ~/.bashrc :
在打开的文件中添加编译好的setup.bach文件: source ~/工作空间/devel/setup.bash
启动roscore,新开一个命令行输入:rosrun teleop_twist_keyboard teleop_twist_keyboard.py 即可使用键盘控制。
- 以下是统一teleop_twist_keyboard与我开的乌龟话题的方法:
建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件。
代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle.launch
新开一个命令行:rosrun teleop_twist_keyboard teleop_twist_keyboard.py
即:
from=“xxx”
#原始话题名称
to=“yyy”
#目标名称
注意:若launch文件指定了命名空间,则话题名称需要更换!!
标签主要用于在参数服务器上设置参数,参数源可以在标签中通过 value 指定,也可以通过外部文件加载,在标签中时,会给参数名称+一个前缀,相当于私有命名空间。
- name=“命名空间/参数名”
参数名称,可以包含命名空间 - value=“xxx” (可选)
定义参数值,如果此处省略,必须指定外部文件作为参数源 - type=“str | int | double | bool | yaml” (可选)
指定参数类型,如果未指定,roslaunch 会尝试确定参数类型,规则如下:
如果包含 ‘.’ 的数字解析未浮点型,否则为整型
“true” 和 “false” 是 bool 值(不区分大小写)
其他是字符串
- 建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件。
代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle.launch
新开一个命令行:rosparam list
即可查看到响应:
/my_turtle/background_b /my_turtle/background_g /my_turtle/background_r /my_turtle/param_B /param_A /rosdistro /roslaunch/uris/host_lzl_desktop__35979 /rosversion /run_id7.launch文件标签之rosparam
- command=“load | dump | delete” (可选,默认 load)
加载、导出或删除参数 - file=“$(find xxxxx)/xxx/yyy…”
加载或导出到的 yaml 文件 - param=“参数名称”
ns=“命名空间” (可选)
- 建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件(2个),编辑 launch 文件。
代码1如下:
代码2如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic start_turtle.launch
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic dump.launch8.launch文件标签之group
- ns=“名称空间” (可选)
- clear_params=“true | false” (可选)
启动前,是否删除组名称空间的所有参数(慎用…此功能危险)
- 建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件。
代码如下:
- 编译运行
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic turtles.launch
新开一个命令行:rosnode list
即可看到响应结果:
/first/my_key /first/my_turtle /rosout /second/my_key /second/my_turtle9.launch文件标签之arg
标签是用于动态传参,类似于函数的参数,可以增强launch文件的灵活性
-
name=“参数名称”
-
default=“默认值” (可选)
-
value=“数值” (可选)
不可以与 default 并存 -
doc=“描述”
参数说明
- 建立功能包,在功能包下添加 launch目录, 目录下新建 xxxx.launch 文件,编辑 launch 文件。
代码如下:
- 编译运行 roscore
新开一个命令行:
source ./devel/setup.bash roslaunch launch01_basic arg.launch rosparam list
还可以直接修改参数:roslaunch launch01_basic arg.launch car_length:=0.6
总结以上就是今天要讲的内容,本文仅仅简单记录了ROS元功能包、节点运行管理launch文件(teleop_twist安装方法),如果有问题请在博客下留言或者咨询邮箱:layraliu@foxmail.com。



