ROS_python_정리/msgs , srv , action
action 정리
알 수 없는 사용자
2022. 4. 10. 16:22
Action 기본 설명
Action Workflow
소스코드
코드 모음
더보기
fibonacci_server.py
#!/usr/bin/env python
import rospy
import actionlib
import actionlib_tutorials.msg
class FibonacciAction (object):
_feedback = actionlib_tutorials.msg.FibonacciFeedback()
_result = actionlib_tutorials.msg.FibonacciResult()
def __init__(self,name):
self._action_name=name
self._as=actionlib.SimpleActionServer(self._action_name,actionlib_tutorials.msg.FibonacciAction, execute_cb=self.execute_cb, auto_start=False)
self._as.start()
def execute_cb(self,goal):
r = rospy.Rate(1)
success = True
self._feedback.sequence = []
self._feedback.sequence.append(0)
self._feedback.sequence.append(1)
rospy.loginfo('%s: Executing, creating fibonacci sequence of order %i with seeds %i, %i'%(self._action_name, goal.order, self._feedback.sequence[0], self._feedback.sequence[1]))
for i in range(1,goal.order):
if self._as.is_preempt_requested():
rospy.loginfo('%s: Preempted'%self._action_name)
self._as.set_preempted()
success = False
break
self._feedback.sequence.append(self._feedback.sequence[i]+self._feedback.sequence[i-1])
self._as.publish_feedback(self._feedback)
r.sleep()
if success:
self._result.sequence=self._feedback.sequence
rospy.loginfo('%s: Succeeded'%self._action_name)
self._as.set_succeeded(self._result)
if __name__ == '__main__':
rospy.init_node('fibonacci')
server = FibonacciAction(rospy.get_name())
rospy.spin()
--------------------------------------------------------------------------------------------------------------------------
fibonacci_client.py
#!/usr/bin/env python
import rospy
import actionlib
import actionlib_tutorials.msg
import sys
def fibonacci_client():
client = actionlib.SimpleActionClient('fibonacci',actionlib_tutorials.msg.FibonacciAction)
client.wait_for_server()
goal = actionlib_tutorials.msg.FibonacciGoal(order=20)
client.send_goal(goal)
client.wait_for_result()
return client.get_result()
if __name__ == '__main__':
try:
rospy.init_node('fibonacci_client')
result = fibonacci_client()
print "Result:", ', '.join([str(n) for n in result.sequence])
except rospy.ROSInterruptException:
print "program inerrupted before comletion", file(sys.stderr)
fibonacci_client.py
8 클라이언트 객체 생성
9 서버 생성전까지 대기
10~11 서버에 goal 전송
12 서버로 부터 결과 대기 , 결과 recieve시 get_result() 함수로 결과 리턴
fibonacci_server.py