from urdf_parser_py.xml_reflection.basics import * import urdf_parser_py.xml_reflection as xmlr xmlr.start_namespace('srdf') verbose = True # Common stuff name_attribute = xmlr.Attribute('name', str) class Link(xmlr.Object): def __init__(self, name=None): self.name = name xmlr.reflect(Link, params=[name_attribute]) class Joint(xmlr.Object): def __init__(self, name=None): self.name = name xmlr.reflect(Joint, params=[name_attribute]) class JointVal(xmlr.Object): def __init__(self, name=None, value=[]): self.name = name self.value = value
from urdf_parser_py.xml_reflection.basics import * import urdf_parser_py.xml_reflection as xmlr # Add a 'namespace' for names so that things don't conflict between URDF and SDF? # A type registry? How to scope that? Just make a 'global' type pointer? # Or just qualify names? urdf.geometric, sdf.geometric xmlr.start_namespace('urdf') xmlr.add_type('element_link', xmlr.SimpleElementType('link', str)) xmlr.add_type('element_xyz', xmlr.SimpleElementType('xyz', 'vector3')) verbose = True class Pose(xmlr.Object): def __init__(self, xyz=None, rpy=None): self.xyz = xyz self.rpy = rpy def check_valid(self): assert self.xyz is not None or self.rpy is not None # Aliases for backwards compatibility @property def rotation(self): return self.rpy @rotation.setter def rotation(self, value): self.rpy = value @property def position(self): return self.xyz @position.setter def position(self, value): self.xyz = value
from urdf_parser_py.xml_reflection.basics import * import urdf_parser_py.xml_reflection as xmlr # What is the scope of plugins? Model, World, Sensor? xmlr.start_namespace("sdf") class Pose(xmlr.Object): def __init__(self, vec=None, extra=None): self.xyz = None self.rpy = None if vec is not None: assert isinstance(vec, list) count = len(vec) if len == 3: xyz = vec else: self.from_vec(vec) elif extra is not None: assert xyz is None, "Cannot specify 6-length vector and 3-length vector" assert len(extra) == 3, "Invalid length" self.rpy = extra def from_vec(self, vec): assert len(vec) == 6, "Invalid length" self.xyz = vec[:3] self.rpy = vec[3:6] def as_vec(self): xyz = self.xyz if self.xyz else [0, 0, 0]
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. from urdf_parser_py.xml_reflection.basics import * import urdf_parser_py.xml_reflection as xmlr # What is the scope of plugins? Model, World, Sensor? xmlr.start_namespace('sdf') class Pose(xmlr.Object): def __init__(self, vec=None, extra=None): self.xyz = None self.rpy = None if vec is not None: assert isinstance(vec, list) count = len(vec) if len == 3: xyz = vec else: self.from_vec(vec) elif extra is not None: assert xyz is None, "Cannot specify 6-length vector and 3-length vector" assert len(extra) == 3, "Invalid length"
from urdf_parser_py.xml_reflection.basics import * import urdf_parser_py.xml_reflection as xmlr # What is the scope of plugins? Model, World, Sensor? xmlr.start_namespace("sdf") class Pose(xmlr.Object): def __init__(self, vec=None, extra=None): self.xyz = None self.rpy = None if vec is not None: assert isinstance(vec, list) count = len(vec) if len == 3: xyz = vec else: self.from_vec(vec) elif extra is not None: assert ( xyz is None ), "Cannot specify 6-length vector and 3-length vector" # noqa assert len(extra) == 3, "Invalid length" self.rpy = extra def from_vec(self, vec): assert len(vec) == 6, "Invalid length" self.xyz = vec[:3] self.rpy = vec[3:6]