저는 남들과 달리 수능을보고 국민대학교에 들어온 케이스가 아닙니다. 원래 강원도 상지대학교 컴퓨터공학부에 입학하여 평화로운 삶을 보내고 있었습니다. 그러다가 군대를 다녀오고 문득 드는생각이 내가 과연 인서울이아닌 지방대학을 나와서 먹고살수 있을까라는 의문을 갖게되었습니다. 같은 학교다니는 주변친구들은 아직 진로에대해 크게 생각이 없어보였고 여기 학교에서는 성적도 좋아서 장학금을 받고 다녔기때문에 "괜찮아, 괜찮아"라고 스스로를 위안하기도 했습니다. 하지만 뉴스를 보고 취업률이 낮다는 말을듣고 이대론 도저히 안되겠다는 생각에 바로 편입을 준비하기 시작했습니다. 그당시 나이 24이었는데 주변사람들이 "너가 편입할수 있겠냐" , "엄청 어렵다더라" 라는 말을 많이 했습니다. 그래도 저는 이미 마음이 굳힌 상태였고 이번이 부모님이 나에게주신 큰 기회다 라고 생각하고 죽도록 공부만 했습니다. 처음에 점수도 50점이하로 나오고 문제도 잘 안풀려서 많이 힘들었지만 뭔가 포기하고 싶은 생각은 들지 않았습니다. 모의고사 성적이 낮으면 바로 열람실에가서 다시 공부하고 스스로 말했습니다 "실제 시험때 잘보자"라고 되뇌이고 또 되뇌이면서 공부기계처럼 지냈습니다. 결국 시험이 다가오고 시험을 보게되었습니다. 하늘이 절 도우신걸까요??? 정말 많은 대학교에 붙었고 저희 부모님도 너무 기뻐하셨습니다. 사실 제가 이렇게 할 수 있었던 이유는 제가 원해서도 있지만 부모님을 실망시키지 않게 하기 위함이 컸습니다. 학원다니면서 성적에 대해 물어보시지도않고 할수있다고 용기만 복돋아주셔서 버틸수 있었던것 같습니다.길게 살아온 인생은 아니지만 제가 무언가를 정말 열심히 끈질기게 포기하지 않고 1년동안 편입공부를 했다는거 자체가 정말 대단하고 제 스스로가 뿌듯하다고 생각이듭니다.
국민대 컴퓨터공학부에 들어와서 1년동안 코딩을 하지않아서 과제나 학습에 많은 어려움이 있었습니다. 솔직히 기존 재학생들에게 뒤쳐질걸 예상하고 나만의 공부를 하기로 마음먹고 전 대학에 사용했던 c/c++ , java를 차근히 공부해나갔습니다. 물론 3학년 1학기 학점은 많이 낮았으나 여름방학때 많이 끌어올려 3학년 2학기때는 그전보다 높은 성적을 거두었습니다. 학교에서 가장 큰 배움은 구글링이라는것을 배웠는데 재학생들에게 물어보니 구글링을 통해 정보를 수집하고 그것을 자기 입맛에 바꾸는 실력이 중요하다고 하였습니다. 바로 실전에 옮겨 저만의 코딩을 하였고 github라는것을 처음 사용해 보았으며 알고리즘을 푸는 코딩사이트도 소개받아 코딩실력을 늘려갈 수 있게 되었습니다.
학교생활하면서 처음으로 캡스톤 프로젝트라는 것을 하였습니다. 제가 팀장을 맡게 되어 팀원을 꾸려가게 되었는데 처음에 모르는 사람도 팀원으로 끼게되서 애를먹게되었습니다. 왜냐하면 친하지도 않는데 이거시키고 저거시키고 말하기가 부담스러워서 처음엔 제가 다 하게되다가 이상태로는 진전이 없을것 같아 팀원들을 불러모아 뭐를하라고 지정해주고 프로젝트를 진행시켰습니다. 다행이도 팀원들을 제말을 잘 따라주었습니다. 팀원들이 따라준 이유는 제가 놀고있지 않고 열심히 하는 모습이 보여서라고 생각이듭니다. 물론 팀원들과는 금방 친해졌습니다. 제가 사교성이 좋은 편이라서 다들 웃는 분위기에서 진행을 할 수 있었습니다.
사실 캡스톤이라는것이 이런것인줄 몰랐습니다... 처음부터 끝까지 내가 하나하나 찾아보고 무에서 유를 창조하는 느낌이 컸습니다. 사용해보지 않는 기술들을 사용하고 학교에서 배운 개념을 실제로 적용해보고 하나의 문제로 몇일간 고생하고 하나가 해결되면 다른하나에서 막히고... 이러면서 지긋지긋한 프로젝트를 했습니다. 지금 마무리가 잘되서 "아 ! 우리가 그동안 캡스톤을 하면서 배운게 많구나 "라는것을 깨달았지 진행과정중에는 서로 할수있다고 말하면서 힘든 시간을 보냈던것 같습니다.
캡스톤 과목에서 오목고라는 프로젝트를 통해서 많은것을 배웠습니다.
먼저 오목고에 대해서 간단히 설명을 드리자면 ev3와 lego를 통해서 오목을 두는 기계를 만들었습니다.
먼저 겨울방학 1~3월까지는 c++을 이용하여 opencv를 활용하였는데요 , 실시간으로 카메라를 돌리면서 바둑돌을 인식하는 것부터 구현하였습니다. 바둑돌은 인식하여 그 해당 좌표값을 뽑아내어야 했기때문이죠. 처음에 바둑돌을 인식하는 것까진 성공했으나 오목을 두다보면 여러개의 돌을 두게되는데 그 경우에 여러개의 돌을 인식하는 문제가 생겼습니다. 여러개의 돌을 인식하게 되면 여러개의 좌표가 나와서 컴퓨터 속도가 느려지고 어떤 돌은 인식하지 못하는 문제점이 발생하였습니다. 그래서 차영상이라는 기법을 사용해서 마지막돌만 인식하도록 하여 문제를 해결하게되었습니다.
이문제를 해결한후 학기초에는 알고리즘을 공부하였습니다. opencv에서 받아온 좌표값을 알고리즘을 통해서 Ai가 둘 돌의 좌표값을 뽑아내게 하였습니다. 그래서 가중치 알고리즘이라는 것을 사용하였는데 가중치 알고리즘이란 돌의 개수에 따라서 값을 매깁니다 예를들어 가로로 흰돌이 2개놓여져있으면 그 흰돌에 인접한 양쪽에는 가중치를 2를 두는것이고 돌이 3개일경우에는 가중치를 3으로 둬서 컴퓨터가 높은 가중치에 돌을 둘수 있게 하였습니다. 이런 가중치를 세밀하게 조절하여 컴퓨터가 공격을 우선시 할지 방어를 우선시 할지를 컨트롤 하게 하였습니다. 여기서 추가적으로 mini-max알고리즘을 더하여 한 수, 두 수 앞을 내다보게 만들었는데 가중치 알고리즘이 하드코딩으로 되어있어서 depth를 2 이상으로하면 시간이 오래걸려 사용할 수 없었습니다 . 그래서 depth는 1로만 사용했습니다.
ev3와 오목프로그램의 통신이 있어야 ev3가 해당 좌표에 돌을 둘수 있는데 이를 위해 tcp통신을 사용했습니다. ev3는 python으로 코딩이 되어있고 저희 오목프로그램은 java로 되어있습니다. 먼저 이런생각을 했습니다 java를 client로 하고 python을 server라 하여 java오목프로그램에서의 좌표를 server인 python에게 넘겨주게 코딩을 하였습니다.
좌표를 받은 ev3는 오목판의 해당좌표에 돌을 두게 되었습니다.
캡스톤과 회사의 연계로 인턴을 할사람은 하고 하지 말라는 교수님의 설명을듣고 인턴을 해보자라는 생각으로 방학동안 2개월간 회사에서 인턴생활을 하였습니다. 이 회사는 ev3와 레고를 주로 다루는 회사입니다. 인턴을 하면서 대표님이 내주신 과제를 하고 모르면 질문하여 충고를 받는식의 프로젝트를 하였습니다. 우선 대표님이 내주신 과제는 opencv 와 ev3간의 통신 그리고 알고리즘의 해결이었습니다.
사람과 로봇이 오목을 두는 로봇기계로서 opencv를 통하여 바둑돌의 좌표를 인식한후 그 좌표를 알고리즘에 넣어 AI둘 최적의 좌표를 뽑아낸다. 그후 그 좌표를 tcp통신을 하여 ev3에 넘겨주어 ev3가 받은 좌표에 돌을 두게 한다.
연결된 Behance 계정이 없습니다.
연결된 Dribbble 계정이 없습니다.
연결된 GitHub 계정이 없습니다.
연결된 Bitbucket 계정이 없습니다.