Python Simple Service Recevier
04 May 2018 |layout: post title: ROS2 Simple Service Receiver on Python category: ROS2 tag: [ROS, Python] —
ROS2 Simple Service Receiver on Python
간단한 ROS2 Service를 수신하고, 커스텀 메시지 배열을 Publish 하는 예제입니다.
from simple_service.srv import SimpleService
from simple_service.msg import Position
from simple_service.msg import RoutingData
import rclpy
global g_publisher
def add_position(positions, x, y, theta):
pos = Position()
pos.x = x;
pos.y = y;
pos.theta = theta
positions.append(pos)
def callback(request, response):
request_id = request.request_id
print("Simple Service Request: {0} ".format(request_id))
if request_id == Navigation.Request.REQUEST_DEMO_MOVE_PATH_1:
msg = RoutingData()
msg.command = RoutingData.COMMAND_MOVE_ALONG_PATH
add_position(msg.positions, 100, 100, 10)
add_position(msg.positions, 500, 200, 10)
add_position(msg.positions, 1000, 1000, 1)
g_publisher.publish(msg)
elif request_id == Navigation.Request.REQUEST_DEMO_MOVE_PATH_2:
msg = RoutingData()
msg.command = RoutingData.COMMAND_MOVE_ALONG_PATH
add_position(msg.positions, -100, -100, 10)
add_position(msg.positions, -500, -200, 10)
add_position(msg.positions, -1000, -1000, 1)
g_publisher.publish(msg)
response.response = 200
return response
def main(args=None):
global g_publisher
rclpy.init(args=args)
node = rclpy.create_node('simple_service_receiver')
g_publisher = node.create_publisher(RoutingData, RoutingData.NAME)
srv = node.create_service(SimpleService, SimpleService.Request.NAME, callback)
rclpy.spin(node)
rclpy.shutdown()
if __name__ == '__main__':
main()