임베디드 소프트웨어 경진대회 지능형 휴머노이드 부문 ESW 오픈 1위
국민대학교 KOBOT
이족보행 로봇을 이용한 지능형 로봇 골프 대회
영상처리 및 로봇의 움직임 제어에 관련된 SW 개발
역할 | 이름 | 전공 | 담당 |
---|---|---|---|
팀장 | 이세현 | 소프트웨어학부 | 알고리즘 개발 |
팀원 | 안지한 | 기계공학부 | 동작, 하드웨어 관리 |
팀원 | 안선영 | 인공지능학부 | 영상처리 |
팀원 | 차예찬 | 인공지능학부 | 영상처리, 아이디어 개발 |
팀원 | 김준호 | 전자공학부 | 공 인식 영상처리 |
OpenCV, Python, bas
- Actuator
Motion.py
: 휴머노이드 움직임 관리 파일
- Sensor
Camera.py
: 영상처리 파일
- Brain
Robot.py
: 미션에 필요한 변수를 관리하는 파일Robot_ball_distance.py
: 목 각도 별로 공과 로봇 사이 거리 계산
par3.py
: 파3 경기 인지, 판단, 제어par4.py
: 파4 경기 인지, 판단, 제어
├── Imports
├── 초기 설정
├── 무한 루프 시작
│ ├── 카메라에서 이미지 가져오기
│ ├── 이미지 프로세싱 (Camera 클래스 활용)
│ │ ├── 공 인식
│ │ └── 기타 객체 인식
│ ├── 상태 머신 (Finite State Machine)
│ │ ├── FindBall
│ │ ├── ApproachBall
│ │ ├── ShortCheck
│ │ ├── LongCheck
│ │ ├── ApproachGoal
│ │ ├── Shot
│ │ └── Ceremony
│ ├── 로봇 동작 (Motion 클래스 활용)
│ │ ├── FindBall
│ │ ├── ApproachBall
│ │ ├── ShortCheck
│ │ ├── LongCheck
│ │ ├── ApproachGoal
│ │ ├── Shot
│ │ └── Ceremony
│ ├── 현재 상태 및 목표 출력
│ └── 화면에 프레임 표시
└── 무한 루프 종료
로봇의 동작을 제어하기 위한 Python 클래스인 Motion
을 정의한다. 시리얼 통신을 통해 명령을 전송하고, 로봇의 움직임을 조작하는 기능이 구현되어 있다.
주요 메서드
TX_data_py3
: 데이터를 시리얼 통신으로 송신하는 메서드RX_data
: 시리얼 포트로부터 데이터를 수신하는 메서드getRx
: 데이터 수신 lock 상태를 반환하는 메서드wait_unlock
: lock이 해제(동작 완료)될 때까지 대기하는 메서드Receiving
: 백그라운드에서 계속해서 실행되는 데이터 수신 스레드- 그 외 로봇 동작 제어 메서드 (init, walk, step, crab, neckup, turn, shot 등)
카메라와 관련된 기능을 제공한다. 비디오 캡처와 영상처리 작업을 수행한다.
주요 기능
get_image
: 현재 프레임을 반환하는 메소드hsvDetect
: HSV 색 공간을 기반으로 골프공을 검출하는 메소드preprocess
: HSV 색 공간을 기반으로 홀과 화살표를 추출하는 메소드is_hole
: 홀의 중심을 반환하는 메소드holeDetect
: 거리와 밀도에 따라 홀을 검출하고 회전 각도를 계산longChecker
: 홀의 위치 및 궤적을 계산하여 샷이 가능한지 판별하는 메소드shortChecker
: 홀의 위치 및 공의 위치를 고려하여 홀 인을 판별하는 메소드
로봇의 상태, 미션, 골프 공과의 거리, shot 가능 여부 등을 관리한다.
주요 변수
curr_mission
: 로봇이 현재 수행 중인 미션(state)robot_ball_distance
: 로봇과 골프 공 간의 거리neck_pitch
: 로봇의 목의 상하 각도neck_yaw
: 로봇의 목의 좌우 각도is_hole
,is_ball
,is_arrow
: 객체 검출 여부를 나타내는 boolean 변수
로봇 목의 상하 각도와 카메라로 감지된 골프 공 bounding box 픽셀 값을 이용하여 공과 로봇 사이의 거리를 계산하는 메소드