Files
behavior-tree/robobrain/robot_robobrain/demo_backend.py
T

26 lines
2.0 KiB
Python
Raw Normal View History

"""Explicit integration fixture: BrainService -> Coordinator -> C++ simulation."""
from robot_bt_coordinator.backends import DemoBackend
from robot_bt_coordinator.plan import canonical
from robot_bt_coordinator.plan_v2 import make_plan
from .backends import FixtureBackend
from .service import BrainService
class BrainDemoBackend(DemoBackend):
def __init__(self,executable,state_dir,site):
super().__init__(executable,state_dir);self.site=site
def fixture(request):
g=request['input'];known=g['known_info']
if 'items' not in known:
missing=[k for k in ('target_name','source_location','destination') if not known.get(k)]
if missing:return canonical({'missing_information':missing})
known={'items':[{'target_name':known['target_name'],'source_location':known['source_location'],'quantity':known.get('quantity',1)}],'destination':known['destination']}
if 'destination' not in known:return canonical({'missing_information':['destination']})
return canonical(make_plan(g['instruction'],known,site['execution_route']))
self.brain=BrainService(FixtureBackend(fixture),self.state_dir/'planning_records')
def start_planning(self,t):
self.plans.append(t)
result=self.brain.plan(dict(task_id=t['task_id'],task_revision=t['task_revision'],planning_generation=t['planning_generation'],instruction=t['request']['instruction'],known_info=t['request']['known_info'],context=self.site,constraints={'schema_version':2,'route':self.site['execution_route']},timeout=10))
event=dict(type='plan',task_id=t['task_id'],task_revision=t['task_revision'],planning_generation=t['planning_generation'],status=result['status'],error_code=result.get('error_code',''),planning_record_ref=result['record_ref'])
if result['status']=='NEEDS_CLARIFICATION':event['questions']=result['plan']['missing_information']
else:event['plan']=result.get('plan')
self.emit(event)