본문 바로가기

대회

2023 임베디드 소프트웨어 경진대회 소감

 

 제21회 임베디드 소프트웨어 경진대회 지능형 휴머노이드 부분에서 좋은 성적인 최우수상을 수상했다. 처음 경험한 대회였기 때문에 공부 외적으로 많은 걸 느낄 수 있었다.

 

 이번 대회를 신청하게 된 계기가 로봇공학과지만 휴머노이드를 한 번도 해본 적이 없어서 궁금했고, 최근 동적제어가 굉장히 핫하다는데 모션제어조차 어떤 건지 잘 모르겠어서 해보게 되었다. 대회내용을 다시 정리하는 것을 진짜 얼마 전에 끝냈기 때문에, 이번 대회를 통해 느꼈던 것을 정리해보고자 한다. 소스 코드나 수식 계산의 원리 같은 거는 github에 어느 정도 정리가 끝났다고 생각해서 그 내용 + 내가 느꼈던 것을 정리하고자 한다.

 

https://github.com/dy0221/2023ESWContest_humanoid_2005

 

GitHub - dy0221/2023ESWContest_humanoid_2005

Contribute to dy0221/2023ESWContest_humanoid_2005 development by creating an account on GitHub.

github.com

 

 대회에 대하여 간략하게 정리를 해보자면, 아래 휴머노이드를 사용하여 골프 파3, 파4 홀을 성공하는 미션이다.

휴머노이드 스펙

 

경기장 도안

 

개발 방향

 가장 처음 말하고 싶은 점은 어떻게 개발을 진행해야 하는가?라는 점이다. 처음 대회를 시작했을 때, 그래도 로봇공학과 특성상 팀 프로젝트를 많이 진행하고, 비전에 대해 관심이 조금 있어서 지금 까지 와 비슷하지 않을까?라는 생각을 했었다. 하지만, 이런 대회가 처음이기도 하고, 휴머노이드도 처음 만져 보는 것이라 막상 하려고 하니 '진짜 어떻게 시작하지?'라는 생각이 너무 많이 들었다.

 

 어떤 식으로 구현을 해야 할지 많은 생각을 하였지만 로봇이 공을 치기 위해서는 실제 사람처럼 공, 홀, 로봇이 일직선에 위치하는 것이 아닌 'ㄱ'자 형태가 되어야 하는데, 이를 어떤 방식으로 치는 자세를 만들어야 할지 감이 오지 않아 막막했다. 지금 생각해 보면 너무 이 문제에 매몰되어 있었다고 생각한다. 이를 해결한 방법은 단순한데, 차근차근 개발해서 해결했다. 공을 따라가는 거, 그다음에는 처음부터 ㄱ자로 놓고 걸어가서 쳐보기 등 하나하나 작은 단위의 기능부터 구현을 하다 보니 생각만 했을 때는 몰랐던 문제를 알게 되고, 좋은 아이디어가 나오게 되었다. 공을 치기 위해 홀과 공에 따라 로봇을 보정하다 보니 굳이 ㄱ자로 로봇이 놓아지지 않아도 알아서 보정하다가 된다는 것을 알게 되었다. 또한 로봇을 움직이다 보니 공에 접근했을 때, 공에 따라 동심원들 돌면서 대충 ㄱ자 언저리에 놓으면 된다는 생각까지 나오게 되었다. 이런 경험을 통해 생각만 하는 것이 아닌 실제로 내가 구현을 해보고, 어떤 제품 혹은 기능을 제어해야 한다면 실제로 그것에 대해 잘 알고 친숙해지는 것이 중요하다고 느꼈다.

 

 하지만  이런 방식은 작은 거에서 하나하나 기능을 추가하는 형태이다 보니, 전체적인 부분을 고려하지 못한다고 느꼈다. 이렇게 그때그때 기능을 추가하다 보니 필요한 기능이지만 이를 구현하려면 다 갈아 업어야 하는 상황이 생겼다. 따라서 전체적인 알고리즘을 생각해서 나누고 전체적인 코드를 다시 작성하는 작업을 진행하였고, 나는 이 것 또한 중요하다고 느꼈다. 현재 우리가 만든 코드는 잘 짰다고는 할 수 없지만, 이 프로젝트뿐만 아니라 점점 나아지고 있다고 생각하는데, 전체적인 작동 방식에서 공을 찾고, 공을 따라가고, 칠 수 있게 보정을 하거나 등등의 필요한 case를 나누었고, 각 부분에 중복되는 기능들은 묶으려고 노력했다. 그렇게 진행을 하다 보니, 각 기능에서 필요한 부분들을 고치기 편했고, 나중에 시간을 줄이기 위해 로봇이 달리면서 cv작업이 진행되거나, 넘어졌을 때, 다시 작동하는 기능 등 다양한 기능들을 추가하기도 편했다고 느꼈다. 

 

 지금 생각해 보면, 처음에 전체적인 알고리즘을 구상하려고 하였지만 실패해서 작은 단위의 기능들을 구현하다 보니 전체적인 알고리즘이 떠올라서 다시 작성하게 되는 과정을 격었다고 생각한다. 이 두 가지 과정 모두 처음 개발을 진행할 때, 반드시 필요한 과정이라고 생각한다. 하지만 처음 대회를 시작할 때, 이런 과정들을 의식하지 못하고 그냥 하려다 보니 많이 삽을 팠다고 생각한다. 그 과정들이 도움이 되지 않았던 것은 아니지만, 현재 지금 내가 무엇을 하고 있고, 어디가 막혀있고, 무엇이 필요한지 생각을 많이 했더라면 조금 더 빠르게 개발이 진행이 되었을 것이라 생각한다. 이런 과정을 잘할 줄 아는 사람이 개발을 잘한다고 생각했고, 다음번에 프로젝트를 진행할 때, 조금 더 체계적으로 잘할 수 있을 것이라 느꼈다. 

 

 결론은 조금 허무할 수도 있는데, 프로젝트를 진행할 때, 실제 구현해 보는 것과 어떤 방식으로 구현할지 생각하는 두 가지 과정이 적절하게 이뤄지는 것이 중요하다고 느꼈다.   

 

개발일정

 그다음 이야기는 개발일정에 관한 이야기이다. 이거는 위와 조금 겹치는 이야기인데, 정확한 일정을 정하고 지키는 것이 중요하다고 느꼈다. 사실 대회가 진행되는 동안 팀원들과 정말 열심히 토의하고 개발하고 밤도 새우면서 열심히 해서 너무 뿌듯하다고 느꼈다. 하지만 아쉬웠던 점은 방학 동안 여러 가지 방법으로 진행을 하면서 삽도 파면서 시간을 조금 허비했다는 느낌이 들어서 아쉬웠다. 그 시간들이 도움이 되지 않았나?라고는 할 수 없지만 위에 말한 거처럼 적절하게 개발 방향이 처음부터 설정되어 진행되었다면 조금 더 좋은 코드, 좋은 알고리즘을 만들 수 있을 것 같아 그 점이 아쉬웠다. 그래서 개발 일정을 자세하게 설정하고 어떤 개발을 해야 하고, 어떻게 해야 하는지 잘 안다면 좋은 결과를 만들 수 있는 프로젝트를 할 수 있을 것이라고 느꼈다.

 

내가 느낀 개발이란

github에 올린 수식들

 

 위에 사진들은 이번에 대회에 사용한 수식들이다. 단안 카메라에서 물체의 거리들을 측정하고, 우리 프로젝트에 맞게 다시 거리를 변환하는 등의 수식이 사용되었다. 1학년 때는 프로젝트에서 그냥 linetracing 코드를 작성하거나, 모터 움직이기 등등 알고리즘을 구상하여 코드를 작성하기만 하면 끝났다. 하지만 2학년 1학기에 했던 odometry도 그렇고 이번에 사용한 수식도 그렇고 사실 코드로 쓰기만 한다면 몇 줄 안 되는 코드이다. 하지만 이를 구상하기 위해서는 많은 생각과 아이디어가 필요하다. 특히 마지막 사진 2장은 팀원들과 저녁 늦게 고심했던 기억이 있는데, 최근 다시 수식들을 점검하기 위해 쭉 보면서 이제는 알고 보는 입장으로 써, 굉장히 쉽다고 느꼈지만, 그때는 이 것을 떠올리는 것이 굉장히 어렵다고 느꼈다. 사람들이 이론이 굉장히 중요하다고 말하는데, 이를 직접적으로 느낄 수 있는 경험이었다고 생각하고. 앞으로 어떤 공부를 해야 하고 어떤 경험이 필요한지 생각해 볼 수 있었다.