ROS 學(xué)習(xí)-6<編寫簡單的Service和Client>

先進入包里面: roscd beginner_tutorials
在script文件夾下面添加一個文件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)
def add_two_ints_server(): 
rospy.init_node('add_two_ints_server')
 s = rospy.Service('add_two_ints', AddTwoInts, 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 Node, 文件也放在script下面,命名為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') 
try: 
add_two_ints = rospy.ServiceProxy('add_two_ints', AddTwoInts) 
resp1 = add_two_ints(x, y)
return resp1.sum 
except rospy.ServiceException, e: 
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))

然后再building一下

# In your catkin workspace
cd ~/catkin_ws
catkin_make

分別再新的terminal里面運行

 cd ~/catkin_ws
 . devel/setup.bash
 rosrun beginner_tutorials add_two_ints_server.py
cd ~/catkin_ws
 . devel/setup.bash
rosrun beginner_tutorials add_two_ints_client.py

再在第二個terminal里面運行:

rosrun beginner_tutorials add_two_ints_client.py 4 5
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容