[ROS] 모터제어기 프로그래밍

Nodazi·2024년 1월 5일
0

ROS

목록 보기
10/21
post-thumbnail

🤔0.개요

자이카를 조작하기 위해서는 모터를 제어하는 코드를 작성해야한다. 자이카에는 아래의 그림과 같이 2개의 모터가 내장되어 있다. 그리고 VESC 장치가 내장되어 있으며, 모터에 신호를 보내 모터를 조작할 수 있다. 두 가지 모터를 적절히 제어하여 자이카가 8자 모양으로 운행하는 코드를 작성해보자.
자이카 내장 모터

💻1.코드 작성

모터를 제어 할려면 어떻게 해야할까? 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를 아직 제어할 수 있는 환경이 아니기 때문에 메세지를 어떤식으로 보내면 모터가 제어되는지 확인정도 진행하였다.

👀2.실행화면

현재 xycar 와 원격으로 연결 된 상태가 아니기 때문에 경로를 찾을 수 없는 에러가 발생하였다.
다음에는 원격으로 연결 한 뒤에 실행결과를 직접 보고 잘 동작하는지 확인 해야겠다.

profile
GoGoSing

0개의 댓글

관련 채용 정보