打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
actionlib


使用actionlib的教程
http://wiki.ros.org/actionlib/Tutorials


==========================================================================

1 创建工程
cd ~/catkin_ws/src
catkin_create_pkg action std_msgs rospy
2 设计action定义文件,内容有goal feedback result
这个和service的srv文件很像,放置再工程目录的action目录下

duration time_to_wait #goal,客户端发送的等待总时间
---
duration time_elapsed #result ,服务器端发送的等了多久,
uint32 updates_sent #更新多少次
---
duration time_elapsed # feedback,服务器端周期性的发送已等了多久
duration time_remaining #还剩多久

3 修改CMakeLists.txt文件,配置默认支持
3.1 增加模块actionlib_msgs
find_package(catkin REQUIRED COMPONENTS
..... #其他已有模块
actionlib_msgs#增加
)
3.2 增加action服务定义文件
add_action_files(
DIRECTORY action
FILES Timer.action
)
3.3 action的msg
generate_messages(
DEPENDENCIES
actionlib_msgs
std_msgs
)
3.4 catkin的msg支持
catkin_package(
CATKIN_DEPENDS
actionlib_msgs
)

4 编译工程
cd ~/catkin_ws
catkin_make

5 编写action服务器端程序
#!/usr/bin/env python
import roslib; roslib.load_manifest('action')

import rospy
import time
import actionlib
from action.msg import TimerAction, TimerGoal, TimerResult
def do_timer(goal):
start_time = time.time()
time.sleep(goal.time_to_wait.to_sec())
result = TimerResult()
result.time_elapsed = rospy.Duration.from_sec(time.time() - start_time)
result.updates_sent = 0
server.set_succeeded(result)
rospy.init_node('timer_action_server')
server = actionlib.SimpleActionServer('timer', TimerAction, do_timer, False)
server.start()
rospy.spin()
6 编写ros的action客户端程序
#!/usr/bin/env python
import roslib; roslib.load_manifest('action')
import rospy
import actionlib
from action.msg import TimerAction, TimerGoal, TimerResult
rospy.init_node('timer_action_client')
client = actionlib.SimpleActionClient('timer', TimerAction)
client.wait_for_server()
goal = TimerGoal()
goal.time_to_wait = rospy.Duration.from_sec(5.0)
client.send_goal(goal)
client.wait_for_result()
print('Time elapsed: %f'%(client.get_result().time_elapsed.to_sec()))

7 测试运行(开四个终端)
roscore
rosrun action action_c.py
rosrun action action_s.py

8 查看信息
liao@liao-eagle:~/catkin_ws/src/action/src$ rostopic list
/rosout
/rosout_agg
/timer/cancel
/timer/feedback
/timer/goal
/timer/result
/timer/status

liao@liao-eagle:~/catkin_ws/src/action/src$ rostopic info /timer/goal
Type: action/TimerActionGoal

Publishers: None

Subscribers:
* /timer_action_server (http://liao-eagle:42857/)

liao@liao-eagle:~/catkin_ws/src/action/src$ rosmsg show TimerActionGoal
[action/TimerActionGoal]:
std_msgs/Header header
uint32 seq
time stamp
string frame_id
actionlib_msgs/GoalID goal_id
time stamp
string id
action/TimerGoal goal
duration time_to_wait

liao@liao-eagle:~/catkin_ws/src/action/src$ rosmsg show TimerGoal
[action/TimerGoal]:
duration time_to_wait

9 rqt_graph
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
ros入门之用catkin和rosmake创建和编译功能包
儿童资源宝库
编写一个简单的执行回调的行动服务和行动客户端
ros 消息发布和订阅
刚下好ROS,如何从零开始实现px4的无人机仿真
通血管的古方,不管多严重都能通
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服