Skip to content

3.2 ControllerInfo 정보 클래스

개요

ControllerInfo 는 컨트롤러의 기본 상태 조회와 일부 기본 제어를 담당합니다. 버전, 컨트롤러 상태, 로봇 상태, 서보 상태, 소프트 모드, 사용자 조작 모드, 상위 PC keepalive 동작을 포함합니다.

사용 전제

ControllerInfo 의 모든 인터페이스는 먼저 Arm::Connect() 가 성공해야 사용할 수 있습니다. 인터페이스 모듈이 바인딩되지 않은 경우:

  • 조회 인터페이스는 빈 문자열 또는 UNKNOWN 을 반환하고 상태 코드는 OTHER_ERR 입니다.
  • 제어 인터페이스는 일반적으로 OTHER_ERR 를 반환합니다.
  • AcquireAccess() / ReleaseAccess() 는 상태 코드가 없으며, 연결되지 않은 경우 바로 반환합니다.

3.2.1 조회 인터페이스

3.2.1.1 로봇 컨트롤러 버전 가져오기

cpp
GetControllerVersion() -> std::pair<std::string, STATUS_CODE>
항목설명
설명Agilebot 로봇 컨트롤러의 현재 버전을 가져옵니다.
요청 파라미터파라미터 없음
반환값std::string: 컨트롤러 버전
STATUS_CODE: 함수 실행 결과
비고Arm::Connect() 내부에서도 이 버전을 읽어 arm.version 에 채웁니다.
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.1.2 현재 컨트롤러 실행 상태 가져오기

cpp
GetCtrlStatus() -> std::pair<CtrlStatusEnum, STATUS_CODE>
항목설명
설명Agilebot 로봇 컨트롤러의 현재 실행 상태를 가져옵니다.
요청 파라미터파라미터 없음
반환값CtrlStatusEnum: 컨트롤러 실행 상태
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.1.3 로봇 실행 상태 가져오기

cpp
GetRobotStatus() -> std::pair<RobotStatusEnum, STATUS_CODE>
항목설명
설명Agilebot 로봇의 실행 상태를 가져옵니다.
요청 파라미터파라미터 없음
반환값RobotStatusEnum: 로봇 실행 상태
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.1.4 현재 서보 컨트롤러 상태 가져오기

cpp
GetServoStatus() -> std::pair<ServoStatusEnum, STATUS_CODE>
항목설명
설명Agilebot 로봇 서보 컨트롤러의 현재 상태를 가져옵니다.
요청 파라미터파라미터 없음
반환값ServoStatusEnum: 서보 컨트롤러 상태
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.1.5 현재 로봇 모델 가져오기

cpp
GetArmModelInfo() -> std::pair<std::string, STATUS_CODE>
항목설명
설명현재 로봇 모델 정보를 가져옵니다.
요청 파라미터파라미터 없음
반환값std::string: "GBT-C5A" 같은 로봇 모델
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.1.6 로봇의 현재 소프트 상태 가져오기

cpp
GetSoftMode() -> std::pair<SoftModeEnum, STATUS_CODE>
항목설명
설명Agilebot 로봇의 현재 소프트 상태(PC 모드에서 수동/자동 상태)를 가져옵니다.
요청 파라미터파라미터 없음
반환값SoftModeEnum: 소프트 상태
STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.1.7 로봇 조작 모드 가져오기

cpp
GetOpMode() -> std::pair<OpModeEnum, STATUS_CODE>
항목설명
설명현재 로봇 조작 모드(로봇/가상 컨트롤러의 수동, 자동 등 조작 권한 상태)를 가져옵니다.
요청 파라미터파라미터 없음
반환값OpModeEnum: 조작 모드
STATUS_CODE: 함수 실행 결과
비고컨트롤러가 유효한 모드를 반환하지 않으면 OpModeEnum::UNKNOWN 으로 fallback 됩니다.
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.2 제어 인터페이스

3.2.2.1 로봇 서보 전원 켜기

cpp
ServoOn() -> STATUS_CODE
항목설명
설명Agilebot 로봇의 서보 전원을 켭니다.
요청 파라미터파라미터 없음
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.2.2 로봇 서보 전원 끄기

cpp
ServoOff() -> STATUS_CODE
항목설명
설명Agilebot 로봇의 서보 전원을 끕니다.
요청 파라미터파라미터 없음
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.2.3 로봇 서보 재설정

cpp
ServoReset() -> STATUS_CODE
항목설명
설명Agilebot 로봇 서보를 재설정합니다.
요청 파라미터파라미터 없음
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.2.4 로봇의 현재 소프트 상태 설정

cpp
SetSoftMode(SoftModeEnum mode) -> STATUS_CODE
항목설명
설명로봇의 현재 소프트 상태(PC 모드에서 수동/자동 상태)를 설정합니다.
요청 파라미터mode : SoftModeEnum 소프트 상태 값
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.2.5 로봇 조작 모드 설정

cpp
SetOpMode(OpModeEnum mode) -> STATUS_CODE
항목설명
설명로봇 조작 모드를 설정합니다. 가상 로봇/시뮬레이션 컨트롤러만 지원합니다.
요청 파라미터mode : OpModeEnum 대상 조작 모드( UNKNOWN 불가)
반환값STATUS_CODE: 함수 실행 결과
비고OpModeEnum::UNKNOWN 이 전달되면 인터페이스는 UNSUPPORTED_PARAMETER 를 반환합니다.
호환 로봇 소프트웨어 버전협동(Copper): 시뮬레이션만 지원; 산업용(Bronze): 시뮬레이션만 지원

3.2.2.6 로봇 LED 표시등 설정

cpp
SwitchLedLight(bool mode) -> STATUS_CODE
항목설명
설명Agilebot 로봇의 LED 표시등 스위치를 제어합니다.
요청 파라미터mode : bool 표시등 상태(true 켜기, false 끄기)
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.1.3+
산업용(Bronze): 지원하지 않음

3.2.2.7 로봇 비상 정지

cpp
Estop() -> STATUS_CODE
항목설명
설명Agilebot 로봇을 비상 정지시킵니다.
요청 파라미터파라미터 없음
반환값STATUS_CODE: 함수 실행 결과
호환 로봇 소프트웨어 버전협동(Copper): v7.5.0.0+
산업용(Bronze): v7.5.0.0+

3.2.3 제어 권한 인터페이스

3.2.3.1 상위 PC 조작 권한 획득

cpp
AcquireAccess()
항목설명
설명상위 PC가 조작 권한을 획득하여 로봇을 PC 모드로 전환합니다. SDK 는 컨트롤러에 주기적으로 keepalive 를 전송합니다.
요청 파라미터파라미터 없음
반환값반환 없음
동작- 연결되지 않은 경우 바로 반환
- 중복 등록을 피하기 위해 매번 호출 전에 ReleaseAccess() 를 먼저 실행
- SDK 는 Arm 전용 네트워크 스레드에 2000ms keepalive 타이머 작업을 등록
비고산업용 로봇만 PC 모드를 유지하기 위해 이 인터페이스를 호출해야 합니다. 협동 로봇 및 P7A 는 사용할 필요가 없습니다.
호환 로봇 소프트웨어 버전협동(Copper): 지원하지 않음
산업용(Bronze): v7.5.0.0+

3.2.3.2 상위 PC 조작 권한 반환

cpp
ReleaseAccess()
항목설명
설명상위 PC가 조작 권한을 반환하여 로봇을 PC 모드에서 벗어나게 하고, AcquireAccess() 가 등록한 keepalive 타이머 작업을 중지합니다.
요청 파라미터파라미터 없음
반환값반환 없음
동작- 현재 세션의 keepalive 타이머 작업 취소
- Arm::Disconnect() , ControllerInfo::Reset() , 소멸 절차에서도 이를 능동적으로 호출
비고산업용 로봇만 이 인터페이스를 호출해야 합니다.
호환 로봇 소프트웨어 버전협동(Copper): 지원하지 않음
산업용(Bronze): v7.5.0.0+

일반 반환값 설명

시나리오반환
연결되지 않은 상태에서 조회 인터페이스 호출OTHER_ERR , 동시에 데이터 값은 빈 문자열 또는 UNKNOWN 으로 fallback
연결되지 않은 상태에서 제어 인터페이스 호출OTHER_ERR
연결되지 않은 상태에서 AcquireAccess / ReleaseAccess 호출바로 반환하며 추가 오류 코드는 없음

호출 권장 사항

  1. 연결 후 먼저 GetControllerVersion() , GetArmModelInfo() 로 장치를 식별합니다.
  2. 모드를 쓰기 전에 먼저 읽어 무작정 쓰는 것을 피합니다.
  3. AcquireAccess() 는 PUMA / 산업용 로봇의 PC 모드 keepalive 시나리오에서 자주 사용되며, 협동 로봇은 일반적으로 필요하지 않습니다.

최소 호출 예제

cpp
#include <iostream>  // 조회 결과를 출력하기 위한 표준 출력 스트림 포함
#include "arm_api.h"  // Arm 메인 진입점을 포함하며, 연결 후 arm.controllerInfo 로 정보 인터페이스에 접근
#include "status_code.h"  // SDK 호출 결과를 확인하기 위한 STATUS_CODE 포함
int main()  // 예제 프로그램 진입점
{  // 예제 main 함수 시작
    Arm arm;  // 로봇 세션 객체 생성
    STATUS_CODE connectRet = arm.Connect("192.168.110.2", "");  // 컨트롤러에 연결, 티치 펜던트 주소를 비워 기본 규칙 사용
    if (connectRet != STATUS_CODE::OK) {  // 연결 실패 여부 확인
        return 1;  // 연결 실패 시 바로 종료
    }  // 연결 결과 판단 종료
    auto [version, versionRet] = arm.controllerInfo.GetControllerVersion();  // 컨트롤러 버전 문자열 조회
    auto [servoStatus, servoRet] = arm.controllerInfo.GetServoStatus();  // 현재 서보 상태 조회
    auto [softMode, softModeRet] = arm.controllerInfo.GetSoftMode();  // 현재 소프트 모드 조회
    auto [opMode, opModeRet] = arm.controllerInfo.GetOpMode();  // 현재 조작 모드 조회
    if (versionRet != STATUS_CODE::OK ||  // 컨트롤러 버전 조회 실패 여부 확인
        servoRet != STATUS_CODE::OK ||  // 서보 상태 조회 실패 여부 확인
        softModeRet != STATUS_CODE::OK ||  // 소프트 모드 조회 실패 여부 확인
        opModeRet != STATUS_CODE::OK) {  // 조작 모드 조회 실패 여부 확인
        return 1;  // 조회 중 하나라도 실패하면 오류 코드 반환
    }  // 조회 결과 판단 종료
    std::cout << "version=" << version << "\n";  // 컨트롤러 버전 출력
    std::cout << "servo_status=" << static_cast<int>(servoStatus) << "\n";  // 서보 상태 enum 값 출력
    std::cout << "soft_mode=" << static_cast<int>(softMode) << "\n";  // 소프트 모드 enum 값 출력
    std::cout << "op_mode=" << static_cast<int>(opMode) << "\n";  // 조작 모드 enum 값 출력
    arm.controllerInfo.AcquireAccess();  // 산업용 로봇 PC 모드 시나리오에서 조작 권한을 얻고 keepalive 시작
    arm.controllerInfo.ReleaseAccess();  // 예제 종료 전에 조작 권한을 해제하고 keepalive 중지
    return 0;  // 예제 정상 종료
}  // 예제 main 함수 종료

시나리오 예제

아래 여러 코드 조각은 "읽기 전용 상태, 모드 설정, 동작 제어, PC 권한" 관점에서 이 페이지의 API 를 교차로 다룹니다. 코드 조각은 최소 호출 예제에서 이미 연결에 성공한 arm 객체를 이어받는다고 가정합니다. 로봇 상태를 변경하는 호출은 주석으로 유지했으며, 현장을 확인한 뒤 실행하십시오.

버전, 모델 및 상태 읽기

cpp
auto [version, versionRet] = arm.controllerInfo.GetControllerVersion();  // 컨트롤러 버전 읽기
auto [model, modelRet] = arm.controllerInfo.GetArmModelInfo();  // 로봇 모델 읽기
auto [ctrlStatus, ctrlRet] = arm.controllerInfo.GetCtrlStatus();  // 컨트롤러 실행 상태 읽기
auto [robotStatus, robotRet] = arm.controllerInfo.GetRobotStatus();  // 로봇 실행 상태 읽기
auto [servoStatus, servoRet] = arm.controllerInfo.GetServoStatus();  // 서보 상태 읽기
if (versionRet == STATUS_CODE::OK && modelRet == STATUS_CODE::OK && ctrlRet == STATUS_CODE::OK && robotRet == STATUS_CODE::OK && servoRet == STATUS_CODE::OK) {  // 기본 상태 조회 성공 여부 확인
    std::cout << "version=" << version << " model=" << model << "\n";  // 버전과 모델 출력
    std::cout << "ctrl=" << static_cast<int>(ctrlStatus) << " robot=" << static_cast<int>(robotStatus) << " servo=" << static_cast<int>(servoStatus) << "\n";  // 세 가지 실행 상태 출력
}  // 기본 상태 조회 판단 종료

모드 읽기 및 설정

cpp
auto [softMode, softRet] = arm.controllerInfo.GetSoftMode();  // 현재 소프트 모드 읽기
auto [opMode, opRet] = arm.controllerInfo.GetOpMode();  // 현재 조작 모드 읽기
if (softRet == STATUS_CODE::OK && opRet == STATUS_CODE::OK) {  // 모드 읽기 성공 여부 확인
    std::cout << "soft=" << static_cast<int>(softMode) << " op=" << static_cast<int>(opMode) << "\n";  // 모드 상태 출력
}  // 모드 읽기 판단 종료
// STATUS_CODE setSoftRet = arm.controllerInfo.SetSoftMode(softMode);  // 소프트 모드 설정은 컨트롤러 모드를 변경하므로 확인 후 실행
// STATUS_CODE setOpRet = arm.controllerInfo.SetOpMode(opMode);  // 조작 모드 설정은 컨트롤러 모드를 변경하므로 확인 후 실행

서보, LED 및 비상 정지 동작

cpp
// STATUS_CODE servoOnRet = arm.controllerInfo.ServoOn();  // 서보 전원 켜기 요청은 로봇 상태를 변경하므로 안전 확인 후 실행
// STATUS_CODE servoOffRet = arm.controllerInfo.ServoOff();  // 서보 전원 끄기 요청은 로봇 상태를 변경하므로 현장 확인 후 실행
// STATUS_CODE resetRet = arm.controllerInfo.ServoReset();  // 서보 리셋 요청은 로봇 상태를 변경하므로 현장 확인 후 실행
// STATUS_CODE ledRet = arm.controllerInfo.SwitchLedLight(true);  // LED 상태 전환은 컨트롤러 출력을 변경하므로 확인 후 실행
// STATUS_CODE estopRet = arm.controllerInfo.Estop();  // 비상 정지는 즉시 안전 상태를 변경하므로 명확히 필요한 경우에만 실행

산업용 로봇 PC 권한

cpp
// arm.controllerInfo.AcquireAccess();  // 산업용 로봇 PC 모드에서 조작 권한을 획득하고 keepalive 시작
// arm.controllerInfo.ReleaseAccess();  // 산업용 로봇 PC 모드에서 조작 권한을 해제하고 keepalive 중지

예제 코드

cpp17/info_get_controller_version/src/query_version_and_model/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "query_version_and_model/run.h"

/**
 * 查询版本与型号门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoGetControllerVersionQueryVersionAndModel(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_info_basic] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_info_basic] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 获取控制器版本和机械臂型号。
    // [EN] Get the controller version and robot model.
    std::pair<std::string, STATUS_CODE> versionPair = arm.controllerInfo.GetControllerVersion();
    std::pair<std::string, STATUS_CODE> modelPair = arm.controllerInfo.GetArmModelInfo();
    std::cout << "[cpp17_info_basic] GetControllerVersion 状态码 / GetControllerVersion status code: "
              << static_cast<int>(versionPair.second)
              << ", 版本 / Version: " << versionPair.first << "\n";
    std::cout << "[cpp17_info_basic] GetArmModelInfo 状态码 / GetArmModelInfo status code: "
              << static_cast<int>(modelPair.second)
              << ", 型号 / Model: " << modelPair.first << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_info_basic] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/query_state_modes/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "query_state_modes/run.h"

/**
 * 查询状态与模式门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesQueryStateModes(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 获取伺服状态、软模式和操作模式。
    // [EN] Get the servo status, soft mode, and operation mode.
    std::pair<ServoStatusEnum, STATUS_CODE> servoPair = arm.controllerInfo.GetServoStatus();
    std::pair<SoftModeEnum, STATUS_CODE> softPair = arm.controllerInfo.GetSoftMode();
    std::pair<OpModeEnum, STATUS_CODE> opPair = arm.controllerInfo.GetOpMode();
    std::cout << "[cpp17_arm_state] GetServoStatus 状态码 / GetServoStatus status code: "
              << static_cast<int>(servoPair.second)
              << ", 伺服状态 / Servo status: " << static_cast<int>(servoPair.first) << "\n";
    std::cout << "[cpp17_arm_state] GetSoftMode 状态码 / GetSoftMode status code: "
              << static_cast<int>(softPair.second)
              << ", 软模式 / Soft mode: " << static_cast<int>(softPair.first) << "\n";
    std::cout << "[cpp17_arm_state] GetOpMode 状态码 / GetOpMode status code: "
              << static_cast<int>(opPair.second)
              << ", 操作模式 / Operation mode: " << static_cast<int>(opPair.first) << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/write_back_modes/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "write_back_modes/run.h"

/**
 * 写回软模式与操作模式门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesWriteBackModes(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 读取并写回软模式与操作模式。
    // [EN] Read and write back the soft mode and operation mode.
    std::pair<SoftModeEnum, STATUS_CODE> softPair = arm.controllerInfo.GetSoftMode();
    std::pair<OpModeEnum, STATUS_CODE> opPair = arm.controllerInfo.GetOpMode();
    STATUS_CODE setSoftRet = arm.controllerInfo.SetSoftMode(softPair.first);
    STATUS_CODE setOpRet = arm.controllerInfo.SetOpMode(opPair.first);
    std::cout << "[cpp17_arm_state] SetSoftMode 状态码 / SetSoftMode status code: "
              << static_cast<int>(setSoftRet) << "\n";
    std::cout << "[cpp17_arm_state] SetOpMode 状态码 / SetOpMode status code: "
              << static_cast<int>(setOpRet) << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/access_control/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "access_control/run.h"

/**
 * 获取和归还控制权门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesAccessControl(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 获取并归还 SDK 控制权。
    // [EN] Acquire and release the SDK access token.
    arm.controllerInfo.AcquireAccess();
    std::cout << "[cpp17_arm_state] 已获取控制权 / SDK access acquired\n";
    arm.controllerInfo.ReleaseAccess();
    std::cout << "[cpp17_arm_state] 已归还控制权 / SDK access released\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}
cpp17/info_state_modes/src/action_apis/run.cpp
cpp
#include <iostream>
#include "arm_api.h"
#include "status_code.h"

#include "action_apis/run.h"

/**
 * 动作接口门面。
 * @return 0 表示成功,否则返回 1。
 */
int RunInfoStateModesActionApis(void)
{
    // [ZH] 连接机器人,请直接修改下面的魔鬼字符串。
    // [EN] Connect to the robot and edit the hard-coded magic strings below directly.
    Arm arm;
    STATUS_CODE connectRet = arm.Connect("10.27.1.2", "10.27.1.102");
    if (connectRet != STATUS_CODE::OK) {
        std::cerr << "[cpp17_arm_state] 连接机器人失败 / Connect to the robot failed, 状态码 / Status code: "
                  << static_cast<int>(connectRet) << "\n";
        return 1;
    }
    std::cout << "[cpp17_arm_state] 机器人连接成功 / Robot connected successfully\n";
    // [ZH] 顺序执行全部动作接口。
    // [EN] Execute all action APIs in sequence.
    STATUS_CODE servoOnRet = arm.controllerInfo.ServoOn();
    STATUS_CODE servoOffRet = arm.controllerInfo.ServoOff();
    STATUS_CODE ledRet = arm.controllerInfo.SwitchLedLight(true);
    STATUS_CODE resetRet = arm.controllerInfo.ServoReset();
    STATUS_CODE estopRet = arm.controllerInfo.Estop();
    std::cout << "[cpp17_arm_state] ServoOn 状态码 / ServoOn status code: "
              << static_cast<int>(servoOnRet) << "\n";
    std::cout << "[cpp17_arm_state] ServoOff 状态码 / ServoOff status code: "
              << static_cast<int>(servoOffRet) << "\n";
    std::cout << "[cpp17_arm_state] SwitchLedLight 状态码 / SwitchLedLight status code: "
              << static_cast<int>(ledRet) << "\n";
    std::cout << "[cpp17_arm_state] ServoReset 状态码 / ServoReset status code: "
              << static_cast<int>(resetRet) << "\n";
    std::cout << "[cpp17_arm_state] Estop 状态码 / Estop status code: "
              << static_cast<int>(estopRet) << "\n";

    // [ZH] 断开连接,结束示例。
    // [EN] Disconnect and finish the example.
    arm.Disconnect();
    std::cout << "[cpp17_arm_state] 示例结束 / Example finished\n";
    return 0;
}