Ejemplo n.º 1
0
    def test_6d(self):
        a = InnerModelVector.vec6d(1., 2., 3., 4., 5., 6.)

        assert (a[0] == 1)
        assert (a[5] == 6)
        assert (a.shape[0] == 6)
        assert (a.min() == [1, 0])
        assert (a.max() == [6, 5])

        b = InnerModelVector.vec6d(2, 0, 0, 0, 0, 0)

        assert (a.dot_product(b) == 2)
        assert (b.norm2() == 2)
Ejemplo n.º 2
0
    def transform(self,
                  destId: str,
                  origId: str,
                  origVec: 'InnerModelVector' = None) -> 'InnerModelVector':
        '''Get the transformation between two nodes with given ids'''

        if origVec is None:
            origVec = InnerModelVector.vec3d(0, 0, 0)

        if origVec.size() == 3:
            m = self.getTransformationMatrix(destId, origId)
            v = origVec.toHomogeneousCoordinates()
            vt_ = m.dot(v)
            vt = InnerModelVector((4, ))
            np.copyto(vt, vt_)
            return vt.fromHomogeneousCoordinates()
        else:
            M = self.getTransformationMatrix(destId, origId)
            a = M.dot(origVec.subVector(
                0, 2).toHomogeneousCoordinates()).fromHomogeneousCoordinates()
            R = Rot3D(origVec[3], origVec[4], origVec[5])

            b = (M.getSubmatrix(0, 2, 0, 2).dot(R)).extractAnglesR_min()

            ret = InnerModelVector.vec6d(a[0], a[1], a[2], b[3], b[4], b[5])
            return ret
Ejemplo n.º 3
0
    def recursiveConstructor(self, node, tr, parentId):
        '''Recursively construct all the parts in a body'''

        if isinstance(node, InnerModelMesh):
            self.makeMesh(node, tr, parentId)
        elif isinstance(node, InnerModelPlane):
            self.makePlane(node, tr, parentId)
        elif isinstance(node, (InnerModelRGBD, InnerModelCamera)):
            self.makeCamera(node, tr, parentId)
        elif isinstance(node, InnerModelLaser):
            self.makeLaser(node, tr, parentId)
        elif isinstance(node, InnerModelIMU):
            self.makeIMU(node, tr, parentId)
        elif isinstance(node, (InnerModelJoint, InnerModelPrismaticJoint)):
            self.makeJoint(node, tr, parentId)
        elif isinstance(node, InnerModelTouchSensor):
            self.hasTouchSensor = True
            parentId = node.parent.id
            self.touchSensorLink.append(parentId)
        else:
            self.baseMass += node.mass
            tr_ = InnerModelVector.vec6d(node.tx / 100.0 + tr.x(),
                                         node.ty / 100.0 + tr.y(),
                                         node.tz / 100.0 + tr.z(),
                                         node.rx + tr.rx(), node.ry + tr.ry(),
                                         node.rz + tr.rz())
            for child in node.children:
                self.recursiveConstructor(child, tr_, parentId)
Ejemplo n.º 4
0
    def transform6D(self,
                    destId: str,
                    orgId: str,
                    origVec: 'InnerModelVector' = None) -> 'InnerModelVector':
        '''Get the transformation between two nodes with given ids'''

        if origVec is not None:
            assert (origVec.size() == 6)
            return self.transform(destId, orgId, origVec)
        else:
            v = InnerModelVector.vec6d(0, 0, 0, 0, 0, 0)
            return self.transform(destId, orgId, v)
Ejemplo n.º 5
0
    def createBody(self, node):
        '''Create a separate body from the node'''

        assert (self.getClassType(node) == 'Transform')
        self.imNode = node
        self.id = node.id
        # self.baseMass = node.mass
        self.baseMass = 10
        self.basePosition = [node.tx / 100.0, node.ty / 100.0, node.tz / 100.0]
        self.baseOrientation = p.getQuaternionFromEuler(
            [node.rx, node.ry, node.rz])
        tr = InnerModelVector.vec6d(0, 0, 0, 0, 0, 0)
        parentId = 0

        for child in node.children:
            self.recursiveConstructor(child, tr, parentId)