알 수없는 장애물이있는 그리드의 모든 도달 가능한 공간을 방문하는 효율적인 방법은 무엇입니까?


13

탐색을 사용하여 상당히 거친 2D 그리드 공간에서 장애물 맵을 만들려고합니다. 한 공간에서 인접한 공간으로 이동하여 장애물을 감지하고 실패하면 대상 공간에 장애물이 있습니다 (이 문제에는 거리 감지 센서의 개념이 없습니다).

그리드 예 http://www.eriding.net/resources/general/prim_frmwrks/images/asses/asses_y3_5d_3.gif (예)

도달 가능한 모든 사각형을 방문하면 프로세스가 완료됩니다. 다시 말해, 일부 공간은 둘러싸여 있기 때문에 장애물이 없어도 완전히 접근 할 수 없을 수 있습니다. 이것은 예상됩니다.

가장 간단한 경우 에는 DFS 알고리즘을 사용할 수 있지만이 작업을 완료하는 데 시간이 너무 오래 걸릴 것으로 걱정됩니다. 로봇은 새로운 영역을 탐색하는 것보다 역 추적에 더 많은 시간을 소비합니다. 로봇이 모든 옵션을 다 사용하기 때문에 도달 할 수없는 사각형에 도달하려고 할 때 이것이 특히 문제가 될 것으로 예상됩니다.

보다 복잡한 방법에서는 부스 트로피 돈 세포 분해 가 적절한 것으로 보인다 .
부스 트로피 돈 세포 분해

그러나 Boustrophedon 세포 분해 알고리즘에 대한 좋은 설명 (즉, 간단한 용어로 완전한 설명)을 찾을 수없는 것 같습니다. 이 같은 자원입니다 이 하나 , 또는 수직 세포 분해에이 더 일반적인 하나는 하지만, 그들은 높은 수준의 알고리즘이나 관련된 낮은 수준의 데이터 구조에 많은 통찰력을 제공하지 않습니다.

이 그리드를 어떻게 효율적으로 방문 (매핑) 할 수 있습니까? 존재 하는 경우 총 그리드 제곱 수에 대해 영형(2) 보다 우수한 성능을 나타내는 알고리즘을 원합니다 ( , n * n 그리드의 경우 영형(4) 보다 낫습니다 ).


매우 흥미로운 문제입니다. 명확성을 위해, 어떤 셀에 대한 반복 방문을 "효율적"으로 정의하고 있습니까?
DaemonMaker 2013

영형(2)

나는 이것이 절삭 공구로 재료를 방문하여 제거 해야하는 CNC 가공 소프트웨어가 직면 한 것과 비슷한 문제라고 생각합니다.
Rocketmagnet 2019

@Rocketmagnet : CNC 기계가 선험적으로 "장애물"을 알고 있기 때문에, 나는 움직이지 않지만 그것들을 감지하고 있기 때문에별로 아닙니다 .
Ian

예, 로봇이 위치를 알고있는 경계 환경을 온라인으로 검색합니다. 장애물의 양, 위치 및 모양은 완전히 알 수 없으며 볼록하지 않을 수 있습니다.
Ian

답변:


11

부스트로 페돈 세포 분해는 단순히 환경을 부스트로 페돈 경로에 의해 효과적으로 덮을 수있는 영역으로 세분화하는 것이다. 사다리꼴 분해는 라인 스윕 알고리즘을 사용하여 수행 할 수 있습니다. [Choset 2000], 이 웹 사이트 또는 Mark de Berg 등의 훌륭한 저서 "Computational Geometry"를 참조하십시오. al, 필요한 데이터 구조 및 알고리즘에 대한 완전한 설명.

Choset, Howie. "알려진 공간의 범위 : Boustrophedon Cellular Decomposition" 자율 로봇 , 2000.


예를 들어 장애물 세트를 모서리와 정점으로 간주하십시오. 환경이 특수 다각형에 의해 경계가 있다고 가정 해 봅시다. 우리는 다음과 같은 것을 가지고 있습니다. 이 공간을 분해하기 위해 모든 정점과 가장 가까운 선 또는 정점 사이에 수직 모서리를 추가하기 만하면됩니다.

코드에서이 작업을 수행하려면 선 세그먼트 교차 테스트, 정렬 된 모서리 목록 및 정렬 된 정점 목록 만 있으면됩니다.

  1. V나는
  2. 나는V나는
  3. 각 교차점에서 새로운 정점을 만듭니다.

이 작업이 완료되면 새로운 모서리와 정점 세트가 사다리꼴 만 포함합니다. 그러나 나는 당신이 (장애물에 대한 사전 지식없이) 온라인으로 이것을 할 수 없다고 강조합니다 . 사전 지식없이 강력한 적용 범위를 원한다면 "버그 알고리즘"을 볼 수 있습니다. 특히 환경이 제한되어 있다고 가정하면 간단한 알고리즘이 있습니다.


  1. 시작 위치에서 환경의 왼쪽 상단 모서리에 도달 할 때까지 위와 왼쪽으로 이동하십시오. 먼저 장애물을 만나면 주변을 여행해야합니다. 우회 할 수있는 경우 (범프 및 이동) 장애물이 있다는 것을 알고 있습니다.

  2. 왼쪽 상단에서 경계가 나올 때까지 오른쪽으로 이동하십시오. 그런 다음 아래로 이동하고 왼쪽으로 이동하십시오 (우리는 전체 공간에서 부스 트로피를하고 있습니다).

  3. 왼쪽 라인에 있고 장애물을 만나면 두 가지 옵션이 있습니다. (i) 우리가 다루려고하는 오른쪽 오른쪽 선에 도달 할 때까지 우회하여 계속할 수 있습니다. (ii) 우리는 장애물을지나 길을 찾거나이 상황에서 다시 끝날 때까지 돌아 서서 새로운 왼쪽-오른쪽 선을 덮을 수 있습니다. 설명하겠습니다.

왼쪽에서 우리는 우리가 따라 가려는 "라인"으로 돌아갈 때까지 장애물 주위를 움직입니다. 오른쪽에서 장애물 한쪽의 (더 작은) 영역을 계속 덮습니다.

첫 번째 방법의 장점은 장애물을 해결하는 방법을 결정하기 전에 항상 장애물을 완전히 매핑하여 더 짧은 경로를 이용할 수 있다는 것입니다. 두 번째 방법의 장점은 장애물을 전혀 피해 갈 필요가 없다는 것입니다. 당신이있는 지역을 다룰 수 있습니다.

이것은 온라인 방식으로 부스 트로피 돈 분해를 정의합니다 . 장애물 사이 또는 장애물과 경계 사이의 영역을 커버합니다.

그러나 내가 아는 한 첫 번째 방법은 분석하기가 더 쉽습니다. 더 복잡한 알고리즘 (예 : BFS 등)은 환경이 제한되어 있지 않기 때문에 (종속으로 경계를 찾기 위해 계속 사용하고 싶지 않기 때문에) 또는 기본적으로 환경을 분할하는 방식에 실제로 방해가되는 장애물이 있습니다. 왜 이것이 나쁜가요? 이 예를보십시오 :

좌우 이동, 각 장애물을 선회하는 생산 방식으로 각 장애물 사이의 작은 부품의 너무 많은 커버. 실제로 전역 경로 계획이 없으면 전체 열의 높이와 너비가 1 픽셀 인이 열을 1 픽셀 너비로 배치하여 그리드 해상도만큼 나쁘게 만들 수 있습니다. 그런 다음 때릴 때마다 장애물을 돌아다녀야합니다.

그렇기 때문에 내가 어디에서 환경에 있었는지 또는 글로벌 경로 계획을 수행 할 수 있는지에 대한 아이디어가 있는지 물었습니다. 그러나 온라인오프라인 토론과 이에 대한 최적의 알고리즘은 실제로 원하는 것이 아닙니다.


업데이트 : 이미지가 아닌 https를 제거해야했으며 실제 실제 응용 프로그램에서 종종 사용되는 이미지를 게시 할 것입니다. http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf


Boustrophedon 분해 알고리즘에 대한 설명 (간단한 용어로)을 찾는 것으로 충분합니다. 실패하면 비슷한 성능을 가진 알고리즘에 대한 간단한 설명이 좋습니다.
Ian

간단한 부스 트로피 돈 분해 예제를 추가했습니다.
Josh Vander Hook

3

결국이 작업을 수행하는 가장 좋은 방법은 매우 간단한 개념 인 Flood Fill 을 사용하는 것 입니다. 내가 사용 스택 기반 반복적 인 접근 방식 대신 재귀 옵션을, 그리고 (이미 만 그리드 사각형을 사용하여 스택의 다음 위치로 현재 위치에서 경로를 찾기 위해 검색 *는 A를 사용하여 물리적 공간을 위해 그것을 수정 나는 그들 사이에 경로가 보장되어 있기 때문에 방문했습니다).

효율성은 상당히 합리적입니다.


나 같은, 당신은 국경 기반의 탐사 발견 cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/...을 그리고 실제로 잘 작동
smirkingman
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.