안전 관련 조건 노드 설계 (Safety-Related Condition Node Design)
1. 개요
안전 관련 조건 노드는 로봇 시스템의 안전 상태를 평가하여, 비상 정지, 안전 구역 침입, 과전류, 통신 장애, 시스템 이상 등 안전 위협 요소의 존재 여부를 판정하는 조건 노드 군이다. 이 조건 노드들은 행동 트리에서 가장 높은 우선순위로 평가되어야 하며, 안전 조건 위반 시 즉시 보호 행동(protective action)을 유발하여 인명 및 장비의 안전을 보장한다.
2. 안전 조건의 설계 원칙
2.1 실패 안전(Fail-Safe) 원칙
안전 관련 조건 노드는 실패 안전 원칙을 엄격히 준수하여야 한다.
- 데이터 부재 시 위험 판정: 안전 관련 센서 데이터가 수신되지 않으면, 안전한 것으로 가정하지 않고
FAILURE를 반환하여 보호 행동을 유발한다. - 센서 오류 시 보수적 판정: 센서 값이 유효하지 않거나(
NaN,Inf) 범위를 벗어난 경우, 위험 상태로 판정한다. - 통신 장애 시 안전 모드: 안전 관련 토픽의 수신이 중단되면, 일정 시간 후 안전 모드를 활성화한다.
2.2 안전 조건의 우선순위
행동 트리에서 안전 조건은 최상위 수준에 배치하여, 다른 모든 행동에 우선하여 평가되어야 한다.
<BehaviorTree ID="SafetyFirstArchitecture">
<ReactiveSequence>
<!-- 최고 우선순위: 안전 조건 -->
<Condition ID="IsNotEmergencyStopped"/>
<Condition ID="IsNoSafetyZoneViolation"/>
<Condition ID="IsCurrentNormal"/>
<Condition ID="IsCommsConnected"/>
<Condition ID="IsSystemHealthy"/>
<!-- 임무 수행 -->
<SubTree ID="MissionTree"/>
</ReactiveSequence>
</BehaviorTree>
ReactiveSequence에 의해 매 tick마다 안전 조건이 재평가되며, 어느 하나라도 FAILURE를 반환하면 임무가 즉시 중단된다.
2.3 안전 조건의 분류
| 범주 | 조건 | 위험 수준 | 대응 행동 |
|---|---|---|---|
| 비상 정지 | E-stop 활성화 | 긴급 | 즉시 모터 정지 |
| 안전 울타리 | 침입 감지 | 위험 | 속도 제한 또는 정지 |
| 과전류 | 전류 한계 초과 | 위험 | 즉시 정지 |
| 통신 장애 | 연결 두절 | 경고~위험 | 안전 모드 진입 |
| 시스템 이상 | 진단 오류 | 경고 | 기능 제한 |
3. 공통 안전 조건 노드 패턴
3.1 타임아웃 기반 안전 조건
안전 관련 토픽의 수신이 일정 시간 이상 중단되면 위험으로 판정하는 공통 패턴이다.
template <typename MessageT>
class SafetyConditionBase
: public BT::RosTopicSubNode<MessageT>
{
public:
SafetyConditionBase(const std::string& name,
const BT::NodeConfiguration& config,
const BT::RosNodeParams& params)
: BT::RosTopicSubNode<MessageT>(name, config, params),
node_(params.nh),
last_received_(params.nh->get_clock()->now()),
ever_received_(false)
{}
protected:
BT::NodeStatus onTick(
const typename MessageT::SharedPtr& msg) override
{
double timeout;
this->getInput("safety_timeout_sec", timeout);
if (msg)
{
last_received_ = node_->get_clock()->now();
ever_received_ = true;
return evaluateSafety(msg);
}
// 메시지 미수신 상태
if (!ever_received_)
{
return BT::NodeStatus::FAILURE;
}
auto elapsed =
(node_->get_clock()->now() - last_received_).seconds();
if (elapsed > timeout)
{
return BT::NodeStatus::FAILURE;
}
// 타임아웃 이내: 이전 결과 유지
return last_result_;
}
virtual BT::NodeStatus evaluateSafety(
const typename MessageT::SharedPtr& msg) = 0;
rclcpp::Node::SharedPtr node_;
rclcpp::Time last_received_;
bool ever_received_;
BT::NodeStatus last_result_{BT::NodeStatus::FAILURE};
};
이 기반 클래스는 메시지가 수신되지 않을 때의 타임아웃 처리를 내장하고 있어, 파생 클래스는 evaluateSafety() 메서드만 구현하면 된다.
4. 안전 조건 위반 시 대응 행동 트리
4.1 다단계 안전 대응
<BehaviorTree ID="SafetyResponseSystem">
<Fallback>
<!-- 1단계: 정상 운용 -->
<Sequence>
<Condition ID="IsNotEmergencyStopped"/>
<Condition ID="IsNoSafetyZoneViolation"/>
<Condition ID="IsCurrentNormal"/>
<Condition ID="IsCommsConnected"/>
<SubTree ID="NormalOperation"/>
</Sequence>
<!-- 2단계: 통신 장애 시 자율 안전 모드 -->
<Sequence>
<Condition ID="IsNotEmergencyStopped"/>
<Condition ID="IsNoSafetyZoneViolation"/>
<Action ID="AutonomousSafeMode"/>
</Sequence>
<!-- 3단계: 비상 정지 -->
<Action ID="EmergencyStop"/>
</Fallback>
</BehaviorTree>
Fallback 구조에 의해, 상위 단계의 조건이 모두 충족되면 정상 운용을 수행하고, 통신 장애 발생 시 자율 안전 모드로 전환하며, 비상 정지 활성화 시 즉시 모터를 정지시킨다.
5. 설계 시 고려 사항
5.1 하드웨어 안전 시스템과의 독립성
소프트웨어 기반 안전 조건 노드는 하드웨어 안전 시스템(비상 정지 회로, 안전 릴레이 등)을 대체하는 것이 아니라 보완하는 역할을 수행한다. 소프트웨어 오류, 운영체제 지연, 통신 장애 등의 상황에서 소프트웨어 안전 시스템이 올바르게 동작하지 않을 수 있으므로, 하드웨어 안전 시스템은 독립적으로 유지되어야 한다.
5.2 안전 무결성 수준(SIL)
산업용 로봇의 안전 시스템은 IEC 61508에 따른 안전 무결성 수준(Safety Integrity Level, SIL)에 맞추어 설계되어야 한다. 행동 트리 기반의 안전 조건 노드는 일반적으로 SIL 인증을 받기 어려우므로, 보조적 안전 수단으로만 활용하고 주 안전 기능은 인증된 안전 제어기에서 수행하여야 한다.
5.3 안전 조건의 테스트
안전 관련 조건 노드는 다른 조건 노드보다 엄격한 테스트가 요구된다. 정상 동작 테스트뿐만 아니라, 센서 장애, 통신 두절, 잘못된 데이터 수신 등 이상 상황에 대한 테스트를 수행하여 실패 안전 원칙이 준수되는지를 검증하여야 한다.
5.4 안전 로깅
안전 조건의 평가 결과는 상세히 로깅되어야 한다. 안전 이벤트 발생 시점, 원인, 대응 행동 등을 기록하여, 사후 분석과 안전 개선에 활용할 수 있도록 하여야 한다.
6. 참고 문헌
- Colledanchise, M., & Ogren, P. (2018). Behavior Trees in Robotics and AI: An Introduction. CRC Press.
- IEC 61508: Functional safety of electrical/electronic/programmable electronic safety-related systems.
- ISO 10218-1:2011. Robots and robotic devices — Safety requirements for industrial robots.
- BehaviorTree.CPP 공식 문서. https://www.behaviortree.dev/
| 버전 | 날짜 | 변경 사항 |
|---|---|---|
| v0.1 | 2026-04-04 | 초안 작성 |