ROS开发 之 数据通信(活动)

概述

ROS中通信方式有三种,分别为话题(msg)、服务(srv)和活动(action),其中话题属于基本的发布/订阅通信方式,适用于单个节点发布消息,一个或多个节点接受消息的情况;服务属于实时获取结果的情况,应用于请求/响应式的应用环境,类似于一个函数调用关系,适用于基本功能的调用或者状态的查看;活动属于无阻塞的执行方式,也应用于请求/响应式的环境,具有比服务更灵活的控制形式,并且在执 行的过程中可以对状态的反馈,适用于运行需要较长时间的情况。

活动说明

活动是一种基于消息实现的,比服务更加强大和灵活的通信方式,可以进行异步执行,在执行过程中也可以实时查看当前运行的状态和进度,当然也可以取消当前执行甚至启动新的活动来抢占原先执行的活动。活动的使用方式跟服务一样,包括定义和实现两步,活动通常放置于action目录下,且文件以action为扩展名,下面展示活动的定义步骤,例子中代码程序可以在这个地址下载:https://github.com/zacSuo/vejoeRos

  1. 创建目录:mkdir action
  2. 目录中创建文件:pushup.action # goal uint32 push_up_count --- # result duration time_used --- #feedback duration time_elapsed uint32 finish_count uint32 remain_count
  3. 为构建增加编译库:pakage.xml <build_depend>actionlib_msgs</build_depend> <exec_depend>actionlib_msgs</exec_depend>
  4. 为构建增加库说明:CMakeLists.txt find_package(#约在第10 **** actionlib_msgs  #新增 ) catkin_package(#约在第105 **** CATKIN_DEPENDS actionlib_msgs #新增 ) add_action_files(#约在第66行,此处不同于消息和服务 **** DIRECTORY action   #新增 FILES pushup.action  #新增 ) generate_messages(#约在第71 DEPENDENCIES actionlib_msgs    #新增 ) #去掉注释以启用
  5. 进入catkin根目录:cd ~/catkin_ws
  6. 编译生成:catkin_make
  7. 查看消息:rosmsg list | grep vejoe_slam

catkin_make编译之后,会在vejoe_slam包中新生成多个消息文件,这些消息文件用于实现活动的交互协议,在调用action时,系统会用到对应的消息,从这里可以基本看出活动是基于消息实现的。

pushupAction.msg
pushupActionGoal.msg
pushupActionResult.msg
pushupActionFeedback.msg
pushupGoal.msg
pushupResult.msg
pushupFeedback.msg

活动实现

本实用活动的示例为一个做俯卧撑的功能,活动本身用于实现做俯卧撑的功能,并反馈当前已经做了多少个,用时多久,在调用端可以指定要做多少个,并随时查看当前已经做的个数和状态。

  1. 拷贝程序到src目录:demo_action.pydemo_action_client.py
  2. 文件执行授权:chmod +x demo_action.py demo_action_client.py
  3. 启动主节点:roscore
  4. 启动活动:rosrun vejoe_slam demo_action.py
  5. 调用服务:rosrun vejoe_slam demo_action_client.py

左侧为主节点,右上为活动启动(服务端),右下为活动调用(客户端)

if __name__ == '__main__':
   rospy.init_node('pushup_action_client')
   client = PushupActionClient(rospy.get_name())
   print '============='
   client.ShowWork()
   print '#############'
   client.showCancel()
   print '*************'
   client.showInvalid()
   rospy.spin()

客户端主函数如上,其执行结果如上图所示,当正常执行时会顺序执行完所有任务,对于第二种取消的情况认为是中断了活动,第三种非正常数据数据活动里面任务的一部分,可以进行判断和响应。


欢迎感兴趣的朋友一起加QQ群交流学习。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

放羊郎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值