Mobot#
작성자: Cosku Acay, Edwin Cho, Kenneth Li, Nishant Pol. PDF.
프로젝트 설명#
Carnegie Mellon의 Mobot 대회에서 로봇은 야외 보도의 255피트 곡선 흰색 선 위에 배치된 14개의 게이트를 통과해야 합니다. 코스에는 두 개의 가파른 경사로와 로봇이 14개의 게이트를 순서대로 통과하기 위해 올바른 경로를 선택해야 하는 결정 지점 영역이 포함됩니다. 선이 야외에 있고 Pittsburgh의 날씨 아래에 있으므로, 로봇은 다양한 조건에서 작동해야 합니다. 올해는 대회 당일 비가 오고 바람이 불었습니다. 자세한 내용은 http://www.cs.cmu.edu/mobot/mobot.html 에서 확인할 수 있습니다


CMUcam4를 사용한 해결책#
저희는 라인 추종 작업에 CMUcam4를 사용하기로 선택했는데, 최소한의 하드웨어가 필요하고 라인을 트래킹하는 데 잘 맞는 인터페이스를 가지고 있었기 때문입니다.

CMUcam4는 초당 30프레임으로 라인의 이미지를 캡처하고 컬러 트래킹 이미지를 세 개의 시리얼 라인 중 하나를 통해 Arduino Mega에 공급합니다. 그런 다음 Arduino Mega는 이 이미지를 처리하고(아래 소프트웨어 설명 참조) 다른 시리얼 라인을 통해 모터 속도 및 회전 명령을 PID 컨트롤러에 전달합니다. 이어서 PID 컨트롤러는 오른쪽과 왼쪽 바퀴 모두에 대한 엔코더 카운트를 Arduino Mega에 제공하여, 게이트 0에 대한 우리의 위치와 방향을 추적할 수 있게 합니다.
PID 컨트롤러(MD-25)는 영국의 Robot-Electronics에서 제조합니다. 이는 모터 샤프트 자기 엔코더가 있는 두 개의 기어드 DC 브러시 모터를 구동합니다. LCD 화면은 디버깅 목적입니다. 우리는 동일한 접지를 공유하고 둘 다 단일 12V 충전식 배터리에서 공급되는, 모터용 12V와 로직용 5V의 두 개의 전원 레일을 가지고 있었습니다.
저희는 처음에 프로그래밍 단계에 빠르게 들어가기 위해 나무 베이스로 프로토타입을 만든 다음, RC 자동차와 같은 더 빠르고 신뢰할 수 있는 베이스를 작업할 계획이었습니다. 하지만, 프로토타입이 매우 신뢰할 수 있고 작업하기 쉽다는 것을 알게 되어, 최종 설계로 유지했습니다. 본체의 방수는 포장 테이프 층 아래에 셀로판 랩 층으로 구성되었습니다. 그러나 비가 포장 테이프를 통해 새었지만 다행히 셀로판 랩을 통해서는 새지 않았습니다. 카메라는 Ziploc 백의 플라스틱 사각형으로 덮였는데, 그 “필터”가 카메라에게 배경 콘크리트처럼 보이는 라인의 작은 조각을 무시하는 카메라의 능력을 향상시킨다는 것을 알게 되었기 때문입니다.
알고리즘 설명#
배경#
저희는 YUV 모드가 활성화된 컬러 트래킹 모드로 CMUcam4를 사용하며, 이는 라인의 이진 이미지 표현을 제공합니다. 카메라 소프트웨어는 흰색이 아닌 모든 것(즉, 배경)을 걸러내고 라인이 있는 곳(흰색인 곳)에 “켜진” 픽셀을 놓습니다. 저희는 컬러 트래킹이 빛의 강도에 둔감하도록 YUV 모드를 사용하여, 로봇이 실내와 야외를 포함한 다양한 조건에서 작동할 수 있게 합니다.
라인 추종#
CMUcam4는 우리의 Arduino 칩에 80 x 60 이진 이미지를 제공합니다. 우리는 이미지에서 균등하게 간격을 둔 10개의 픽셀 행을 샘플링하고 “켜진” 픽셀의 중심(centroid)을 계산합니다(여기 참조: https://en.wikipedia.org/wiki/Centroid#Of_a_finite_set_of_points). 그런 다음 라인이 그 중심에 있다고 가정합니다. 이미지의 10개의 서로 다른 행에서 이를 수행하면, 점들을 연결하여 라인의 좋은 근사치를 얻습니다. 그런 다음 라인의 각 점이 이미지 중앙에 있는 수직선에서 얼마나 떨어져 있는지 찾아 이 데이터를 사용하여 라인이 얼마나 굽었는지를 나타내는 값을 얻을 수 있습니다. 이는 접선과 곡선 사이의 면적을 찾아 그 면적을 사용하여 얼마나 회전해야 하는지를 결정하는 것과 같은 것으로 볼 수 있습니다. 부호는 회전이 왼쪽인지 오른쪽인지를 결정하고, 크기는 라인을 따라가기 위해 얼마나 회전해야 하는지를 결정합니다. 예상하다시피, 면적을 0으로 측정하면, 라인은 로봇 바로 앞에 있고 직선입니다. 면적의 크기가 크면, 로봇은 이 면적의 크기를 최소화하려고 시도하는 것을 유지하기 위해 회전해야 합니다.
결정 지점#
로봇이 결정 지점에 있는지 확인하기 위해, 카메라가 라인 추종에서 수집한 데이터를 가져와 검은 공간에 몇 개의 평균 중심점이 나타나는지 확인합니다. 이는 두 라인 사이의 평균점이 그 라인들이 같은 라인이 아닌 한 어느 라인에도 있어서는 안 된다는 가정을 기반으로 작동합니다. 로봇이 검은 공간에서 여러 개의 평균점을 감지하면, 여기에 두 개의 라인이 있어야 한다고 결론지을 수 있습니다. 그런 다음 적절한 회전을 선택하고 하나의 라인만 볼 때까지 회전을 그 방향으로 편향시킵니다.
저희 코드의 간소화된 버전을 보려면 https://github.com/cacay/Mobot 으로 이동하거나 로컬 사본은 여기를 참조하십시오.

