2011-12-11 4 views
1

나는 지상에서 선을 식별하고 따라 가기 위해 로봇을 얻으려고합니다.
저는 인터넷을 검색하여 회선 추적 로봇의 많은 예를 찾아 냈습니다. 그러나 모든 센서는 특수 센서를 사용하여 회선을 감지하고 있습니다.
그 목적으로 로봇에 카메라를 사용하고 싶습니다.비디오 카메라를 사용하여 로봇이 선을 따라 움직이는 방법

저는 컴퓨터 비전 분야에 새로운 경험이 있으므로 문제 해결 방법에 대한 조언을 듣고 싶습니다. 특히, 로봇과 관련하여 선과 그 각도/방향을 어떻게 감지 할 수 있습니까? 어떻게 턴을 감지 할 수 있습니까?
카메라는 모두 걸릴 수 있습니다 ...
선이 나에게 달려 보는 방법 , 난 바닥에 몇 가지 밝은 색 테이프를 넣어 생각,하지만 난 쉬운 무엇이든 사용할 수 있습니다

업데이트 다음 nikies은 논평 색깔 및 b & w 심상.
조명 및 위치는 다를 수 있지만 나중에 걱정할 것입니다. 시작하려면 무엇을 찾아야할지 알고 싶습니다. 그것을하는 "일반적인"방법 있는가?

+3

이것은 많은 것들에 달려 있습니다. 라인이 어떻게 보이고, 배경은 어떻게 생겼습니까? 이미지의 다른 가장자리와 어떻게 구별 할 수 있습니까? 어떤 종류의 카메라를 사용 하시겠습니까? (컬러 또는 회색조, 해상도)? 어떤 종류의 조명이 있습니까? 실용적인 조언을 원하면 올바른 카메라로 찍은 몇 가지 이미지를 로봇의 관점에서 올바른 종류의 조명으로 게시하는 것이 가장 좋습니다. – Niki

+0

질문에 답변하기 위해 게시물을 업데이트했습니다. – yurib

답변

6

세분화에 적합한 한 가지 방법이 있습니다.

확대/축소, 픽셀 화 필터 및 임계 값을 조합하여 카메라 입력을 흰색 또는 검정색 사각형의 3x3 격자로 줄이십시오. 적절한 조정을 통해 줄이면 정확히 3 개의 축소 된 픽셀을 차지하도록 줄을 날릴 수 있어야합니다. 로봇의 논리는 중심 픽셀을 검정색으로 유지하기 위해 여덟 방향 중 하나에서 움직이는 것으로 구성됩니다. 감소 후

이미지 :

좌회전의 모습
☐ ■ ☐ 
☐ ■ ☐ ↑ move forward one unit 
☐ ■ ☐ 

:

☐ ☐ ☐ 
■ ■ ☐ ← turn 90 degrees left 
☐ ■ ☐ 

이것은 매우 간단한 구조이며, 3 그리드 ISN에 의해 ​​깨끗한 3 비디오 입력 변환 쉬운 일이 아니지만 올바른 방향으로 움직이는 데 충분해야합니다.

+1

최종 말장난 의도? –

+1

@KierenJohnstone Heh도 내 마음을 넘어서지 못했습니다. 그냥 행복한 사고. – blahdiblah

0

로봇을 얼마나 빨리 움직여야합니까? AI (인공 지능) 옵션이 다른 대답에 설명 된대로 쉽게 의사 결정을보다 느리게 될 것이다 (이있는 AI 필드에서

, 당신은 조사 수 :.

자기 조직화지도 (SOM)를 시도하고 검정색 선상에서 추론을 해보세요. 이전에 문자를 식별하는 데 사용한 적이있는 모양을 식별 할 수 있습니다. 현대 컴퓨터에서 상당히 빠르게 계산할 수 있지만 로봇 하드웨어에 따라 달라질 수 있습니다 (완전히 기억할 수는 없습니다)

인공 지능 기법은 훈련하는 데 시간이 오래 걸리므로 학습 할 수 있습니다. 고정 된 코드 방식을 원한다면 다른 대답도 좋은 옵션입니다.

0

음, 할 수있는 일이 많습니다. 나는 당신이 그들을 모르는 경우 union-find algorithms에 관해서 읽는 것으로 시작할 것입니다. 환경에 따라 이미지에서 1) 대비 - 정규화 또는 histogram equalization을 수행 한 다음 2) 선 색상을 대략적으로 충족시키는 모든 픽셀을 조합 찾기 데이터 구조에 추가 할 수 있습니다. 견고성을 위해 (컬러 카메라를 가지고 있다면) 나는 검은 색 대신에 밝은 오렌지색과 같이 매우 강하게 나타나는 것을 고를 것입니다. 여기에는 hue 정보가 없으며 모든 곳에서 감지 될 것입니다.

거기에서 처리 된 데이터를 기반으로 결정할 수있는 방법이 필요합니다. 이미지 세그먼트 중 어느 것이 라인인지 추측하고, 방향을 계산하고, 컨트롤러의 회전 방향을 계산하는 간단한 알고리즘을 작성한다고 상상해보십시오. 아마도 이미지에서 몇 개의 수평선을 스캔하고 필터의 최대 응답에 선을 맞 춥니 다. 이것은 당신이 원하는 것을 최대한 얻을 수 있습니다. 어쩌면 하드웨어를 기반으로 한 더 영리한 것을 만들 수 있습니다. 예를 들어, 이미지의 맨 아래부터 항상 높이까지 라인을 실행하도록 설정할 수 있습니다.

만약 당신이 정말로 야심적이고 수학에 능숙하다면 (camera) lens calibration을 읽어야합니다. 근본적으로 카메라 렌즈에 수학 모델을 적용하고 이미지의 모든 것이 로봇 아래에 있다고 가정하면 실제로 로봇이 3D와 관련된 위치를 파악할 수 있습니다. 그러나이 마지막 단계는 많은 양의 지식을 필요로 할 것이므로 쉽게 기대하지 마십시오!

1

하나의 옵션은 다음을 수행하는 카메라는 전방 및 하방으로보고 함께 OpenCV의 또는 유사한 화상 처리/비전 라이브러리를 사용하는 것이다

  1. 놓고 알려진 특이한의 테이프와 같은 밝은 색 이러한 노란색 또는 오렌지. 로봇에 광원을 기꺼이 탑재하려는 경우 재귀 반사 테이프를 사용할 수도 있습니다.
  2. OpenCV를 사용하여 색상 비디오 이미지를 색조 (채도), 값 (강도)의 세 가지 HSV 평면으로 나눕니다.
  3. 스트로크 너비 변환을 사용하여 선을 식별합니다. 다음 StackOverflow 게시물에는 SWT에 대한 비디오 링크가 있습니다. Stroke Width Transform (SWT) implementation (Java, C#...)
  4. 분할 된 테이프 줄을 단일 픽셀 너비로 줄이려면가는 알고리즘 (Stentiford 또는 Zhang-Suen)을 적용하십시오.
  5. 커브 피트의 입력 점으로 단일 픽셀을 처리하십시오. 또는 더 간단히 말하면 라인의 N 개의 연속 점 그룹마다 종점에서 종점까지의 각도를 계산합니다.
  6. 로봇의 현재 방향과 속도에 대한 정보뿐만 아니라 3D 지오메트리를 적용하여 회전해야하는 시간과 선을 따라갈 수있는 속도를 계산합니다.

로봇이 천천히 움직이는 경우 아래쪽을 향한 카메라가 더 적합 할 수 있습니다. 계산은 더 쉬울지라도, 로봇은 멀리 보일 수 없을 것입니다.

관련 문제