본문 바로가기

🇬🇧 영국 유학/Manchester (2022-25)

7. 해커톤 (Hackathon) - 파이썬 웹스크래퍼

안녕하세요, 귀국 후 정리를 좀 하고 이제 다시 글을 써보려고 합니다. 이번에는 학기 중에 있었던 해커톤 (Hackathon)에 대해서 글을 써보려고 합니다. 감사합니다.


I. 해커톤 (Hackathon)?

Hackathon Ticket

Hackathon이란, 해커 (Hacker)와 마라톤 (Marathon)의 합성어로, 기획, 개발, 그리고 디자인 세 가지 항목을 팀을 이루어 주어진 시간 동안 문제를 해결하는 일종의 대회다 (참고로 해커톤과 해커봇은 사실상 같은 말이라고 한다). 내가 참가했던 해커톤을 예로 들자면, 아침 11시에 도착하자 어떤 로봇을 만들어야 하는지에 대한 주제를 알려주고, 24시간 동안 공대 건물에서 완성을 해야 했다.

주최는 Robotics Society에서 했고, 참가비는 0원이었다. 약 한 달 전즈음에 메일로 공지가 되어 같은 과 아는 사람들이 같이 하자고 추천해서 비록 1학년이라 아는 게 별로 없었지만 경험 삼아 참가해 보기로 했다.

II. BodgeBot Vs. MONA Mayhem

11시에 모여, 약 한 시간 뒤에 공개했던 24시간 내 해결해야할 과제는 3가지로 분류되었고 한 가지를 선택해야 했다. BodgeBot, MONA Mayhem, 그리고 정말 핫이슈였던 ChatGPT 만들기였다. 사실 ChatGPT는 개인 과제라, 4명의 팀을 꾸리지 못한 사람들을 위한 과제였기 때문에 고려하지 않았다. 그럼 BodgeBot과 MONA Mayhem은 무엇일까?

i. BodgeBot

Bodge Robot 소개

BodgeBot은 전투로봇을 만들어야했다. 캐드 (CAD)를 이용해 로봇 새시 (Chassis)를 포함한 회로 설계 그리고 전투를 위한 부품들을 설계해야 했다. 아마 조종할 수 있는 통신을 위한 칩은 주어졌던 것 같은데, 분야는 하드웨어 쪽이었다. 뿐만 아니라 24시간 동안 구할 수 있는 어떤 재료도 사용가능했다.

ii. MONA Mayhem

MONA Mayhem

다음 로봇은 MONA Mayhem이였는데, MONA Mayhem은 위 사진에서 확인할 수 있는 로봇의 이름이다. 각 팀 당 2개의 로봇이 주어지고, 두 로봇 모두 완성된 하드웨어가 이미 부착되어 있었기 때문에, 소프트웨어만 해결하면 됐다. 해결해야 할 소프트웨어는 두 가지가 있었다. 첫 번째는 아두이노 코드를 넣어 로봇 제어를 해야 했고 다음으로는 경기장 위에는 카메라가 있었는데, 이 카메라는 4개의 로봇과 공의 위치를 실시간으로 좌표로 바꾸어 해커톤을 위한 전용 웹사이트에 업로드해 주었다. 즉 이 문제는 html로 이루어진 좌표를 파이썬 (python)을 이용해 읽어 로봇이 자동으로 움직일 수 있도록 하는 것이 과제였다. 우리 팀은 이 축구 로봇을 만들기로 했고, 로봇을 만들기 시작했다.

III. Python Webscrapper

먼저 로봇을 받고 올라오자마자 아두이노로 로봇을 제어할 사람 그리고 파이썬 웹스크래퍼 (Python Webscrapper)를 이용하여 공과 네 개의 로봇의 좌표를 읽는 코드를 만들 사람으로 역할을 나누었다. 사실 나는 파이썬은 할 줄 알지만 아두이노는 아직 익숙하지 않아 파이썬으로 좌표를 읽는 코드를 만들기로 했다.

먼저 파이썬의 웹스크래퍼는 무엇인지 알아보려 한다. 한 마디로 파이썬 웹스크래퍼는 웹사이트에 있는 내용을 자동으로 읽고 저장하는 역할을 한다. 그렇다면 이 웹스크래퍼가 이 로봇들을 제어하는데 필요한 이유는 무엇일까?

Python Webscrapper Diagram

위 사진을 보면, 경기장 내에, 4개의 로봇과 1개의 공이 있다. 그 위에는 카메라가 이를 촬영 (1) 하고 있는데 이 카메라는 이 이벤트를 위해 잠시동안 만들어진 웹사이트에 4개의 로봇과 공의 위치 좌표를 웹사이트에 업데이트를 해준다 (2). 그리고 이 로봇들은 직접 제어하는 게 아니라면 위치 데이터를 웹사이트에서 읽어와 (3) 공을 쫓아가기 때문에 이 웹 스크래퍼가 필요한 상황이다.

우리 팀은 한 개의 로봇은 키보드로 직접 제어하려 했고 나머지 한 로봇은 직접 제어가 아닌 이 공의 위치를 웹사이트에서 읽어와서 공을 쫓아다녀야 하기 때문에 파이썬 웹스크래퍼가 필요했다.

 

웹사이트 사진

먼저 웹 사이트에 들어가 보면 위와 같이 보였다. 사실 웹사이트에 올라오는 그 자체를 코드를 이용해 읽는 것은 사실 불가능하기 때문에, 개발자 보기창을 활용해 html 코드를 읽어와야 했다. 시작하자마자 학교 깃허브에 업로드된 파이썬 웹스크래퍼 관련 글을 읽고 코드를 쓰기 시작했다.

 

Beautiful Soup: Build a Web Scraper With Python – Real Python

In this tutorial, you'll walk through the main steps of the web scraping process. You'll learn how to write a script that uses Python's requests library to scrape data from a website. You'll also use Beautiful Soup to extract the specific pieces of informa

realpython.com

 

코드 실행

코드가 완성이 되고, 실행을 해보지 다행히 내가 생각했던 대로 잘 작동을 했다. 하지만 하다 보니, 한 가지 문제를 찾아냈다. 공이 장시간 보이지 않으면 코드가 멈추었다. 이 점을 생각해 보면, 다른 팀에서 만약 직접 제어가 아닌 웹스크래퍼를 통해 공의 위치를 쫓는 로봇이라면 제일 빨리 공에 가 공을 숨겨버릴 수 있는 로봇을 만들 수 있도록 새시를 제작하기로 했다. 당연히 우리가 가진 로봇 중 한 개 또한 웹스크래퍼로 움직이기 때문에 다른 한 개의 로봇은 키보드로 제어할 수 있어야 했다.

이 로봇들 모두 와이파이에 연결되어 있기 때문에 나의 노트북으로 원격 제어를 해보려고 했다. 이 코드 또한 파이썬으로 작성하려 했고, 정말 간단하게 코드를 완성을 했다.

 

GitHub - doyun-gu/Python: Python Practice

Python Practice. Contribute to doyun-gu/Python development by creating an account on GitHub.

github.com

IV. 마무리

MONA 로봇

하지만 몇 시간을 남기고 문제가 생겼다. 아두이노는 로봇 제어를 위한 프로그래밍 언어인데, 내가 익숙한 언어가 아니라 같은 팀에 있는 친구들이 담당을 했고 내가 큰 도움을 주지는 못했다. 문제는 아두이노 코드가  몇 시간 동안 작동을 하지 않았고, 내 웹스크래퍼와 키보드 제어 코드가 작동이 되는지 확인을 해볼 방법도 없었다. 끝내 마지막까지도 어디서 잘못된 지 아두이노 코드 에러를 해결하지 못했고, 마지막에는 경기 전용 와이파이 연결에도 문제가 있어, 열심히 만든 파이썬 코드 업로드도 제대로 해보지 못했다. 다들 남은 시간 동안 정말 열심히 시도했지만 끝내 아두이노 코드의 문제점을 찾아내지 못했고 아쉽게 마무리했다.

경기 전

 

로봇 경기 - 다른 팀 경기 촬영본

그래도 경기는 치러야 했기에, 제어할 수 없이 앞으로만 가는 로봇에 새시로 승부를 보기로 했고 결과는 다행히 무승부로 끝났다. 비록 마무리가 좋진 않았지만, 그래도 좋은 경험이 되었던 것 같다. 그동안 코딩을 배워오면서 실제로 로봇에 어떻게 사용할 수 있을지 잘 알지 못했는데, 이 대회를 통해 많은 점을 배웠다. 앞으로도 이런 종류의 모든 대회 및 로봇을 만드는 이벤트는 다 참가해야겠다는 생각을 했고 절대 안 닿을 것 같은 24시간이 지났다.


V. 이 글을 마치며...

경기장 가면서

마무리는 성공적이지 않았을지 몰라도 이번 참가를 통해 학교에서는 배울 수 없었던 실무를 배울 수 있어서 개인적으로 만족을 한다. 하지만 다음에 참가하게 된다면 마무리까지 좋을 수 있도록 준비를 더 잘해야겠다는 생각을 했고, 언제 쓰일지 모르는 파이썬 및 다른 언어들을 잘 준비해야겠다는 생각을 했다. 이상 좋은 하루가 되었으면 한다!


Instagram:
doyun._.gu


이전 글 보러가기:

 

6. 리버풀 (Liverpool) 여행

안녕하세요, 1학년 2학기 기말 시험까지 마치고 오랜만에 돌아왔습니다. 너무 바쁘고 할게 많아서 그동안 글을 작성할 수 없었는데, 그동안 밀려있던 글감들을 방학 동안 하나씩 써보려 합니다.

damiansdiary.tistory.com

다음 글 보러가기:

 

8. 이스터 방학 여행: 암스테르담 (Amsterdam) 여행

Travelled on 27th to 29th March, 2023 학기가 시작한 지 얼마 되지도 않아서 이스터 방학이 시작되었다. 보통 영국은 Week 6에 Reading Week을 가지는데, 2학기에는 Reading Week와 함께 이스터 방학을 가지게 되었

damiansdiary.tistory.com

GitHub:

 

doyun-gu - Overview

doyun-gu has 5 repositories available. Follow their code on GitHub.

github.com