아래 이미지를 클릭하면 유튜브 영상으로 이동합니다.
팀 이름: 배경근
팀원: 201901973 배경근, 202201658 박소윤
-
RCcar/
→ 최종 통합 버전. 수동/자동/긴급사출/LED 제어가 모두 포함됨.
→cpp/: 아두이노 제어 코드,python/: 라인트레이싱 영상처리 코드 -
auto_mode/
→ 자동 주행 실험용. ROI 영역 실험, 필터링 비교 등 테스트 중심 -
manual_mode/
→ 수동 조작 실험용. ESC 속도 감쇠 및 PWM LED 점등 테스트
- RCcar/: 수동제어와 LED 제어 코드
- auto_detection/: 영상 기반 라인 인식 초기 실험
- control/: 조향 및 속도 제어 실험, PlatformIO 기반
- 본 프로젝트는 처음에는 기존의 과제 레포에서 진행되었습니다.
- 하지만 새로운 기능 및 문서화를 위해 별도의 새로운 레포를 생성하였고, 커밋 이력은 초기화되었습니다.
- 기존 개발 히스토리와 구현 흐름이 궁금한 경우, 기존 레포지토리 링크(클릭!!)를 참고해 주세요.
-
수동 모드 (manual_mode)
→ 조종기의 채널 2, 4를 통해 RC카의 속도 및 조향을 직접 제어
→ PWM 신호를 아두이노에서 감쇠·보정하여 모터로 전달 -
자동 모드 (auto_mode)
→ Raspberry Pi + Picamera2를 통해 라인을 인식하고
→ 계산된 조향값을 시리얼로 아두이노에 전송하여 자동 주행 수행 -
공통 기능
→ CH7을 통한 모드 전환, CH6을 통한 긴급 사출 기능
→ 조향/후진 방향에 따른 LED 시각 피드백
→ Flask 기반 웹 인터페이스로 실시간 영상 확인
- Raspberry Pi 5와 Arduino UNO 기반 이중 시스템
- 수동/자동 모드 전환 및 긴급사출 기능 포함
- 시각적 피드백을 위한 LED 장착
- 조종기 CH7의 PWM 신호를 인터럽트로 감지하여 모드 전환
> 1500μs: 자동 모드<= 1500μs: 수동 모드- 예시: 조종기 스위치를 위로 당기면 자동 모드, 아래로 내리면 수동 모드로 전환됨
- 자동 모드 전체 흐름
- 아두이노 : 라즈베리파이로부터 조향값(서보모터 각도)을 수신, 수신한 데이터를 바탕으로 각도변경,속도조절,led 제어
- 지속적으로 시리얼 입력 확인, 개행문자('\n') 단위로 읽어 데이터 수신 및 정수형으로 변환
- 데이터를 통해 -50(좌측) ~ 50(우측) 서보모터를 회전
- 급격한 방향전환이 이루어지는 경우( 조향값이 -50 ~ -30 , 30 ~ 50) 속도를 낮춤
- 방향전환이 있는경우 (조향값이 -50 ~ -43, 7~50) 각 led on/off
- 라즈베리파이 : 카메라 제어, 로컬서버에서 실시간 화면출력, 라인 위치를 통해 계산된 조향값을 송신
- picamera2로 카메라 객체를 생성해 라즈베리파이에 연결된 카메라 제어
- Flask서버를 통해 원격으로 처리화면 송출
- generate 함수에서 영상 캡쳐 및 라인 디텍션,조향값 계산을 실시하여 지속적으로 시리얼 통신, 비디오 스트리밍
- 아두이노 : 라즈베리파이로부터 조향값(서보모터 각도)을 수신, 수신한 데이터를 바탕으로 각도변경,속도조절,led 제어
- 영상 처리: Picamera2 + OpenCV 사용
- 카메라 설정:
- size (640, 480)
- framerate : 30
- Brightness : -0.5 (밝기를 어둡게해 equalizeHist 처리를 극명하게 합니다.)
- AeEnable: false : (밝기 설정을 위해 자동노출설정을 끕니다.)
- ROI 설정:
- x1영역 (510 ~ 570)
- x2영역 (190 ~ 250)
- 전처리 과정:
| 기본 | 카메라 세팅 | 히스토그램 평활화 | 모폴로지 Opening 연산 (30*10) |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| 모폴로지 Opening 연산 (10*30) | 가우시안 블러 | 이진화 |
|---|---|---|
![]() |
![]() |
![]() |
equalizeHist: 히스토그램 평활화morphologyEx: 노이즈 제거GaussianBlur: 블러링threshold: 밝기 기반 이진화
- 아두이노 제어:
90 ± steer_val로 서보 모터 제어- 조향이 클 경우 저속 회전, 작을 경우 고속 직진
- 방향에 따라 LED 점등 (Red: 좌, Blue: 우)
- CH1, CH2의 PWM 입력을
pulseIn()으로 수신 - 속도: 1500μs 기준으로 감쇠 비율(1/5) 적용
- 조향:
map()을 사용하여 서보 각도 40~140도로 변환 - 후진(1450μs 이하) 시 Red/Blue LED 동시 점등
- 좌/우 회전 시 각 방향에 맞는 LED 점등
- CH6 신호를 인터럽트로 감지하여
> 1500μs: 서보를 180도로 회전시켜 구조물 사출<= 1500μs: 0도로 복귀
/dev/ttyACM*포트를 자동 탐색 후 연결- 라즈베리파이에서 연산된 각도를 33.3333ms(30frame) 마다 9600 buad rate로 아두이노에 전송
-50~+50\n형태의 문자열로 조향값 전송- 연결 예외 발생 시 자동 재시도
/video_feed경로를 통해 MJPEG 스트리밍 제공- 영상 프레임을 JPEG로 압축 후 실시간 전송
- 자동 주행 상태를 웹에서 시각적으로 확인 가능
| 이름 | 역할 |
|---|---|
| 배경근 | 자동 주행 영상 처리 및 각도변환, 시리얼 통신, 웹 스트리밍 |
| 박소윤 | 수동/자동 조작, 핀 구성, LED 제어, 긴급 사출 처리 |
| 연결 대상 | 수신기 CH | 아두이노 핀 | 설명 |
|---|---|---|---|
| 속도 입력 | CH2 | A0 | PWM 입력 |
| 조향 입력 | CH4 | A1 | PWM 입력 |
| 모드 전환 | CH7 | D2 | PCINT 인터럽트 |
| 긴급 사출 | CH6 | D4 | PCINT 인터럽트 |
| 속도 출력 | - | D9 | ESC 출력 |
| 조향 출력 | - | D6 | 서보모터 제어 |
| 사출 서보 | - | D10 | 구조물 작동 |
| LED 좌회전 | - | D3 | 빨간불 |
| LED 우회전 | - | D5 | 파란불 |
| 공통 전원 | - | 5V | 서보/ESC 전원 |
| 공통 GND | - | GND | 모든 회로 GND |
- RC 카: 링크
- 수신기 (R9DS): 링크
- 조종기 (AT9): 링크
- Raspberry Pi 5 + Picamera2 (IMX100)
- Arduino UNO (C++)
- Fusion 360 / Cura: 사출 장치 모델링 및 3D 출력
- 이중 모드: 수동/자동 모드 전환을 간단한 조종기 조작으로 구현
- 직관적 조작: 수동 모드에서 조이스틱 조작만으로 직관적 주행 가능
- AI 라인 추종: 자동 모드에서 실시간 영상 처리 기반으로 정밀한 라인 추적
- 비주얼 피드백: 웹 인터페이스를 통한 현재 상황 실시간 확인 가능
- 상태별 LED 피드백: 주행 방향에 따라 LED 피드백으로 안전성 강화
- 긴급 사출: 긴급 상황 대비한 3D 프린팅 기반 물리적 구조물 구현
- 일관성 유지: 시리얼 통신 기반의 라즈베리파이-아두이노 연동으로 하드웨어 제어 일관성 유지
- Raspberry Pi → Flask 웹서버로 카메라 영상 확인
- Arduino → 수신기/조종기/RC카 PWM 연결로 수동 주행 구현
- Python: Picamera2 기반 ROI 설정, PID 사용해서 line detection
- C++: 시리얼 조향값 수신 → 속도 고정 주행
- C++: 수동 모드 조향 PWM 제어 추가
- C++: 모든 모드에 LED 제어 구현
- Python: 영상 하단 및 상단 분할, 가중치 기반 steering 연산
- C++: PCINT로 모드 전환/긴급 사출 처리
- Python: 그림자/빛 처리 강화
(Picamera2 세팅, 전처리 파라미터 조정, 컨투어 필터링 강화)
- 모든 모드 및 기능 통합 완료
- 안정성 개선 및 테스트 완료
-
PWM 함수 오용 → ESC 3대 고장
PWM 제어 시
analogWrite()를 잘못 사용하여 RC카 ESC가 총 3대 고장남.
analogWrite()는 서보/ESC용이 아닌 일반 PWM용 함수로, RC 제어에는writeMicroseconds()사용이 필수임을 깨달음. -
조종기 배터리 장착 실수 → 폭발 사고 발생
조종기 건전지 8개 중 1개를 반대로 끼워 배터리가 터지는 사고 발생.
전원 연결 전 극성 확인의 중요성을 직접 체감함. -
조종기 ↔ RC카 전원 순서 오류 → 주행 방향 반전
조종기와 RC카의 전원 ON 순서에 따라 주행 방향이 반대로 설정되는 현상 발생.
정확한 시퀀스에 따른 장비 초기화의 중요성을 학습함. -
밝기/그림자 영향으로 라인 인식 불량 → 영상 처리 개선
자동 주행 시 밝기 변화와 그림자에 따라 라인을 탐지하지 못하는 문제 발생.
이를 해결하기 위해 카메라 설정(노출, 밝기 등)을 조정하고,
equalizeHist,morphologyEx,GaussianBlur,threshold,
컨투어 필터링 등 다양한 전처리 기법을 적용하여 극복함.



















