初识ROS node

ROS 节点

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

客户端的库

ROS客户端库允许使用不同编程语言编写的节点进行通信

  • rospy = python 客户库
  • roscpp = c++ 客户库

roscore

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没有初始化,则可能是网络配置问题,查看.bashrc是否有如下三行,这里使用的是单机运行,若要实现多机分布,只需修改对应的IP即可
 export  ROS_IP='hostname -I'
 export  ROS_HOSTNAME=localhost
 export  ROS_MASTER_URI=http://localhost:11311

使用rosnode

打开一个新的终端,让我们使用rosnode来查看运行中的roscore的行为。请记住通过打开一个新选项卡或将其最小化来保持前一个终端处于打开状态。

  • rosnode显示有关当前正在运行的ROS节点的信息。 rosnode list命令列出了这些活动节点
 rosnode list
 
 输出结果:
 /rosout

这向我们显示只有一个节点在运行:rosout。它在收集并记录节点的调试输出时始终在运行。

  • rosnode info命令返回有关特定节点的信息。
 rosnode info /rosout
 
 输出结果:
 Node [/rosout]
 Publications: 
  * /rosout_agg [rosgraph_msgs/Log]
 
 Subscriptions: 
  * /rosout [unknown type]
 
 Services: 
  * /rosout/get_loggers
  * /rosout/set_logger_level
 
 
 contacting node http://localhost:42485/ ...
 Pid: 800

使用rosrun

rosrun允许您使用软件包名称直接运行软件包中的节点(而不必知道软件包路径)。

  • 现在,我们可以在turtlesim包中运行turtlesim_node。 然后,在新的终端中:
  rosrun turtlesim turtlesim_node

结果如下:

Screenshot_2020-03-30 ROS Tutorials UnderstandingNodes - ROS Wiki.png

在新的终端中:

  rosnode list

  结果:
  /rosout
  /turtlesim
  • 重命名node

失去turtlesim窗口即可停止节点(或返回rosrun turtlesim终端并使用ctrl-C)。现在,让我们重新运行它,但是这次使用“重映射参数”来更改节点的名称:

  rosrun turtlesim turtlesim_node __name:=my_turtle

再次运行:

  rosnode list

  结果:
  /my_turtle
  /rosout
  • 测试node

我们看到了新的/ 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 : 从给定的程序包运行一个节点。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容