[2023-03-31] 1. 모터제어기 프로그래밍
모터제어기 ROS 프로그래밍
- /xycar_motor 토픽을 발행하면 모터가 움직임
- 0.7초 동안 토픽 발행이 없으면 속도는 0, 조향각은 0으로 세팅됨
    - 타입 : xycar_msgs/xycar_motor
- 구성
        - std_msgs/Header Header
            - uint32 seq #시퀀스 번호
- time stamp # 시간
- string frame_id # 아이디 정보
 
- int32 angle # 조향각도(좌/우 회전)
- int32 speed # 주행속도(전/후 진)
 
- std_msgs/Header Header
            
 
- 
    조향각 - Angle : left MAX(-50) <- 초기 중앙(0) -> right MAX(50)
        - -50 : 좌회전 최대 꺾음
- -10 : 좌회전 조금 꺾음
- 0 : 직진
- +30 : 우회전 많이 꺾음
- +50 : 우회전 최대 꺾음
 
 
- Angle : left MAX(-50) <- 초기 중앙(0) -> right MAX(50)
        
- 
    속도 - 
        Speed : 후진 MAX(-50) ~ 정지(0) ~ 전진 MAX(50) - 
            -50 : 후진 최고 속도 
- 
            0 : 정지 
- 
            +20 : 전진 
- 
            +50 : 최고 속도 
 
- 
            
 
- 
        
자이카 8자 주행시키기
- 다음과 같이 자이카를 8자 모양으로 주행시켜보자
- 차량 속도는 고정, 핸들만 조종

패키지 생성
- $ catkin_create_pkg my_motor std_msgs rospy를 입력해 my_motor 패키지 만들기
- /launch 디렉터리 만들기
- launch 디렉터리 안에 8_drive.launch 만들기
<launch>
    <!--motor node-->
    <include file="$(find xycar_motor)/launch/xycar_motor.launch"/>
    
    <!--8 driver -->
    <node name ="auto_driver" pkg="my_motor" type = "8_drive.py" output="screen"/>
</launch>
- src 폴더에 8_drive.py 만들기
#!/usr/bin/env python
import rospy
import time
from xycar_msgs.msg import xycar_motor # 모터 제어를 위한 토픽 메시지 타입 임포트
motor_control = xycar_motor()
rospy.init_node('auto_driver') # 'auto_driver'이름으로 노드 초기화
pub = rospy.Publisher('xycar_motor', xycar_motor, queue_size=1) # xycar_motor 토픽의 발행 준비
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)
- $ roslaunch my_motor 8_drive.launch