[ROS]ROS Node的学习

本贴最后更新于 2923 天前,其中的信息可能已经物是人非

##1.准备:

执行:

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

安装教程,把替换成相应的版本号。(e.g. indigo, jade, kinetic)

##2.图的概念快速预览
Nodes:节点就是使用 ROS 与其他节点进行通信 的可执行的(程序?);

Messages: 向一个主题订阅和发布的 ROS 消息类型;

Topics: 节点能够发布消息或者接受来自订阅的主题的消息;

Master: ROS 的名称服务器(i.e. 为节点之间的相互发现提供服务);

rosout: ROS 中等同于 stdout/stderr;

roscore: Master + rosout + 参数服务 (之后再介绍)

##3.节点
节点不仅仅是在 ROS 包中的一个可执行文件。节点可以使用 ROS 的客户库与其他节点交流。节点能够向一个主题发布和订阅(消息)。节点能够提供或者使用服务。

##4.客户库
ROS 客户库允许使用不同编程语言编写的节点之间交流:

rospy = python client library

roscpp = c++ client library

##5.roscore

使用 ROS 的第一件事就是运行 roscore.
执行:

$ 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 没有初始化, 可能是遇到了网络问题. 查看 Network Setup - Single Machine Configuration
如果 roscore 没有初始化并提示缺少权限, 有可能是~/.ros 目录是 root 用户拥有的, 改变这个目录的拥有者:

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

##6.使用 rosnode
新开一个命令窗口, 然后我们可以运行 rosnode 命令来看下运行 roscore 命令做了什么...
注意:当打开一个新的命令窗口,你的环境变量就被重置了并且新的环境变量来自~/.bashrc 文件. 如果你在运行 rosnode 之类的命令的时候遇到问题,可能需要在~/.bashrc 文件中添加环境变量或者手动定位命令地址.
rosnode 显示目前正在运行的节点的信息:

$ 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/set_logger_level
 * /rosout/get_loggers

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

现在,让我们来看看更多的节点. 通过使用 rosrun 命令启动另一个节点.

##7.使用 rosrun
rosrun 允许使用包名直接启动包内的节点(不需要知道包的具体路径)。
用法:

$ rosrun [package_name] [node_name]

所以我们可以启动 turtlesim 包中的 turtlesim_node 节点.
然后启动一个新的命令窗口:

$ rosrun turtlesim turtlesim_node

可以看见 turtlesim 窗口 :
img
注意:这只龟在你的 turtlesim 窗口看起来有可能不一样. 别担心这个 - 因为本来就有很多不同的龟,更多的龟查看 many types of turtle!
打开新的命令窗口:

$ rosnode list

可以看到类似的信息:

/rosout
/turtlesim

一个强大的 ROS 特性就是可以在命令行重新分配名字。
关闭 turtlesim 窗口停止节点 (或者返回 turtlesim 命令窗口按 ctrl+C). 现在让我们重新运行它, 但是这次我们使用 Remapping Argument 改变节点的名字:

$ rosrun turtlesim turtlesim_node __name:=my_turtle

现在,重新运行 rosnode list:

$ rosnode list

可以看到类似的信息:

/rosout
/my_turtle

注意: 如果依然可以在列表中看到 /turtlesim, 这意味着你在命令窗口使用 ctrl-C 而不是直接关闭 turtlesion 窗口, 或者没有配置$ROS_HOSTNAME 在 Network Setup - Single Machine Configuration 中定义的环境变量。可以尝试清除节点列表: 

\\$ 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 : master (ROS 中提供名字服务) + rosout (stdout/stderr) + parameter server (parameter server 将在以后介绍)
rosnode = ros+node : ROS 工具用于获取节点的信息.
rosrun = ros+run :从一个给定的包中运行节点.
现在你应该理解了节点使如何工作的, 下面我们看看 how ROS topics work. 同时,使用 Ctrl-C 来停止 turtlesim_node 节点.

  • ROS
    23 引用 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖 • 1 关注
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 4 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 656 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 623 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖
  • 持续集成

    持续集成(Continuous Integration)是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

    14 引用 • 7 回帖
  • Android

    Android 是一种以 Linux 为基础的开放源码操作系统,主要使用于便携设备。2005 年由 Google 收购注资,并拉拢多家制造商组成开放手机联盟开发改良,逐渐扩展到到平板电脑及其他领域上。

    334 引用 • 323 回帖 • 12 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    89 引用 • 345 回帖
  • Electron

    Electron 基于 Chromium 和 Node.js,让你可以使用 HTML、CSS 和 JavaScript 构建应用。它是一个由 GitHub 及众多贡献者组成的活跃社区共同维护的开源项目,兼容 Mac、Windows 和 Linux,它构建的应用可在这三个操作系统上面运行。

    15 引用 • 136 回帖 • 10 关注
  • 钉钉

    钉钉,专为中国企业打造的免费沟通协同多端平台, 阿里巴巴出品。

    15 引用 • 67 回帖 • 352 关注
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 327 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 614 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 202 关注
  • 职场

    找到自己的位置,萌新烦恼少。

    126 引用 • 1699 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 2 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 526 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 18 关注
  • OnlyOffice
    4 引用 • 15 关注
  • 程序员

    程序员是从事程序开发、程序维护的专业人员。

    546 引用 • 3531 回帖 • 1 关注
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    4 引用 • 7 回帖 • 2 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    20643 引用 • 80670 回帖 • 1 关注
  • 机器学习

    机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。

    82 引用 • 37 回帖
  • SVN

    SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统,相较于 RCS、CVS,它采用了分支管理系统,它的设计目标就是取代 CVS。

    29 引用 • 98 回帖 • 698 关注
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 364 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    62 引用 • 289 回帖