求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 


业务架构设计
4月18-19日 在线直播



基于UML和EA进行系统分析设计
4月25-26日 北京+在线



AI 智能化软件测试方法与实践
5月23-24日 上海+在线
 
追随技术信仰

随时听讲座
每天看新闻
 
 
ROS教程
1.初级教程
1.1 安装和配置ROS环境
1.2 ROS文件系统导览
1.3 创建ROS软件包
1.4 构建ROS软件包
1.5 理解ROS节点
1.6 理解ROS话题
1.7 理解ROS服务和参数
1.8 使用rqt_console和roslaunch
1.9 使用rosed在ROS中编辑文件
1.10 创建ROS消息和服务
1.11 编写简单的发布者和订阅者(C++)
1.12 编写简单的发布者和订阅者(Python)
1.13 检验简单的发布者和订阅者
1.14 编写简单的服务和客户端(C++)
1.15 编写简单的服务和客户端(Python)
1.16 检验简单的服务和客户端
1.17 录制和回放数据
1.18 从bag文件中读取消息
1.19 roswtf入门
1.20 探索ROS维基
1.21 接下来做什么?
2.中级教程
2.1手动创建ROS包
2.2管理系统依赖项
2.3Roslaunch在大型项目中的使用技巧
2.4ROS在多机器人上的使用
2.5自定义消息
2.6在python中使用C++类
2.7如何编写教程
ROS标准
ROS开发者指南
标准计量单位和坐标约定
 
 
理解ROS节点
来源: ros.org 在线教程    编辑:Alice(火龙果软件)
875 次浏览
4次  

描述: 该教程介绍了ROS图的概念,并探讨了roscore、rosnode和rosrun命令行工具的使用。

教程级别:初学者

预备工作

本教程中我们将会用到一个轻量级模拟器。如果你之前安装的ROS不是完整桌面版(Desktop-Full),请先:

$ sudo apt-get install ros-<distro>-ros-tutorials

将<distro>替换成你安装的ROS发行版简称(比如kinetic或noetic等)。

图概念速览

计算图(Computation Graph)是一个由ROS进程组成的点对点网络,它们能够共同处理数据。ROS的基本计算图概念有节点(Nodes)、主节点(Master)、参数服务器(Parameter Server)、消息(Messages)、服务(Services)、话题(Topics)和袋(Bags),它们都以不同的方式向图(Graph)提供数据。

  • 节点(Nodes):节点是一个可执行文件,它可以通过ROS来与其他节点进行通信。

  • 消息(Messages):订阅或发布话题时所使用的ROS数据类型。

  • 话题(Topics):节点可以将消息发布到话题,或通过订阅话题来接收消息。

  • 主节点(Master):ROS的命名服务,例如帮助节点发现彼此。

  • rosout:在ROS中相当于stdout/stderr(标准输出/标准错误)。

  • roscore:主节点 + rosout + 参数服务器(会在以后介绍)。

节点

节点实际上只不过是ROS软件包中的一个可执行文件。ROS节点使用ROS客户端库与其他节点通信。节点可以发布或订阅话题,也可以提供或使用服务。

注:节点是ROS中非常重要的一个概念,为了帮助初学者理解这个概念,这里举一个通俗的例子:

例如,咱们有一个机器人,和一个遥控器,那么这个机器人和遥控器开始工作后,就是两个节点。遥控器起到了下达指 令的作用;机器人负责监听遥控器下达的指令,完成相应动作。从这里我们可以看出,节点是一个能执行特定工作任 务的工作单元,并且能够相互通信,从而实现一个机器人系统整体的功能。在这里我们把遥控器和机器人简单定义为两个节点,实际上在机器人中根据控制器、传感器、执行机构等不同组成模块,还可以将其进一步细分为更多的节点,这个是根据用户编写的程序来定义的。)

客户端库

ROS客户端库可以让用不同编程语言编写的节点进行相互通信:

  • rospy = Python客户端库

  • roscpp = C++客户端库

罗斯科

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 disk usage. Usage is <1GB. started roslaunch server
http://machine_name:33919/ ros_comm version 1.4.7 SUMMARY ======== PARAMETERS * /rosversion * /rosdistro NODES auto-starting new master process[master]: started with pid [13054] ROS_MASTER_URI=http://machine_name:11311/ setting /run_id to 9cf88ce4
-b14d-11df-8a75-00251148e8cf process[rosout-1]: started with pid [13067] started core service [/rosout]

 

如果roscore运行后没有初始化,很有可能是网络配置的问题。参见网络配置 - 单机器配置。

如果roscore不能初始化并提示缺少权限,可能是因为~/.ros目录属于root用户(只有root用户才能访问),可以用以下命令递归地更改该目录的所有权:

$ sudo chown -R <your_username> ~/.ros

使用rosnode

打开一个新终端,可以使用rosnode看看roscore运行时干了些什么......记得要保持以前的终端开着,比如打开一个新的标签页,或者最小化之前的窗口。

注意: 当打开一个新的终端时,环境将会重置,~/.bashrc文件将会生效。如果你在运行rosnode等命令时出现一些问题,那么可能需要将一些环境设置文件添加到~/.bashrc或手动source一下。

rosnode显示当前正在运行的ROS节点信息。rosnode list命令会列出这些活动的节点:

$ rosnode list

 

你会看到:

/rosout

 

这表示当前只有一个节点在运行: rosout。因为这个节点用于收集和记录节点的调试输出,所以它总是在运行的。

而rosnode info命令返回的是某个指定节点的信息。

$ rosnode info /rosout

 

这给了我们更多关于rosout的信息, 比如说实际上它是发布了一个/rosout_agg话题。

------------------------------
Node [/rosout]
Publications:
 * /rosout_agg [rosgraph_msgs/Log]

Subscriptions:
 * /rosout [unknown type]

Services:
 * /rosout/get_loggers
 * /rosout/set_logger_level

contacting node http://machine_name:54614/ ...
Pid: 5092

 

现在,让我们看看其他节点。为此,我们将使用rosrun调出另一个节点。

使用罗斯伦

rosrun可以让你用包名直接运行软件包内的节点(而不需要知道包的路径)。

用法:

$ rosrun [package_name] [node_name]

 

所以现在我们试着运行turtlesim包中的turtlesim_node。

在一个新终端中:

$ rosrun turtlesim turtlesim_node

 

你会看到turtlesim窗口:

注意:此处的乌龟可能和你turtlesim窗口上的不同。别担心,实际上有许多版本的turtle ,而你的是个惊喜!(一个可爱的小彩蛋~)

在一个新终端中:

$ rosnode list

 

你会看到类似下面的输出信息:

/rosout
/turtlesim

ROS有一个强大的功能,就是你可以通过命令行重新分配名称。

关闭turtlesim窗口以停止节点(或回到rosrun turtlesim的终端并按Ctrl+C)。现在让我们重新运行它,但是这一次使用重映射参数来改变节点名称:

$ rosrun turtlesim turtlesim_
node __name:=my_turtle

 

现在,如果我们回去使用rosnode list:

$ rosnode list

 

你会看到类似下面的输出信息:

/rosout
/my_turtle

 

注意:如果你仍看到/turtlesim在列表中,这可能因为你是在终端中使用Ctrl+C停止的节点而不是关闭窗口,或者你没有按网络配置 - 单机器配置中的描述定义$ROS_HOSTNAME环境变量。可以尝试清除下rosnode列表: $ rosnode cleanup

我们可以看到新的/my_turtle节点。使用另外一个rosnode指令,ping,来测试它是否正常:

$ rosnode ping my_turtle

 

rosnode: node is [/my_turtle]
pinging /my_turtle with a timeout of 3.0s
xmlrpc reply from http://aqy:42235/  
time=1.152992ms xmlrpc reply from http://aqy:42235/
time=1.120090ms xmlrpc reply from http://aqy:42235/
time=1.700878ms xmlrpc reply from http://aqy:42235/
time=1.127958ms

 

复习

本节所涉及的内容:

  • roscore = ros+core:主节点(为ROS提供命名服务) + rosout (stdout/stderr) + 参数服务器(会在以后介绍)

  • rosnode = ros+node:获取节点信息的 ROS工具

  • rosrun = ros+run:运行给定的软件包中的节点

到这里,您已经了解ROS节点是如何工作的,下一步,我们来看看理解ROS话题。如果想关闭turtlesim_node,可以随时按下Ctrl+C。

 


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



875 次浏览
4次