3D 자동차 구동 제어
RVIZ 기반 차량 3D 모델링
1. 자이카 모터 제어 : /xycar_motor 노드로 모터 제어 명령을 담은 /xycar_motor 토픽을 발행
xycar_motor topic 구성
std_msgs/Header header
angle : 조향각 (-50 ~ 50) >> 스티어링 범위는 좌우 20도까지
speed : 주행속도 >> 양수이면 가속, 음수이면 감속 (-50 ~ 50)
# 토픽 발행이 0.7초동안 없으면 속도, 조향각 모두 0으로 세팅 >> 정지 및 핸들 정면
2. RVIZ 3D 자동차 제어 : joint_state_publisher gui를 통해 joint_states 토픽 전송 >> 3D 자동차 제어
joint_states topic 구성
std_msgs/Header header
string[ ] name : 조종할 대상
float64[ ] position : 각 대상의 현재 위치 정보 >> position을 조절해 대상을 움직일 수 있음
(라디안 단위 사용, 0.01 라디안은 약 6도)
float64[ ] velocity
float64[ ] effort
3. RVIZ 오도메트리 활용
Odometry : 오도미터 등의 기기의 측정값으로 움직이는 사물의 위치를 측정하는 방법
Odom 토픽을 주어 Odometry 정보를 변환함으로써 사물을 이동시킬 수 있음
Odom topic 구성 : position(자세), Quaternion(기울기), linear(선속도), angular(각속도)
4. 모터 제어 토픽을 발행해 RVIZ 내 차량 주행하기
무한루프에서 토픽이 도착하기를 기다리게 세팅
xycar_motor 토픽이 도착하면 callback 함수가 호출되도록 세팅
callback 함수를 통해 xycar_motor 토픽 내 데이터를 joint_state 구조에 맞게 변형하여 joint_states 토픽을 발행
Odometry 프로그램을 통해 /odom 토픽으로 변환해 발행
etc. launch 파일 내 주석 처리 : <!-- ..... -->
RVIZ라는 3D 시뮬레이터를 처음 다뤄보게 되어 신기했다.
ROS를 공부하면서 느낀 거지만 노드와 토픽 이름이 너무 헷갈린다...🤨
특히 여러 개의 센서를 동시에 활용하거나 이번 과제 같이 하나의 토픽을 다른 토픽 형태로 여러 번 변환하는 경우가 어려웠다.