到如今我的保研历程也彻底结束,最终是去了清华大学计算机系,以后的研究方向也大致定为系统软件、机器人系统,这里就先学一下ROS,打好基础。
注明,我是跟随ROS tutorial学习的,如果有同学喜欢直接看原版,可以去看。这里附上链接 ROS Tutorial
一、了解ROS
简介
ROS是现在被广泛使用的机器人操作系统,他的开发遵循BSD许可,而且最近好像也发布了ROS2,当然还在改进升级当中,没有ROS1的使用者广泛。
基本通信机制
关于ROS,它内部的通信是由一个个的节点对象完成。
如上图所示,ROS Master相当于一个总的控制器,由它来负责各个节点的注册、订阅的注册、服务的注册等等,除此之外,它还负责各个节点之间的通信。可以用下面这个例子来简单的说明。
这是一个由摄像头采集图像,图像处理软件处理图像,同时笔记本显示图像的一个简单的机器人系统。这里一个大致的流程就是,注册以上展示的三个节点用于通信(TCP/IP),然后Camera Node发布一个topic,这样ROS Master就会记录这个topic,并且其余的两个节点可以进行接受,所以一旦Camera接受到图像,就会传递到其余两个节点。
那如果我不想接受所有来自Camera Node的消息怎么办呢?这里ROS提供了另一种通信方式 — 服务。
节点可以注册一个特殊的服务,如下图所示。
当Image Processing Node需要消息的时候,向Camera提出一个请求,而Camera Node去采集数据给出回复。
二、rostopic和rosnode命令的使用
这里我就将toturial中的命令做一个简单的总结。
roscore // 启动ROS Master,运用ROS的时候需要首先执行。
rostopic list // 列出当前所有的topic(发布的消息)
rostopic info [N] // 列出某topic的详细信息 N是topic的名称
rostopic pub [N] [T] [C] // 发布一条topic,N是名称,T是消息种类,C是消息内容
rostopic echo [N] // 接收某个topic
rosnode list // 列出当前所有的node(节点)
rosnode info [N] // 列出某node的详细信息