ros編譯console缺失
⑴ 如何自定義ros的action服務
1 創建工程
cd ~/catkin_ws/src
catkin_create_pkg action std_msgs rospy
2 設計action定義文件,內容有goal feedback result
這個和service的srv文件很像,放置再工程目錄的action目錄下
ration time_to_wait #goal,客戶端發送的等待總時間
---
ration time_elapsed #result ,伺服器端發送的等了多久,
uint32 updates_sent #更新多少次
---
ration time_elapsed # feedback,伺服器端周期性的發送已等了多久
ration 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
ration time_to_wait
liao@liao-eagle:~/catkin_ws/src/action/src$ rosmsg show TimerGoal
[action/TimerGoal]:
ration time_to_wait
9 rqt_graph