컴퓨터 비전을 사용한 PID 알고리즘 구현


10

자동 미로 미로 솔버를 만들고 웹캠을 사용하여 미로를 제어하고 있습니다.

다른 포럼의 제안에 따라 현재 미로의 공 움직임을 적어도 한 방향으로 제어하려고합니다. 그래서 두 좌표 466,288과 466,152 사이의 공 움직임을 제어하려고합니다. 스테퍼 모터 컨트롤러 보드에 대한 입력은 시간이며 각 축, 즉 x 및 y에 대해 회전 할 단계가 없습니다.

내가 사용하는 스테퍼 모터 컨트롤러 보드는 에그 봇 스테퍼 모터 컨트롤러 보드입니다. http://www.sparkfun.com/products/10025

따라서 두 지점 사이를 이동하려면 두 지점 사이에 288과 152 (260240230 ... 150) 사이에 여러 가지 웨이 지점을 만들고 공의 움직임을 수정해야합니까?

내 이미지 처리 알고리즘은 공이 회전하여 구멍에 빠지는 공을 추적하기에 충분히 빠르지 않습니다.

일부는 다음 비디오에 표시된대로 표준 템플릿을 사용하고 경로의 편차에 대해 공의 움직임을 수정하도록 제안했습니다.

http://www.youtube.com/watch?v=Prq78ctJ2Rk&feature=player_embedded

또한 이미지 처리 도구를 통해 볼 이동을위한 웨이 포인트를 사용하여 동일한 문제를 해결했습니다. 같은 문제에 대한 해결책이 너무 많으면 문제 해결에 혼란을 느낍니다. PID 컨트롤러를 구현해야한다는 것을 알고 있습니다. 그러나 문제를 단계별로 해결하려면 어떻게해야합니까? 나는 문제를 해결하는 데있어 헤드 스타트를 찾는 데 어려움을 겪고 있었고 좌절했다.

내 설정은 다음과 같습니다

설치 사진

... 그리고 여기 내 소프트웨어의 스크린 샷이 있습니다 :

스크린 샷

개정 2 : 나는 또한 새로운 문제에 직면하고있다. 이전에는 Arduino 직렬 포트 Java 애플릿을 통해 스테퍼 모터를 제어했다. 애플릿을 사용하여 스테퍼를 구동 할 수 있습니다.

직렬 포트를 통해 통신하려고 할 때마다 보드를 재설정해야합니다. 또한 스테퍼 모터는 명령이 전송되지 않을 때 작은 간격으로 자체적으로 전원을 공급합니다. 스테퍼 모터가이 모드로 들어가면 보드를 재설정하지 않고 보드를 제어 할 수 없습니다. 도움을 주시면 감사하겠습니다.

개정 3 :

PID 알고리즘을 구현 한 곳에서 약간의 진전이있었습니다. 아래 비디오를 찾으십시오 : http://www.youtube.com/watch?v=MEfp7RqPmqY

이제 PID 알고리즘이 구현되는 속도에 문제가 있습니다. 실제로 내 이미지 처리는 200ms의주기를 끝내고 공을 식별하고 명령을 스테퍼 모터 컨트롤러 보드로 보냅니다. 직렬 포트에 방향 전환 명령이 전송되었지만 스테퍼는 계속 같은 방향으로 회전합니다. 위의 비디오에서 이상한 행동을 찾을 수 있습니다.

내 생각은 계산 된 PID 값이 100보다 크면 100을 보내야하는 천장으로 PID 값을 제한해야한다는 것입니다. 나는 이것에 대한 당신의 생각을 듣고 싶습니다.

PID 컨트롤러를 구현 한 방법은 템플릿 일치 알고리즘을 사용하여 템플릿의 시작점을 식별하고 다른 템플릿 일치 알고리즘을 사용하여 공을 식별하는 것입니다. 이제 공을 시작점 템플릿의 중심으로 옮겼습니다. PID 알고리즘으로 직선을 따르도록하려면 어떻게해야합니까?

개정 4 :

물방울 궤도 절연

궤적을 분리했지만 시작점에서 올바른 픽셀 좌표를 인쇄하는 올바른 기능을 찾을 수 없습니다. 이견있는 사람?


1
PS : 그럼 그냥 이미지에 대한 링크를 게시하고 누군가가 와서 이미지 자체로 교체 확신합니다 ...
Majenko

@ 매트-고정! 그러나 사용자가 이미지 링크뿐만 아니라 이미지와 함께 텍스트를 제공하는 것이 좋습니다. @Sai가 어디서 그들을 원했는지 잘 모르겠습니다.
Kevin Vermeer

와우 .... 스테퍼는 속도에 상관없이 보드를 움직일 수있는 토크가 있습니까? 어딘가에 기어 감속이 있기를 바랍니다.
코너 울프

@ 가짜-스테퍼는 이것에 아무런 문제가 없어야합니다. 보드는 무게가 나가지 않으며 무게가 균형을 이룹니다. 나는 40cm 길이의 벽시계를 가지고 있으며 다른 것과 같은 작은 메커니즘으로 제어되며 스테퍼이기도합니다. 합니다 (5cmx5cm기구는 시계 80cm 직경에 비해 터무니없이 작게 보인다)
stevenvh

@ 가짜 : Steve가 맞습니다. 스테퍼에 문제가 없습니다. PID 알고리즘에 관한 모든 것
Sai

답변:


2

첫째, 스테퍼는 포지셔닝이 뛰어 나기 때문에 (포지션 피드백이 필요하지 않음) 자신이 말한대로 확실히 움직임을 제한해야합니다. 현재 모터 샤프트가 어떻게 설계되어 있는지 잘 모르겠지만 모터에 고정 된 상태에서 계속 회전 시키면 장비가 손상 될 수 있습니다.

다음으로, 센서의 200ms 전송 지연이 너무 느릴 수 있습니다. 그렇지 않으면 공 자체의 속도를 늦추기 위해 사물을 많이 느리게해야합니다. Rocket Surgeon의 말과 유사하게 이미지 처리 알고리즘을 단순화하여 경로를 한 번만 계산 한 다음 각 프레임에서 볼의 위치 만 빠르게 계산해야합니다. 이 단계를 빨리 건너 뛰려면이 알고리즘 대신 빨간색 공을 찾은 다음 더 나은 알고리즘을 찾을 때까지 RGB 그림에서 빨간색 구성 요소 만 확인하십시오.

PID 제어의 경우, 실제로 동서 모터와 남북 컨트롤러를위한 두 개의 개별 PID 컨트롤러가 필요하다는 사실부터 시작하십시오. 두 개의 정확한 모터가있는 경우 해당 파라미터가 같아야합니다.

PID 제어기가 작동하려면 오차 , 즉 원하는 위치와 볼의 실제 위치 간의 차이 를 알아야합니다 . 이 오프셋 의 X 및 Y 구성 요소는 두 개의 PID 제어기 (각 모터마다 하나씩)의 입력이됩니다. 오류를 얻으려면 먼저 경로 에서 원하는 위치 인 궤적 을 가져야합니다 .

궤적을 얻으려면 이미지를 처리하고 경로 와 시작 및 끝 지점을 가져와야합니다. 알고리즘이 보드의 나머지 부분과 경로를 구별 할 수 있는지 확실하지 않지만 계속 진행하기 전에 처리해야 할 자체 알고리즘이라는 점에 유의하십시오. 일부 결과를 빨리보고 싶은 경우에는 접합점을 수동으로 입력하여이 부분을 건너 뛸 수 있습니다. 어쨌든 설정 점 속도를 정의 할 수 있어야하며 소프트웨어 가 경로 에서 원하는 좌표 위치를 시작에서 끝으로 이동시켜야합니다 . 분명히, 당신은 낮은 원하는 속도로 시작합니다.

따라서 제어를 시작하기 전에 먼저 다음 점검 목록을 수행해야합니다.

  • 더 빠른 응답을 위해 이미지 처리 알고리즘을 단순화
  • 사전 정의 된 속도를 사용하여 경로에 궤도를 만드는 알고리즘을 만듭니다.
  • 각 프레임에서 :
    • 궤적과 볼 위치의 차이 계산
    • 델타 -X 컴포넌트를 동서 PID로 전달하고 델타 -Y를 남북 PID로 전달

한 번에 한 세그먼트 씩 궤적을 생성하는 것이 더 좋으며 , 그 볼이 이전 세그먼트를 끝내면 다음 세그먼트로 계속 진행하는 것이 좋습니다. 그렇지 않으면 공이 원하는 궤적을 초과하지 않도록주의를 기울여야합니다 (달성하기 어려울 수 있음)


1

카메라의 위치가 고정되어 있고 두 축 모두의 독서를하는 경우 페인트 된 경로, 구멍 및 벽을 프레임으로 인식 할 필요가 없습니다. 설정 시간 동안 원샷으로 수행 할 수 있습니다. 런타임시 단일 광택 금속 볼의 정확한 위치 만 파악하면됩니다.

볼을 포착하려면 고정 스폿 IR LED 1 개와 협 대역 필터를 카메라에 사용할 수 있습니다. 알고리즘은 가장 밝은 픽셀을 계산하고 다음과 같은 단계를 고려하여 X, Y를 실제 X, Y로 변환해야합니다.

  • 가장 밝은 픽셀을 찾으십시오
  • 카메라에서 거리를 복구하기 위해 두 축 (서보에서 읽음)에 각도를 사용하십시오.
  • 축 위치 판독에 타임 스탬프 사용
  • 필요한 경우 위치 판독을 위해 시간을 통해 보간을 적용
  • 알려진 왜곡 렌즈 사용
  • 세계 X, Y에서 픽셀의 세계 X, Y를 완벽한 구에서 반사 각도로 변환하여 진정한 볼 중심을 찾습니다
  • 실제 프레임 시간을 복구하는 델타 시간
  • 필요한 경우 보드 평면 X, Y의 위치 시간 보간
  • 결과 X, Y (t)를 PID 알고리즘으로 전송
  • 궤적 생성기 / 시퀀스에서 두 번째 피드 목표 X, Y (t) 보내기
  • PID가 출력을 결정하게하십시오.
  • 출력 실행 (마지막 단계는 병렬로 수행 가능)

계산 집약적이어서는 안되며 대부분 절대 값에 의존합니다.

일반적으로 작은 CPU는 프레임 속도의 속도로 처리해야합니다.


귀하의 솔루션을 이해하고 있는지 잘 모르겠습니다. 귀하의 솔루션이 흥미 롭습니다. 공이 올바른 경로를 따르고 있는지 어떻게 확인합니까? 따라야 할 경유지 세트를 확보해야합니까?
Sai

예. 모션 제어 소프트웨어는 항상 "궤적 생성기"를 가져야하며, 이는 주어진 단계에 대해 이상적인 유한 X, Y (t) 시퀀스를 생성하는 루틴입니다. 이 시퀀스는 제어 루프의 첫 번째 입력에 공급되고 제어 루프의 두 번째 입력은 실제 위치의 시퀀스입니다. 제어 루틴은 위치 / 속도 / 가속도 에러를 계산하고 PID에 따라 모든 에러를 증폭 / 요약하고 결과적인 수정 신호를 생성해야합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.