6. 서비스를 활용한 모터 제어
페이지 정보
작성자 관리자 댓글 0건 조회 1,878회 작성일 21-01-14 21:01본문
6. 서비스를 활용한 모터 제어
서비스를 활용하여 모터를 제어해 보도록 하겠습니다.
서비스 서버 에서는 서비스를 등록하고 전달된 데이터에 따라 모터를 제어합니다.
클라이언트는 등록되어 있는 서비스를 호출하여 모터를 전진 또는 후진 또는 정지하도록 명령을 제어합니다.
전진 이나 후진을 하게될 경우 속도데이터를 함께 전달하여 제어하도록 합니다.
속도 데이터는 0~100 으로 100 일 경우 최대 속도, 0 일 경우 움직이지 않습니다.
'catkin_create_pkg' 명령을 활용하여 패키지를 생성합니다.
생성되는 패키지에 rospy와 std_msgs 패키지를 포함하도록 합니다.
jklee@holdings:~/catkin_ws/src$ catkin_create_pkg motor_service rospy std_msgs
Created file motor_service/package.xml
Created file motor_service/CMakeLists.txt
Created folder motor_service/src
Successfully created files in /home/jklee/catkin_ws/src/motor_service. Please adjust the values in package.xml.
jklee@holdings:~/catkin_ws/src$ cd motor_service/
jklee@holdings:~/catkin_ws/src/motor_service$
srv 폴더를 생성하고 폴더 내부에 motor.srv 파일을 생성하고 내용을 편집합니다.
jklee@holdings:~/catkin_ws/src/motor_service$ mkdir srv
jklee@holdings:~/catkin_ws/src/motor_service$ vi srv/motor.srv
int64 speed
---
int64 result
motor.srv 파일에 작성한 내용은 총 3 개의 변수의 내용을 담고 있습니다.
motor_ctl은 전진, 후진, 정지를 제어할 내용을 담고 speed 는 전진과 후진을 제어할 때 모터의 속도를 제어하는 변수입니다.
motor.srv 파일을 작성 완료하고 나서 모터 서비스를 등록할 서버 프로그램을 작성합니다.
jklee@holdings:~/catkin_ws/src/motor_service$ vi src/server.py
#!/usr/bin/env python3
from motor_service.srv import *
import rospy
from pop import Pilot
Car = Pilot.AutoCar()
def motor_control(msg):
if msg.motor_ctl == 1:
Car.forward(msg.speed)
elif msg.motor_ctl == 2:
Car.backward(msg.speed)
elif msg.motor_ctl == 3:
Car.stop()
return 0
def motor_server():
rospy.init_node('motor_server')
s = rospy.Service('motor',motor,motor_control)
rospy.spin()
if __name__=="__main__":
motor_server()
코드에서 사용할 rospy 와 앞서 작성한 motor.srv 를 import 합니다.
이후 서비스 호출시 호출될 motor_control() 메소드를 작성합니다.
motor_control() 메소드의 전달 인자 msg 에는 motor.srv 에 작성한 motor_ctl 와 speed 가 전달되는 형태입니다.
motor_ctl 에 따라 전진, 후진, 정지를 결정하고 speed 에 따라 속도를 제어합니다.
메인 루프가 시작되면 motor_server 노드를 등록하고 motor 서비스를 등록합니다.
작성을 완료하고 rosrun 을 활용하여 실행시 실행될 수 있도록 실행권한을 부여합니다.
jklee@holdings:~/catkin_ws/src/motor_service$ chmod +x src/server.py
컴파일을 위한 CMakeLists.txt 파일과 package.xml 파일을 수정합니다.
CMakeLists.txt 에는 컴파일 옵션들을 지정합니다.
기본적인 내용은 패키지 생성시 미리 작성되어 있습니다.
서비스 등록을 위한 내용을 추가합니다.
jklee@holdings:~/catkin_ws/src/motor_service$ vi CMakeLists.txt
댓글목록
등록된 댓글이 없습니다.