Mike 发表于 2021-7-10 14:29:16

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

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

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

[*]创建目录:mkdir action
[*]目录中创建文件:pushup.action # goal uint32 push_up_count --- # result duration time_used --- #feedback duration time_elapsed uint32 finish_count uint32 remain_count
[*]为构建增加编译库:pakage.xml <build_depend>actionlib_msgs</build_depend> <exec_depend>actionlib_msgs</exec_depend>
[*]为构建增加库说明: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    #新增 ) #去掉注释以启用
[*]进入catkin根目录:cd ~/catkin_ws
[*]编译生成:catkin_make
[*]查看消息:rosmsg list | grep vejoe_slam

  catkin_make编译之后,会在vejoe_slam包中新生成多个消息文件,这些消息文件用于实现活动的交互协议,在调用action时,系统会用到对应的消息,从这里可以基本看出活动是基于消息实现的。
pushupAction.msg
pushupActionGoal.msg
pushupActionResult.msg
pushupActionFeedback.msg
pushupGoal.msg
pushupResult.msg
pushupFeedback.msg
活动实现
  本实用活动的示例为一个做俯卧撑的功能,活动本身用于实现做俯卧撑的功能,并反馈当前已经做了多少个,用时多久,在调用端可以指定要做多少个,并随时查看当前已经做的个数和状态。

[*]拷贝程序到src目录:demo_action.py,demo_action_client.py
[*]文件执行授权:chmod +x demo_action.py demo_action_client.py
[*]启动主节点:roscore
[*]启动活动:rosrun vejoe_slam demo_action.py
[*]调用服务: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()  客户端主函数如上,其执行结果如上图所示,当正常执行时会顺序执行完所有任务,对于第二种取消的情况认为是中断了活动,第三种非正常数据数据活动里面任务的一部分,可以进行判断和响应。

  
文档来源:51CTO技术博客https://blog.51cto.com/u_14819979/3030391
页: [1]
查看完整版本: ROS开发 之 数据通信(活动)