1、Node节点
ROS中最小的进程单元就是节点(Node),一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点。 从程序角度来说,node就是一个可执行文件(通常为C++编译生成的可执行文件、Python脚本);从功能角度来说,通常一个node负责者机器人的某一个单独的功能。由于机器人的功能模块非常复杂,我们往往不会把所有功能都集中到一个node上,而会采用分布式的方式。例如有一个node来控制底盘轮子的运动,有一个node驱动摄像头获取图像,有一个node驱动激光雷达,有一个node根据传感器信息进行路径规划……
2、Master
Master是ROS提供给我们的节点(Node)的管理器,在整个网络通信构架中相当于管理中心,管理着各个Node。node首先在master处进行注册,之后master会将node纳入整个ROS程序中。node之间的通信也是由master进行牵线,才能实现通信。当ROS程序启动时,第一步先启动master,由节点管理器处理依次启动Node。master和node关系如下:
3、启动master和node
启动ROS,首先输入命令:
roscore
ROS master启动,同时启动的有rosout和parameter server,其中rosout是负责日志输出的一个节点,其作用是告知用户当前系统的状态,包括输出系统的error、warning等并且将log 记录在日志文件中;paremeter server 参数服务器,它并不是一个节点,而是一个储存参数配置的一个服务器。
启动master后,可启动具体的节点,输入命令:
rosrun pkg_name node_name
4、rosrun命令
rosrun将会寻找PACKAGE下的名为EXECUTABLE的可执行程序,将可选参数ARGS传入。例如在GDB下运行ros程序:
rosrun [--prefix cmd] [--debug] pkg_name node_name [ARGS]
5、rosnode命令
6、launch文件
可以同时启动多个Node,输入命令:
rosrun pkg_name file_name.launch
写法与格式遵循xml格式规范,是一种标签文本,包括以下标签:
<launch> <!--根标签-->
<node> <!--需要启动的node及其参数-->
<include> <!--包含其他launch-->
<machine> <!--指定运行的机器-->
<env-loader> <!--设置环境变量-->
<param> <!--定义参数到参数服务器-->
<rosparam> <!--启动yaml文件参数到参数服务器-->
<arg> <!--定义变量-->
<remap> <!--设定参数映射-->
<group> <!--设定命名空间-->
</launch> <!--根标签-->
ROS通信方式有4种:
- Topic主题
- Service服务
- Parameter Server 参数服务器
- Actionlib服务器
Topic
topic是一种点对点(node之间)的单向通信方式,适用于实时性、周期性的消息传输。首先publisher和subsciber节点到master进行注册,然后publisher 发布topic,subscriber订阅该topic,从而建立通信。整个过程是单向的:
关于topic的一些命令:
命令 | 作用 |
rostopic list | 列出当前所有的topic |
rostopic info topic_name | 显示某个topic的属性信息 |
rostopic echo topic_name | 显示某个topic的内容 |
rostopic pub topic_name ... | 向某个topic发布内容 |
rostopic bw topic_name | 查看某个topic的带宽 |
rostopic hz topic_name | 查看某个topic的频率 |
rostopic find topic_type | 查找某个类型的topic |
rostopic type topic_name | 查看某个topic的类型(msg) |