ROS1教程 5:Roslaunch与ROS1计算图


roslaunch与ROS1计算图

ROS1教程 5:Roslaunch与ROS1计算图

1. Roslaunch与launch文件

1.1 需求

一个程序中可能需要启动多个节点,例如:ROS1内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动roscore、乌龟界面节点、键盘控制节点。如果每次都调用rosrun逐一启动,显然效率低下,如何优化?

官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS1 节点。

1.2 实现

下面我们举一个使用launch运行前面的hello_world例程,同时运行turtlesim小乌龟例程

ROS1的文件系统中要求,所有launch文件要放在功能包的launch文件夹下,因此在选定的功能包中添加launch文件夹

cd 工作目录/src
catkin_create_pkg launch_test rospy roscpp std_msgs
mkdir launch_test/launch
touch launch_test/launch/tuetle.launch

然后编辑turtle.launch文件

<launch>
    <node pkg="helloworld" type="hello" name="hello" output="screen" />
    <node pkg="turtlesim" type="turtlesim_node" name="t1"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="key1" />
</launch>

其中:

  • nodexml标签,表示要运行一个节点
  • pkg:要运行的节点所在的功能包
  • type:要运行的节点的可执行文件
  • name:运行后节点的名称
  • output设置日志的输出目标

运行之后:

roslaunch

2. ROS1计算图

2.1 计算图简介

前面介绍的ROS1文件结构,是磁盘上ROS1程序的存储结构,是静态的,而ROS1程序运行之后,以节点表现出来的进程之间的关系是错综复杂的,ROS1中提供了一个实用的工具:rqt_graph来方便我们直观的看到各个节点之间的关系。

rqt_graph能够创建一个显示当前系统运行情况的动态图形。ROS1分布式系统中不同进程需要进行数据交互,计算图可以以点对点的网络形式表现数据交互过程。rqt_graphrqt程序包中的一部分。

2.2 计算图安装

如果前面安装ROS1的时候,把所有的功能包(package)都已经安装完成,则直接在终端窗口中输入

rosrun rqt_graph rqt_graph

就可以运行。如果未安装则在终端中输入下面的命令进行安装:

sudo apt install ROS1-<distro>-rqt
sudo apt install ROS1-<distro>-rqt-common-plugins

如果遇到没有PyQt5PySide2的报错的话,则运行下面的命令进行安装

python -m pip install PyQt5
python -m pip install PySide2

因为PyQtPySide两个都是用于显示GUI窗口的库,因此没有的话肯定就会报错,所以安装一下就行

PyQt5和PySide2报错

如果报错没有Pydot也是一样的,安装即可

python -m pip install pydot

因为rqt_graph需要显示由一个一个节点组成的节点图,具体来说,rqt_graph通过Graphviz来显示节点图。而Graphviz是一个开源的,专门用于图的可视化的库。PyDot就是GraphvizPython前端。

PyDot报错

安装完了之后,就可以正常运行rqt_graph了。但是有一个问题,主要是因为ROS1中的rqt_graph功能包和当前的环境中的Python里的PyQt版本存在不兼容的问题,所以如果按照

rosrun rqt_graph rqt_graph

来运行的话,就会调用当前环境中的Python来运行rqt_graph包中的Python代码,则此时就会因为当前环境的PythonPyQt版本问题,会有一个报错:

ValueError: PyCapsule_GetPointer called with incorrect name

这个就是因为后续新版本的PyQt5该了API的名字,所以有一个报错。但是这个报错不影响功能,就是会显示一个圆圈。

运行rqt_graph

但是看着真的不舒服,所以直接运行rqt_graph来使用ROS1自带的Python

rqt_graph

直接运行rqt_graph

2.3 显示计算图

接下来以ROS1内置的小乌龟案例来演示计算图

首先,按照前面所示,运行小乌龟例程

rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

然后,启动新终端:

rosrun rqt_graph rqt_graph

或者

rqt_graph

按照上面说的,如果第一种方式报错的话,就运行第二种即可。可以看到类似下图的网络拓扑图,该图可以显示不同节点之间的关系。

rqt显示的计算图


文章作者: Jack Wang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jack Wang !
  目录