-
10 week HW (3) action programming : action server nodeROS2 Study 2021. 11. 9. 17:48728x90반응형
1. make package
2. make python file
12345678910111213141516171819202122232425262728293031323334353637383940414243444546import rclpy# import ActionServer class to make actionserverfrom rclpy.action import ActionServerfrom rclpy.node import Node# import Fibonacci interface typefrom my_interface_example.action import Fibonacciclass FibonacciActionServer(Node):def __init__(self):# Initialize FibonacciActionServer class & make node namesuper().__init__('fibonacci_action_server')self._action_server = ActionServer(self,Fibonacci,'fibonacci',self.execute_callback)def execute_callback(self, goal_handle):self.get_logger().info('Executing goal...')sequence = [0, 1]for i in range(1, goal_handle.request.order):sequence.append(sequence[i] + sequence[i-1])# succeed() function indicates the goal was successfulgoal_handle.succeed()result = Fibonacci.Result()# return the requested Fibonacci sequenceresult.sequence = sequencereturn resultdef main(args=None):rclpy.init(args=args)fibonacci_action_server = FibonacciActionServer()rclpy.spin(fibonacci_action_server)if __name__ == '__main__':main()cs
3. play
python은 인터프리터 언어로 빌드가 필요없다.
현재까지의 코드는 피드백이 없는 상태
피드백을 위해서는 코드를 수정해야 한다.
4. add the feedback
[revise code]
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455import timeimport rclpy# import ActionServer class to make actionserverfrom rclpy.action import ActionServerfrom rclpy.node import Node# import Fibonacci interface typefrom my_interface_example.action import Fibonacciclass FibonacciActionServer(Node):def __init__(self):# Initialize FibonacciActionServer class & make node namesuper().__init__('fibonacci_action_server')self._action_server = ActionServer(self,Fibonacci,'fibonacci',self.execute_callback)def execute_callback(self, goal_handle):self.get_logger().info('Executing goal...')# Define the feedbackfeedback_msg = Fibonacci.Feedback()feedback_msg.partial_sequence = [0, 1]for i in range(1, goal_handle.request.order):feedback_msg.partial_sequence.append(feedback_msg.partial_sequence[i] + feedback_msg.partial_sequence[i-1])self.get_logger().info('Feedback: {0}'.format(feedback_msg.partial_sequence))# publish Feedback msggoal_handle.publish_feedback(feedback_msg)time.sleep(1)# succeed() function indicates the goal was successfulgoal_handle.succeed()result = Fibonacci.Result()# return the requested Fibonacci sequenceresult.sequence = feedback_msg.partial_sequencereturn resultdef main(args=None):rclpy.init(args=args)fibonacci_action_server = FibonacciActionServer()rclpy.spin(fibonacci_action_server)if __name__ == '__main__':main()cs 5. play
next time we will add action client code
728x90반응형'ROS2 Study' 카테고리의 다른 글
11 week HW (2) Parameter programming (0) 2021.11.16 11 week HW (1) action programming : action client node (0) 2021.11.14 10 week HW (3) action programming : action server node (0) 2021.11.09 10 week HM (2) : create action interface (0) 2021.11.09 10 week HM (1) service programming (0) 2021.11.09 8week ROS homework : Simple node code explain (0) 2021.10.25