安装完ROS系统后对官方例程进行了学习:
http://wiki.ros.org/ROS/Tutorials
在学习到运行服务和客户端时遇到了一些麻烦,简单做一下记录,以备以后再学习时忘记。
编写简单的服务和客户端(Python)
描述:本教程介绍如何在python中编写服务和客户机节点。
1.编写服务节点
打开在之前教程中创建的beginner_tutorials包
roscd beginner_tutorials
在beginner_tutorials包中创建scripts/add_two_ints_server.py文件,并在其中粘贴下方代码
#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()
2.编写客户端节点
在beginner_tutorials包中创建scripts / add_two_ints_client.py
文件,并在其中粘贴以下内容:
#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))
然后,不要忘记给两个文件权限:
$chmod +x scripts/add_two_ints_server.py
$chmod +x scripts/add_two_ints_client.py
构建节点
$cd~ / catkin_ws
$catkin_make
检查简单服务和客户端
$rosrun beginner_tutorials add_two_ints_server.py(Python)
$rosrun beginner_tutorials add_two_ints_client.py 1 3(Python)
但是 正常按照官方流程做到这一步会报错:
cannot fount package:from beginner_tutorials.srv import *
报错原因 没有将~/catkin_ws/devel/lib/python2.7/dist-packages
加入PYTHONPATH
解决方法:
$sudo vim ~/.brashrc
export PYTHONPATH=~/catkin_ws/devel/lib/python2.7/dist-packages:$PYTHONPATH
$source ~./brashrc
$echo $PYTHONPATH
看到自己添加成功的路径即可解决
问题一:运行runcd beg..
+Tab
不能补全代码
经过几次尝试之后,每次要运行时先打开终端,运行ROS
$runcore
等待运行成功后 重新打开一个终端(以官方创建的工作空间为例)
$cd~ / catkin_ws
$catkin_make
(PS:以上是在运行完之前官方教程前面的步骤没有报错以后执行的)
在构建工作空间之后,它在devel子文件夹中创建了一个类似的结构,就像您在/ opt / ros / $ ROSDISTRO_NAME下找到的一样。
要将工作区添加到ROS环境,您需要获取生成的安装文件:
$. ~/catkin_ws/devel/setup.bash
运行完这一步以后 再运行
runcd beg
+Tab
键就可以补全啦。
小伙伴们有了解原理或者其他简单方法的欢迎留言区告知一声哦,我英语不是很好,看官方的文档理解的不是很清晰,就按这种笨办法先解决啦。(时间原因,细节下次补齐,大家圣诞快乐)
网友评论