자이카를 조작하기 위해서는 모터를 제어하는 코드를 작성해야한다. 자이카에는 아래의 그림과 같이 2개의 모터가 내장되어 있다. 그리고 VESC 장치가 내장되어 있으며, 모터에 신호를 보내 모터를 조작할 수 있다. 두 가지 모터를 적절히 제어하여 자이카가 8자 모양으로 운행하는 코드를 작성해보자.
모터를 제어 할려면 어떻게 해야할까? xycar에 조향각과 속도 값을 토픽에 담아 전달하면 VESC 장치에서 해당 값을 인식해서 모터를 제어하여 조향하거나 속도를 조절 할 수 있다.
🚀8_drive.launch
<launch>
<!-- motor node -->
<include file = "$(find xycar_motor)/launch/xycar_motor.launch"/>
<!-- auto drive -->
<node name = "auto_driver" pkg= "my_motor" type= "8_drive.py"/>
</launch>
launch 파일을 통해 xycar 모터의 노드의 경로를 찾아서 토픽을 전달 할 수 있다.
🐍8_drive.py
import rospy
import time
from xycar_msgs.msg import xycar_motor
motor_control = xycar_motor()
rospy.init_node('auto_driver', anonymous=True)
pub = rospy.Publisher('xycar_motor',xycar_motor, queue_size =1)
def motor_pub(angle, speed):
global pub
global motor_control
motor_control.angle = angle
motor_control.speed = speed
pub.publish(motor_control)
speed = 3
while not rospy.is_shutdown():
angle = -50
for i in range(40):
motor_pub(angle,speed)
time.sleep(0.1)
angle = 0
for i in range(30):
motor_pub(angle,speed)
time.sleep(0.1)
angle = 50
for i in range(40):
motor_pub(angle,speed)
time.sleep(0.1)
angle = 0
for i in range(30):
motor_pub(angle,speed)
time.sleep(0.1)
xycar를 아직 제어할 수 있는 환경이 아니기 때문에 메세지를 어떤식으로 보내면 모터가 제어되는지 확인정도 진행하였다.
현재 xycar 와 원격으로 연결 된 상태가 아니기 때문에 경로를 찾을 수 없는 에러가 발생하였다.
다음에는 원격으로 연결 한 뒤에 실행결과를 직접 보고 잘 동작하는지 확인 해야겠다.