get_state_led_rule (자동 모드)

이 절에서는 자동 운전 중에 get_state_led_rule을 사용하는 방법을 설명합니다. 이 함수는 LED 규칙을 반환합니다(0 = 기본, 1 = 상태별 사용자 지정, 2 = 명령별 사용자 지정). 호출이 거부된 경우에도 0을 반환합니다.

자동 모드에서만, 컨트롤러 v3.4 이상에서 사용할 수 있습니다. 다른 모드이거나 이전 버전 컨트롤러이면 0을 반환합니다. 모드는 get_robot_mode가 반환하는 값으로 확인합니다.

일반적인 사용법

  • 사용자 지정 색상을 제어하기 전이나 후에 현재 적용된 LED 규칙을 확인합니다.

  • 외부 UI 표시등을 로봇의 LED 동작과 맞춥니다.

  • 진단을 위해 LED 규칙을 로그로 남깁니다.

예제

LED 함수는 다른 모드에서 거부되므로, 예제에서는 LED 함수를 호출하기 전에 제어권(Control Authority)을 얻고 자동 모드로 설정합니다.

#include <atomic>
#include <chrono>
#include <cstdio>
#include <thread>

std::atomic<bool> g_bHasControlAuthority(false);

void OnMonitoringAccessControlCB(const MONITORING_ACCESS_CONTROL eAccess)
{
    if (eAccess == MONITORING_ACCESS_CONTROL_GRANT)
        g_bHasControlAuthority = true;
}

drfl.set_on_monitoring_access_control(OnMonitoringAccessControlCB);
if (!drfl.open_connection("192.168.137.100")) return 1;
drfl.manage_access_control(MANAGE_ACCESS_CONTROL_FORCE_REQUEST);
while (!g_bHasControlAuthority)
    std::this_thread::sleep_for(std::chrono::milliseconds(100));

// 자동 모드가 아니면 LED 함수가 거부됩니다
if (!drfl.set_robot_mode(ROBOT_MODE_AUTONOMOUS)) return 1;

unsigned char rule = drfl.get_state_led_rule();
printf("[LED] Current LED rule: %d\n", rule);

if (rule == 0)
    printf("LED rule: Default\n");
else if (rule == 1)
    printf("LED rule: Custom by state\n");
else if (rule == 2)
    printf("LED rule: Custom by command\n");

이 함수로 컨트롤러가 현재 적용 중인 LED 규칙을 확인할 수 있어, 일관된 시각 표시 정책을 유지하는 데 도움이 됩니다.

팁

  • LED가 기본 규칙을 따르는지 사용자 지정 규칙을 따르는지 확인할 때 유용합니다.

  • 필요하면 state_led_reset과 함께 사용해 기본 LED 규칙으로 되돌리세요.

  • set_state_led_color나 set_state_led_off를 호출한 후에는 규칙이 2(명령별 사용자 지정)가 됩니다.