Advanced Mobility Global Contest 2026
콘테스트 프로젝트진행중

Geniuses

운동 공간이 사람을 찾아가는 새로운 일상의 탐험, 자율주행 이동형 피트니스 버스

Advanced Mobility Global Contest 2026
이
2026.10.01에 시작
0
좋아요
0
조회
0
댓글

주요 기능

IMU 기반 실시간 자세 측정 및 보정
MPU6050의 가속도계와 자이로 센서로 플랫폼의 Roll과 Pitch를 실시간으로 측정한다. 상보필터로 자이로의 빠른 응답성과 가속도계의 안정성을 결합하고, 초기 영점 보정과 차량 가속도 보상으로 주행 중에도 실제 플랫폼 기울기를 안정적으로 추정한다. 특히 선회 중 가속도계가 횡가속도를 기울기로 착각하는 오염(횡가속도 2 m/s²에서 약 11.5° 오차)을 보상으로 제거한다.
PID 기반 플랫폼 수평 유지 제어
측정된 Roll·Pitch 기울기와 목표 수평각의 오차로 PID 제어를 수행하고, 4개의 서보모터를 구동해 플랫폼을 수평으로 유지한다. 자이로 각속도를 미분항에 활용하고 Anti-windup 및 출력 제한을 적용해 과도한 진동과 제어 입력의 누적을 방지한다. 다만 PID는 기울기가 생긴 뒤에만 반응해 선회 롤을 약 30%만 줄이므로(0.760° → 0.538°), 다음 기능의 사전 보상과 결합해 사용한다.
차량 주행상태 기반 Feedforward 선제 보상
엔코더로 측정한 차량 속도와 조향 서보 신호로 추정한 조향각을 이용해 선회 시 횡가속도를 예측한다. 또한 차량 속도의 변화로부터 종가속도를 계산해, 선회와 가감속으로 발생할 Roll·Pitch 기울기를 미리 보상함으로써 기울기가 발생한 뒤 대응하는 피드백 제어의 지연을 보완한다. 시뮬레이션에서 선회 롤이 90% 이상(0.760° → 0.059°), 일정 가감속 구간의 피치가 77%(0.198° → 0.045°) 줄었다.
물리 모델과 머신러닝을 결합한 보정 제어
차량의 속도, 조향각, 예상 횡가속도, 하중 상태를 입력으로, 물리 기반 Feedforward 모델의 예측 오차(잔차)만 2차 다항 회귀(계수 15개)로 추가 보정한다. 처음 보는 데이터로 점수를 확인해 공식보다 뚜렷하게 낫지 않으면 계수를 0으로 두어 머신러닝을 끄고, 학습 범위를 벗어난 입력에서도 보정을 제한하며 잔차 크기에 상한(±2°)을 적용한다. 공식이 어긋나는 고속 구간(2.0 m/s)에서 롤이 0.075°에서 0.054°로 28% 줄었다.
4개 서보모터 독립 구동 및 안전 제어
Roll과 Pitch 제어량을 Front Left, Front Right, Rear Left, Rear Right의 4개 서보모터에 분배해 좌우 및 전후 기울기를 동시에 제어한다. 서보 작동 범위와 변화율을 제한하고, 센서 이상이나 입력 신호 손실 시 안전한 상태로 전환해 기구부 손상과 비정상 동작을 방지한다.
주행 데이터 수집 및 계수 자동 생성 파이프라인
제어를 수행하지 않고 센서값, 차량 속도, 조향각 등의 주행 데이터를 CSV 형태로 기록하는 데이터 수집 모드를 제공한다. 변환 스크립트가 수집한 로그에서 속도·조향이 일정한 구간을 뽑아 Feedforward 계수와 머신러닝 계수를 만들고 제어 코드에 자동 반영하며, 학습용과 평가용 주행을 분리해 처음 보는 주행에서 성능을 확인한다.
Advanced Mobility Global Contest 2026완료
콘테스트 프로젝트 진행 상황

각 Quest를 단계적으로 완성하는 프로젝트입니다.

Quest 1
Quest 2
Quest 3
Quest 4
Quest 5
Quest 6
Quest 7
Quest 8
Quest 9
Quest 10
Quest 11
Quest 12
Quest 13
Quest 14
14 / 14 완료
✓
Quest 1: 아이디어 구상
2026.06.20
완료

본 프로젝트는 ‘운동 공간이 사람을 찾아간다면 어떨까?’라는 질문에서 출발하여, 이동형 피트니스 버스를 통해 새로운 운동 환경의 가능성을 탐험하는 것을 목표로 한다. 제한된 버스 내부에서 운동기구의 배치와 무게중심, 안정성을 분석하며 이동성과 운동 기능을 함께 갖춘 공간을 설계하고자 한다. 이 과정에서 익숙한 공간의 쓰임을 새롭게 발견하고, 장소의 제약으로 운동을 접하기 어려웠던 사람들에게 운동 기회를 제공할 수 있는 방법을 찾아가고자 한다.

✓
Quest 2: 아이디어 구체화
2026.06.24
완료

차량의 기울기 제어 방법으로 유압 구동 방식, 서보모터 구동 방식 등 다양한 방안을 검토함. 이 중 소형 RC카에 적용하기 쉽고 제어 구현이 용이한 서보모터 방식을 선정함. 아두이노를 활용하여 차량의 기울기에 따라 서보모터를 제어하는 시스템을 구성하기로 함. 또한 실제 운동기구의 작동을 모사하기 위해 소형 기어드모터와 추를 이용하여 운동기구를 소형화하고, 추의 이동에 따른 하중 변화로 차량의 기울기 변화를 구현하기로 함.

✓
Quest 3: 부품 구매 목록 작성
2026.07.04
완료

아이디어 구현을 위해 RC카, 서보모터, 전원부, 제어부에 필요한 부품을 비교하여 구매 목록을 작성함.

RC카: 운동기구 작동에 따른 하중 이동으로 차량의 기울기가 변화하고, 이를 서보모터로 보정하는 과정을 확인해야 하므로 각 바퀴의 서스펜션 움직임을 확인하기 쉽고 차체 높이가 비교적 높은 오프로드형 RC카를 선정함. 특히 개별 서스펜션 구조를 가진 모델을 선택하여 각 휠의 높이 변화에 따른 Roll, Pitch 제어를 구현할 수 있도록 함.

서보모터: 토크, 서보암 끝단에서의 지지력, 크기, 무게, 작동 속도, 구동 전압 등을 비교함. 차량과 플랫폼의 하중을 지지하면서 4개의 서보모터로 각 플랫폼의 높이를 독립적으로 변화시켜야 하므로 충분한 토크를 확보하면서도 크기와 무게가 과도하지 않은 제품이 필요함. 비교 결과 크기가 적당하고 Arduino와의 연동이 용이한 MG996R을 선정함.

서보모터 전원부: 서보 4개의 순간적인 전류 요구를 안정적으로 공급할 수 있도록 RC카 구동 전원과 별도의 전원계를 구성하기로 함. 배터리는 용량뿐 아니라 순간적으로 큰 전류를 공급할 수 있는 방전 성능을 비교하여 Molicel INR-18650-P28A 2800 mAh, 35 A 고방전 셀을 선정함. 서보용 전원 구성과 장착을 위해 18650 2구 배터리 홀더를 함께 구매하고, 배터리 전압을 서보모터의 사용 전압에 맞춰 안정적으로 공급하기 위해 UBEC도 구매 목록에 포함함.

IMU센서: 차량의 Roll, Pitch 변화를 실시간으로 측정하기 위해 가속도계와 자이로센서가 결합된 MPU6050 IMU 센서를 선정함.

제어부: 센서 데이터 처리와 4개의 서보모터 제어를 위해 Arduino Uno를 사용하기로 함. 또한 MPU6050과 다수의 서보모터를 배선할 때 전원 및 신호선을 쉽게 연결하고 배선 복잡도를 줄이기 위해 Arduino Sensor Shield를 함께 구매함.

최종 구매 부품은 오프로드형 RC카 1대, MG996R 서보모터 4개, Molicel P28A 18650 배터리 2개, 2구 배터리 홀더, UBEC, MPU6050, Arduino Uno, Sensor Shield로 구성함.

✓
Quest 4: 1차 제어 코드 작성 및 시뮬레이션
2026.07.08
완료

MPU6050의 가속도와 자이로 데이터를 이용해 차량의 Roll, Pitch 각도를 계산하도록 구성함. 자이로는 빠른 각도 변화 측정에 유리하지만 오차가 누적될 수 있고, 가속도는 절대 기울기를 알 수 있지만 진동에 민감하므로 두 값을 상보필터로 결합함. 기본 계수는 α=0.98로 설정하여 순간적인 진동보다는 지속적인 기울기 변화에 반응하도록 함.

1차 제어에서는 Roll 방향 제어를 우선 구현하고 목표 Roll을 0°로 설정함. 측정된 Roll 오차를 PID 제어기로 계산한 뒤, 오른쪽이 내려가면 오른쪽 앞·뒤 서보는 차체를 올리고 왼쪽 앞·뒤 서보는 내리도록 4개 서보모터의 명령각을 분배함.

실제 제작 전에는 Wokwi 시뮬레이션을 통해 센서 각도 변화에 따른 서보모터의 동작 방향과 제어 로직을 확인함. 이를 통해 Roll 값이 변할 때 각 서보모터가 수평 복원 방향으로 작동하는지 검증하고, 이후 실제 RC카 적용을 위한 기본 제어 구조를 확립함

✓
Quest 5: 서보 모터 조립
2026.07.17
완료

18650 배터리, UBEC, Arduino Uno를 연결하여 서보모터용 전원 및 제어 회로를 구성하고, 서보모터 4개와 MPU6050 IMU 센서를 연결함. 작성한 Roll 제어 코드를 실제 하드웨어에 적용하여 IMU 센서의 기울기 변화에 따라 4개의 서보모터가 제어되는지 확인하였으며, 정상 작동을 확인함.

서보모터의 차량 장착 방법을 검토함. 기존 RC카의 휠, 서스펜션 및 쇼크업소버 구조는 활용하되, 서보모터 설치 공간을 확보하기 위해 기존 차체 구조 대신 평판형 플랫폼을 3D 프린팅하여 제작하기로 함. 제작한 플랫폼 위에 서보모터 4개를 배치하고, 서보암과 쇼크업소버를 연결하여 각 휠 측 차체 높이를 조절하는 구조로 설계하기로 함.

✓
Quest 6: 서보모터 장착판 설계
2026.07.26
완료

기존 RC카의 조향부, 구동모터, 차량용 배터리 및 제어 구조를 그대로 활용하기로 결정하고, 별도의 평판형 차체를 제작하는 대신 기존 차체에 결합할 수 있는 서보모터 장착판을 설계함. 장착판은 기존 차체에 끼워 고정하는 구조로 설계하고, 상부는 서보모터와 제어부를 배치하기 쉽도록 일자형 평판 구조로 구성함. 상부에는 서보모터 4개의 위치를 일정하게 유지할 수 있도록 고정용 브래킷과 체결 홀을 설계함. 장착판 양측은 기존 휠 주변 형상을 따라 감싸는 구조로 설계하여 차체와의 접촉 면적을 넓히고, 주행 및 서보 작동 시 장착판의 좌우 흔들림과 위치 이탈을 줄이도록 함.

✓
Quest 7: 플랫폼 형상 설계 및 배터리 배치 조정
2026.10.06
완료

서보모터 장착판 상부에 평판형 플랫폼을 설치하여 운동기구를 배치하기로 함. 이후 구조적 안정성을 높이기 위해 서보모터 설치부를 제외한 영역의 높이를 낮춰 차량의 무게중심을 낮추는 방향으로 플랫폼 형상을 수정함.초기에는 서보모터 설치부와 휠 상부 등 간섭이 발생하는 부위의 형상을 그대로 따라 플랫폼 높이를 최대한 낮추는 구조를 검토함. 이후 제작성, 공간 활용성, 무게중심 저감 효과를 함께 고려하여, 장착판 양측 하부 공간에 배터리를 분할·대칭 배치하고 서보모터 장착부를 제외한 나머지 영역은 평판형으로 단순화함. PETG 3 mm 기준으로 플랫폼 형상을 변경했을 때 정적 무게중심이 약 5.4% 감소하는 효과를 확인함. 배터리를 기존 위치보다 하부에 재배치하는 효과까지 포함하면 실제 무게중심 저감 효과는 더욱 클 것으로 예상함.

✓
Quest 8: 운동기구 배치 최적화 코드 작성 및 기구 소형화
2026.08.15
완료

[배치 최적화] 플랫폼 위 운동기구 위치에 따라 차량의 무게중심이 달라지는 점을 고려해 배치 최적화 코드를 작성함. 플랫폼 경계와 간섭을 제한조건으로 두고, 운동기구 4개의 위치와 방향을 변경하며 가능한 배치를 탐색함. 각 운동기구의 추 이동 전·후 무게중심을 계산하여 전체 무게중심 높이와 수평방향 이동량이 최소가 되는 배치를 선정함. 이를 통해 운동 중 하중이 이동하더라도 차량의 기울기 변화가 과도하게 커지지 않도록 운동기구 배치를 결정함.

[기구 소형화] 실제 랫풀다운과 스미스머신의 크기와 중량을 기준으로 차량 스케일 1:16에 맞춰 운동기구를 소형화함. 길이는 1/16, 질량은 1/4096로 환산하여 랫풀다운의 기구 질량은 약 14 g, 이동추는 17 g, 이동거리는 약 38 mm 수준으로 설정함. 운동 동작은 소형 DC 기어드모터, Ø4 mm 드럼, 줄, 추를 이용해 구현하기로 함. 추의 상하 이동에 필요한 토크와 RPM을 계산하여 소형 모터로 구현 가능함을 확인하고, 상하 이동 구현을 위한 정·역회전을 모터드라이버를 이용해 구현하기로 함.

✓
Quest 9: 제어 방향 전환 및 물리 기반 제어 구조 설계
2026.08.22
완료

기존 초안은 IMU 특징 10개를 결정나무(깊이 3)에 넣어 PID 게인을 약·중·강 3단계 중 고르는 방식이었음. 이 방식은 PID가 기울기가 생긴 뒤에만 반응하는 구조라 게인을 바꿔도 지연이 남고, 1초 단위로 판단해 조건 변화를 최대 1초 늦게 반영하며, 학습 데이터가 모터 가진기 3조건뿐이라 제어를 켠 상태의 성능을 확인하기 어렵다는 한계를 확인함. 이에 게인을 바꾸지 않는 고정 게인 PID에 조향각과 속도로 기울기를 미리 계산해 보상하는 피드포워드를 더하고, 물리 공식이 틀리는 부분만 머신러닝이 보정하는 구조로 방향을 전환함. 롤 예측은 K × a_y(a_y = v²·tanδ/L)에 ML 보정값을 더하는 형태로 정함.

✓
Quest 10: 제어 코드 고도화 및 입력부 구현
2026.08.26
완료

아두이노 제어 코드를 센서 영점 보정, 가속도 보상, 상보필터, 피드포워드, PID, 서보 분배, 안전 기능 순으로 보강함. 가속도 보상은 선회 중 가속도계가 횡가속도를 기울기로 착각하는 오차(횡가속도 2 m/s²에서 약 11.5°)를 구심가속도와 종가속도 성분을 빼서 제거하는 기능이며, 시뮬레이션에서 보정 전 -1.79°였던 코너 구간 추정이 보정 후 -0.03°로 개선됨. PID는 자이로 각속도를 미분항에 쓰고 누적 오차 폭주를 방지하도록 했으며, 피드포워드에는 저역통과 필터, 출력 상한, 변화율 제한을 적용함. Roll·Pitch 제어량은 4개 서보에 분배하고, 센서 이상 시에는 서보를 중립으로 되돌리도록 함.

입력부: 엔코더 펄스 간격으로 차량 속도를 계산하고 속도 변화율로 종가속도를 구함. 조향 서보 신호의 펄스 폭을 읽어 조향각으로 환산하는 입력부를 추가함. 속도 입력의 정확도가 제어 성능에 직접 영향을 주는 것을 확인하고, 시리얼 명령으로 알려진 거리(3 m)를 차량을 밀어 이동시키면 속도 크기 보정 계수를 자동으로 계산해 적용하는 기능을 구현함. 바퀴 크기가 5~8% 달라도 보정 후 원래 성능이 회복됨을 시뮬레이션에서 확인함. 또한 제어 없이 센서값, 속도, 조향각을 CSV로 기록하는 데이터 수집 모드를 구현해, 이후 실제 주행 로그로 계수를 학습할 수 있게 함.

✓
Quest 11: 머신러닝 보정 모델 및 학습 파이프라인 구축
2026.09.04
완료

물리 공식의 예측 오차만 학습하는 보정 모델을 구축함. 속도, 조향각, 예상 횡가속도, 하중 4개를 입력으로 표준화, 다항 항 생성, 릿지 회귀를 거치는 다항 회귀 모델이며, 아두이노 연산 한계를 고려해 2차 다항(계수 15개)이 선택됨. 차수 1~3과 규제 세기 4단계를 조합한 후보 12개를 같은 조건의 데이터가 학습과 평가에 섞이지 않도록 구간 단위 교차검증으로 비교하고, 점수가 비슷하면 가장 단순한 모델을 고르는 1-표준오차 규칙을 적용함. 공식만 쓸 때보다 뚜렷하게 낫지 않으면 계수를 0으로 두어 ML이 꺼지고, 학습한 속도·조향 범위를 벗어나는 입력에서도 보정을 끄며 보정 크기에 ±2° 상한을 둠. 아두이노에서 계산한 값과 PC(scikit-learn) 예측이 2.6e-7° 이내로 일치함을 확인함.

학습 파이프라인: 변환 스크립트가 주행 로그에서 속도와 조향이 일정한 구간을 추출하고, 센서 영점 오차를 세션별로 분리한 뒤 K를 선형회귀로 구하고, ML 후보를 비교해 계수를 제어 코드에 자동으로 써넣도록 구성함. 개발 중 ML이 공식 오차가 아니라 센서 영점 오차를 학습하는 문제와 학습·사용 시 하중 입력 분포가 달라 직진 롤이 폭증하는 문제를 발견해, 직진 구간으로 영점 오차를 분리하고 개별 샘플로 학습하며 하중도 안전 범위에 포함하도록 수정함.

✓
Quest 12: 폐루프 시뮬레이션 검증 및 결과 정리
2026.09.13
완료

제어 코드를 한 줄도 바꾸지 않고 PC에서 그대로 실행하는 검증 환경을 만들고, 가상 차량(차체 기울기, IMU 센서, 서보 반응, 노면과 운동기구 추의 진동)에 연결해 제어 명령이 기울기에 반영되는 폐루프로 제어 OFF와 ON을 비교함. 사용자 시나리오, 원 모양 동선(21개 조건), 언더스티어 4.15 deg/g를 반영한 고속 구간 포함 동선, 다양한 주행 세션 6개(학습 5개, 평가 1개)로 학습용과 평가용을 분리해 검증함. 검증 중 선회 중 가속도계 오염, 센서 축 부호 오류, 속도 일정 판정 오류 등 오류 6건을 먼저 찾아 수정함.

성능: 원 모양 동선에서 롤 평균 기울기가 0.364°에서 0.058°로(84%), 피치가 0.066°에서 0.047°로(28%) 감소함. 선회 롤은 PID만 쓸 때 약 30% 줄었으나 피드포워드를 더하면 90% 이상(0.760° → 0.059°) 줄었고, 일정 가감속 구간의 피치는 77%(0.198° → 0.045°) 줄었음. 공식이 어긋나는 고속 구간(2.0 m/s)에서는 ML 보정이 롤을 0.075°에서 0.054°로 추가로 줄였고, 공식이 정확한 데이터에서는 ML이 스스로 꺼짐을 확인함.

✓
Quest 13: 최종 형상 모델링
2026.09.25
완료

실제 차량 조립성을 확인하기 위해 사용 예정인 서보모터와 RC카 쇼크업소버 형상을 Fusion에서 모델링함. 모델링한 서보모터와 쇼크업소버를 기준으로 서보모터 장착판과 플랫폼 형상을 수정하고, Fusion에서 실제 조립 상태로 배치하여 부품 간 간섭과 체결 위치를 확인함. 서보암과 쇼크업소버의 연결 위치, 서보모터 고정 위치, 서보모터 운동 범위, 플랫폼과 장착판의 결합 구조를 검토하여 3D 프린팅할 장착판과 플랫폼의 최종 설계안을 완성함. 운동기구는 소형 기어드모터, 드럼, 줄, 이동추를 이용한 구조로 소형화하여 모델링하고 플랫폼 위에 배치함. 이를 통해 운동기구의 탑재 가능 공간과 부품 간 간섭, 전체 공간 활용성을 확인함.

✓
Quest 14: 제어 시뮬레이션 영상 제작
2026.10.03
완료

완성된 차량 모델을 가상 주행 환경에 적용하여 사용자 시나리오 주행, 원형 주행, 고속구간이 포함된 주행 등 총 3개의 동선을 구성하고 시뮬레이션 하여 주행 중 자세 제어 성능을 확인함. 시뮬레이션 영상에서는 제어 전·후 차량의 Roll·Pitch 변화를 후면 및 측면에서 비교하고, 주행 중 기울기와 4개 서보모터의 작동각을 그래프로 함께 나타내어 제어 과정을 시각화함. 최종적으로 PID와 주행정보 기반 미리 보상, 머신러닝 잔차 보정을 적용한 제어 결과와 무게중심 저감 및 운동기구 배치 설계 내용을 통합하여 짐니어스의 전체 설계·제어 과정을 보여주 영상을 제작함.

최종 정리
최종 요약

■ 완성 소개

본 프로젝트에서는 이동 중 운동 공간의 안정화를 위한 축소형 피트니스 셔틀의 기구 설계와 자세 제어 시스템을 구현하였다. 기존 RC카의 조향·구동 구조를 활용하고, 서보모터 장착판과 운동기구 탑재 플랫폼을 설계하였다. 배터리는 양측 하부에 분할·대칭 배치하여 무게중심을 낮추도록 구성하였다.

제어 시스템은 MPU6050, Arduino Uno, 서보모터 4개로 구성하였다. 가속도와 자이로 데이터를 상보필터로 결합해 Roll·Pitch를 추정하고, 제어량을 각 서보에 분배하도록 구현하였다. 기본 Roll 제어의 센서·서보 연동은 실제 하드웨어에서 정상 작동을 확인하였다.

고도화된 제어기는 고정 게인 PID에 물리 모델 기반 피드포워드와 머신러닝 잔차 보정을 결합하였다. 해당 제어 소스를 수정 없이 PC에서 실행하고 가상 차량 모델과 연결하는 폐루프 검증 환경을 구축하였다. 아래의 정량적 제어 성능은 실차 측정값이 아닌 시뮬레이션 결과이다.

■ 주요 성과 및 특징

1. 무게중심을 고려한 플랫폼 및 운동기구 배치 설계

PETG 두께 3 mm를 기준으로 플랫폼 형상을 비교한 결과, 형상 변경에 따른 정적 무게중심 높이가 약 5.4% 감소하였다. 운동기구 배치 최적화에서는 플랫폼 경계와 기구 간 간섭을 제한조건으로 설정하고, 이동추의 위치 변화 전후 무게중심을 평가하여 무게중심 높이와 수평 이동량을 줄이는 배치를 선정하였다.

2. 주행 정보에 기반한 사전 보상 제어 구현

속도와 조향각으로 선회 시 횡가속도를 계산하고, 속도 변화율로 종가속도를 추정하여 Roll·Pitch 보상량을 산출하였다. 예측 가능한 기울어짐은 피드포워드로 보상하고, 남은 오차는 IMU 기반 PID로 보정하도록 구성하였다. 선회·가감속 성분을 가속도계 측정값에서 제거하는 보상 기능도 적용해 자세 추정의 오차를 줄였다.

3. 폐루프 시뮬레이션에서 기울기 감소 확인

21개 조건의 원형 주행 시나리오에서 PID와 피드포워드를 적용한 결과, Roll RMS는 0.364°에서 0.058°로 약 84%, Pitch RMS는 0.066°에서 0.047°로 약 28% 감소하였다. 학습에 사용하지 않은 평가 주행의 저·중속 선회 구간에서는 Roll RMS가 0.760°에서 0.059°로 약 92% 감소하였으며, 일정 가감속 구간의 Pitch RMS는 0.198°에서 0.045°로 약 77% 감소하였다.

4. 물리 모델의 오차만 보정하는 머신러닝 구현

속도, 조향각, 예상 횡가속도, 하중을 입력으로 사용하는 2차 다항 회귀 모델을 구현하였다. 언더스티어를 가정한 2.0 m/s 선회 구간에서는 머신러닝 보정으로 Roll RMS가 0.075°에서 0.054°로 추가 감소하였다. 물리 모델만으로 충분한 조건에서는 보정을 비활성화하고, 학습 범위를 벗어난 입력에서도 보정을 제한하도록 구성하였다. 아두이노 구현과 PC 모델의 계산 결과는 2.6×10⁻⁷° 이내로 일치하였다.

5. 제어 제한 및 이상 대응 기능 적용

적분 포화 방지, 피드포워드 출력 상한과 변화율 제한, 머신러닝 보정량 ±2° 제한을 적용하였다. 센서 이상 시에는 서보를 중립으로 복귀시키도록 구성하였다. 또한 속도 보정 기능과 CSV 기록 모드를 구현하여 실제 주행 데이터 수집과 후속 모델 학습이 가능하도록 하였다.

■ 향후 개선 계획

향후에는 설계한 장착판과 운동 플랫폼을 RC카에 통합하고, 직진·선회·가감속·요철 통과 조건에서 실물 주행 시험을 수행할 계획이다. 제어 OFF, PID, PID와 피드포워드, 머신러닝 보정 추가 조건을 비교하여 최대 기울기, RMS, 정착시간 및 서보 출력 변화량을 평가한다.

실물 서스펜션의 강성·감쇠와 서보의 응답 지연·데드밴드를 측정하여 시뮬레이션 모델을 보정하고, 가정한 순응 구조와 실제 링크 구조의 차이를 검토할 예정이다. 실제 주행 로그로 물리 모델 계수와 머신러닝 보정 모델을 재학습하여 시뮬레이션에서 확인한 효과의 재현성을 평가한다.

급조향 순간의 잔류 기울어짐과 요철에 의한 진동은 추가 개선 대상으로 설정한다. 운동기구의 반복 작동과 하중 이동을 포함한 시험을 통해 제어 성능과 기구 내구성을 함께 검증하고, 운용 가능한 속도·조향·하중 범위를 구체화할 계획이다.

프로젝트 소개

목표 및 제작 동기

본 프로젝트는 ‘운동 공간이 사람을 찾아간다면 어떨까?’라는 질문에서 출발하여, 이동형 피트니스 버스를 통해 새로운 운동 환경의 가능성을 탐험하는 것을 목표로 한다. 제한된 버스 내부에서 운동기구의 배치와 무게중심, 안정성을 분석하며 이동성과 운동 기능을 함께 갖춘 공간을 설계하고자 한다. 이 과정에서 익숙한 공간의 쓰임을 새롭게 발견하고, 장소의 제약으로 운동을 접하기 어려웠던 사람들에게 운동 기회를 제공할 수 있는 방법을 찾아가고자 한다.

프로젝트 컨셉

짐니어스는 이동 시간을 운동 시간으로 활용하는 자율주행 피트니스 셔틀이다. 주행 중에도 운동 공간을 안정적으로 유지하기 위해, 상황에 따라 구조 설계와 자세 제어 기술을 함께 적용한다.

1. 무거운 운동기구를 제한된 공간에 배치할 때
MATLAB 기반 배치 분석으로 운동기구 사이의 간섭, 무게중심, 하중에 따른 모멘트를 검토한다. 이를 바탕으로 공간 활용성과 안정성을 고려한 배치를 설계한다.

2. 커브를 돌거나 가속·제동하면서 기울어질 때
물리 모델 기반 피드포워드 제어를 적용한다. 속도와 조향각으로 선회 시 좌우 기울어짐을 예측하고, 가감속 정보로 앞뒤 기울어짐을 예측해 오차가 발생하기 전에 플랫폼 보상 명령을 전달한다.

3. 하중 조건이 달라져 예측값과 실제 움직임에 차이가 생길 때
머신러닝 잔차 보정을 적용한다. 물리 모델의 예측값과 실제 측정값의 차이를 학습해, 속도·조향각·하중 조건에 따른 추가 보정량을 계산한다.

4. 갑작스러운 요철이나 운동 중 하중 이동으로 흔들릴 때
IMU 센서로 플랫폼의 실제 기울기를 측정하고, PID 피드백 제어로 남은 오차를 보정한다. 센서 데이터는 필터링해 노이즈의 영향을 줄인다.

5. 계산한 보정량을 실제 움직임으로 구현할 때
아두이노·MCU와 서보모터를 연동해 플랫폼의 높이와 기울기를 조절한다. 스프링·댐퍼 구조는 충격과 진동을 완화하는 역할을 한다.

핵심 차별점은 물리 모델의 사전 예측, 머신러닝의 예측 오차 보정, PID의 실시간 피드백을 결합한다는 점이다. 축소형 차량에서 세 제어 구성의 최대 기울기, 기울기 RMS, 정착시간, 서보 출력 변화량을 비교해 각 기술의 효과를 검증하고자 한다.

주요 기능
  • IMU 기반 실시간 자세 측정 및 보정 — MPU6050의 가속도계와 자이로 센서로 플랫폼의 Roll과 Pitch를 실시간으로 측정한다. 상보필터로 자이로의 빠른 응답성과 가속도계의 안정성을 결합하고, 초기 영점 보정과 차량 가속도 보상으로 주행 중에도 실제 플랫폼 기울기를 안정적으로 추정한다. 특히 선회 중 가속도계가 횡가속도를 기울기로 착각하는 오염(횡가속도 2 m/s²에서 약 11.5° 오차)을 보상으로 제거한다.
  • PID 기반 플랫폼 수평 유지 제어 — 측정된 Roll·Pitch 기울기와 목표 수평각의 오차로 PID 제어를 수행하고, 4개의 서보모터를 구동해 플랫폼을 수평으로 유지한다. 자이로 각속도를 미분항에 활용하고 Anti-windup 및 출력 제한을 적용해 과도한 진동과 제어 입력의 누적을 방지한다. 다만 PID는 기울기가 생긴 뒤에만 반응해 선회 롤을 약 30%만 줄이므로(0.760° → 0.538°), 다음 기능의 사전 보상과 결합해 사용한다.
  • 차량 주행상태 기반 Feedforward 선제 보상 — 엔코더로 측정한 차량 속도와 조향 서보 신호로 추정한 조향각을 이용해 선회 시 횡가속도를 예측한다. 또한 차량 속도의 변화로부터 종가속도를 계산해, 선회와 가감속으로 발생할 Roll·Pitch 기울기를 미리 보상함으로써 기울기가 발생한 뒤 대응하는 피드백 제어의 지연을 보완한다. 시뮬레이션에서 선회 롤이 90% 이상(0.760° → 0.059°), 일정 가감속 구간의 피치가 77%(0.198° → 0.045°) 줄었다.
  • 물리 모델과 머신러닝을 결합한 보정 제어 — 차량의 속도, 조향각, 예상 횡가속도, 하중 상태를 입력으로, 물리 기반 Feedforward 모델의 예측 오차(잔차)만 2차 다항 회귀(계수 15개)로 추가 보정한다. 처음 보는 데이터로 점수를 확인해 공식보다 뚜렷하게 낫지 않으면 계수를 0으로 두어 머신러닝을 끄고, 학습 범위를 벗어난 입력에서도 보정을 제한하며 잔차 크기에 상한(±2°)을 적용한다. 공식이 어긋나는 고속 구간(2.0 m/s)에서 롤이 0.075°에서 0.054°로 28% 줄었다.
  • 4개 서보모터 독립 구동 및 안전 제어 — Roll과 Pitch 제어량을 Front Left, Front Right, Rear Left, Rear Right의 4개 서보모터에 분배해 좌우 및 전후 기울기를 동시에 제어한다. 서보 작동 범위와 변화율을 제한하고, 센서 이상이나 입력 신호 손실 시 안전한 상태로 전환해 기구부 손상과 비정상 동작을 방지한다.
  • 주행 데이터 수집 및 계수 자동 생성 파이프라인 — 제어를 수행하지 않고 센서값, 차량 속도, 조향각 등의 주행 데이터를 CSV 형태로 기록하는 데이터 수집 모드를 제공한다. 변환 스크립트가 수집한 로그에서 속도·조향이 일정한 구간을 뽑아 Feedforward 계수와 머신러닝 계수를 만들고 제어 코드에 자동 반영하며, 학습용과 평가용 주행을 분리해 처음 보는 주행에서 성능을 확인한다.
댓글 0개

아직 댓글이 없습니다. 첫 댓글을 남겨보세요!