Main Content

controllerPurePursuit

일련의 웨이포인트를 따라가도록 제어기 생성

R2019b 이후

설명

controllerPurePursuit System object™는 차동 구동 이동체가 일련의 웨이포인트를 따라가도록 만드는 데 사용하는 제어기 객체를 생성합니다. 객체는 현재 자세가 주어지면 이동체의 선속도와 각속도를 계산합니다. 업데이트된 자세와 함께 객체를 연속적으로 호출하면 이동체에 업데이트된 속도 명령이 전달됩니다. MaxAngularVelocity 속성과 DesiredLinearVelocity 속성을 사용하여 이동체의 성능을 기준으로 속도를 업데이트합니다.

LookaheadDistance 속성은 이동체의 로컬 목표 지점인 경로상의 전방 주시 지점(look-ahead point)을 계산합니다. 각속도 명령은 이 점을 기준으로 계산됩니다. LookaheadDistance를 변경할 경우 알고리즘의 성능에 상당한 영향을 미칩니다. 전방 주시 거리가 길수록 이동체의 궤적이 더 평활하게 되지만 이동체가 경로를 따르면서 코너를 무시하게 될 수도 있습니다. 전방 주시 거리가 짧으면 경로를 따르면서 진동이 발생하여 불안정한 동작을 야기할 수 있습니다. Pure Pursuit 알고리즘에 대한 자세한 내용은 Pure Pursuit 제어기 항목을 참조하십시오.

선속도 제어 명령과 각속도 제어 명령을 계산하려면 다음을 수행합니다.

  1. controllerPurePursuit 객체를 만들고 속성을 설정합니다.

  2. 함수를 호출하는 것처럼 인수를 사용하여 객체를 호출합니다.

System object의 작동 방식에 대해 자세히 알아보려면 System Object란? 항목을 참조하십시오.

생성

설명

예제

controller = controllerPurePursuit는 pure pursuit 알고리즘을 사용하여 차동 구동 이동체에 대한 선속도와 각속도 입력값을 계산하는 pure pursuit 객체를 생성합니다.

controller = controllerPurePursuit(Name,Value)는 하나 이상의 Name,Value 쌍으로 지정된 추가 옵션을 사용하여 pure pursuit 객체를 생성합니다. 여기서 Name은 속성 이름이고 Value는 대응하는 값입니다. Name은 작은따옴표(' ')로 묶어야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍 인수를 임의의 순서로 지정할 수 있습니다. 지정되지 않은 속성은 디폴트 값을 유지합니다.

예: controller = controllerPurePursuit('DesiredLinearVelocity', 0.5)

속성

모두 확장

일정한 목표 선속도로, 스칼라로 지정됩니다(단위: 초당 미터). 제어기는 이동체가 일정한 선속도로 구동되며 계산된 각속도는 선속도와 독립적인 것으로 가정합니다.

데이터형: double

전방 주시 거리로, 스칼라로 지정됩니다(단위: 미터). 전방 주시 거리에 따라 제어기의 응답이 달라집니다. 전방 주시 거리가 상대적으로 긴 이동체는 평활화된 경로를 따르지만 코너에서 더 크게 선회합니다. 전방 주시 거리가 상대적으로 짧은 이동체는 경로를 바짝 따라가면서 급선회하지만 경로를 따르면서 진동이 발생할 가능성이 있습니다.

데이터형: double

최대 각속도로, 스칼라로 지정됩니다(단위: 초당 라디안). 제어기는 주어진 값에서 절댓값 각속도의 출력값을 포화시킵니다.

데이터형: double

웨이포인트로, [x y] 쌍의 n×2 배열로 지정됩니다. 여기서 n은 웨이포인트 개수입니다. mobileRobotPRM 클래스 또는 다른 소스에서 웨이포인트를 생성할 수 있습니다.

데이터형: double

사용

설명

예제

[vel,angvel] = controller(pose)는 이동체의 위치와 방향 pose를 처리하고 선속도 vel과 각속도 angvel을 출력합니다.

[vel,angvel,lookaheadpoint] = controller(pose)는 속도 명령을 계산하기 위해 사용되는 경로상의 위치인 전방 주시 지점을 반환합니다. 경로상의 이 위치는 controller 객체의 LookaheadDistance 속성을 사용하여 계산됩니다.

입력 인수

모두 확장

이동체의 위치와 방향으로, [x y theta] 형식의 3×1 벡터로 지정됩니다. 이동체 자세는 x축으로부터 측정된 각도 방향 θ(단위: 라디안)를 갖는 x 위치와 y 위치입니다.

출력 인수

모두 확장

선속도로, 스칼라로 지정됩니다(단위: 초당 미터).

데이터형: double

각속도로, 스칼라로 지정됩니다(단위: 초당 라디안).

데이터형: double

경로상의 전방 주시 지점으로, [x y] 벡터로 반환됩니다. 이 값은 LookaheadDistance 속성을 기준으로 계산됩니다.

객체 함수

객체 함수를 사용하려면 System object를 첫 번째 입력 인수로 지정하십시오. 예를 들어 obj라는 System object의 시스템 리소스를 해제하려면 다음 구문을 사용합니다.

release(obj)

모두 확장

infoCharacteristic information about controllerPurePursuit object
stepSystem object 알고리즘 실행
release리소스 해제 및 System object 속성값과 입력 특성 변경 허용하기
resetSystem object의 내부 상태 재설정

예제

모두 축소

info 메서드를 사용하여 controllerPurePursuit 객체에 대한 추가 정보를 가져옵니다. info 함수는 RobotPoseLookaheadPoint라는 두 필드를 반환합니다. 하나는 로봇의 현재 위치와 방향에 해당하고, 다른 하나는 객체의 마지막 호출에서 출력을 계산하는 데 사용되는 경로상의 점에 해당합니다.

controllerPurePursuit 객체를 생성합니다.

pp = controllerPurePursuit;

웨이포인트를 할당합니다.

pp.Waypoints = [0 0;1 1];

입력값으로 제공된 초기 자세 [x y theta]와 함께 pp 객체를 사용하여 제어 명령을 계산합니다.

[v,w] = pp([0 0 0]);

추가 정보를 가져옵니다.

s = info(pp)
s = struct with fields:
         RobotPose: [0 0 0]
    LookaheadPoint: [0.7071 0.7071]

확장 기능

버전 내역

R2019b에 개발됨