1295.48 환경 변화 반응 패턴
1. 패턴의 정의
환경 변화 반응 패턴은 ReactiveFallback을 활용하여 로봇의 운용 환경이 변화할 때 즉각적으로 적절한 행동으로 전환하는 설계 패턴이다. 비상 대응 패턴이 안전 위협에 초점을 맞추는 반면, 환경 변화 반응 패턴은 동적 장애물 출현, 기상 조건 변화, 지형 변화, 조명 변화 등 보다 넓은 범위의 환경 변화에 대한 적응적 행동 전환을 다룬다.
2. 환경 변화의 유형
로봇이 대응하여야 하는 환경 변화는 다음과 같이 분류된다.
| 변화 유형 | 예시 | 감지 방법 | 대응 행동 |
|---|---|---|---|
| 동적 장애물 | 보행자, 차량, 동물 | LiDAR, 카메라 | 회피 경로 재계획 |
| 기상 변화 | 강풍, 강우, 안개 | 기상 센서, 풍속계 | 속도 감소, 임무 중단 |
| 지형 변화 | 경사, 미끄러운 표면 | IMU, 휠 슬립 감지 | 속도 감소, 경로 변경 |
| 조명 변화 | 급격한 명암 전환 | 카메라 노출값 | 센서 모드 전환 |
| 통신 환경 변화 | 신호 강도 저하 | RSSI 측정 | 통신 양호 지역 이동 |
3. 기본 구조
ReactiveFallback
├── Sequence [환경 변화 1: 최고 우선순위]
│ ├── IsEnvironmentChange_1
│ └── RespondToChange_1
├── Sequence [환경 변화 2]
│ ├── IsEnvironmentChange_2
│ └── RespondToChange_2
├── ...
└── NormalBehavior [환경 정상 시 기본 행동]
환경 변화 조건이 우선순위 순으로 배치되며, 가장 심각한 환경 변화에 대한 대응이 최고 우선순위를 가진다. 모든 환경 조건이 정상이면 기본 행동이 실행된다.
4. 적용 사례
4.1 옥외 이동 로봇의 기상 대응
ReactiveFallback
├── Sequence [강풍 대응]
│ ├── IsWindSpeedExcessive
│ │ input: "max_wind_speed" = 15 m/s
│ └── ShelterInPlace
├── Sequence [강우 대응]
│ ├── IsRainDetected
│ └── ReduceSpeedAndAvoidSlipperyAreas
├── Sequence [안개/시정 저하 대응]
│ ├── IsVisibilityLow
│ │ input: "min_visibility" = 10m
│ └── SwitchToLidarOnlyNavigation
├── Sequence [고온 대응]
│ ├── IsAmbientTemperatureHigh
│ │ input: "max_temp" = 45°C
│ └── ReduceOperationIntensity
└── ContinueOutdoorMission
기상 조건에 따라 행동을 적응적으로 전환한다. 강풍 시 현재 위치에서 대피하고, 강우 시 속도를 줄이며 미끄러운 지역을 회피하고, 시정 저하 시 LiDAR 전용 항법으로 전환한다.
4.2 자율 주행 로봇의 동적 환경 대응
ReactiveFallback
├── Sequence [보행자 감지]
│ ├── IsPedestrianInPath
│ └── YieldToPedestrian
├── Sequence [공사 구간 감지]
│ ├── IsConstructionZoneDetected
│ └── NavigateAroundConstruction
├── Sequence [도로 상태 이상]
│ ├── IsRoadConditionPoor
│ └── ReduceSpeedAndIncreaseCaution
└── FollowPlannedRoute
4.3 수중 로봇의 해양 환경 대응
ReactiveFallback
├── Sequence [강한 해류 감지]
│ ├── IsCurrentTooStrong
│ │ input: "max_current" = 2.0 knots
│ └── AdjustHeadingForCurrent
├── Sequence [수온 이상 감지]
│ ├── IsWaterTemperatureAbnormal
│ └── AscendToSafeDepth
├── Sequence [수중 시야 저하]
│ ├── IsUnderwaterVisibilityPoor
│ └── SwitchToSonarNavigation
└── ContinueUnderwaterMission
5. 환경 조건의 점진적 변화 감지
환경 변화는 순간적으로 발생하기도 하지만, 점진적으로 악화되는 경우도 있다. 점진적 변화를 감지하기 위해 이동 평균(moving average)이나 추세 분석(trend analysis)을 조건 노드에 적용할 수 있다.
function IsWindSpeedExcessive.tick():
current_speed ← blackboard.get("wind_speed")
// 이동 평균 갱신
wind_history.append(current_speed)
if wind_history.size() > window_size:
wind_history.removeFirst()
average_speed ← mean(wind_history)
if average_speed > max_wind_speed:
return SUCCESS
return FAILURE
이동 평균을 적용하면 순간적인 풍속 변동에 의한 불필요한 행동 전환을 방지하면서, 지속적인 풍속 증가를 안정적으로 감지할 수 있다.
6. 환경 변화 해소 시 복귀
환경 변화가 해소되면, ReactiveFallback의 재평가에 의해 해당 조건이 FAILURE를 반환하고 차순위 행동으로 자연스럽게 복귀한다. 그러나 환경 변화 해소 직후 즉시 원래 행동으로 복귀하는 것이 항상 적절하지는 않다.
예를 들어, 강우가 멈춘 직후에도 노면이 젖어 있어 미끄러움이 지속될 수 있다. 이 경우 조건 해소와 행동 복귀 사이에 유예 시간(grace period)을 설정한다.
function IsRainDetected.tick():
is_raining ← blackboard.get("rain_sensor")
if is_raining:
rain_stop_time ← null
return SUCCESS
else:
if rain_stop_time is null:
rain_stop_time ← current_time()
elapsed ← current_time() - rain_stop_time
if elapsed < grace_period:
return SUCCESS // 유예 기간 동안 조건 유지
else:
return FAILURE // 유예 기간 경과 후 조건 해소
7. 다중 환경 변화의 동시 대응
복수의 환경 변화가 동시에 발생하는 경우, ReactiveFallback의 우선순위 체계에 의해 가장 심각한 변화에 대한 대응이 선택된다. 그러나 복수의 환경 변화에 동시에 대응하여야 하는 경우도 있다. 이 경우 Parallel 노드와의 조합을 고려할 수 있다.
ReactiveFallback
├── Sequence [최고 우선순위 환경 변화]
│ ├── IsExtremeWeather
│ └── EmergencyShelter
├── Parallel [복합 환경 적응]
│ ├── AdjustForWind
│ └── AdjustForRain
└── NormalOperation
이 구조에서 극단적 기상 상황이 아닌 경우, Parallel 노드를 통해 바람과 비에 대한 적응을 동시에 수행한다.
8. 설계 지침
-
조건의 안정성: 환경 조건 노드에 히스테리시스 또는 이동 평균을 적용하여 노이즈에 의한 불필요한 전환을 방지하라.
-
유예 기간: 환경 변화 해소 후 즉시 복귀하지 말고, 환경이 안정화되는 데 필요한 유예 시간을 설정하라.
-
센서 융합: 단일 센서에 의존하지 말고 복수의 센서 데이터를 종합하여 환경 상태를 판단하라.
-
행동의 점진적 전환: 가능한 경우 행동을 급격히 전환하지 말고, 점진적으로 조정(속도 감소, 민감도 증가 등)하는 방식을 우선 적용하라.