ROS 计算图级,理解ROS 节点、话题

ROS 计算图级,理解ROS 节点、话题,第1张

计算图级-------是 ROS 处理数据的一种点对点的网络形式。程序运行时,所有进程及它们所进行的数据处理,将会通过一种点对点的网络形式表现出来,即通过节点、节点管理器、话题、服务等来进行表现。

ROS 中的基本计算图级概念包括:节点、节点管理器、参数服务器、消息、服务、话题和包。这些概念以各种形式来提供数据。

ros 命令的说明及参数可以通过 < 命令 > -h (或 --help )来查看

例如: rosnode -h

用键盘控制小海龟运动这一过程的通信机制是怎样的呢其实,这两个节点是通过一个 ROS 话题( Topic )来相互通信的, turtle_teleop_key 在这个话题上发布键盘输入的的消息,而 turtlesim 则订阅该话题以接收该消息。下面通过 rqt 功能包和 rostopic 命令来查看相关信息:

2, rostopic list :能够列出所有当前订阅和发布的话题。

先看一下 rostopic list 子命令需要哪些参数。运行命令:

rostopic list -h

使用 verbose 选项,以列出相关话题的详细信息。运行命令:

rostopic list -v

显示了有关所发布和订阅的话题的详细信息,其中方括号中表示的是话题的类型。

3, rostopic type :用来查看所发布话题的消息类型。

用法: rostopic type [topic] 运行如下命令:

rostopic type /turtle1/cmd_vel

上面的 geometry_msgs/Twist 即为话题 /turtle1/cmd_vel 的消息类型,这在执行命令 rostopic list -v 时

也有所体现。

下面用 rosmsg 命令来查看消息的详细情况:

rosmsg show geometry_msgs/Twist

4, rostopic pub :把数据发布到当前某个正在广播的话题上。通过此命令可以通过直接在终端发送命令来控制小海龟

用法: rostopic pub [topic] [msg_type] [args]

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[20, 00, 00]' '[00, 00, 18]'

ros可以同时用两个软件源。根据查询相关公开信息显示ros支持多个软件源进行同时编辑,所以ros可以同时用两个软件源。ros软路由一般认为用普通PC安装一套专用的路由器程序组成的系统称为软件路由器,486电脑加免费的软件等于专业的软件路由器。

外贸ros是一种文件格式,用于交换商品信息,是由国际商会(International Chamber of Commerce)推出的一种通用的文件类型,旨在改善贸易流程,为企业提供更加简单、可靠的商品信息交换服务。

yright © 1999-2020, CSDNNET, All Rights Reserved

c++

打开APP

Atarasin

关注

ROS:关于节点和节点句柄以及命名空间 原创

2021-02-22 19:12:36

25点赞

Atarasin

码龄4年

关注

ROS:关于节点和节点句柄以及命名空间

参考资料:

ROS官方文档

首先,我们需要明确的是 节点 和 节点句柄 是不同的。一般而言,一个cpp文件只能启动一个ROS节点,但作为该节点的句柄却可以设置多个。

The ros::NodeHandle class serves two purposes First, it provides RAII-style startup and shutdown of the internal node inside a roscpp program Second, it provides an extra layer of namespace resolution that can make writing subcomponents easier

如上所言,节点句柄类有两个作用:

在一个roscpp程序中,节点句柄可以启动或关闭一个ROS内部节点;

节点句柄可以增加一层命名空间,可以为编写组件提供便利。

1启动或关闭节点

创建一个节点句柄最简单的方式如下所示:

ros::NodeHandle nh;

1

1

在创建节点句柄时,若内部节点还未启动,则创建的句柄会启动该节点。一旦该节点所有的句柄实例(同一个cpp程序下创建的都是同一个节点的句柄)都被销毁,则该节点也会自动关闭。这句话也从侧面说明了,一个节点可以创建多个句柄。

On creation, if the internal node has not been started already, ros::NodeHandle will start the node Once all ros::NodeHandle instances have been destroyed, the node will be automatically shutdown

2命名空间

节点句柄的另一个构造函数形式可以让我们自定义命名空间:

ros::NodeHandle nh("my_ns"); // <node_namespace>/my_ns

1

1

若存在节点命名空间,如在launch文件中启动该节点时加入ns="node_ns",则命名空间为node_ns/my_ns;

若不存在节点命名空间,则为my_ns。

另外也可以创建多个节点句柄,然后为某个句柄设置父节点句柄:

ros::NodeHandle nh1("ns1"); // <node_namespace>/ns1

ros::NodeHandle nh2(nh1, "ns2"); // <node_namespace>/ns1/ns2

1

2

1

2

此外,还有两种命名方式:

全局命名

ros::NodeHandle nh("/my_global_namespace"); // /my_global_namespace(不受外部命名影响)

1

1

注意:在ROS的命名中,加或不加/是存在区别的。 若加上/,说明这是一个全局命名,则无法再被放入一个命名空间当中;若不加/,则可以通过如launch中设置ns,使得该命名被放入到该命名空间当中。比如,我定义了两个发布器,发布话题分别为/cmd_vel与cmd_vel,此外若外部还存在一个命名空间为dwa_planner,则它们的命名分别变为

/cmd_vel => /cmd_vel

cmd_vel => /dwa_planner/cmd_vel

私有命名

// 1~+name

ros::NodeHandle nh("~my_private_ns");

ros::Subscriber sub = nhsubscribe("my_private_topic", ); // <node_namespace>/<node_name>/my_private_ns/my_private_topic

// 2~

ros::NodeHandle nh("~");

ros::Subscriber sub = nhsubscribe("my_private_topic", ); // <node_namespace>/<node_name>/my_private_topic

1

2

3

4

5

6

7

1

2

3

4

5

6

7

私有命名与上述提到的命名都不同,它会把原本命名放入到<node_name>下。因此,上面订阅器的话题的命名如下:

本文内容都可以在 ROS 官网 wiki ( >

ROS从严格意义上来讲并不是一个真正的 *** 作系统,而是一款用于机器人或人工智能的应用软件开发平台。要保证一个复杂的系统稳定、高效地运行,每个模块都能发挥出最大的潜能,ROS提供了一个成熟有效的管理机制,使得系统中的每个软硬件模块都能有效地进行互动。它提供了大量的程序库和工具,从而使得开发人员能够更好地在机器人或人工智能领域中进行学习与研究。而且ROS本身还具有许多功能,如硬件设备驱动、可视化工具、消息传递等。

以上就是关于ROS 计算图级,理解ROS 节点、话题全部的内容,包括:ROS 计算图级,理解ROS 节点、话题、ros中可以同时用两个软件源、外贸ros是什么文件类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10624669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存