Skip to content
Snippets Groups Projects

Modular Components, simple bounding boxes and correct physics

Open Anwesha Chattoraj requested to merge anwchatto/rocolib:main into main
Files
146
@@ -3,6 +3,8 @@ import os, posixpath
import sys
import yaml
import logging
import pathlib
import json
import networkx as nx
from rocolib import ROCOLIB_DIR
@@ -43,6 +45,7 @@ class Component(Parameterized):
def __init__(self, yamlFile=None):
self._name = None
# self.margs :list = []
Parameterized.__init__(self)
self.reset()
yf = yamlFile
@@ -445,8 +448,10 @@ class Component(Parameterized):
# set useDefaultParameters = False to replace unset parameters with sympy variables
def evalComponent(self, name, useDefaultParameters=True):
sc = self.subcomponents[name]
obj = sc['object']
classname = sc['classname']
try:
kwargs = sc['kwargs']
except IndexError:
@@ -478,6 +483,12 @@ class Component(Parameterized):
# know about components that have no ports (ex Bluetooth module driver)
for (key, composable) in self.composables.items():
for (name, sc) in self.subcomponents.items():
# name: name of the subcomponent
# keys for sc:
# 'classname': Eg SimpleRectBeam
# 'parameters': depth,length etc
# 'kwargs':
# 'object': graph composable object of the classname type
composable.addComponent(sc['object'])
for (name, value) in self.interfaces.items():
if value is not None:
@@ -487,9 +498,16 @@ class Component(Parameterized):
def make(self, useDefaultParameters=True):
if useDefaultParameters:
self.useDefaultParameters()
self.modifyParameters()
margs = self.modifyParameters()
if margs is not None:
cpath = os.path.join(str(pathlib.Path(__file__).parents[2]) ,"utils/roco2sim/margs.json")
with open(cpath,'w') as f:
json.dump(margs,f)
scOrder = self.traverseGraph()
unconnected = list(set(self.subcomponents.keys()) - set(scOrder))
for scName in scOrder + unconnected:
self.evalConstraints(scName)
@@ -499,6 +517,8 @@ class Component(Parameterized):
self.informComposables() # Tell composables that my interfaces exist
self.assemble()
###
# OUTPUT PHASE
###
@@ -535,7 +555,31 @@ class Component(Parameterized):
graph.add_edge(edge)
sub.recurseComponentTree(graph, subnode, fullstr)
def addModifiedParams(self,**kwargs):
cpath = os.path.join(str(pathlib.Path(__file__).parents[2]) ,"utils/roco2sim/margs.json")
try:
with open(cpath) as f:
margs = json.load(f)
if margs is not None:
mod_params = margs.keys()
param_info = self.getParameterInfo()
for key in mod_params:
if param_info.get(key):
radius = param_info.get(key).get("value")
mod_param = margs.get(key)
if kwargs.get("Parameters"):
kwargs.get("Parameters")[key]=mod_param
else:
kwargs['Parameters'] = {key:mod_param}
os.remove(cpath)
except FileNotFoundError:
pass
def makeOutput(self, filedir=".", **kwargs):
log.info(f"Compiling robot designs to directory {filedir} ...")
def kw(arg, default=kwargs.get("default", True)):
return kwargs.get(arg, default)
@@ -543,6 +587,7 @@ class Component(Parameterized):
if kw("remake", True):
self.make(kw("useDefaultParameters", True))
log.debug(f"... done making {self.getName()}.")
self.addModifiedParams(**kwargs)
# XXX: Is this the right way to do it?
import os