주요 콘텐츠

자율 수상 선박의 충돌 회피 및 궤적 추종

이 예제에서는 해양 선박이 미리 정의된 궤적을 따르면서 충돌을 회피하는 방법을 보여줍니다. 또한 선박 동역학 모델링, 궤적 추종, 고급 제어 알고리즘, 시나리오 테스트, 직관적 인터페이스를 포함하여 해양 선박 제어 시스템의 포괄적인 설계를 설명합니다. 이 시스템은 자율 항법, 해양 연구, 해상 작업 등 안전성과 효율성을 위해 정밀한 선박 제어가 필수인 응용 분야에 사용할 수 있습니다.

이 예제의 수학적 모델은 해양 선박에 영향을 주는 파랑 외란의 거동을 시뮬레이션합니다. 유도, 제어, 항법 및 충돌 회피 알고리즘은 Control System Toolbox™ 및 Stateflow®를 사용하여 설계되었습니다. 여러 시나리오에서 다양한 해양 선박의 상황이 시뮬레이션됩니다. 마지막으로, 이 예제에서는 에고 차량(ego vehicle), 즉 고려 대상인 선박이 자체 경로를 생성하고 선박의 목표 궤적을 추종하는 방법을 보여줍니다. 에고 차량(ego vehicle)이라는 용어는 차량 주변 환경을 인식하는 센서를 갖춘 차량을 의미합니다.

해양 선박 동역학 설계

고급 동역학은 해양 선박의 안정성과 성능에 매우 중요하며, 특히 다양한 화물 적재 및 환경 조건에 노출될 경우에 그러합니다. 선박 동역학에는 부력, 추진력, 저항과 같은 요인이 포함되며, 이러한 요인들은 신중하게 모델링되고 제어되어야 합니다.

Simulink®를 사용하여 해양 선박의 6DOF 동역학을 모델링하려면 파랑(sea wave), 유체동역학, 유체정역학이 상호 작용하여 선박의 운동에 어떠한 영향을 미치는지 고려해야 합니다. 이러한 요인들은 가산 외란으로 취급됩니다. 6DOF 모델의 입력과 출력을 확인할 수 있으며, 이 모델의 출력은 입력 및 출력 처리에 나와 있습니다.

시뮬레이션 데이터를 불러오고 해양 선박 모델 'ASVDemo.slx'를 엽니다.

openProject('MarineVessel/ASVDemoCuboid.prj');
open_system('ASVDemo.slx')

동역학 모델링

이러한 동역학은 선박의 운동을 6자유도로 표현하며, 세 가지 선형 운동인 서지(surge), 스웨이(sway), 히브(heave)와 세 가지 회전 운동인 롤(roll), 피치(pitch), 요(yaw)로 구성됩니다.

영향을 미치는 요인

해양 선박의 동역학은 다음 요인의 영향을 받는다고 가정합니다.

  1. 파랑(Sea Waves) — 선박의 운동은 선박에 작용하는 파랑의 특성에 직접적으로 영향을 받습니다. 이러한 파랑은 선박에 시간에 따라 변하는 힘과 모멘트를 유발시킵니다.

  2. 유체동역학(Hydrodynamics) — 유체동역학은 선박이 물속을 이동할 때 선박에 작용하는 유체 힘을 다루는 연구입니다. 항력과 양력과 같은 이러한 힘은 선박의 운동을 형성합니다.

  3. 유체정역학(Hydrostatics) 정수력(hydrostatic force)은 선박의 배수량(displacement)에 의해, 즉 선박이 물속에서 물을 밀어내면서 발생하며, 부력에 영향을 미칩니다. 이 힘은 선박의 평형 유지에 매우 중요합니다.

외란 및 입력

  • 해양 선박의 실제 거동을 정확하게 시뮬레이션하기 위해, 파랑, 유체동역학, 유체정역학의 결합된 영향을 가산 외란으로 처리합니다. 이러한 외란은 선박의 운동에 섭동을 유발하며, 사실적인 모델을 구현하는 데 필수적입니다.

  • 6DOF 모델의 입력은 선박에 가해지는 제어 입력 또는 외력을 나타냅니다. 이러한 입력에는 선박 제어기로부터의 명령, 엔진 추력, 방향타 각도 및 그 외 선박의 거동에 영향을 미치는 여러 요인이 포함될 수 있습니다.

입력 및 출력 처리

  • 6DOF 모델의 입력은 일반적으로 모델의 요구 사항 및 표준을 충족하도록 처리됩니다. 이러한 처리 과정에는 모델 요구에 맞추기 위한 필터링, 스케일링 또는 변환이 포함될 수 있습니다.

  • 모델의 출력은 선박의 운동을 나타내며, 분석 및 제어를 위해 면밀하게 모니터링됩니다. 여기에는 6자유도에서의 선박의 위치, 속도, 가속도 및 방향에 대한 데이터가 포함됩니다.

  • 입력 데이터와 출력 데이터를 모두 정확하게 처리해야 모델이 선박의 실제 거동을 정확하게 표현할 수 있으며, 이는 효과적인 제어와 분석을 위해 매우 중요합니다.

제어기

제어기는 다음 다섯 가지 구성요소를 통해 해양 선박에 대한 유도(guidance)를 제공합니다.

상황 인식(Situational Awareness)

  • 제어기의 상황 인식 구성요소는 레이다, 소나, GPS, 자동식별장치(AIS: Automatic Identification System)와 같은 다양한 선내 센서로부터 센서 데이터를 수집합니다.

  • 수집된 센서 데이터는 처리되어 선박 주변 환경에 대한 실시간 상황 정보를 생성합니다. 이러한 데이터에는 인근 선박, 항행 위험 요소, 기상 조건 및 선박 위치와 상태에 대한 정보가 포함됩니다.

계획(Planning)

  • Stateflow™ 다이어그램은 환경에 반응하기 위한 선박의 거동을 제어하는 논리 및 의사결정 과정을 기술합니다. 예를 들어, 이 다이어그램은 에고 선박(ego vehicle)이 다른 선박과의 잠재적 충돌을 회피하기 위해 언제 좌회전 또는 우회전을 수행해야 하는지에 대한 규칙을 정의합니다.

  • 이 계획 시스템은 선박을 위한 안전하고 효율적인 경로를 생성합니다.

유도(Guidance)

  • 유도 시스템은 제어 알고리즘을 사용하여 선박의 목표 요(yaw) 각도를 계산합니다. 목표는 충돌을 회피하고 계획된 경로를 따르도록 선박을 조향하는 것입니다.

  • 유도 시스템은 의사결정을 위해 선박의 현재 속도, 인근 선박의 존재 여부, 그리고 계획된 경로와 같은 요인을 고려합니다.

제어(Control)

  • 속도 제어는 선박의 추진 시스템을 조절하여 목표 속도를 달성하고 이를 유지하도록 하며, 선수방위(heading) 제어는 선박이 목표 방위 또는 항로를 유지하도록 합니다.

  • 모드 전환은 제어 서브시스템에 필수적입니다. 모드 전환은 선장의 명령 또는 자동화 시스템에 의해 트리거되며, 다양한 운항 모드에서 선박이 어떻게 대응할지 결정합니다.

항법(Navigation)

  • 항법 구성요소는 선박이 미리 정해진 경로를 따르도록 하고, 충돌을 회피하기 위해 항로를 조정하며, 변화하는 환경 조건에 대응하도록 합니다.

시나리오 가져오기 및 만들기

이 모델의 시나리오 블록을 사용하면 선박에 대한 다양한 시나리오를 살펴볼 수 있습니다. 미리 정의된 이 세 가지 시나리오를 통해 에고 선박이 아닌 다른 선박(non-ego vessel)들의 다양한 궤적을 분석할 수 있습니다.

시나리오 1

첫 번째 시나리오를 불러오고 에고 선박의 웨이포인트를 정의합니다.

load('Scenario_Cuboid_COLREGs_1_Crossing_Starboard_exported.mat');
waypoints_m = ... % [x y]
    [  0    0; ...
     150    0; ...
     200    0];

웨이포인트를 검증하고 R_switch가 웨이포인트 간의 최소 거리보다 작은지 검사합니다.

if R_switch_m > min( sqrt( diff(waypoints_m(:,1)).^2 + diff(waypoints_m(:,2)).^2 ) )
    error("The distances between the waypoints must be larger than R_switch");
end 

다른 시뮬레이션 파라미터를 정의하고 모델을 실행합니다.

StopTime = 130;
xlimits = [-150 110]; % For visualization of Scenario Scope block, East
ylimits = [-10 180];  % For visualization of Scenario Scope block, North

시나리오 2

두 번째 시나리오를 불러오고 에고 선박의 웨이포인트를 정의합니다.

load('Scenario_Cuboid_COLREGs_2_Crossing_Starboard_Multiship_exported.mat');
waypoints_m = ... % [x y]
    [  0      0; ...
      60      0; ...
     150   -200;];

웨이포인트를 검증하고 R_switch가 웨이포인트 간의 최소 거리보다 작은지 검사합니다.

if R_switch_m > min( sqrt( diff(waypoints_m(:,1)).^2 + diff(waypoints_m(:,2)).^2 ) )
    error("The distances between the waypoints must be larger than R_switch");
end 

다른 시뮬레이션 파라미터를 정의하고 모델을 실행합니다.

StopTime = 130;
xlimits = [-220 20]; % For visualization of Scenario Scope block, East
ylimits = [-60 180]; % For visualization of Scenario Scope block, North

시나리오 3

세 번째 시나리오를 불러오고 에고 선박의 웨이포인트를 정의합니다.

load('Scenario_Cuboid_COLREGs_3_Crossing_Multiship_exported.mat');
waypoints_m = ... % [x y]
    [  0    0; ...
     150    0; ...
     200    0];

웨이포인트를 검증하고 R_switch가 웨이포인트 간의 최소 거리보다 작은지 검사합니다.

if R_switch_m > min( sqrt( diff(waypoints_m(:,1)).^2 + diff(waypoints_m(:,2)).^2 ) )
    error("The distances between the waypoints must be larger than R_switch");
end

다른 시뮬레이션 파라미터를 정의하고 모델을 실행합니다.

StopTime = 130;
xlimits = [-130 200]; % For visualization of Scenario Scope block, East
ylimits = [-40 180];  % For visualization of Scenario Scope block, North

시나리오 디자이너를 사용하여 해양 선박 시나리오 설계하기

시나리오 디자이너를 사용하여 추가 해양 선박 시나리오를 설계할 수 있습니다.

  1. 다음 명령을 실행하여 시나리오 디자이너를 엽니다.

%uavScenarioDesigner

2. 세션 열기를 클릭합니다. 미리 정의된 시나리오 중 하나를 선택합니다.

3. 시나리오를 작업 공간으로 가져오고 애플리케이션 내에 저장합니다.

4. Scenario 내의 해양 선박 Scenario Configuration 블록으로 이동합니다.

5. 원래 선택했던 시나리오를 클릭하여 해당 구성을 자세히 살펴봅니다.

6. 시뮬레이션을 실행합니다.

LondonCollidetraj.gif

인간-기계 인터페이스

HMI(인간-기계 인터페이스) 블록은 선박의 선장과 제어 시스템 간의 상호 작용을 위한 중추적 역할을 합니다. 이 블록에는 다음과 같은 다양한 기능이 있습니다.

명령 기능:

HMI 블록의 주 기능은 선박의 선장 또는 지정된 오퍼레이터로부터 명령을 수신하고 처리하는 것입니다. 이러한 명령은 일반적으로 다음의 필수 선박 운용과 관련이 있습니다.

  • 시작/정지 — HMI 블록은 선장이 엔진을 시동하거나 선박을 정지시키는 등 선박 운항을 시작하거나 중단할 수 있도록 합니다.

  • 선수방위 제어 — 선장은 HMI 블록을 사용하여 선박이 항해할 목표 선수방위 또는 방향을 지정할 수 있습니다.

  • 속도 제어 — 속도 제어는 선박 운항에서 중요한 요소입니다. HMI 블록은 선장이 필요에 따라 선박 속도를 설정하고 조정할 수 있도록 합니다.

  • 추력 제어 — 복수의 추진 시스템 또는 엔진을 갖춘 선박의 경우, HMI 블록은 각 추진 장치의 추력 수준도 제어할 수 있습니다.

  • 웨이포인트 항법 — HMI 블록을 통해 선장은 선박의 의도된 경로를 정의하는 웨이포인트 또는 항법 지점을 입력할 수 있습니다.

직관적 인터페이스:

HMI 블록은 오퍼레이터가 손쉽게 명령을 입력하고 조정할 수 있도록 직관적 인터페이스로 설계되었습니다. 이 인터페이스에는 상호 작용을 용이하게 하기 위해 버튼, 슬라이더 또는 터치스크린과 같은 그래픽 요소가 포함될 수 있습니다. 그러한 설계는 선박 제어 시스템에 명령을 전달할 때 오류 발생 가능성을 최소화하는 데 도움이 됩니다.

제어 시스템과의 통신:

선장이 HMI 블록을 통해 명령을 입력하면, 블록은 이러한 명령을 선박의 제어 시스템에 전달합니다. 예를 들어 새로운 선수방위를 설정하면, HMI 블록은 그에 따라 방향타 또는 조향 메커니즘을 조정하도록 제어 시스템을 트리거합니다.

안전 고려 사항

HMI 블록은 중요 명령에 대해 확인 프롬프트 및 비밀번호 인증과 같은 안전 기능을 구현하여, 권한이 있는 인원만 특정 작업을 수행할 수 있도록 합니다.

참고 항목

도움말 항목