1. 程式人生 > >ROS學習篇(二)編寫簡單的Service和Client (Python)

ROS學習篇(二)編寫簡單的Service和Client (Python)

一、寫一個伺服器(service)節點

首先我們得確保運行了之前的教程中的creating the AddTwoInts.srv教程。
進去工作空間中

roscd beginner_tutorials

在py指令碼資料夾scripts中新建add_two_ints_server.py檔案

touch scripts/add_two_ints_server.py

程式碼+註釋

#!/usr/bin/env python

from beginner_tutorials.srv import *
import rospy

def handle_add_two_ints(req)
:
print "Returning [%s + %s = %s]"%(req.a, req.b, (req.a + req.b)) return AddTwoIntsResponse(req.a + req.b) #因為我們已經將服務的型別宣告為AddTwoInts,所以它會為您生成AddTwoIntsRequest物件(可以自由傳遞)。 def add_two_ints_server(): rospy.init_node('add_two_ints_server') #宣告節點為add_two_ints_server s = rospy.Service('add_two_ints'
, AddTwoInts, handle_add_two_ints)#使用AddTwoInts(之前教程中建立的)服務型別宣告一個名為add_two_ints的新服務。所有請求都傳遞給handle_add_two_ints函式。 print "Ready to add two ints." rospy.spin() #此語句保證直到節點被關閉,程式碼才會停止執行 if __name__ == "__main__": add_two_ints_server()

執行如下語句使以上新建節點可執行 ,不執行會在執行節點時出現找不到節點的錯誤。

chmod +x scripts/add_two_ints_server.py

二、寫一個客戶端(client)節點

在py指令碼資料夾scripts中新建add_two_ints_client.py檔案

touch scripts/add_two_ints_client.py

程式碼+註釋

#!/usr/bin/env python

import sys
import rospy
from beginner_tutorials.srv import *

def add_two_ints_client(x, y):
    rospy.wait_for_service('add_two_ints') #在客戶端中我們不需要建立node,這是一種便捷方法,可以阻止名為add_two_ints的服務可用。
    try:
        add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts)#建立一個用於呼叫服務的控制代碼,可以像呼叫函式一樣,呼叫控制代碼
        resp1 = add_two_ints(x, y) #因為我們已經將服務的型別宣告為AddTwoInts,所以它會為您生成AddTwoIntsRequest物件(可以自由傳遞)。
        return resp1.sum
    except rospy.ServiceException, e: #如果呼叫失敗,可能會丟擲rospy.ServiceException
        print "Service call failed: %s"%e

def usage():
    return "%s [x y]"%sys.argv[0]

if __name__ == "__main__":
    if len(sys.argv) == 3:
        x = int(sys.argv[1])
        y = int(sys.argv[2])
    else:
        print usage()
        sys.exit(1)
    print "Requesting %s+%s"%(x, y)
    print "%s + %s = %s"%(x, y, add_two_ints_client(x, y))

執行如下語句使以上新建節點可執行

chmod +x scripts/add_two_ints_client.py

三、執行節點
首先回到工作空間,並且編譯

cd catkin_ws
catkin_make

source

source devel/setup.bash

執行節點

rosrun beginner_tutorials add_two_ints_server.py 

會出現Ready to add two ints.字樣,然後開啟新的終端執行client節點

rosrun beginner_tutorials add_two_ints_client.py

會打印出實用資訊如下:

/home/m-tan/catkin_ws/src/beginner_tutorials/scripts/add_two_ints_client.py [x y]

然後執行

rosrun beginner_tutorials add_two_ints_client.py 4 5

輸出:

Requesting 4+5
4 + 5 = 9

執行伺服器的終端輸出:

Returning [4 + 5 = 9]

至此,已經完成了ROS的伺服器和客戶端教程。