Skip to content

4.16 자연어 제어

개요

NLUControl 모듈은 자연어 명령을 통해 로봇을 제어하는 ​​기능을 제공하여 안전 점검 후 실행할 수 있도록 일상 언어를 실행 가능한 코드로 변환하는 기능을 지원합니다.

핵심 기능

  • 자연어 명령을 통한 로봇 제어 지원
  • 자연어를 실행 가능한 코드로 변환 지원
  • 안전한 실행을 보장하기 위한 코드 승인 메커니즘 제공
  • 다단계 명령 지원(순차 실행, 조건 판단 등)
  • 코드 검토 및 인쇄 기능 제공
  • 코드 실행 예외를 자동으로 캡처하고 처리합니다.

사용 사례

  • 자연어를 통해 간단한 작업을 수행하는 로봇을 빠르게 제어
  • 복잡한 다단계 작업을 위한 자연어 설명 및 실행 구현
  • 개발 및 디버깅 중 로봇 기능의 신속한 검증
  • 로봇 프로그래밍의 문턱을 낮추고 비전문 작업자 지원
  • 로봇과 인간 간의 자연어 상호작용 구현

생성자

메서드 이름NLUControl( controller_ip : str)
설명자연어를 통해 로봇의 동작을 제어하는 ​​자연어 제어 수업입니다. 일반적으로 arm.nlu 를 통해 액세스하며 수동 인스턴스화가 필요하지 않습니다.
요청 매개변수controller_ip : str 컨트롤러 IP 주소
반환 값반환 값 없음
메모이 클래스는 Arm 클래스가 인스턴스화될 때 자동으로 생성됩니다. 사용자는 arm.nlu 를 통해 직접 액세스할 수 있습니다.
호환 로봇 소프트웨어 버전협업(Copper): v7.7.0.0+
산업용(Bronze): v7.7.0.0+

4.16.1 자연어 수업 실행

메서드 이름execute( natural_language : str) -> tuple[NLUGeneratedCode, StatusCodeEnum]
설명자연어 명령을 통해 로봇을 제어합니다. 시스템은 자연어를 실행 가능한 코드로 변환하고 이를 반환합니다.
요청 매개변수natural_language : str 자연어 명령(예: "로봇을 영점으로 이동하고 현재 위치를 얻습니다", 순서 지정 및 조건과 같은 다단계 명령 지원).
반환 값NLUGeneratedCode: 실행 코드와 승인 상태를 포함하는 생성된 코드 객체
StatusCodeEnum: 함수 실행 결과
메모- The returned NLUGeneratedCode object contains a needs_approval property indicating whether user approval is required
- If needs_approval=True , you must call the approve() method before execution
- You can view the generated code content via result.code
호환 로봇 소프트웨어 버전협업(Copper): v7.7.0.0+
산업용(Bronze): v7.7.0.0+

NLUGeneratedCode 클래스

개요

NLUGeneratedCode 클래스는 NLU 서비스에서 생성된 Python 코드 조각을 캡슐화, 관리 및 안전하게 실행하는 데 사용됩니다. 이 클래스는 코드 승인 및 실행을 위한 보안 메커니즘을 제공하여 승인이 필요한 코드가 실행 전에 명시적으로 승인되어야 함을 보장합니다.

속성

속성 이름유형설명
needs_approval부울코드의 위험도에 따라 실행 전 승인이 필요한지 여부
codestr생성된 실행 가능 Python 코드 문자열

4.16.2 코드 실행 승인

메서드 이름approve()
설명Approve code execution. After calling this method, the code is marked as approved and can be executed via the execute_code() method.
요청 매개변수매개변수 없음
반환 값반품 불가
메모- This method only needs to be called when needs_approval=True
- Executing code that requires approval without calling approve() will return an error
호환 로봇 소프트웨어 버전협업(Copper): v7.7.0.0+
산업용(Bronze): v7.7.0.0+

4.16.3 생성된 코드 실행

메서드 이름execute_code() -> tuple[Any, StatusCodeEnum]
설명NLU 생성 코드를 실행합니다. 코드에 승인이 필요하지만 승인되지 않은 경우 오류가 반환됩니다.
요청 매개변수매개변수 없음
반환 값Any: 코드 실행 결과, 유형은 생성된 코드에 따라 다름
StatusCodeEnum: 함수 실행 결과
메모- If needs_approval=True but approve() was not called, returns NLU_APPROVAL_REQUIRED error
- Any exceptions during code execution are caught and returned as corresponding error status codes
호환 로봇 소프트웨어 버전협업(Copper): v7.7.0.0+
산업용(Bronze): v7.7.0.0+

4.16.4 생성된 코드 인쇄

메서드 이름print_code()
설명사용자 검토를 위해 생성된 코드를 인쇄합니다. 출력 형식에는 구문 강조가 포함됩니다.
요청 매개변수매개변수 없음
반환 값반품 불가
메모승인이 필요한 경우 실행 승인 여부를 결정하기 전에 이 메서드를 호출하여 코드 내용을 확인하는 것이 좋습니다.
호환 로봇 소프트웨어 버전협업(Copper): v7.7.0.0+
산업용(Bronze): v7.7.0.0+

사용 예

예 1: 기본 쿼리 작업

nlu_control/get_controller_version.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 自然语言基础控制与安全评级示例 / NLU Basic Control with Safety Rating Example
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")

# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)


# [ZH] 示例:使用自然语言获取控制器版本信息
# [EN] Example: Use natural language to get controller version information
result, ret = arm.nlu.execute("获取控制器版本信息")

if ret == StatusCodeEnum.OK:
    print("自然语言指令执行成功 / Natural language command executed successfully")
    danger_level = getattr(result, "danger_level", "unknown")
    warnings = getattr(result, "warnings", [])

    result.print_code()
    print(f"安全评级 / Danger level: {danger_level}")
    if warnings:
        print("安全提示 / Safety warnings:")
        for idx, warning in enumerate(warnings, 1):
            print(f"  {idx}. {warning}")

    if result.needs_approval:
        print("\n" + "=" * 50)
        print("警告:需要用户确认 / Warning: User Approval Required")
        print("=" * 50)

        print("\n请确认是否执行此代码 / Please confirm if you want to execute this code:")
        user_input = input("\n(yes/no): ").strip().lower()
        if user_input not in ["yes", "y"]:
            print("用户拒绝执行代码 / User rejected code execution")
            arm.disconnect()
            exit(1)
        else:
            result.approve()

    exec_result, ret = result.execute_code()
    if ret == StatusCodeEnum.OK:
        print(f"执行结果 / Execution result: {exec_result}")
    else:
        print(f"代码执行失败 / Code execution failed: {ret.errmsg}")
else:
    print(f"自然语言指令执行失败 / Natural language command failed: {ret.errmsg}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("\n机器人断开连接成功 / Robot disconnected successfully")

예 2: 여러 작업의 순차적 실행

nlu_control/serial_execution.py
py
#!python
"""
Copyright © 2016 Agilebot Robotics Ltd. All rights reserved.
Instruction: 自然语言顺序执行与安全评级示例 / NLU Sequential Execution with Safety Rating Example
"""

from Agilebot import Arm, StatusCodeEnum

# [ZH] 初始化捷勃特机器人
# [EN] Initialize the Agilebot robot
arm = Arm()
# [ZH] 连接捷勃特机器人
# [EN] Connect to the Agilebot robot
ret = arm.connect("10.27.1.254")

# [ZH] 检查是否连接成功
# [EN] Check if connection is successful
if ret == StatusCodeEnum.OK:
    print("机器人连接成功 / Robot connected successfully")
else:
    print(f"机器人连接失败,错误代码 / Robot connection failed, error code: {ret.errmsg}")
    arm.disconnect()
    exit(1)


# [ZH] 示例:使用自然语言让机器人按顺序执行任务
# [EN] Example: Use natural language to instruct the robot to execute tasks sequentially
result, ret = arm.nlu.execute(
    """
按顺序执行:
1. 清除报警;
2. 控制机械臂所有关节运动至零点位置;
3. 启动程序 'Put_into_box',等待下发完成,并等待其执行结束;
4. 获取当前位姿。
"""
)

if ret == StatusCodeEnum.OK:
    print("自然语言指令执行成功 / Natural language command executed successfully")
    danger_level = getattr(result, "danger_level", "unknown")
    warnings = getattr(result, "warnings", [])

    result.print_code()
    print(f"安全评级 / Danger level: {danger_level}")
    if warnings:
        print("安全提示 / Safety warnings:")
        for idx, warning in enumerate(warnings, 1):
            print(f"  {idx}. {warning}")

    if result.needs_approval:
        print("\n" + "=" * 50)
        print("警告:需要用户确认 / Warning: User Approval Required")
        print("=" * 50)

        print("\n请确认是否执行此代码 / Please confirm if you want to execute this code:")
        user_input = input("\n(yes/no): ").strip().lower()
        if user_input not in ["yes", "y"]:
            print("用户拒绝执行代码 / User rejected code execution")
            arm.disconnect()
            exit(1)
        else:
            result.approve()

    exec_result, ret = result.execute_code()
    if ret == StatusCodeEnum.OK:
        print(f"执行结果 / Execution result: {exec_result}")
    else:
        print(f"代码执行失败 / Code execution failed: {ret.errmsg}")
else:
    print(f"自然语言指令执行失败 / Natural language command failed: {ret.errmsg}")

# [ZH] 断开捷勃特机器人连接
# [EN] Disconnect from Agilebot robot
arm.disconnect()
print("\n机器人断开连接成功 / Robot disconnected successfully")