1295.60 환경 조건 변화 즉각 반응 패턴
1. 패턴의 정의
환경 조건 변화 즉각 반응 패턴(Immediate Environment Change Reaction Pattern)은 ReactiveSequence를 활용하여, 로봇의 운용 환경이 변화하는 즉시 현재 행동을 중단하고 변화된 환경에 적합한 대응으로 전환하는 설계 패턴이다. 조건 지속 보장 패턴이 정적 전제 조건의 유지에 초점을 맞추는 반면, 환경 조건 변화 즉각 반응 패턴은 동적으로 변화하는 환경 요인에 대한 적응적 행동 전환을 다룬다.
2. 패턴의 기본 구조
ReactiveSequence
├── IsEnvironmentConditionMet // 환경 조건 감시
└── ActionForCurrentCondition // 현재 조건에 적합한 행동
환경 조건이 충족되는 동안 행동이 수행되며, 환경 조건이 변화하면 행동에 즉시 Halt가 전파된다. 이 패턴의 핵심은 환경 변화에 대한 반응 지연이 최대 하나의 Tick 주기 이내라는 것이다.
3. 동적 장애물 출현에 대한 즉각 반응
이동 로봇이 경로를 추종하는 도중 동적 장애물이 경로상에 출현하면 즉시 이동을 중단하는 패턴이다.
ReactiveSequence
├── IsPathFreeFromDynamicObstacles
└── FollowPlannedPath
function IsPathFreeFromDynamicObstacles.tick():
obstacles ← blackboard.get("detected_obstacles")
planned_path ← blackboard.get("current_path")
robot_footprint ← blackboard.get("robot_footprint")
for obstacle in obstacles:
if obstacle.is_dynamic:
// 장애물의 예측 궤적과 로봇 경로의 교차 검사
if willIntersectPath(obstacle, planned_path, robot_footprint):
return FAILURE
return SUCCESS
동적 장애물(보행자, 다른 로봇, 차량 등)이 로봇의 계획 경로와 교차할 것으로 예측되면 조건이 FAILURE를 반환하고, 경로 추종이 즉시 중단된다. 장애물이 경로에서 벗어나면 조건이 복원되어 경로 추종이 재개된다.
4. 지형 조건 변화에 대한 즉각 반응
옥외 이동 로봇이 지형의 경사도, 표면 조건(미끄러움, 울퉁불퉁함) 등의 변화에 즉각 반응하는 패턴이다.
ReactiveSequence
├── IsTerrainTraversable
└── TraverseToWaypoint
function IsTerrainTraversable.tick():
pitch ← blackboard.get("imu_pitch")
roll ← blackboard.get("imu_roll")
wheel_slip ← blackboard.get("wheel_slip_ratio")
if abs(pitch) > max_pitch or abs(roll) > max_roll:
return FAILURE
if wheel_slip > max_slip_ratio:
return FAILURE
return SUCCESS
IMU(관성 측정 장치)로부터 측정된 피치와 롤이 허용 범위를 초과하거나, 휠 슬립 비율이 임계값을 초과하면, 현재 지형이 통과 불가능한 것으로 판단하여 이동을 즉시 중단한다. 경사면에서의 전도 위험이나 미끄러운 표면에서의 제어 불능을 사전에 방지한다.
5. 조명 조건 변화에 대한 즉각 반응
카메라 기반 항법을 사용하는 로봇이 조명 조건의 급격한 변화에 즉각 반응하는 패턴이다.
ReactiveSequence
├── IsVisualConditionAdequate
└── VisualNavigateToGoal
function IsVisualConditionAdequate.tick():
image_brightness ← blackboard.get("average_brightness")
feature_count ← blackboard.get("tracked_feature_count")
if image_brightness < min_brightness or image_brightness > max_brightness:
return FAILURE
if feature_count < min_feature_count:
return FAILURE
return SUCCESS
터널 진입, 역광, 갑작스러운 조명 변화 등에 의해 카메라 영상의 품질이 저하되면, 시각 기반 항법의 신뢰성이 떨어지므로 이동을 중단한다. 추적 중인 특징점(feature point)의 수가 급감하는 경우도 시각 조건 저하의 지표가 된다.
6. 통신 환경 변화에 대한 즉각 반응
원격 제어 또는 텔레오퍼레이션(teleoperation) 모드에서 통신 품질 변화에 즉각 반응하는 패턴이다.
ReactiveSequence
├── IsCommunicationQualityAcceptable
└── ExecuteTeleoperatedTask
function IsCommunicationQualityAcceptable.tick():
rssi ← blackboard.get("communication_rssi")
latency ← blackboard.get("communication_latency")
packet_loss ← blackboard.get("packet_loss_rate")
if rssi < min_rssi:
return FAILURE
if latency > max_latency:
return FAILURE
if packet_loss > max_packet_loss:
return FAILURE
return SUCCESS
통신 신호 강도(RSSI), 지연(latency), 패킷 손실률 중 어느 하나라도 임계값을 벗어나면, 텔레오퍼레이션 작업을 즉시 중단한다. 통신 품질이 저하된 상태에서의 원격 제어는 제어 지연이나 명령 손실로 인해 위험한 상황을 초래할 수 있다.
7. 복합 환경 변화의 구조화
복수의 환경 요인을 동시에 감시하면서 우선순위에 따른 반응을 구현하기 위해, ReactiveSequence와 ReactiveFallback을 조합할 수 있다.
ReactiveSequence
├── IsEnvironmentSafe // 환경 안전 조건
└── ReactiveFallback // 환경에 따른 행동 선택
├── Sequence [악천후 대응]
│ ├── IsBadWeather
│ └── WeatherAdaptedNavigation
├── Sequence [혼잡 환경 대응]
│ ├── IsCrowdedEnvironment
│ └── CautiousNavigation
└── NormalNavigation // 정상 환경
최상위 ReactiveSequence가 환경 안전 조건의 지속적 보장을 담당하고, 내부의 ReactiveFallback이 환경 조건에 따른 행동 선택을 수행한다. 환경 안전 조건이 위반되면 전체 행동이 중단되고, 환경 조건이 변화하면 ReactiveFallback에 의해 적합한 행동으로 전환된다.
8. 환경 변화 감지의 안정화
환경 센서 데이터에는 노이즈가 포함되므로, 순간적인 노이즈에 의한 오감지(false positive)를 방지하기 위한 안정화 기법이 필요하다.
8.1 이동 평균 필터
function IsTerrainTraversable.tick():
current_pitch ← blackboard.get("imu_pitch")
pitch_history.append(current_pitch)
if pitch_history.size() > window_size:
pitch_history.removeFirst()
filtered_pitch ← mean(pitch_history)
if abs(filtered_pitch) > max_pitch:
return FAILURE
return SUCCESS
8.2 연속 위반 카운터
function IsPathFreeFromDynamicObstacles.tick():
is_blocked ← checkPathBlocked()
if is_blocked:
consecutive_blocked ← consecutive_blocked + 1
else:
consecutive_blocked ← 0
if consecutive_blocked >= required_consecutive:
return FAILURE
return SUCCESS
연속 n Tick 동안 조건이 위반되어야 FAILURE를 반환하도록 설정하면, 순간적인 센서 노이즈에 의한 오감지를 방지할 수 있다. 다만, 이 방법은 반응 지연을 n \times T_{tick}으로 증가시키므로, 안전 요구 사항과의 상충을 고려하여 n을 결정하여야 한다.
9. 설계 시 유의 사항
-
반응 지연과 안정성의 균형: 환경 변화에 대한 빠른 반응(낮은 지연)과 센서 노이즈에 대한 내성(높은 안정성)은 상충한다. 안전에 직결되는 조건은 반응 지연을 최소화하고, 안전과 직접 관련이 없는 조건은 안정성을 우선하라.
-
환경 복원 후 행동 재개의 적절성: 환경 조건이 복원되어 행동이 재시작될 때, 환경 변화 기간 동안 로봇의 상태나 주변 환경이 변경되었을 수 있다. 행동 재시작 시 현재 상태를 재확인하는 로직을 행동 노드에 포함하라.
-
센서 융합: 단일 센서에 의존하지 말고 복수의 센서 데이터를 종합하여 환경 변화를 판단하라. 한 센서가 장애 상태이더라도 다른 센서에 의해 환경 변화가 감지될 수 있도록 설계하라.