[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