5.3 제어권 관리
로봇 컨트롤러는 하나의 애플리케이션만 제어할 수 있도록 구성되어 있습니다. 따라서 사용자 애플리케이션은 로봇 초기화가 끝난 뒤 manage_access_control 함수와 TOnMonitoringAccessControlCB 콜백 함수로 제어권을 얻고 넘겨주는 로직을 구현해야 하며, 제어권을 가진 동안에만 제어 명령을 보내야 합니다.
컨트롤러는 제어권(Control Authority)이 없는 클라이언트의 요청을 get_system_version, get_safety_configuration, setup_monitoring_version을 제외하고 모두 무시합니다. 제어권이 없는 클라이언트도 모니터링 데이터, 상태 콜백, 알람 콜백은 받습니다. 위치와 상태 정보는 모니터링 getter 함수(get_current_posj, get_robot_state, …)로 확인하세요.
제어권은 요청이 있을 때만 넘어갑니다. 다른 클라이언트(예: 티치펜던트)가 제어권을 요청하면 제어권을 가진 쪽이 TOnMonitoringAccessControlCB로 MONITORING_ACCESS_CONTROL_REQUEST를 받습니다. 다른 클라이언트가 MANAGE_ACCESS_CONTROL_REQUEST를 보내면, 제어권을 가진 쪽이 manage_access_control(MANAGE_ACCESS_CONTROL_RESPONSE_YES)로 응답해야만 제어권이 넘어갑니다. 이때 요청한 쪽은 GRANT를, 제어권을 가졌던 쪽은 LOSS를 받습니다. 제어권을 가진 쪽이 MANAGE_ACCESS_CONTROL_RESPONSE_NO로 응답하거나 응답하지 않으면 요청한 쪽은 제어권을 얻지 못하며, 첫 요청이 처리되지 않은 동안에는 이후 요청이 전달되지 않습니다. 요청 없이 제어권을 내려놓는 함수는 없습니다. manage_access_control은 요청을 보내자마자 반환하고, 결과는 나중에 TOnMonitoringAccessControlCB로 전달됩니다. 애플리케이션이 티치펜던트에 제어권을 넘겨야 한다면 REQUEST에 RESPONSE_YES로 응답하세요. MANAGE_ACCESS_CONTROL_FORCE_REQUEST를 보내는 클라이언트는 응답 없이 제어권을 가져갑니다.