ros 基本概念
1 节点管理器
节点都需要在节点管理器上进行注册才能使用
启动节点管理器:roscore
2 节点
具体的执行单元
不同的节点可以使用不同的语言编写
节点在系统中的名字要唯一
3 通信方式
3.1 话题(topic)
发布者(publisher):发布话题,向话题中传输数据(注:发布者可以创建话题,也可以向已有话题传输数据)
订阅者(subscriber):订阅话题,从话题中读取数据
传输方向:单方向
传输的数据类型:消息(文件类型 .msg)
话题有缓冲区(发布和订阅的速度不匹配时,会将数据缓存起来)
一个话题,可以有多个发布者发布这个话题,也可以有多个订阅者订阅该话题
上面第一个图中,pub就是定义的发布者,方框中的是话题(消息类型、话题名),10就是最多缓存10个数据。
方框中的话题若存在,就向这个话题传递数据;若不存在,相当于创建了一个名为topic_pub_name_cpp 的话题。
图2中,发布者发布的消息会到topic_pub_name_cpp 话题中。
由以上可知,让发布者发布话题只需要两行关键代码
由上可知,订阅者订阅话题,只需要一行关键代码,和一个回调函数;回调函数是对 订阅到的话题 的具体操作。
msg文件:
3.2 服务(service)
服务器(server):服务向服务器发出请求,服务器返回应答
客户端(client):客户端向服务发出请求,服务返回应答
传输方向:双向传输
传输数据类型:.srv
无缓冲区
一个服务只能有一个服务器,但可以有多个客户端
客户端需要向连接服务,之后向服务发出请求;在客户端中,只修改request中的数值
服务器定义时会创建一个服务,服务的消息类型在回调函数中确定;服务器仅仅对response的数据进行修改。
这里说明一下,服务本质就是一个双向传输,给两个方向传输的数据称为request、response;在服务器中虽然也可以修改request中的数据,但request本质就是客户端向服务器传输的数据,对其进行修改也不会影响客户端。
因此,在非特殊情况下,服务器仅修改response(应答)中的数据(response才是服务器发出的数据)
srv 文件:
上面是请求的消息类型,下面是应答的消息类型
4 参数
全局共享字典
所有节点都可以访问到参数
多用于存储静态数据(参数的数据发生修改,若调用该参数的节点没有重新调用,则在这个节点中,参数的值不会发生改动)
5 功能包文件
launch文件、python文件不需要配置
c++文件、msg文件、srv 文件 需要配置
运行launch文件:
roslaunch launch_pkg launch文件.launch
运行python、c++可执行文件
c++
rosrun 包名 可执行文件
python
rosrun 包名 文件名.py