【ROS2基础(5):Launch:多节点启动与配置脚本】

Python3.8

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

拍摄快照:

在开始之前我们的基本配置其实基本完成了,此时我们可以点击虚拟机栏上的拍摄快照按钮来保存虚拟机此时的状态:

拍摄了快照以后我们可以随时把虚拟机恢复到之前的状态,这样即便哪里下载错误或者你感觉到文件被弄得一塌糊涂的时候,不至于舍不得全部推倒重来。

Launch

配置文件

每当我们去启动节点时都需要打开新的终端去运行节点,这样一个一个启动岂不是好麻烦?有没有方法可以一次打开多个节点呢?

有的有的,这就是launch启动文件,它是ros里多节点启动与配置的脚本。

按下ctrl+alt+t 打开一个终端,输入ros2 launch learning_launch simple.launch.py (可以用tab键补全)来运行第一个launch文件。

可以看到第一个piblishing在发布一个“hello world”的字符串,而第二个在说i heard,是订阅者收到了发布者的消息,不停地发布和订阅,不断交替,所以他的后台其实是运行了两个节点,即一个发布者,一个订阅者,接下来我们通过代码来看看是如何通过launch来同时运行两个节点的。

我们打开vscode,找到刚刚我们打开的路径的文件:

1行主要通过python脚本对launch功能进行一个描述。

第2行通过import一个node来描述节点。

这两个部分的内容主要是定义生成launch的函数,包含了两个节点的启动部分,通过运行这个文件就实现了一次打开多个节点的功能。

当然launch的功能不止于此,它还可以对很多节点的配置,举个例子:

我们打开终端,输入ros2 run rviz2 rviz2 

这个就是rviz2 在正常使用情况下,为了显示机器人各种各样的数据,我们一般会在左下角的“add”按钮里增加一些配置,为了被保存这样的一些配置再次用的时候不用重新设置,这些配置会被保存为一个配置文件,我们只要输入对应配置文件的路径就可以引入所有的配置了。

接下来我们来在文件里找找已经准备好的配置文件,打开vscode,在launch文件夹下打开这个rviz文件夹,我们就找到了这个配置文件,右键复制它的路径留待后用。

打开终端输入ros2 run rviz2 rviz2 -d  在这后面跟上你刚刚复制下的文件路径,这样就把刚刚的rviz2软件加载了一个配置文件了,回车

此时可以发现和刚刚打开的rviz2界面确实有了一些变化,比如左侧多了robotmodel tf 和下面的视角views,这些变化都是因为我们设置了这样的一个配置文件,接下来我们看看这些配置是如何放在launch文件里实现。

继续回到vscode,找到rviz.launch.py这个文件

第10到第13行主要是用python来获取‘learning_launch’这个文件夹下的这个‘turtle_rviz.rviz’配置文件的路径,把他赋给rviz_config。

16行起,主要是定义了节点的执行名,防止开启多个rviz软件时节点名冲突,以及第21行就是arguments声明了节点后输入的参数规则,也就是我们刚刚输入配置文件路径时在‘rviz2’后加上的‘-d’然后加上配置文件的地址的写法。

重映射

在你开发a机器人时有时候可能会起很多资源的名字,比如节点的名字,话题的名字什么的,但是开发b机器人时你并不想再改一遍这样的代码了怎么办呢,此时我们就要用到launch的重映射重命名功能了。

打开vscode里的remapping.launch.py文件,这个文件的核心就是对你的文件进行重映射重命名,先来运行一下这个文件看看把,打开终端输入ros2 launch learning_launch remapping.launch.py ,回车

此时我们可以看到打开了两个小海龟节点,在终端输入ros2 topic list 看看现在有哪些节点在运行。

我们发现正对小海龟的控制呢有/turtlesim1/turtle1/cmd_vel /turtlesim2/turtle1/cmd_vel 这两个节点,但是和之前不同的是这两个节点前面多了1和2作为区分,我们在回过头来看代码,
关键就在于第8行的namespace,表示在原有的名字前加了一个名字,为什么,因为在ros2里不允许有重名的节点出现,所以一次启动两个这样的海龟仿真器,就要使用这样的namespace去做一个区分,在所有的资源前都加了一个turtlesim1。

接下来我们让海龟动起来试试,输入ros2 topic pub /turtlesim1/turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"

让海龟转个圈。

按回车我们看到两个海龟都转了起来,可是为什么两只海龟都会转起来呢?这就涉及到launch的另外一个功能了,就是重映射,我们回到刚刚的代码,

我们看到在最后还有一个mimic这样一个节点,这个节点的功能就是看最后两行:将/input/pose话题名修改为/turtlesim1/turtle1/pose,将/output/cmd_vel话题名修改为/turtlesim2/turtle1/cmd_vel

当你给第一个小海龟发布话题时,海龟会在转动,同时会发布pose个话题,而mimic就会订阅这个话题,他又会把这个话题改名字再发布出去,此时第二个仿真器要是订阅了这个话题,他就也可以动起来了,总之mimic这个节点主要就是相当于一个转发者,或者是动作模仿者。

而最后两行就是我们在不改变代码内容的情况下,只改变名字而做的重映射。

配置文件参数修改

接下来我们来看看如何在launch文件中对配置文件进行参数修改

在vscode里打开parameters.launch.py这个文件,我们先运行一下看看,

终端输入ros2 launch learning_launch parameters.launch.py    回车

我们看到此时海龟仿真器的背景颜色相对之前发生了变化,变成了深蓝色,这些都是通过launch文件进行更改的,我们来看看文件里是怎么实现的:

第8~17行主要内容是定义了这里的launch文件中的 “r”,“g”,“b” 的值

第19~22行时对三个参数进行定义,方便一会调用。

第23行使用了节点里的package功能包里的可执行文件turtlesim_node,26行对文件进行了重命名,27行 parameters是定义了ros的参数列表,把之前8~17行赋好值的参数值通过绿色的“launchconfiguration”读取并把值放到前面的“background_r”参数里去,最后传入ros中使用。

可是这样为了三个参数却写了这么多的代码岂不是显得很麻烦?

所以接下来我们来把参数放入参数文件里读取和加载:

点开vscode里的parameters_yaml.launch.py文件

可以看到现在的代码比刚刚要精简得多了,17行引用了节点的功能包,21行重新命名后,22行加载了参数文件config,这个文件的路径写在11行起,我们在vscode里打开这个橙色路径下的文件看看

可以看到这个文件里就是我们刚刚的rbg颜色参数,第1行的命名空间和上一张图里的20,21行是一致的。

终端输入ros2 launch learning_launch parameters_yaml.launch.py 我们来看看运行效果:

因为是0,0,0 所以背景是黑色的,可以运行。

有时为了使用更加的便利,我们也会对launch进行嵌套,一次打开多个launch文件。打开vscode中的namespaces.launch.py文件

这和之前的一样,12行设置了一个launch文件,他的路径在14,15行的橙色位置,18行对文件进行重命名,20行强制加了一个turtlesim2的命名空间对资源进行命名空间隔离,这就是launch文件的互相包含。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值