문서 : 문서
간단한 로봇 에이전트 예:
SimplerEnv를 사용한 시뮬레이션 예:
? OpenVLA를 사용하는 모터 에이전트:
⏺️ 로봇에 데이터세트 기록
? 지원, 토론 및 방법 :
업데이트:
2024년 8월 28일, 구체화된 에이전트 v1.2
mbodied
.2024년 6월 30일, Embodied-agents v1.0 :
mbodied
로 변경되었습니다.Embodied Agent 는 단 몇 줄의 코드만으로 대규모 다중 모드 모델을 기존 로봇 스택에 통합하기 위한 툴킷입니다. 일관성, 신뢰성, 확장성을 제공하며 모든 관찰 및 작업 공간에 맞게 구성할 수 있습니다.
Sample 클래스는 임의의 데이터를 직렬화, 기록 및 조작하기 위한 기본 모델입니다. 확장 가능하고 유연하며 강력한 형식으로 설계되었습니다. 관찰 또는 작업 개체를 Sample 클래스로 래핑하면 다음과 쉽게 변환할 수 있습니다.
구체화된 에이전트의 모든 가능성에 대해 자세히 알아보려면 설명서를 확인하세요.
Sample
또는 Dict 목록을 단일 Sample
또는 Dict
로 pack
하고 그에 따라 unpack
수 있습니까?Sample
클래스로 unflatten
할 수 있습니까? 샘플을 생성하려면 Python 사전을 Sample
클래스로 래핑하기만 하면 됩니다. 또한 kwargs, Gym Spaces 및 Tensors를 사용하여 만들 수도 있습니다.
from mbodied . types . sample import Sample
# Creating a Sample instance
sample = Sample ( observation = [ 1 , 2 , 3 ], action = [ 4 , 5 , 6 ])
# Flattening the Sample instance
flat_list = sample . flatten ()
print ( flat_list ) # Output: [1, 2, 3, 4, 5, 6]
# Generating a simplified JSON schema
>> > schema = sample . schema ()
{ 'type' : 'object' , 'properties' : { 'observation' : { 'type' : 'array' , 'items' : { 'type' : 'integer' }}, 'action' : { 'type' : 'array' , 'items' : { 'type' : 'integer' }}}}
# Unflattening a list into a Sample instance
Sample . unflatten ( flat_list , schema )
>> > Sample ( observation = [ 1 , 2 , 3 ], action = [ 4 , 5 , 6 ])
Sample 클래스는 직렬화 및 역직렬화를 위한 Pydantic의 강력한 기능을 활용하여 Sample 인스턴스와 JSON 간에 쉽게 변환할 수 있도록 해줍니다.
# Serialize the Sample instance to JSON
sample = Sample ( observation = [ 1 , 2 , 3 ], action = [ 4 , 5 , 6 ])
json_data = sample . model_dump_json ()
print ( json_data ) # Output: '{"observation": [1, 2, 3], "action": [4, 5, 6]}'
# Deserialize the JSON data back into a Sample instance
json_data = '{"observation": [1, 2, 3], "action": [4, 5, 6]}'
sample = Sample . model_validate ( from_json ( json_data ))
print ( sample ) # Output: Sample(observation=[1, 2, 3], action=[4, 5, 6])
# Converting to a dictionary
sample_dict = sample . to ( "dict" )
print ( sample_dict ) # Output: {'observation': [1, 2, 3], 'action': [4, 5, 6]}
# Converting to a NumPy array
sample_np = sample . to ( "np" )
print ( sample_np ) # Output: array([1, 2, 3, 4, 5, 6])
# Converting to a PyTorch tensor
sample_pt = sample . to ( "pt" )
print ( sample_pt ) # Output: tensor([1, 2, 3, 4, 5, 6])
gym_space = sample . space ()
print ( gym_space )
# Output: Dict('action': Box(-inf, inf, (3,), float64), 'observation': Box(-inf, inf, (3,), float64))
자세한 내용은 Sample.py를 참조하세요.
Message 클래스는 단일 완료 샘플 공간을 나타냅니다. 텍스트, 이미지, 텍스트/이미지 목록, 샘플 또는 기타 형식이 될 수 있습니다. Message 클래스는 다양한 유형의 콘텐츠를 처리하도록 설계되었으며 사용자, 보조자 또는 시스템과 같은 다양한 역할을 지원합니다.
다양한 방법으로 Message
만들 수 있습니다. mbodi의 백엔드로 모두 이해할 수 있습니다.
from mbodied . types . message import Message
Message ( role = "user" , content = "example text" )
Message ( role = "user" , content = [ "example text" , Image ( "example.jpg" ), Image ( "example2.jpg" )])
Message ( role = "user" , content = [ Sample ( "Hello" )])
백엔드 클래스는 백엔드 구현을 위한 추상 기본 클래스입니다. 주어진 메시지를 기반으로 완성을 생성하기 위한 API 호출과 같이 다양한 백엔드 서비스와 상호 작용하는 데 필요한 기본 구조와 방법을 제공합니다. 다양한 백엔드가 구현되는 방법은 백엔드 디렉터리를 참조하세요.
에이전트는 아래 나열된 다양한 에이전트의 기본 클래스입니다. 원격 백엔드/서버와 통신하고 선택적으로 해당 작업과 관찰을 기록할 수 있는 에이전트를 생성하기 위한 템플릿을 제공합니다.
언어 에이전트는 원하는 다른 백엔드 또는 변환기에 연결할 수 있습니다. 여기에는 대화 녹음, 상황 관리, 메시지 조회, 메시지 잊어버리기, 상황 저장, 지침과 이미지에 따른 행동 방법이 포함됩니다.
OpenAI, Anthropic, vLLM, Ollama, HTTPX 또는 모든 Gradio 엔드포인트와 같은 API 서비스를 기본적으로 지원합니다. 더 많은 예정!
로봇 백엔드에 OpenAI를 사용하려면:
from mbodied . agents . language import LanguageAgent
agent = LanguageAgent ( context = "You are a robot agent." , model_src = "openai" )
명령을 실행하려면:
instruction = "pick up the fork"
response = robot_agent . act ( instruction , image )
언어 에이전트는 vLLM에도 연결할 수 있습니다. 예를 들어 1.2.3.4:1234에서 vLLM 서버 Mistral-7B를 실행한다고 가정합니다. 당신이 해야 할 일은 다음과 같습니다:
agent = LanguageAgent (
context = context ,
model_src = "openai" ,
model_kwargs = { "api_key" : "EMPTY" , "base_url" : "http://1.2.3.4:1234/v1" },
)
response = agent . act ( "Hello, how are you?" , model = "mistralai/Mistral-7B-Instruct-v0.3" )
Ollama를 사용한 예:
agent = LanguageAgent (
context = "You are a robot agent." , model_src = "ollama" ,
model_kwargs = { "endpoint" : "http://localhost:11434/api/chat" }
)
response = agent . act ( "Hello, how are you?" , model = "llama3.1" )
모터 에이전트는 언어 에이전트와 유사하지만 문자열을 반환하는 대신 항상 Motion
을 반환합니다. 모터 에이전트는 일반적으로 OpenVLA, RT1, Octo 등과 같은 로봇 변압기 모델로 구동됩니다. RT1과 같은 일부 소형 모델은 에지 장치에서 실행될 수 있습니다. 그러나 OpenVLA와 같은 일부는 양자화 없이 실행하기 어려울 수 있습니다. OpenVLA 에이전트 및 OpenVLA 서버 예시를 참조하세요.
이러한 에이전트는 환경과 상호 작용하여 센서 데이터를 수집합니다. 그들은 항상 이미지, 깊이 데이터 또는 오디오 신호와 같은 처리된 감각 입력의 다양한 형태일 수 있는 SensorReading
반환합니다.
현재 우리는 다음을 가지고 있습니다:
로봇의 센서 정보를 처리하는 에이전트입니다.
자동 에이전트는 작업과 모델을 기반으로 올바른 에이전트를 동적으로 선택하고 초기화합니다.
from mbodied . agents . auto . auto_agent import AutoAgent
# This makes it a LanguageAgent
agent = AutoAgent ( task = "language" , model_src = "openai" )
response = agent . act ( "What is the capital of France?" )
# This makes it a motor agent: OpenVlaAgent
auto_agent = AutoAgent ( task = "motion-openvla" , model_src = "https://api.mbodi.ai/community-models/" )
action = auto_agent . act ( "move hand forward" , Image ( size = ( 224 , 224 )))
# This makes it a sensory agent: DepthEstimationAgent
auto_agent = AutoAgent ( task = "sense-depth-estimation" , model_src = "https://api.mbodi.ai/sense/" )
depth = auto_agent . act ( image = Image ( size = ( 224 , 224 )))
또는 auto_agent에서 get_agent
메소드를 사용할 수도 있습니다.
language_agent = get_agent ( task = "language" , model_src = "openai" )
Motion_controls 모듈은 로봇을 Pydantic 모델로 제어하기 위한 다양한 모션을 정의합니다. 또한 Sample
에서 하위 클래스로 분류되므로 위에서 언급한 Sample
의 모든 기능을 갖습니다. 이러한 컨트롤은 간단한 관절 움직임부터 복잡한 포즈 및 전체 로봇 제어에 이르기까지 다양한 동작을 다룹니다.
Robot을 매우 쉽게 서브클래싱하여 사용자 정의 로봇 하드웨어를 통합할 수 있습니다. 작업을 수행하려면 do()
함수만 구현하면 됩니다(로봇에 데이터세트를 기록하려는 경우 몇 가지 추가 메서드 포함). 이 예에서는 모의 로봇을 사용합니다. 예로 XArm 로봇도 있습니다.
로봇에 데이터 세트를 기록하는 것은 매우 쉽습니다! 당신이 해야 할 일은 로봇에 대한 get_observation()
, get_state()
및 prepare_action()
메소드를 구현하는 것뿐입니다. 그 후에는 언제든지 로봇에 데이터세트를 기록할 수 있습니다. 자세한 내용은 example/5_teach_robot_record_dataset.py 및 이 공동 연구실을 참조하세요.
from mbodied . robots import SimRobot
from mbodied . types . motion . control import HandControl , Pose
robot = SimRobot ()
robot . init_recorder ( frequency_hz = 5 )
with robot . record ( "pick up the fork" ):
motion = HandControl ( pose = Pose ( x = 0.1 , y = 0.2 , z = 0.3 , roll = 0.1 , pitch = 0.2 , yaw = 0.3 ))
robot . do ( motion )
데이터 세트 레코더는 로봇과 상호 작용하거나 로봇을 가르치는 동안 대화와 로봇의 동작을 데이터 세트에 기록하는 하위 수준의 레코더입니다. 레코더에 대한 관찰 공간과 작업 공간을 정의할 수 있습니다. 공간에 대한 자세한 내용은 체육관을 참조하세요.
from mbodied . data . recording import Recorder
from mbodied . types . motion . control import HandControl
from mbodied . types . sense . vision import Image
from gymnasium import spaces
observation_space = spaces . Dict ({
'image' : Image ( size = ( 224 , 224 )). space (),
'instruction' : spaces . Text ( 1000 )
})
action_space = HandControl (). space ()
recorder = Recorder ( 'example_recorder' , out_dir = 'saved_datasets' , observation_space = observation_space , action_space = action_space )
# Every time robot makes a conversation or performs an action:
recorder . record ( observation = { 'image' : image , 'instruction' : instruction ,}, action = hand_control )
데이터세트는 ./saved_datasets
에 저장됩니다.
Replayer 클래스는 Recorder
에서 생성된 HDF5 파일에 저장된 데이터를 처리하고 관리하도록 설계되었습니다. 샘플 읽기, 통계 생성, 고유 항목 추출, HuggingFace에서 사용할 데이터 세트 변환 등 다양한 기능을 제공합니다. Replayer는 또한 처리 중에 특정 이미지 저장을 지원하고 다양한 작업을 위한 명령줄 인터페이스를 제공합니다.
Replayer를 사용하여 Recorder의 데이터세트를 반복하는 예:
from mbodied . data . replaying import Replayer
replayer = Replayer ( path = str ( "path/to/dataset.h5" ))
for observation , action in replayer :
...
├─ assets/ ............. Images, icons, and other static assets
├─ examples/ ........... Example scripts and usage demonstrations
├─ resources/ .......... Additional resources for examples
├─ src/
│ └─ mbodied/
│ ├─ agents/ ....... Modules for robot agents
│ │ ├─ backends/ .. Backend implementations for different services for agents
│ │ ├─ language/ .. Language based agents modules
│ │ ├─ motion/ .... Motion based agents modules
│ │ └─ sense/ ..... Sensory, e.g. audio, processing modules
│ ├─ data/ ......... Data handling and processing
│ ├─ hardware/ ..... Hardware modules, i.e. camera
│ ├─ robot/ ........ Robot interface and interaction
│ └─ types/ ........ Common types and definitions
└─ tests/ .............. Unit tests
이슈, 질문, PR을 환영합니다. 자세한 내용은 기여 가이드를 참조하세요.