티스토리 뷰
ROS python 프로그래밍
=서비스 통신=
※국내 ROS 관련 파이썬 자료가 별로 없어서 작성합니다.
※전에 작성한 토픽 통신 게시글을 보지 않아도 서비스 통신을 실행 할 수 있게 독립적으로 작성했습니다.
※이번엔 catkin_make가 필요합니다.
-2개의 정수의 합을 클라이언트가 요청하면 서비스가 응답합니다.
cd ~/catkin_ws/src
catkin_create_pkg ros_service_tutorial rospy std_msgs
roscd ros_service_tutorial
mkdir srv
gedit srv/AddTwoInts.srv
int64 a
int64 b
---
int64 sum
rossrv show ros_service_tutorial/AddTwoInts 로 작성된 서비스 파일을 확인해 볼 수 있습니다.
3. package.xml 수정
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
<!-- asdf --> 로 되어있는 주석만 제거해 주시면 됩니다. 찾기 힘드시면 ctrl+f 명령어로 찾습니다.
find_package(catkin REQUIRED COMPONENTS
rospy
std_mesgs
messge_generation
)
add_service_files(
FILES
AddTwoInts.srv
)
generate_messages(
DEPENDENCIES
std_msgs
)
이 부분도 # 으로 주석이 되어있는데 제거해주시고 몇 요소만 위처럼 추가/수정 해주시면 됩니다.
5. 서버 작성
roscd ros_service_tutorial
mkdir scripts
gedit scripts/add_two_ints_server.py
#!/usr/bin/env python
from ros_service_tutorial.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
5. 클라이언트 작성
gedit scripts/add_two_ints_client.py
#!/usr/bin/env python
import sys
import rospy
from ros_service_tutorial.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_client.py
5. 패키지 빌드
cd ~/catkin_ws
catkin_make
source ~/.bashrc
6. 서비스 통신 실행
roscore
rosrun ros_service_tutorial add_two_ints_server.py
rosrun ros_service_tutorial add_two_ints_client.py 1 3
'technote > ROS' 카테고리의 다른 글
ROS 선행지식 (시작하기 전 알아두면 좋을 것들) (0) | 2018.04.05 |
---|---|
ROS 프로그래밍 (python) -1- 토픽 메시지 통신 (3) | 2018.03.25 |