计算图级
1 master和nodel
1.1 master的作用:
1、每个node启动时,都需向master注册
2、管理node之间的通信
启动命令:1
$ roscore
1.2 node
1、一个进程(process)
2、可执行文件(通常为C++编译生成的可执行文件、Python脚本)被执行的实例
启动node命令:1
$ rosrun pkg_name node_name
rosnode命令:
rosnode命令 | 作用 |
---|---|
rosnode list | @列出当前运行的node信息 |
rosnode info node_name | @显示出node的详细信息 |
rosnode kill node_name | @结束某个node |
rosnode ping | 测试连接节点 |
rosnode machine | 列出在特定机器或列表机器上运行的节点 |
rosnode cleanup | 清除不可到达节点的注册信息 |
2 launch文件
(集成)启动master和多个node:1
$ roslaunch [pkg_name] [file_name.launch]
launch文件写法,同遵循xml格式规范。如下.
3 通信方式
以下四种:
3.1 Topic 主题
特点:异步通信、 publish/ subscriber
数据类型:定义在*.msg
中。
rostopic命令 | 作用 |
---|---|
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) |
rosmsg命令 | 作用 |
---|---|
rosmsg list | 列出系统上所有的msg |
rosmsg show /msg_name | 显示某个msg的内容 |
3.2 Service 服务
特点:同步通信、reques-reply方式
数据类型:定义在*.srv
中
topic VS service
我们对比一下这两种最常用的通信方式,加深我们对两者的理解和认识,具体见下表。
名称 | Topic | Service |
---|---|---|
通信方式 | 异步通信 | 同步通信 |
实现原理 | TCP/IP | TCP/IP |
通信模型 | Publish-Subscribe | Request-Reply |
映射关系 | Publish-Subscribe(多对多) | Request-Reply(多对一) |
特点 | 接受者收到数据会回调(Callback) | 远程过程调用(RPC)服务器端的服务 |
应用场景 | 连续、高频的数据发布 | 偶尔使用的功能/具体的任务 |
举例 | 激光雷达、里程计发布数据 | 开关传感器、拍照、逆解计算 |
注意:远程过程调用(Remote Procedure Call,RPC)
,可以简单通俗的理解为在一个进程里调用另一个进程的函数。
rosservice 命令 | 作用 |
---|---|
rosservice list | @显示服务列表 |
rosservice info | @打印服务信息 |
rosservice type | 打印服务类型 |
rosservice uri | 打印服务ROSRPC uri |
rosservice find | 按服务类型查找服务 |
rosservice call service_name args | @使用所提供的args调用服务 |
rosservice args | 打印服务参数 |
rossrv 命令 | 作用 |
---|---|
rossrv show | @显示服务描述 |
rossrv list | @列出所有服务 |
rossrv md5 | 显示服务md5sum |
rossrv package | 列出包中的服务 |
rossrv packages | 列出包含服务的包 |
tips: 无论我们定义了srv,或msg,修改 package.xml和CMakeList.txt添加依赖都是必不可少的一步。
3.3 Parameter Service 参数服务器
存储各种参数的字典,可用命令行、launch
文件和node(api)
读写。
1、 命令行
rosparam 命令 | 作用 |
---|---|
rosparam set param_key param_value | 设置参数 |
rosparam get param_key | 显示参数 |
rosparam load file_name | 从文件(yaml)加载参数 |
rosparam dump file_name | 保存参数到文件(yaml) |
rosparam delete param_key | 删除参数 |
rosparam list | 列出参数名称 |
2、 launch文件
与参数服务器相关的标签只有两个,一个是<param>
,另一个是<rosparam>
3、通过node(API)设置
3.4 Actionlib 动作库
类似于Service,带有状态反馈的通信方式。通常用在长时间、可抢占的任务中。
客户端会向服务器发送目标指令和取消动作指令,而服务器则可以给客户端发送实时的状态信息,结果信息,反馈信息等等。
定义在*.action
中。