사무실 안내·순찰 로봇 인터페이스 명세서 작성 예시

1. 문서 개요

본 문서는 터틀봇3 버거(TurtleBot3 Burger)를 이용한 사무실 안내·순찰 로봇 시스템의 ROS 2 인터페이스를 정의한다.

로봇 본체에서는 센서 처리, 주행, 상태 관리, 순찰, 이상 상황 감지 등의 노드를 실행한다. 원격 PC에서는 관리자 GUI, 실시간 영상 확인, 원격 조종, 순찰 제어, 이벤트 승인 및 보고서 확인 기능을 실행한다.

인터페이스 명세를 따르지 않을 경우 다음 문제가 발생할 수 있다.

  • 토픽 이름 불일치
  • 메시지 자료형 불일치
  • 거리, 각도, 속도 단위 불일치
  • 로봇 운용 상태 이름 불일치
  • 서비스 성공 및 실패 기준 불일치
  • 로봇 PC와 원격 PC 간 통신 오류
  • 통합 단계에서 대규모 코드 수정 발생

2. 시스템 구성

2.1 로봇 플랫폼

항목내용
로봇TurtleBot3 Burger
운영체제Ubuntu
미들웨어ROS 2 DDS
이동 방식차동 구동 방식
주행 제어OpenCR 기반 모터 제어
거리 센서LDS 라이다
카메라USB 카메라 또는 라즈베리파이 카메라
위치 추정SLAM 또는 AMCL
지도ROS 2 OccupancyGrid 형식
원격 제어원격 PC 관리자 GUI
네트워크동일 LAN 또는 동일 Wi-Fi 네트워크

2.2 로봇 PC 실행 기능

로봇 본체 또는 로봇에 탑재된 컴퓨터에서 다음 기능을 실행한다.

  • TurtleBot3 하드웨어 드라이버
  • 라이다 드라이버
  • 카메라 드라이버
  • SLAM 또는 AMCL
  • Nav2 내비게이션
  • 로봇 상태 관리
  • 배터리 상태 관리
  • 순찰 관리
  • 방문자 감지
  • 이상 상황 감지
  • 증거 이미지 저장
  • 속도 명령 선택
  • 비상정지 처리

2.3 원격 PC 실행 기능

원격 PC에서 다음 기능을 실행한다.

  • 관리자 GUI
  • 로봇 상태 표시
  • 지도 및 현재 위치 표시
  • 실시간 카메라 영상 표시
  • 원격 조종
  • 운용 모드 변경
  • 순찰 시작 및 중지
  • 이상 이벤트 확인
  • 관리자 판단 입력
  • 방문자 메모 작성
  • 보고서 생성 및 조회
  • 비상정지 명령 전송

3. ROS 2 네임스페이스 규칙

사무실 로봇 전용 인터페이스는 /office_robot 네임스페이스를 사용한다.

예시는 다음과 같다.

/office_robot/operation_mode
/office_robot/patrol/status
/office_robot/anomaly/event
/office_robot/admin/decision
/office_robot/cmd_vel/remote

TurtleBot3와 Nav2에서 기본으로 제공하는 표준 인터페이스는 기존 이름을 유지한다.

/cmd_vel
/odom
/scan
/map
/tf
/tf_static
/amcl_pose
/navigate_to_pose

토픽과 서비스 이름은 영문 소문자와 밑줄을 사용한다.

올바른 예
/office_robot/patrol/status
/office_robot/emergency_stop

잘못된 예
/OfficeRobot/PatrolStatus
/officeRobot/emergencyStop

4. 노드 구성 명세

노드명실행 위치역할
turtlebot3_node로봇 PCOpenCR 통신, 모터 및 배터리 상태 관리
lidar_driver로봇 PC라이다 데이터 발행
camera_driver로봇 PC카메라 영상 발행
robot_state_publisher로봇 PC로봇 TF 발행
slam_toolbox로봇 PC지도 작성
amcl로봇 PC지도 기반 위치 추정
bt_navigator로봇 PCNav2 이동 명령 처리
controller_server로봇 PC로봇 주행 제어
robot_state_manager로봇 PC전체 운용 모드와 상태 관리
patrol_manager로봇 PC순찰 경로 및 순찰 상태 관리
entrance_monitor로봇 PC출입구 방문자 감지 및 인원 수 계산
greeting_manager로봇 PC방문자 인사 및 안내 처리
anomaly_monitor로봇 PC침입, 장시간 체류, 이동 물체 등 이상 상황 감지
evidence_manager로봇 PC이상 상황 이미지 저장
battery_monitor로봇 PC배터리 상태 판단 및 저전압 경고
cmd_vel_selector로봇 PC자율주행과 원격주행 속도 명령 선택
safety_manager로봇 PC비상정지 및 안전 조건 관리
admin_gui원격 PC관리자 화면 제공
admin_request_manager원격 PC관리자 판단 및 승인 명령 처리
remote_teleop원격 PC키보드 또는 GUI 원격 조종
report_manager원격 PC순찰 및 이상 상황 보고서 생성
visitor_memo_manager원격 PC방문자 메모 저장 및 조회

5. 운용 모드 명세

로봇의 운용 모드는 문자열로 관리한다.

운용 모드설명
대기 모드IDLE이동하지 않고 명령을 대기하는 상태
주간 안내 모드DAY방문자 감지와 안내 기능을 수행하는 상태
야간 순찰 모드NIGHT지정된 경로를 반복 순찰하는 상태
원격 조종 모드REMOTE원격 PC의 속도 명령으로 주행하는 상태
충전 복귀 모드RETURN_TO_CHARGE충전 위치로 이동하는 상태
비상정지 모드EMERGENCY_STOP모든 이동 명령을 차단하는 상태
오류 모드ERROR시스템 오류로 정상 동작이 불가능한 상태

운용 모드 변경은 /office_robot/set_mode 서비스를 통해 수행한다.

6. 토픽 인터페이스 명세

6.1 로봇 운용 및 상태 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/operation_modestd_msgs/msg/Stringrobot_state_manager전체 임무 노드, admin_gui현재 운용 모드
/office_robot/system/statusoffice_robot_msgs/msg/SystemStatusrobot_state_manageradmin_gui, report_manager시스템 전체 상태
/office_robot/emergency_stop/statusstd_msgs/msg/Boolsafety_manager전체 주행 노드, admin_gui비상정지 활성화 여부
/office_robot/heartbeatstd_msgs/msg/UInt32robot_state_manageradmin_gui로봇 시스템 생존 확인용 카운터
/office_robot/error/eventoffice_robot_msgs/msg/ErrorEvent전체 로봇 노드robot_state_manager, admin_gui노드 오류 및 장비 오류 이벤트

6.2 방문자 및 출입구 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/entrance/person_countstd_msgs/msg/Int32entrance_monitorgreeting_manager, admin_gui최근 감지된 인원 수
/office_robot/entrance/person_detectedstd_msgs/msg/Boolentrance_monitorgreeting_manager방문자 감지 여부
/office_robot/visitor/eventoffice_robot_msgs/msg/VisitorEvententrance_monitorgreeting_manager, admin_gui, visitor_memo_manager방문자 감지 이벤트
/office_robot/greeting/statusstd_msgs/msg/Stringgreeting_manageradmin_gui현재 안내 상태
/office_robot/visitor/memooffice_robot_msgs/msg/VisitorMemovisitor_memo_manageradmin_gui, report_manager방문자 메모 정보

6.3 이상 상황 및 관리자 판단 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/anomaly/eventoffice_robot_msgs/msg/AnomalyEventanomaly_monitorevidence_manager, admin_gui, report_manager이상 상황 이벤트
/office_robot/anomaly/statusstd_msgs/msg/Stringanomaly_monitorrobot_state_manager, admin_gui이상 감지 노드 상태
/office_robot/admin/decisionoffice_robot_msgs/msg/AdminDecisionadmin_request_manageranomaly_monitor, robot_state_manager, report_manager관리자 판단 결과
/office_robot/evidence/statusoffice_robot_msgs/msg/EvidenceStatusevidence_manageradmin_gui, report_manager증거 이미지 저장 결과
/office_robot/alarm/statusstd_msgs/msg/Boolsafety_manageradmin_gui경고음 또는 경고 상태

6.4 순찰 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/patrol/statusoffice_robot_msgs/msg/PatrolStatuspatrol_manageradmin_gui, report_manager, robot_state_manager현재 순찰 상태
/office_robot/patrol/routeoffice_robot_msgs/msg/PatrolRoutepatrol_manageradmin_gui현재 순찰 경로
/office_robot/patrol/current_pointstd_msgs/msg/Stringpatrol_manageradmin_gui, anomaly_monitor현재 이동 중인 순찰 지점
/office_robot/patrol/eventoffice_robot_msgs/msg/PatrolEventpatrol_managerreport_manager, admin_gui순찰 시작, 도착, 실패, 완료 이벤트
/office_robot/patrol/progressstd_msgs/msg/Float32patrol_manageradmin_gui전체 순찰 진행률
/office_robot/patrol/recovery_countstd_msgs/msg/Int32patrol_manageradmin_gui, report_manager이동 실패 후 복구 시도 횟수

/office_robot/patrol/progress 값은 0.0부터 1.0까지 사용한다.

0.0: 순찰 시작
0.5: 전체 경로의 50% 완료
1.0: 전체 순찰 완료

6.5 배터리 및 안전 토픽

토픽명자료형발행 노드구독 노드설명
/battery_statesensor_msgs/msg/BatteryStateturtlebot3_nodebattery_monitorTurtleBot3 기본 배터리 상태
/office_robot/battery/statusoffice_robot_msgs/msg/RobotBatteryStatusbattery_monitorrobot_state_manager, patrol_manager, admin_gui가공된 배터리 상태
/office_robot/battery/lowstd_msgs/msg/Boolbattery_monitorrobot_state_manager, patrol_manager, admin_gui저전압 상태
/office_robot/battery/criticalstd_msgs/msg/Boolbattery_monitorsafety_manager, robot_state_manager위험 배터리 상태
/office_robot/bumper/contactstd_msgs/msg/Boolsafety_managercmd_vel_selector, admin_gui충돌 또는 접촉 감지
/office_robot/obstacle/too_closestd_msgs/msg/Boolsafety_managercmd_vel_selector, patrol_manager근거리 장애물 감지

6.6 카메라 및 영상 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/camera/image_rawsensor_msgs/msg/Imagecamera_driverentrance_monitor, anomaly_monitor, admin_gui실시간 원본 영상
/office_robot/camera/image_compressedsensor_msgs/msg/CompressedImagecamera_driveradmin_gui원격 PC 전송용 압축 영상
/office_robot/camera/camera_infosensor_msgs/msg/CameraInfocamera_driver영상 처리 노드카메라 내부 파라미터
/office_robot/camera/detection_imagesensor_msgs/msg/CompressedImageanomaly_monitoradmin_gui객체 검출 결과가 표시된 영상

원격 PC GUI에서는 네트워크 부하를 줄이기 위해 /office_robot/camera/image_compressed 사용을 권장한다.

6.7 이동 및 위치 토픽

토픽명자료형발행 노드구독 노드설명
/odomnav_msgs/msg/Odometryturtlebot3_nodeNav2, robot_state_manager바퀴 오도메트리
/scansensor_msgs/msg/LaserScanlidar_driverSLAM, AMCL, Nav2, safety_manager라이다 스캔 데이터
/mapnav_msgs/msg/OccupancyGridslam_toolbox 또는 map_serverNav2, admin_gui사무실 지도
/amcl_posegeometry_msgs/msg/PoseWithCovarianceStampedamclpatrol_manager, admin_gui지도 기준 추정 위치
/tftf2_msgs/msg/TFMessageTF 관련 노드전체 위치 관련 노드동적 좌표 변환
/tf_statictf2_msgs/msg/TFMessagerobot_state_publisher전체 위치 관련 노드정적 좌표 변환
/office_robot/posegeometry_msgs/msg/PoseStampedrobot_state_manageradmin_gui, report_managerGUI 및 기록용 로봇 위치
/office_robot/current_locationstd_msgs/msg/Stringpatrol_manageradmin_gui, greeting_manager현재 위치의 논리적 이름

6.8 속도 명령 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/cmd_vel/navigationgeometry_msgs/msg/TwistNav2 속도 출력 노드cmd_vel_selector자율주행 속도 명령
/office_robot/cmd_vel/remotegeometry_msgs/msg/Twistremote_teleopcmd_vel_selector원격 PC 속도 명령
/office_robot/cmd_vel/safetygeometry_msgs/msg/Twistsafety_managercmd_vel_selector안전 정지 또는 회피 명령
/cmd_velgeometry_msgs/msg/Twistcmd_vel_selectorturtlebot3_nodeTurtleBot3에 전달되는 최종 속도 명령
/office_robot/cmd_vel/sourcestd_msgs/msg/Stringcmd_vel_selectoradmin_gui현재 선택된 속도 명령 출처

속도 명령 출처는 다음 값을 사용한다.

NAVIGATION
REMOTE
SAFETY
STOP

6.9 원격 GUI 토픽

토픽명자료형발행 노드구독 노드설명
/office_robot/gui/connectedstd_msgs/msg/Booladmin_guirobot_state_manager원격 GUI 연결 상태
/office_robot/gui/operator_namestd_msgs/msg/Stringadmin_guiadmin_request_manager, report_manager현재 관리자 이름
/office_robot/gui/selected_locationstd_msgs/msg/Stringadmin_guipatrol_managerGUI에서 선택한 이동 목적지
/office_robot/gui/messagestd_msgs/msg/String로봇 관리 노드admin_guiGUI 표시용 안내 메시지

7. 토픽 QoS 명세

ROS 2 통신 안정성을 위해 토픽 특성에 따라 QoS를 구분한다.

토픽 종류ReliabilityDurabilityHistoryDepth
카메라 영상Best EffortVolatileKeep Last2
라이다 스캔Best EffortVolatileKeep Last5
속도 명령ReliableVolatileKeep Last10
로봇 상태ReliableVolatileKeep Last10
이벤트ReliableVolatileKeep Last50
지도ReliableTransient LocalKeep Last1
운용 모드ReliableTransient LocalKeep Last1
순찰 경로ReliableTransient LocalKeep Last1

카메라와 라이다 데이터는 최신 데이터 전달이 중요하므로 오래된 메시지를 누적하지 않는다.

이상 상황 이벤트, 관리자 판단, 순찰 이벤트는 손실되면 안 되므로 Reliable을 사용한다.

8. 서비스 인터페이스 명세

8.1 운용 및 시스템 서비스

서비스명서비스 자료형서버 노드클라이언트 노드역할
/office_robot/set_modeoffice_robot_msgs/srv/SetOperationModerobot_state_manageradmin_gui주간, 야간, 원격, 대기 모드 변경
/office_robot/get_system_statusoffice_robot_msgs/srv/GetSystemStatusrobot_state_manageradmin_gui현재 시스템 상태 조회
/office_robot/reset_errorstd_srvs/srv/Triggerrobot_state_manageradmin_gui오류 상태 초기화
/office_robot/emergency_stopstd_srvs/srv/SetBoolsafety_manageradmin_gui비상정지 설정 또는 해제
/office_robot/system/shutdownstd_srvs/srv/Triggerrobot_state_manageradmin_gui로봇 프로그램 정상 종료 요청

8.2 순찰 서비스

서비스명서비스 자료형서버 노드클라이언트 노드역할
/office_robot/patrol/startoffice_robot_msgs/srv/StartPatrolpatrol_manageradmin_gui순찰 시작
/office_robot/patrol/stopstd_srvs/srv/Triggerpatrol_manageradmin_gui현재 순찰 중지
/office_robot/patrol/pausestd_srvs/srv/Triggerpatrol_manageradmin_gui현재 위치에서 순찰 일시정지
/office_robot/patrol/resumestd_srvs/srv/Triggerpatrol_manageradmin_gui일시정지된 순찰 재개
/office_robot/patrol/get_routeoffice_robot_msgs/srv/GetPatrolRoutepatrol_manageradmin_gui현재 순찰 경로 조회
/office_robot/patrol/set_routeoffice_robot_msgs/srv/SetPatrolRoutepatrol_manageradmin_gui순찰 경로 설정

8.3 증거 및 보고서 서비스

서비스명서비스 자료형서버 노드클라이언트 노드역할
/office_robot/evidence/captureoffice_robot_msgs/srv/CaptureEvidenceevidence_manageranomaly_monitor, admin_gui현재 카메라 영상 저장
/office_robot/evidence/get_pathoffice_robot_msgs/srv/GetEvidencePathevidence_manageradmin_gui, report_manager이벤트별 증거 파일 경로 조회
/office_robot/report/createoffice_robot_msgs/srv/CreateReportreport_manageradmin_gui순찰 또는 야간 보고서 생성
/office_robot/report/get_latestoffice_robot_msgs/srv/GetLatestReportreport_manageradmin_gui최근 보고서 조회

8.4 방문자 서비스

서비스명서비스 자료형서버 노드클라이언트 노드역할
/office_robot/visitor/save_memooffice_robot_msgs/srv/SaveVisitorMemovisitor_memo_manageradmin_gui방문자 메모 저장
/office_robot/visitor/get_memooffice_robot_msgs/srv/GetVisitorMemovisitor_memo_manageradmin_gui방문자 메모 조회
/office_robot/visitor/complete_guidancestd_srvs/srv/Triggergreeting_manageradmin_gui방문자 안내 완료 처리

9. 서비스 공통 응답 규칙

사용자 정의 서비스 응답은 다음 필드를 기본으로 사용한다.

bool success
int32 result_code
string message

success는 요청의 최종 처리 성공 여부를 나타낸다.

result_code는 다음 기준을 사용한다.

코드이름설명
0SUCCESS정상 처리
1INVALID_REQUEST잘못된 요청값
2INVALID_MODE현재 운용 모드에서 실행할 수 없음
3ROBOT_BUSY다른 임무 수행 중
4NAVIGATION_FAILED이동 명령 실패
5SENSOR_ERROR센서 오류
6LOW_BATTERY배터리 부족
7EMERGENCY_STOP_ACTIVE비상정지 활성화 상태
8NOT_FOUND요청한 데이터 또는 파일 없음
9TIMEOUT제한 시간 초과
10INTERNAL_ERROR내부 처리 오류

서비스 실패 시 message에는 관리자 GUI에 바로 표시할 수 있는 설명을 작성한다.

success: false
result_code: 6
message: "배터리 잔량이 부족하여 순찰을 시작할 수 없습니다."

10. 액션 인터페이스 명세

장시간 이동, 순찰, 방문자 안내와 같이 완료까지 시간이 필요한 작업은 ROS 2 서비스가 아닌 액션을 사용한다.

액션명액션 자료형액션 서버액션 클라이언트역할
/navigate_to_posenav2_msgs/action/NavigateToPoseNav2patrol_manager좌표로 지정된 위치 이동
/office_robot/navigate_to_named_locationoffice_robot_msgs/action/NavigateToNamedLocationpatrol_manageradmin_gui, greeting_manager이름으로 지정된 장소 이동
/office_robot/execute_patroloffice_robot_msgs/action/ExecutePatrolpatrol_manageradmin_gui, robot_state_manager전체 순찰 경로 수행
/office_robot/guide_visitoroffice_robot_msgs/action/GuideVisitorgreeting_manageradmin_gui방문자를 지정 장소까지 안내
/office_robot/execute_errandoffice_robot_msgs/action/ExecuteErrandpatrol_manageradmin_gui지정 장소로 이동하는 심부름 임무 수행

11. 이름 기반 장소 이동 액션

11.1 NavigateToNamedLocation.action

string location_name
float32 timeout_sec
bool return_to_start
---
bool success
int32 result_code
string message
string final_location
---
string navigation_state
float32 distance_remaining
float32 progress
string current_location

11.2 Goal 필드

필드설명
location_name이동할 장소 이름
timeout_sec이동 제한 시간
return_to_start목적지 도착 후 출발지로 복귀할지 여부

11.3 Result 필드

필드설명
success이동 성공 여부
result_code결과 코드
message결과 설명
final_location최종 도착 위치

11.4 Feedback 필드

필드설명
navigation_state현재 이동 상태
distance_remaining목적지까지 남은 거리
progress이동 진행률
current_location현재 논리적 위치 이름

12. 순찰 수행 액션

12.1 ExecutePatrol.action

string route_id
int32 repeat_count
bool detect_anomaly
bool return_to_start
---
bool success
int32 result_code
string message
int32 completed_cycle_count
int32 detected_anomaly_count
---
string patrol_state
string current_location
int32 current_point_index
int32 total_point_count
int32 completed_cycle_count
float32 progress

12.2 순찰 처리 기준

  • repeat_count1이면 순찰 경로를 한 번 수행한다.
  • repeat_count0이면 관리자 중지 요청 전까지 반복한다.
  • detect_anomalytrue이면 순찰 중 이상 감지 기능을 활성화한다.
  • return_to_starttrue이면 순찰 종료 후 시작 위치로 복귀한다.
  • 액션 취소 요청을 받으면 현재 이동 목표를 취소하고 정지한다.
  • 비상정지가 활성화되면 액션은 즉시 실패 처리한다.

13. 방문자 안내 액션

13.1 GuideVisitor.action

string visitor_id
string destination_name
string guidance_message
float32 timeout_sec
---
bool success
int32 result_code
string message
string final_location
---
string guidance_state
string current_location
float32 distance_remaining
float32 progress

13.2 방문자 안내 상태

WAITING
GREETING
MOVING
ARRIVED
COMPLETED
CANCELED
FAILED

14. 사용자 정의 메시지 패키지

사용자 정의 인터페이스는 다음 패키지에 작성한다.

office_robot_msgs

패키지 기본 구조는 다음과 같다.

office_robot_msgs/
├── CMakeLists.txt
├── package.xml
├── msg/
├── srv/
└── action/

15. AnomalyEvent.msg

string event_id
builtin_interfaces/Time detected_time
string event_type
string severity
string location_name
geometry_msgs/PoseStamped robot_pose
float32 confidence
string image_path
string description
bool admin_confirmation_required
string detection_node

15.1 필드 설명

필드설명
event_id이상 이벤트 고유 번호
detected_time감지 시각
event_type이상 상황 종류
severity위험도
location_name이상 상황이 감지된 장소
robot_pose감지 당시 로봇 위치
confidence감지 신뢰도
image_path증거 이미지 저장 경로
description이상 상황 설명
admin_confirmation_required관리자 판단 필요 여부
detection_node이벤트를 생성한 노드 이름

15.2 event_type 값

UNKNOWN_PERSON
RESTRICTED_AREA_ENTRY
LONG_STAY
FALL_DETECTED
SMOKE_DETECTED
FIRE_DETECTED
ABANDONED_OBJECT
MOVED_OBJECT
DOOR_OPEN
SENSOR_FAILURE
ROBOT_BLOCKED
OTHER

15.3 severity 값

INFO
WARNING
CRITICAL

15.4 confidence 범위

0.0 이상 1.0 이하

16. AdminDecision.msg

string event_id
string decision
string operator_name
string comment
builtin_interfaces/Time decision_time
bool alarm_required
bool patrol_continue

16.1 decision 값

CONFIRMED
FALSE_ALARM
IGNORE
CALL_SECURITY
CALL_EMERGENCY
RECHECK

16.2 필드 설명

필드설명
event_id판단 대상 이벤트 번호
decision관리자 판단 결과
operator_name판단을 입력한 관리자 이름
comment관리자 의견
decision_time판단 입력 시각
alarm_required로봇 경고 동작 필요 여부
patrol_continue판단 후 순찰 계속 여부

17. PatrolStatus.msg

bool patrol_active
bool patrol_paused
string route_id
string current_location
int32 current_point_index
int32 total_point_count
int32 completed_cycle_count
int32 target_cycle_count
string navigation_state
float32 progress
float32 distance_remaining
builtin_interfaces/Time started_time
builtin_interfaces/Time updated_time

17.1 navigation_state 값

IDLE
STARTING
NAVIGATING
ARRIVED
WAITING
PAUSED
RECOVERING
RETURNING
COMPLETED
CANCELED
FAILED

17.2 필드 설명

필드설명
patrol_active순찰 활성화 여부
patrol_paused순찰 일시정지 여부
route_id현재 순찰 경로 번호
current_location현재 순찰 위치
current_point_index현재 순찰 지점 인덱스
total_point_count전체 순찰 지점 수
completed_cycle_count완료한 순찰 횟수
target_cycle_count목표 순찰 횟수
navigation_state현재 이동 상태
progress순찰 진행률
distance_remaining현재 목적지까지 남은 거리
started_time순찰 시작 시각
updated_time상태 갱신 시각

18. PatrolRoute.msg

string route_id
string route_name
string[] location_names
geometry_msgs/PoseStamped[] poses
float32[] wait_times
bool loop
builtin_interfaces/Time updated_time

location_names, poses, wait_times 배열의 크기는 동일해야 한다.

예시는 다음과 같다.

location_names:
- entrance
- meeting_room
- server_room
- office_center

wait_times:
- 5.0
- 3.0
- 10.0
- 5.0

19. PatrolEvent.msg

string event_id
string patrol_event_type
string route_id
string location_name
int32 point_index
string description
builtin_interfaces/Time event_time

patrol_event_type 값은 다음을 사용한다.

PATROL_STARTED
POINT_REACHED
POINT_SKIPPED
NAVIGATION_FAILED
RECOVERY_STARTED
RECOVERY_COMPLETED
PATROL_PAUSED
PATROL_RESUMED
PATROL_COMPLETED
PATROL_CANCELED

20. VisitorEvent.msg

string visitor_id
builtin_interfaces/Time detected_time
int32 person_count
string entrance_name
float32 confidence
string image_path
bool guidance_requested
string description

방문자 식별이 불가능한 경우에도 visitor_id는 이벤트별 고유값을 생성한다.

VISITOR_20260718_143015_001

21. VisitorMemo.msg

string visitor_id
string visitor_name
string company_name
string contact
string purpose
string destination_name
string operator_name
string memo
builtin_interfaces/Time created_time

개인정보가 포함된 방문자 메모는 원격 PC 또는 승인된 저장 장치에 저장한다.

22. RobotBatteryStatus.msg

float32 voltage
float32 percentage
string battery_state
bool charging
bool low_battery
bool critical_battery
float32 estimated_operation_time_min
builtin_interfaces/Time updated_time

battery_state 값은 다음을 사용한다.

NORMAL
LOW
CRITICAL
CHARGING
FULL
UNKNOWN

배터리 기준값은 다음과 같이 설정한다.

구분배터리 백분율
정상30% 초과
낮음15% 초과 30% 이하
위험15% 이하

실제 배터리 기준은 TurtleBot3 배터리 특성과 실험 결과에 따라 조정할 수 있다.

23. SystemStatus.msg

string operation_mode
string system_state
bool navigation_ready
bool camera_ready
bool lidar_ready
bool battery_ready
bool gui_connected
bool emergency_stop_active
string current_task
string error_message
builtin_interfaces/Time updated_time

system_state 값은 다음을 사용한다.

INITIALIZING
READY
RUNNING
WARNING
ERROR
SHUTTING_DOWN

24. EvidenceStatus.msg

string event_id
bool capture_success
string image_path
string file_name
string error_message
builtin_interfaces/Time captured_time

25. ErrorEvent.msg

string error_id
string source_node
int32 error_code
string severity
string description
bool recovery_possible
builtin_interfaces/Time occurred_time

26. SetOperationMode.srv

string requested_mode
string operator_name
---
bool success
int32 result_code
string message
string previous_mode
string current_mode

26.1 모드 변경 제한

현재 모드요청 모드처리
IDLEDAY허용
IDLENIGHT허용
IDLEREMOTE허용
DAYNIGHT허용
NIGHTREMOTE순찰 중지 후 허용
REMOTENIGHT원격 속도 명령 정지 후 허용
모든 모드EMERGENCY_STOP즉시 허용
EMERGENCY_STOP일반 모드비상정지 해제 후 허용

27. StartPatrol.srv

string route_id
int32 repeat_count
bool detect_anomaly
bool return_to_start
---
bool success
int32 result_code
string message
string patrol_id

27.1 순찰 시작 성공 조건

  • 로봇 운용 모드가 NIGHT 또는 순찰 허용 모드여야 한다.
  • 비상정지가 해제되어 있어야 한다.
  • Nav2가 정상 상태여야 한다.
  • 지도와 현재 위치가 설정되어 있어야 한다.
  • 배터리가 위험 상태가 아니어야 한다.
  • 요청한 순찰 경로가 등록되어 있어야 한다.
  • 다른 이동 임무가 실행 중이지 않아야 한다.

28. CaptureEvidence.srv

string event_id
string file_prefix
bool include_detection_overlay
---
bool success
int32 result_code
string message
string image_path
builtin_interfaces/Time captured_time

이미지 파일명은 다음 규칙을 사용한다.

{event_id}_{YYYYMMDD}_{HHMMSS}.jpg

예시는 다음과 같다.

ANOMALY_20260718_001_20260718_231532.jpg

29. SaveVisitorMemo.srv

office_robot_msgs/VisitorMemo memo
---
bool success
int32 result_code
string message
string memo_id

30. CreateReport.srv

string report_type
builtin_interfaces/Time start_time
builtin_interfaces/Time end_time
bool include_images
string operator_name
---
bool success
int32 result_code
string message
string report_id
string report_path

report_type 값은 다음을 사용한다.

DAILY
NIGHT_PATROL
ANOMALY
VISITOR
SYSTEM

31. 좌표계 명세

31.1 표준 좌표계

좌표계역할
map사무실 지도 기준 전역 좌표계
odom로봇 이동에 따른 연속 지역 좌표계
base_footprint지면에 투영된 로봇 중심 좌표계
base_linkTurtleBot3 본체 중심 좌표계
base_scan라이다 센서 좌표계
camera_link카메라 본체 좌표계
camera_optical_frame영상 처리용 카메라 좌표계

31.2 TF 연결 구조

map
└── odom
    └── base_footprint
        └── base_link
            ├── base_scan
            ├── camera_link
            │   └── camera_optical_frame
            └── wheel_left_link
            └── wheel_right_link

31.3 위치 기준

지도 기반 목적지, 순찰 지점, 이상 상황 위치는 모두 map 좌표계를 사용한다.

로봇 기준 장애물 위치 또는 센서 측정값은 센서 좌표계 또는 base_link 좌표계를 사용할 수 있다.

관리자 GUI에 표시되는 위치는 map 좌표계로 변환한 후 사용한다.

32. 좌표축 방향

ROS REP-103 기준을 사용한다.

방향
X축로봇 전방
Y축로봇 좌측
Z축로봇 위쪽

회전 방향은 오른손 법칙을 사용한다.

평면 주행 시 회전은 Z축 기준 Yaw 값을 사용한다.

양의 Yaw: 반시계 방향 회전
음의 Yaw: 시계 방향 회전

33. 단위 명세

항목기준 단위
위치 좌표미터 m
거리미터 m
선속도미터/초 m/s
가속도미터/초² m/s²
각도라디안 rad
각속도라디안/초 rad/s
시간ROS 2 Time
제한 시간s
온도섭씨 °C
배터리 전압볼트 V
배터리 잔량0.0부터 1.0
신뢰도0.0부터 1.0
진행률0.0부터 1.0

GUI에서 배터리를 백분율로 표시할 경우 다음과 같이 변환한다.

화면 표시값 = percentage × 100

34. TurtleBot3 Burger 속도 제한

안전한 실내 운용을 위해 소프트웨어 속도 제한을 적용한다.

운용 상태최대 선속도최대 각속도
자율 순찰0.18 m/s1.0 rad/s
방문자 안내0.12 m/s0.8 rad/s
원격 조종0.15 m/s1.0 rad/s
출입구 근처0.08 m/s0.5 rad/s
이상 상황 접근0.05 m/s0.4 rad/s

최종 속도 명령은 TurtleBot3 Burger의 하드웨어 최대 속도를 초과해서는 안 된다.

35. 원격 조종 명세

원격 PC의 remote_teleop 노드는 /office_robot/cmd_vel/remote 토픽으로 속도 명령을 발행한다.

원격 조종은 운용 모드가 REMOTE일 때만 허용한다.

원격 속도 명령이 일정 시간 이상 수신되지 않으면 로봇은 자동 정지해야 한다.

항목기준
원격 명령 발행 주기10 Hz 이상
명령 타임아웃0.5초
타임아웃 발생 시 처리선속도와 각속도 0으로 설정
비상정지 우선순위원격 명령보다 높음
안전 센서 우선순위원격 명령보다 높음

36. 속도 명령 우선순위

cmd_vel_selector 노드는 여러 속도 명령 중 하나를 선택하여 /cmd_vel로 발행한다.

우선순위는 다음과 같다.

1순위: 비상정지
2순위: 안전 정지 또는 충돌 방지
3순위: 원격 조종
4순위: Nav2 자율주행
5순위: 정지

36.1 선택 규칙

  • 비상정지가 활성화되면 항상 정지 명령을 출력한다.
  • 근거리 장애물이 감지되면 전진 명령을 차단한다.
  • REMOTE 모드에서는 원격 속도 명령을 선택한다.
  • DAY, NIGHT, RETURN_TO_CHARGE 모드에서는 Nav2 속도 명령을 선택한다.
  • 유효한 속도 명령이 없으면 정지 명령을 출력한다.
  • 출력 명령은 반드시 속도 제한을 적용한 후 발행한다.

37. 논리적 장소 이름 명세

지도상의 주요 장소에는 고유한 영문 이름을 지정한다.

장소 이름설명
home로봇 시작 위치
charging_station충전 위치
entrance사무실 출입구
reception안내 데스크
office_center사무실 중앙
meeting_room_1회의실 1
meeting_room_2회의실 2
server_room서버실
storage_room창고
emergency_exit비상구

장소 이름은 코드, YAML 파일, GUI 및 보고서에서 동일하게 사용한다.

장소 좌표는 YAML 파일로 관리할 수 있다.

locations:
  home:
    x: 0.0
    y: 0.0
    yaw: 0.0

  entrance:
    x: 2.5
    y: 1.2
    yaw: 1.57

  meeting_room_1:
    x: 4.8
    y: -1.3
    yaw: 0.0

  server_room:
    x: 7.2
    y: 2.1
    yaw: 3.14

38. 순찰 경로 명세

순찰 경로는 경로 번호와 장소 이름 배열로 구성한다.

patrol_routes:
  night_route_01:
    route_name: "야간 기본 순찰"
    repeat_count: 3
    return_to_start: true
    points:
      - location: entrance
        wait_time: 5.0
      - location: meeting_room_1
        wait_time: 3.0
      - location: server_room
        wait_time: 10.0
      - location: storage_room
        wait_time: 5.0
      - location: office_center
        wait_time: 3.0

경로 번호는 영문 소문자, 숫자, 밑줄을 사용한다.

night_route_01
day_route_01
security_route_02

39. 이벤트 식별자 규칙

이벤트마다 중복되지 않는 식별자를 생성한다.

39.1 이상 이벤트

ANOMALY_{YYYYMMDD}_{HHMMSS}_{순번}

예시:

ANOMALY_20260718_231532_001

39.2 방문자 이벤트

VISITOR_{YYYYMMDD}_{HHMMSS}_{순번}

39.3 순찰 이벤트

PATROL_{YYYYMMDD}_{HHMMSS}_{순번}

39.4 오류 이벤트

ERROR_{YYYYMMDD}_{HHMMSS}_{순번}

40. 시간 명세

모든 ROS 2 메시지 시간은 builtin_interfaces/msg/Time을 사용한다.

로봇 PC와 원격 PC의 시스템 시간은 동기화해야 한다.

동일 네트워크에서 NTP 또는 Chrony를 사용하여 시간을 맞춘다.

로그와 보고서에서 시간 문자열을 표시할 경우 다음 형식을 사용한다.

YYYY-MM-DD HH:MM:SS

예시는 다음과 같다.

2026-07-18 23:15:32

41. 원격 PC 통신 조건

로봇 PC와 원격 PC는 동일한 ROS 도메인을 사용해야 한다.

export ROS_DOMAIN_ID=30

양쪽 PC에서 동일한 값을 설정한다.

로봇 PC:

export ROS_DOMAIN_ID=30
export TURTLEBOT3_MODEL=burger

원격 PC:

export ROS_DOMAIN_ID=30
export TURTLEBOT3_MODEL=burger

ROS_LOCALHOST_ONLY는 원격 접속을 위해 0으로 설정한다.

export ROS_LOCALHOST_ONLY=0

42. 원격 GUI 표시 항목

관리자 GUI는 다음 정보를 표시해야 한다.

화면 영역표시 내용
로봇 상태운용 모드, 시스템 상태, 현재 임무
지도사무실 지도, 로봇 위치, 순찰 경로
배터리전압, 잔량, 충전 상태
카메라실시간 압축 영상
순찰현재 위치, 목표 위치, 진행률, 순찰 횟수
방문자감지 인원, 방문자 이벤트, 메모
이상 상황이벤트 유형, 위치, 신뢰도, 증거 이미지
관리자 판단승인, 오탐, 경비 호출, 재확인
원격 조종전진, 후진, 좌회전, 우회전, 정지
안전비상정지, 장애물 경고, 통신 상태
보고서최근 순찰 및 이상 상황 보고서

43. 원격 GUI 명령 제한

GUI 버튼은 로봇 상태에 따라 활성화 또는 비활성화해야 한다.

버튼활성화 조건
주간 모드비상정지 해제 상태
야간 모드비상정지 해제 및 Nav2 준비 상태
원격 모드비상정지 해제 상태
순찰 시작야간 모드, 배터리 정상, Nav2 준비
순찰 중지순찰 실행 중
원격 조종원격 모드
증거 촬영카메라 정상 상태
보고서 생성이벤트 또는 순찰 기록 존재
비상정지항상 활성화
비상정지 해제로봇 주변 안전 확인 후 활성화

44. 통신 끊김 처리

원격 PC와 로봇 PC 간 통신이 끊어졌을 때 로봇은 안전하게 동작해야 한다.

44.1 원격 조종 중 통신 끊김

  • 원격 속도 명령 수신이 0.5초 이상 중단되면 즉시 정지한다.
  • 운용 모드를 IDLE로 변경한다.
  • 통신 끊김 이벤트를 기록한다.

44.2 자율 순찰 중 GUI 통신 끊김

  • 순찰은 설정에 따라 계속 수행할 수 있다.
  • 관리자 승인이 필요한 이상 이벤트가 발생하면 로봇은 안전 위치에서 정지한다.
  • GUI 재연결 후 이벤트를 다시 전송한다.

44.3 heartbeat 기준

/office_robot/heartbeat 토픽은 1 Hz 이상의 주기로 발행한다.

원격 GUI는 3초 이상 heartbeat가 수신되지 않으면 통신 끊김으로 판단한다.

45. 비상정지 처리

비상정지 요청이 발생하면 다음 순서로 처리한다.

  1. /office_robot/emergency_stop 서비스 요청을 수신한다.
  2. safety_manager가 비상정지 상태를 활성화한다.
  3. 모든 Nav2 이동 목표를 취소한다.
  4. 실행 중인 순찰 액션을 취소한다.
  5. /cmd_vel에 정지 명령을 반복 발행한다.
  6. /office_robot/emergency_stop/statustrue로 발행한다.
  7. 관리자 GUI에 비상정지 상태를 표시한다.
  8. 비상정지 발생 시간과 원인을 기록한다.

정지 명령은 다음과 같다.

linear.x = 0.0
linear.y = 0.0
linear.z = 0.0
angular.x = 0.0
angular.y = 0.0
angular.z = 0.0

비상정지는 관리자가 주변 안전을 확인한 후 명시적으로 해제해야 한다.

46. 배터리 부족 처리

46.1 낮은 배터리

배터리 잔량이 30% 이하이면 다음을 수행한다.

  • GUI에 배터리 경고를 표시한다.
  • 새로운 장거리 임무 시작을 제한할 수 있다.
  • 현재 순찰을 마친 후 충전 위치 복귀를 준비한다.

46.2 위험 배터리

배터리 잔량이 15% 이하이면 다음을 수행한다.

  • 새로운 순찰 시작을 거부한다.
  • 실행 중인 순찰을 중지한다.
  • 운용 모드를 RETURN_TO_CHARGE로 변경한다.
  • charging_station으로 이동한다.
  • 충전 위치 이동 실패 시 안전한 위치에 정지한다.

47. 이상 상황 처리 절차

  1. anomaly_monitor가 이상 상황을 감지한다.
  2. 이벤트 번호를 생성한다.
  3. 현재 위치와 감지 시간을 기록한다.
  4. evidence_manager에 이미지 저장을 요청한다.
  5. /office_robot/anomaly/event를 발행한다.
  6. 관리자 확인이 필요하면 로봇을 안전 위치에 정지시킨다.
  7. 원격 GUI에서 이벤트 정보와 증거 이미지를 표시한다.
  8. 관리자가 판단 결과를 입력한다.
  9. /office_robot/admin/decision 토픽으로 판단 결과를 발행한다.
  10. 판단 결과에 따라 순찰 계속, 경고, 재확인 또는 임무 중지를 수행한다.
  11. 모든 결과를 보고서에 기록한다.

48. 관리자 판단 처리 기준

판단값로봇 처리
CONFIRMED이상 상황 확정, 이벤트 기록 유지
FALSE_ALARM오탐 처리 후 순찰 계속
IGNORE추가 동작 없이 이벤트 종료
CALL_SECURITY경비 호출 상태 표시 후 대기
CALL_EMERGENCY긴급 상황 상태로 전환 후 대기
RECHECK동일 장소 재촬영 또는 재탐색

49. 순찰 이동 실패 처리

Nav2 이동 실패 시 patrol_manager는 다음 순서로 복구를 시도한다.

  1. 현재 이동 목표 취소
  2. 로봇 정지
  3. 장애물 제거 대기
  4. 제자리 회전
  5. 비용지도 초기화
  6. 동일 목표 재요청
  7. 재시도 횟수 초과 시 다음 순찰 지점으로 이동하거나 순찰 실패 처리

기본 재시도 횟수는 3회로 한다.

1회 실패: 동일 목표 재시도
2회 실패: 비용지도 초기화 후 재시도
3회 실패: 순찰 실패 또는 해당 지점 건너뛰기

50. 로그 및 보고서 기록 항목

다음 정보는 파일 또는 데이터베이스에 기록한다.

  • 시스템 시작 및 종료 시간
  • 운용 모드 변경 기록
  • 순찰 시작 및 종료 시간
  • 순찰 경로
  • 순찰 지점별 도착 시간
  • 이동 실패 및 복구 횟수
  • 배터리 상태
  • 방문자 감지 기록
  • 방문자 메모
  • 이상 상황 이벤트
  • 증거 이미지 경로
  • 관리자 판단 결과
  • 비상정지 발생 기록
  • 노드 오류 기록
  • 원격 GUI 연결 및 해제 기록

51. 파일 저장 경로

기본 저장 경로는 다음과 같이 구성한다.

~/office_robot_data/
├── maps/
├── routes/
├── evidence/
│   ├── anomaly/
│   └── visitor/
├── reports/
├── logs/
└── config/

예시는 다음과 같다.

~/office_robot_data/maps/office_map.yaml
~/office_robot_data/routes/night_route_01.yaml
~/office_robot_data/evidence/anomaly/ANOMALY_20260718_231532_001.jpg
~/office_robot_data/reports/NIGHT_PATROL_20260718.pdf

52. 인터페이스 개발 규칙

  • 모든 개발자는 본 명세에 정의된 토픽명과 자료형을 그대로 사용한다.
  • 임의로 토픽명을 변경하지 않는다.
  • 사용자 정의 메시지는 office_robot_msgs 패키지에 통합한다.
  • 문자열 상태값은 대문자 영문과 밑줄을 사용한다.
  • 위치와 거리는 미터를 사용한다.
  • 각도는 라디안을 사용한다.
  • 시간은 ROS 2 Time을 사용한다.
  • 모든 서비스는 성공 여부와 결과 코드를 반환한다.
  • 장시간 작업은 액션으로 구현한다.
  • GUI와 로봇 노드가 동일한 상태값을 사용한다.
  • 토픽과 서비스 변경 시 전체 개발자에게 변경 내용을 공유한다.
  • 기존 인터페이스를 변경해야 할 경우 버전 번호를 증가시킨다.

53. 인터페이스 버전 관리

인터페이스 버전은 다음 형식을 사용한다.

MAJOR.MINOR.PATCH

예시는 다음과 같다.

1.0.0
변경 유형버전 증가
토픽명 또는 자료형 변경MAJOR
필드 추가 또는 서비스 추가MINOR
설명 수정 또는 오류 수정PATCH

인터페이스 버전은 다음 토픽으로 발행할 수 있다.

/office_robot/interface_version

자료형:

std_msgs/msg/String

발행값 예시:

1.0.0

54. 최종 인터페이스 목록

54.1 핵심 토픽

/office_robot/operation_mode
/office_robot/system/status
/office_robot/entrance/person_count
/office_robot/visitor/event
/office_robot/anomaly/event
/office_robot/admin/decision
/office_robot/patrol/status
/office_robot/battery/status
/office_robot/camera/image_compressed
/office_robot/cmd_vel/navigation
/office_robot/cmd_vel/remote
/office_robot/emergency_stop/status
/cmd_vel
/odom
/scan
/map
/amcl_pose
/tf
/tf_static

54.2 핵심 서비스

/office_robot/set_mode
/office_robot/get_system_status
/office_robot/patrol/start
/office_robot/patrol/stop
/office_robot/patrol/pause
/office_robot/patrol/resume
/office_robot/evidence/capture
/office_robot/report/create
/office_robot/visitor/save_memo
/office_robot/emergency_stop

54.3 핵심 액션

/navigate_to_pose
/office_robot/navigate_to_named_location
/office_robot/execute_patrol
/office_robot/guide_visitor
/office_robot/execute_errand

54.4 핵심 사용자 정의 메시지

AnomalyEvent.msg
AdminDecision.msg
PatrolStatus.msg
PatrolRoute.msg
PatrolEvent.msg
VisitorEvent.msg
VisitorMemo.msg
RobotBatteryStatus.msg
SystemStatus.msg
EvidenceStatus.msg
ErrorEvent.msg

작성 파일 견본 :

Leave a Comment