ROS学习(three):a ros node how to work

understanding the ros Nodes

节点:一个节点是一个可执行文件,和其他节点通讯使用的是ros
messages:ros的数据类型(subscribing and publish a topic), 节点彼此之间的交流通过发布消息到topics
topics: 节点可以从一个topic订阅消息和发布消息到一个topic
master:ros的一个服务名字(帮助节点去寻找其他的节点)
rosout
roscore

一个ros节点只是ros包内的可执行文件, 一个ros节点通过ros client library(允许ros使用不同的语言去通信, rospy = python client library;
roscpp = c++ client library) 和其他的节点进行交流
节点可以订阅和发布消息到一个主题上, 也可以提供和使用一个servies

roscore = ros + core

... logging to /home/fengxuewei/.ros/log/8eedd09a-3ce0-11ea-9256-9078413e5bde/roslaunch-fengxuewei-7126.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://fengxuewei:46405/
ros_comm version 1.14.3


SUMMARY
========

PARAMETERS
 * /rosdistro: melodic
 * /rosversion: 1.14.3

NODES

auto-starting new master
process[master]: started with pid [7137]
ROS_MASTER_URI=http://fengxuewei:11311/

setting /run_id to 8eedd09a-3ce0-11ea-9256-9078413e5bde
process[rosout-1]: started with pid [7148]
started core service [/rosout]

如果roscore没有初始化,可能有一个网络network初始化的问题: http://www.ros.org/wiki/ROS/NetworkSetup#Single_machine_configuration
如果roscore没有初始化,并且发送一个消息会出现 没有权限 的问题, 这个可能是 ~/.ros文件夹被root用户所拥有, 递归的改变这个文件夹内部的权限:

sudo chown -R <your_username> ~/.ros

rosnode

rosnode 可以显示当前运行的ros节点的信息

rosnode list # 列出来正在运行的节点名字
# rosout节点: 只要用来收集和ros debugging写入到log文件中

在这里插入图片描述

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://fengxuewei:36005/ ...
Pid: 7148

rosrun

rosrun 允许你去使用 包名 来直接的运行一个节点, 而不需要知道这个包的具体路径

rosrun package_name node_namme

ROS的一项强大功能是您可以从命令行重新分配名称。

rosrun turtlesim turtlesim_node
rosnode list

rosrun turtlesim turtlesim_node __name:=my_turtle # 对这个节点重新命名

在这里插入图片描述
因此,ROS对网络配置有某些要求:
所有端口上的所有机器对之间必须有完整的双向连接。
每台计算机必须通过所有其他计算机都可以解析的名称来公告自己。

rosnode ping rosout # rosnode ping rosnode_name 可以检查该节点是否已经运行?

fengxuewei@fengxuewei:~/C++_myself/catkin_ws$ rosnode ping rosout
rosnode: node is [/rosout]
pinging /rosout with a timeout of 3.0s
xmlrpc reply from http://fengxuewei:36005/	time=0.411987ms
xmlrpc reply from http://fengxuewei:36005/	time=1.096010ms
xmlrpc reply from http://fengxuewei:36005/	time=1.119852ms
xmlrpc reply from http://fengxuewei:36005/	time=1.105070ms
xmlrpc reply from http://fengxuewei:36005/	time=1.195908ms
xmlrpc reply from http://fengxuewei:36005/	time=1.211882ms
xmlrpc reply from http://fengxuewei:36005/	time=1.101971ms
xmlrpc reply from http://fengxuewei:36005/	time=1.836061ms
xmlrpc reply from http://fengxuewei:36005/	time=1.110077ms
xmlrpc reply from http://fengxuewei:36005/	time=1.224995ms
xmlrpc reply from http://fengxuewei:36005/	time=1.101017ms
^Cping average: 1.137712ms
roscore = ros+core : 
	master (provides name service for ROS) + 
	rosout (stdout/stderr) + 
	parameter server (parameter server will be introduced later)
	
rosnode = ros+node : 
	ROS tool to get information about a node.
	
rosrun = ros+run : 
	runs a node from a given package.
发布了25 篇原创文章 · 获赞 0 · 访问量 389

猜你喜欢

转载自blog.csdn.net/fengxuewei123/article/details/104069719
ROS