건국대학교 자율주행 자작차 동아리 팀카이(Team KAI) 의 ROS 기반 자율주행 시스템입니다. 콘(cone) 기반 트랙에서 LiDAR, 카메라, GPS, IMU를 활용하여 자율주행을 수행합니다.
┌─────────────┐ ┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Sensors │ │ Perception │ │ Planning │ │ Control │
│ │ │ │ │ │ │ │
│ LiDAR ──────────▶ Cone Detection ──────▶ Cone Sorting ──────────▶ CAN Bridge (조향) │
│ Camera ─────────▶ Traffic Light ──────▶ Path Planning │ │ │
│ │ │ YOLO Detection │ │ Stanley/PurePursuit────▶ ESP32 (속도/제동)│
│ GPS ────────────▶ │ │ Speed Planning │ │ │
│ IMU ────────────▶ │ │ │ │ E-Stop 안전장치 │
│ Encoder ─────────────────────────────────────────────────────────▶ 속도 피드백 │
└─────────────┘ └──────────────────┘ └──────────────────┘ └──────────────────┘
TeamKAI/
├── Sources/
│ ├── KAI_Control/ # 차량 하드웨어 제어
│ │ ├── control_setup/ # CAN/ROS 초기화 스크립트
│ │ ├── integrated_controller/ # ESP32 종방향 제어기 (PID, 제동, 모드전환)
│ │ └── ros_kai_ws/src/ # ROS 패키지
│ │ ├── can_bridge_pkg/ # CAN 브릿지 (조향 모터 통신)
│ │ └── custom_msg_pkg/ # 커스텀 메시지 + 테스트 스크립트
│ │
│ ├── KAI_Perception/ # 센서 인지 모듈
│ │ ├── cone_detection/ # LiDAR 콘 검출 (RANSAC + 클러스터링)
│ │ ├── camera_traffic/ # 카메라 신호등 검출 (HSV)
│ │ ├── camera_acc/ # 카메라 차선 검출 (ACC 모드)
│ │ ├── yolo_cones/ # YOLO 콘 검출 (YOLOv5/v8)
│ │ └── traffic_signal/ # 신호등 인식
│ │
│ └── KAI_Planning/ # 경로 계획 및 차량 제어
│ ├── test_/ # 메인 계획 노드 (모드별 주행 로직)
│ │ └── src/
│ │ ├── cone_sorting/ # 콘 정렬 알고리즘
│ │ ├── path_planning/ # 경로 생성 (Bezier, 보간)
│ │ ├── car_control/ # 조향 제어 (Stanley, Pure Pursuit)
│ │ ├── path_follower/ # 속도 계획 (곡률 기반)
│ │ └── main_calculation/ # 수학 유틸리티
│ ├── acc_mode_new/ # ACC 모드 계획
│ └── coordinate_transform/ # 좌표 변환 모듈
│
├── References/ # AgOpenGPS 하드웨어 레퍼런스 (.gitignore)
├── docs/ # 발표자료
└── CMakeLists.txt # catkin 워크스페이스 설정
- Ubuntu 20.04
- ROS Noetic
- CMake 3.0.2+
roscpp rospy std_msgs sensor_msgs geometry_msgs nav_msgs
tf2 tf2_ros rosserial_python
pcl_ros pcl_conversions
cv_bridge image_transport
- PCL (Point Cloud Library) - LiDAR 포인트 클라우드 처리
- OpenCV - 카메라 영상처리, 신호등/차선 검출
- YOLOv5/v8 (PyTorch) - 콘 객체 검출
- SocketCAN - CAN 버스 통신
- LiDAR: Ouster OS 센서
- Camera: USB 카메라
- GPS: u-blox F9P (RTK)
- IMU: BNO08x 시리즈
- MCU: ESP32 (종방향 제어)
- 조향 모터: CAN 버스 제어
# 1. 워크스페이스 설정
mkdir -p ~/catkin_ws/src
cp -r Sources/KAI_Control/ros_kai_ws/src/* ~/catkin_ws/src/
cp -r Sources/KAI_Perception/* ~/catkin_ws/src/
cp -r Sources/KAI_Planning/* ~/catkin_ws/src/
# 2. 의존성 설치
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src -r -y
# 3. 빌드
catkin_make
source devel/setup.bash# CAN 포트 → CAN 브릿지 → ROS Serial 순서대로 실행
cd Sources/KAI_Control/control_setup/
./1_open_can_port.sh
./2_activate_can_bridge.sh
./3_activate_rosserial.sh# 코스 모드 (콘 트랙 자율주행)
roslaunch test course_mode_launcher.launch
# ACC 모드 (적응형 순항 제어)
roslaunch test acc_mode_launcher.launch
# 조향 테스트 모드
roslaunch test steer_mode_launcher.launch
# E-Stop 테스트 모드
roslaunch test estop_mode_launcher.launch
# ACC + 정지 모드
roslaunch test acc_stop_mode_launcher.launch| 메시지 | 필드 | 설명 |
|---|---|---|
ControlMsg |
header, target_speed (float32), target_angle (float32) |
계획 → 제어 명령 |
FeedbackMsg |
current_speed (float32), is_estop_activated (bool) |
제어 → 피드백 |
TimeFloat64 |
header, data (Float32MultiArray) |
콘 좌표 배열 |
TrafficMsg |
is_green (bool) |
신호등 상태 |
AccMsg |
header, is_drive (bool), ref_steering (float32) |
ACC 차선 정보 |
BoundingBoxes |
bounding_boxes[] |
YOLO 검출 결과 |
/sorted_cones ← cone_detection (콘 좌표)
/traffic_light_status ← camera_traffic (신호등)
/driving_state ← camera_acc (차선 검출)
/control_msg ← test_node (조향/속도 명령)
/feedback_msg ← ESP32/rosserial (속도/E-Stop 피드백)
| 파라미터 | 값 | 설명 |
|---|---|---|
| 최대 속도 | 3.0 km/h | 안전 제한 속도 |
| 제어 주기 | 10 Hz | 메인 루프 주기 |
| 콘 검출 거리 | 0 ~ 20 m | LiDAR 검출 범위 |
| 콘 높이 필터 | 0.2 ~ 0.85 m | 지면 기준 필터 |
| 클러스터 허용치 | 0.25 m | 유클리디안 클러스터링 |
| 조향 범위 | -45 ~ +45 deg | 스티어링 각도 제한 |
| 휠베이스 | 1.35 m | 차량 제원 |
| PID (종방향) | Kp=90, Ki=0.025, Kd=20 | 속도 제어 게인 |
| 메시지 타임아웃 | 1000 ms | 안전 정지 트리거 |
각 서브시스템의 상세 문서는 아래 링크를 참고하세요:
- KAI_Control - 하드웨어 제어 (CAN, ESP32, 모드 전환)
- KAI_Perception - 센서 인지 (LiDAR, 카메라, YOLO)
- KAI_Planning - 경로 계획 (콘 정렬, 경로 생성, 차량 제어)
Team KAI - 건국대학교 자율주행 자작차 동아리