今天好晚才回到家,差點來不及寫鐵人賽 QQQQQQQQ
好吧今天就是進行server node in python的部分,首先就是不免俗的建立python檔啦!
$ roscd beginner_tutorials/src
$ vim add_two_ints_server.py
$ chmod +x add_two_ints_server.py
然後程式碼如下:
1 #!/usr/bin/env python
2
3 from rospy_tutorials.srv import *
4 import rospy
5
6 def handle_add_two_ints(req):
7 print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b))
8 return AddTwoIntsResponse(req.a + req.b)
9
10 def add_two_ints_server():
11 rospy.init_node('add_two_ints_server')
12 s = rospy.Service('add_two_ints', AddTwoInts, handle_add_two_ints)
13 print "Ready to add two ints."
14 rospy.spin()
15
16 if __name__ == "__main__":
17 add_two_ints_server()
裡面比較需要注意的部分就是第12行啦,Service的函式定義如下:
rospy.Service(name, service_class, handler, buff_size=65536)
第一個參數就是service的名稱囉,接著是service的格式,這邊我們先用官方幫我們定義好的service格式,也就是AddTwoInts。第三個參數是呼叫這個service的時候的callback function,那第四個buff_size就是用來放接收到的request。
寫完以後要執行catkin_make進行建置,這是為了確定service已經被建立起來了。
建完之後就可以執行這個node啦,然後就可以用service call 這個指令去打API囉!
ROS tutorials - writing service in python
ROS wiki - rospy Services