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.