mooc ROS3 通信方式

ros的核心部分 通信

通讯方式:
Topic
service
parameter service
actionlib

topic

mooc ROS3  通信方式

1 概念

异步指的是:
对于发布者(pub)不用等消息返回的状态,只需要发送就行了 并且可以有多个订阅者(sub)
对接收 者来说 有消息到了就处理,没有就做别的事情
mooc ROS3  通信方式

topic内容的数据类型(相当于类)有非常严格的格式要求
pkg中的每条message相当于对象
Message 定义在.msg文件中(pkg/msg/.msg)
mooc ROS3  通信方式
2 常用命令

rostopic


列出当前所有的topic
rostopic list

显示某个topic属性
rostopic info /topic_name

显示某个topic的内容
rostopic echo /topic_name

向某个topic发布内容
rostopic pub /topic_name
rosmsg


列出系统上所有的msg
rosmsg list

显示某个msg内容
rosmsg show /msg_name

Service

1
同步通信方式
node之间通过请求和响应(request-reply)的方式通信

nodeB给外界提供一个服务,其他node可以提出请求服务,得到请求就来做b就来处理,处理完再回复给a

同步指的是client 请求后会一直阻塞等待,等到服务器端返回了结果才会继续执行
mooc ROS3  通信方式

topic 与 service 对比
mooc ROS3  通信方式
2

srv: service通讯的数据格式

定义在*.srv文件中 (和msg类似)

格式:
横线上面是请求的消息
横线下面时返回的消息
srv只能嵌套msg(huamn_pose[]) 不能嵌套srv
mooc ROS3  通信方式

同时还需要修改package.xml和CMakeList.txt文件
指定srv 或者msg 再编译或者运行时所需要的依赖,
mooc ROS3  通信方式

3 rosservice rossrv

列出当前所有活跃的serbice
rosservice list

显示某个service的属性
rosservice info service_name

调用某个service
rosservice call service_name args
rossrv  对应 rosmsg

列出系统上所有的srv
rossrv list

显示某个srv内容
rossrv show srv_name

例子
还是运行roslaunch robot_sim_demo robot_spawn.launch
rosservice list查看有哪些服务

这里我们查看/gazebo/delete_light服务 的内容
rosservice info /gazebo/delete_light
mooc ROS3  通信方式
type就是srv。。。。想调用这个服务,就得看它是怎么定义的
request只有一个参数 light_name 格式是string 返回是布尔型 和字符串是否成功 和状态信息
mooc ROS3  通信方式
吧sun这个light_name删掉
rosservice call /gazebo/delete_light “light_name: ‘sun’”

mooc ROS3  通信方式

添加删除用service比较好,知道结果删没删除 还有set、get的五福都是在你需要的时候给你

parameter Server

roscore时会启动 master rosout 和parameter Server

parameter Server 储存各种参数的字典 (放一些不常改变的参数,配置) 可用命令行,launch文件和node(api)读写

mooc ROS3  通信方式

launch文件中的配置 感觉有点像调用函数返回值
mooc ROS3  通信方式
例子
rosparam list 查看参数设置

查看下重力参数
mooc ROS3  通信方式

把当前参数存到一个yaml文件中
rosparam dump test.yaml yaml文件是可以查看

vi test.yaml
一般习惯把一些算法的参数写到yaml文件中然后roslaunch 加载
加载: 命令行加载 rosparam load test.yaml launch文件加载 把参数和代码分离开了 只用改参数的代码就行了
mooc ROS3  通信方式

Action

升级版的service
例如执行一个任务需要很长的时间,中间想中断这个进程,或者想知道是死机了还是处于一个等待状态

goal :希望动作能实现的目标
cancel:中间可能需要取消掉这个任务
回传:
status::server所处的状态
result:处理完的结果
feedback:实时状态

一般用在长时间的任务,例如小车的导航,走多少米,机械臂的运动等等,还有一些抢占的任务(被打断执行其他任务)

文件类型 *.action 类比 service的的srv topic的msg
mooc ROS3  通信方式

文件格式:
mooc ROS3  通信方式
有3部分: 分别是goal result 和feedback
2个例子:
server端是3个洗碗机 client发布goal要哪个洗碗机工作,server提供完成进度feedback,result返回一共洗完了多少碗的最终结果。

还有常用的navigation 导航
goal是目标的位姿 result是空的永远不结束 feedback当前的位姿

上一篇:go 使用线程池做请求限流


下一篇:ROS学习笔记五:创建和使用ROS msg和srv