방 청소 로봇을 프로그래밍하려면 어떤 알고리즘을 구현해야합니까?


25

이 질문에 대해 다음 사항을 알 수 없다고 가정하십시오.

  • 방의 크기와 모양
  • 로봇의 위치
  • 장애물의 존재

또한 다음 사항이 일정하다고 가정하십시오.

  • 방의 크기와 모양
  • 모든 장애물의 수, 모양 및 위치

그리고 로봇이 다음과 같은 속성을 가지고 있다고 가정하십시오.

  • 절대 단위 단위로 앞으로 만 이동하고도 단위로 회전 할 수 있습니다. 또한 이동하는 작업은 성공하면 true를, 장애물로 인해 이동하지 않으면 false를 반환합니다.
  • 합리적으로 무제한의 전원 공급원 (천장없이 항상 태양을 향하는 우주 정거장에 배치 된 태양 강화 로봇이라고 가정 해 봅시다)
  • 모든 이동 및 회전은 항상 절대 정밀도로 수행됩니다 (신뢰할 수없는 데이터에 대해 걱정하지 마십시오)

마지막으로 로봇 환경의 다음 특성을 고려하십시오.

  • 천정이없는 우주 정거장에있는이 방은 안전하지만 좌절하는 혜성들과 아주 가까운 거리에 있기 때문에 먼지 (및 얼음)가 끊임없이 환경을 뒤덮고 있습니다.

나는이 질문의 훨씬 간단한 버전을 요청 받았다 (방은 직사각형이며 장애물이 없으며 적어도 한 번 이상 모든 부분을 다룰 수 있도록 어떻게 움직일 것입니까?) 장애물의 모양이나 존재를 보장하지는 않습니다. Dijkstra의 알고리즘으로 이것을 살펴보기 시작 했지만 다른 사람들이 어떻게 접근하는지 (또는 이것에 대해 잘 받아 들여지는 대답이 있습니까?) (Roomba는 어떻게합니까?)


+ algorithm 및 + theory 같은 태그는 이와 같은 질문에 도움이되지만 아직 추가
할만한

확실히 Roomba보다 좋은 점
Octopus

흥미 롭군 나는 bobsweep을 가지고 있으며 완벽하게 프로그래밍되어 있습니다. momblogsociety.com/meet-newest-addition-family-bobsweep 모두에게 제안합니다. 인사말!

1
이것이 광고입니까? 그렇지 않은 경우 링크가 아닌 정보를 게시하여 로봇의 동작 방식과 완벽한 이유를 설명 할 수 있습니다.
Shahbaz

답변:


18

내가 아는 한이 문제는 "해결되지 않았습니다".

공식적으로 이것은 온라인 범위 문제입니다. 적용 범위 : 바닥에있는 각 지점을 포함해야하고지도에 오프라인으로 액세스 할 수 없으므로 온라인 상태 여야합니다. 가장 최근의 결과에 관심이 있다면, 내가 "당신을 조회 제안 로봇 온라인 보험 알고리즘 아마도 구글 학자의를,"(가 많고 많은 좋은 결과가). @ embedded.kyle의 매우 다채로운 (재) 포스트 외에도 몇 가지 세부 정보를 추가합니다 (몇 가지 간단한 결과를 빠르게 찾으려고 노력할 것입니다).

  • Dijkstra는 경로를 제공하지만 반드시 보장 범위는 아닙니다. 예를 들어, 당신은 어떻게 당신이 방문해야 익스트라에 지정합니까 대신 방문의 그래프에 점을 하나 가능한 한 빨리으로 포인트를? 모든 쌍의 최단 경로를 실행할 수 있지만 요점은 무엇입니까? 지도가 없습니다.

  • 이와 같은 온라인 알고리즘은 종종 "버그"알고리즘이라고 부릅니다. 왜냐하면 그들은 영역을 방황하고 무언가에 부딪친 다음 약간 주위를 방황하는 버그처럼 보이기 때문입니다.

  • 장애물과 직사각형 방이 없으며 경계 에서 시작한다고 가정하면 부스트로 피온 (산소 길) 경로가 최적입니다. 여기에 이미지 설명을 입력하십시오

농민들이이 일을 영원히 해왔다는 것이 재밌습니다. http://en.wikipedia.org/wiki/Boustrophedon . 장애물이없는 대략 직사각형 영역을 찾아 장애물이있는 방으로 확장 할 수 있습니다. Howie Choset는이 작업에 약간의 노력을 기울였습니다 .

  • 주변을 알 수없는 영역을 커버하고 주변에서 시작 하지 않는다고 가정 할 때 최적의 전략은 무엇입니까? 글쎄, 당신이 세상에 떨어지고 경계를 볼 수 없다고 상상해보십시오. 둘레에 닿을 때까지 직선으로 걸어 간 다음 부스 트로피 돈을 할 수 있습니까? 지금은 빼고 둘레를 찾는 데 소요되는 시간을 "폐기"했습니다. 이것이 로봇이 나선형으로 움직이는 이유입니다. 경계에 도달 할 때 많은 영역을 덮었습니다 ( , 여기서 d가장 가까운 경계 까지의 거리입니다 )? 이것은 도움이됩니다 : 이제 가장 가까운 경계를 찾아서 추적 할 수 있습니다.π2
  • 이것은 거대한 매혹적인 지역입니다. 더 나은 요약을 제공 할 수 없어서 죄송합니다.

가장 큰 문제는지도가 없다는 것입니다. 지도가 없으면 둘레를 따라 가고 경로를 따라 움직이는 것과 같은 간단한 동작으로 제한됩니다 (나선형 참조). 따라서 실제로 청소하는 동안지도를 작성하고 매핑 된 영역을 모양으로 분해 한 다음 각 모양을 덮어 범위를 보장하는 로봇이 있습니다. 참조 : http://mintcleaner.com/


9

Roomba는 무언가에 부딪 칠 때까지 나선형으로 시작한 다음 둘레를 does니다. 그런 다음 그냥 튀어 오릅니다. Roomba는 가정용 로봇 진공 청소기의 사실상 표준으로, "허용되는 솔루션"이라고 부를 수있을 것 같습니다. 그러나 개인적인 경험 (나는 두 가지를 소유하고 있음)에서 분명히 개선의 여지가 있습니다.

에서 어떻게 물건 작품 :

연산

에서 인터뷰 낸시 더소 스미스, 아이 로봇의 마케팅 커뮤니케이션 담당 부사장과 :

시작하면 나선 패턴을 볼 수 있으며 물체에 부딪 칠 때까지 더 큰 영역에서 나선 모양으로 나타납니다. 물체를 찾으면 일정 시간 동안 물체의 가장자리를 따라 가다가 교차로를 시작하여 다른 물체에 부딪치지 않고 갈 수있는 가장 큰 거리를 알아 내려고합니다. 공간이 얼마나 큰지 알 수 있지만 벽에 부딪히지 않고 너무 오랫동안 지속되면 넓은 공간에 있다고 생각하고 끊임없이 계산하고 파악하기 때문에 다시 나선형으로 시작됩니다.

아래의 먼지 센서와 비슷합니다. 센서 중 하나가 넘어지면 해당 영역을 덮도록 동작이 변경됩니다. 그런 다음 직선 경로에서 또 다른 더티 영역을 찾아 나갑니다. 서로 다른 패턴이 서로 겹쳐 쌓이는 방식은 방을 덮는 가장 효과적인 방법이라는 것을 알고 있습니다.

우리가 선택한 패턴과 알고리즘의 원래 개발 방식은 MIT를 연구하는 동물에서 태어난 행동 기반 알고리즘과 그들이 음식을 찾는 지역을 찾는 방법에 기초했습니다. 개미와 꿀벌이 어떻게 나가고 지역을 검색하는지 살펴보면, 이러한 종류의 범위와 모든 것을 알아내는 것은 그 연구에서 나옵니다. 정확하지는 않지만, 우리가 꿀벌이라고 말하는 것은 아닙니다. 그러나 우리의 적응 기술이 어떻게 개발되는지에 대한 기초가되는 자연의 영역을 찾는 방법에 대한 이해입니다.

LED가있는 Roombas의 긴 노출 사진은 실제로 작동하는 방식을 보여줍니다.

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오


링크의 복사-붙여 넣기 콘텐츠입니까?
Josh Vander Hook

@ 조쉬 질문에 답하기위한 관련 자료는 링크 부패를 막기 위해 링크 된 사이트에서 복사하여 인용구에 넣었습니다.
embedded.kyle

7

Neato는 체계적인 접근 방식을 사용합니다. SLAM과 범퍼를 사용하여 '현재'공간을 먼저 주변에 매핑 한 다음 가능한 한 효율적으로 청소하기 위해 일부 알고리즘을 적용합니다. 나는 Roomba를 소유 한 적이 없지만 알고리즘에 대해 읽은 것을 감안할 때 결코 절대로 전환하지 않을 것입니다.

neato의 레이저 거리 측정기는 종종 cannabilized 는 SLAM 알고리즘을위한 비용 효율적인 센서이기 때문에, 로봇에 대한.

내가 당신의 작업을 받았다면, 먼저 적절한 SLAM 구현을 찾을 것입니다 내가 가진 하드웨어를 기반으로 입니다.

그런 다음 CNC ISLAND 모션 계획 알고리즘을 사용합니다. 내 경험상 그들은 움직임이 가장 적은 임의의 영역을 다루는 데 매우 효율적입니다.


SLAM은 위치 결정에 불확실성이없는 시뮬레이션이기 때문에이 문제에는 적합하지 않습니다. 실제 로봇의 경우, 당신은 절대적으로 옳습니다.
Ian

나는 그것을 놓쳤다. 실제로 다음과 같은 것은 알려져 있지 않다. 로봇의 위치.
Spiked3

나는 위치가 알 수없는 것으로 시작되었지만 방의 토폴로지가 만들어지면 알 수 있다고 생각했습니다.
Jason Sperske

이것은 단순화가 이상한 함의를 만들어내는 이상한 학문적 문제 중 하나입니다. 지도, 시작 위치, 완벽한 위치 및 조정할 외부 개체가 없으므로 절대 위치는 관련이 없습니다. (0,0)이 (가) 출발지라고 임의로 결정한 다음 해당 지점을 기준으로 맵을 작성하십시오. 이것은 실제로는 실용적이지 않지만 적용 범위 알고리즘을 사용하여 실습을 제공합니다.
Ian

귀하의 답변은 시스템 관점에서 좋습니다. 그러나 나는이 질문이 더 나은 이론 / 알고리즘 질문이라고 생각합니다.
Josh Vander Hook

6

가장 먼저 설정해야 할 것은 로봇의 목표입니다. 질문에서 명확하지 않습니다. 로봇이 수행해야하는 두 가지 주요 작업이 있습니다. 청소 가능한 영역의 모양을 찾은 다음 청소합니다.

그러나 먼지의 양은 일정합니까? 먼지가 지속적으로 추가됩니까? 바닥에 먼지가 남아있는 평균 시간 또는 중간 시간을 최소화하는 것이 목표입니까? 바닥을 똑같이 깨끗하게 유지하는 것이 목표입니까? 아니면 가능한 한 빨리 청소하는 것입니까? 목표를 달성 할 때 측정하고 사용할 수있는 먼지 축적 패턴이 있습니까?

이 질문에 대한 답변은 선택한 알고리즘을 안내하는 데 도움이됩니다. Roomba의 로봇의 경우, 가구 (테이블 주위의 의자 등), 사람 및 기타 장애물이 매우 자주 움직이므로 방의 정확한 배치를 배우는 데 아무런 소용이 없습니다. 그러나 귀하의 경우 공간을 탐색하여 완전한지도 (가장자리를 찾은 잔디 깎는 기계 패턴의 조합)를 만든 다음 해당지도를 사용하여 공간을 통한 최단 경로를 계산하는 것이 좋습니다 ( "커버리지", 스패닝 트리 알고리즘과 같은 여러 가지 방법이 있습니다 .

당신이 걱정해야 할 또 하나의 것은 당신이있는 공간을 이산화시키는 방법입니다. 정수 정도의 양과 거리의 정수 단위조차도 어떤 방향 으로든 움직일 수 있기 때문에 X와 Y 위치는 분수를 가질 수 있습니다 가치. 무한한 수의 데이터 포인트로 커지지 않고 맵에서 장애물을 나타내는 방법을 결정해야합니다.


글쎄, 나는 sasatically 면접 질문을 더 열심히하고 있기 때문에 더 많은 정보를 얻을 수 있다고 생각합니다. 나는 당신이 :) 제기하고있는 점처럼
제이슨 Sperske을

2

그래도 필요한지 확실하지 않지만이 스레드에 대해 Google에 발생한 사람들을 위해 간단한 버전의 알고리즘을 만들었습니다.

기본적으로, 청소하는 동안 해당 지역의지도를 작성하려고 시도하고지도를 사용하여 가장 가까운 방문하지 않은 노드 (방의 일부)를 찾습니다. 찾을 수없는 경우 방을 청소했거나 로봇이 청소하지 않은 부품에 액세스 할 수 없음을 의미합니다.

다른 알고리즘보다 속도가 느릴 수 있지만 시작 위치, 방향 및 장애물에 관계없이 적용 범위를 보장 할 수 있습니다.

https://github.com/dungba88/cleaner_robot

업데이트 : 여기에서 데모를 만들고 역 추적 DFS와 비교했습니다. 따라서 내 알고리즘이 O (N ^ 2)이지만 이동 및 회전 수 측면에서 훨씬 더 최적화되었습니다.

http://jenova.dungba.org/cleaner/showdown


흥미 롭기 때문에 방을 2D 그리드로 나눕니다. 나는 여전히 코드를 읽고 있습니다. 깨끗하지 않은 지역에 도달하기 위해 어떤 경로 찾기 접근법을 사용하십니까? 디즈 크라?
Jason Sperske

BFS를 사용하여 가장 가까운 청소되지 않은 위치를 찾았습니다.
Anh Dũng Bùi

-1

귀하가 요청한 간단한 문제를 살펴보십시오-직사각형의 방으로 장애물이없고 최소한 모든 부품 청소하십시오 한 번 .

해결책은 방 구석을 찾는 것이며 구석을 찾는 것은 큰 문제가되지 않습니다. 그것이 달성되면, 방의 중심으로 나선형 경로를 따르십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.