Example #1
0
 def OnBaseInertialParams(self, event):
     model_symo, base_robo = self.robo.compute_baseparams()
     out_file_path = self.prompt_file_save(model_symo)
     self.model_success(out_file_path)
     parfile.writepar(base_robo)
     msg = ("A new robot with the Base Inertial Parameters was\n")
     msg = msg + ("created and the corresponding PAR file is ")
     msg = msg + ("saved at:\n\n")
     msg = msg + base_robo.par_file_path
     self.message_info(msg)
Example #2
0
 def test_readwrite(self):
     parfile.writepar(self.orig_robo)
     fname = filemgr.get_clean_name(self.orig_robo.name) + ".par"
     file_path = os.path.join(self.orig_robo.directory, fname)
     new_robo, flag = parfile.readpar(self.orig_robo.name, file_path)
     self.assertEqual(flag, tools.OK)
     l1 = self.orig_robo.get_geom_head()
     l2 = self.orig_robo.get_dynam_head()
     l3 = self.orig_robo.get_ext_dynam_head()
     for name in l3[1:]+l2[1:]+l1[1:]:
         for i in xrange(1, self.orig_robo.NL):
             self.assertEqual(self.orig_robo.get_val(i, name),
                              new_robo.get_val(i, name))
Example #3
0
 def OnSaveAs(self, event):
     dialog = wx.FileDialog(self,
                            message="Save PAR file",
                            defaultFile=self.robo.name + '.par',
                            defaultDir=self.robo.directory,
                            wildcard='*.par')
     if dialog.ShowModal() == wx.ID_CANCEL:
         return tools.FAIL
     self.robo.directory = dialog.GetDirectory()
     self.robo.name = dialog.GetFilename()[:-4]
     parfile.writepar(self.robo)
     self.widgets['name'].SetLabel(self.robo.name)
     self.changed = False
Example #4
0
 def test_readwrite(self):
     parfile.writepar(self.orig_robo)
     fname = filemgr.get_clean_name(self.orig_robo.name) + ".par"
     file_path = os.path.join(self.orig_robo.directory, fname)
     new_robo, flag = parfile.readpar(self.orig_robo.name, file_path)
     self.assertEqual(flag, tools.OK)
     l1 = self.orig_robo.get_geom_head()
     l2 = self.orig_robo.get_dynam_head()
     l3 = self.orig_robo.get_ext_dynam_head()
     for name in l3[1:]+l2[1:]+l1[1:]:
         for i in xrange(1, self.orig_robo.NL):
             self.assertEqual(self.orig_robo.get_val(i, name),
                              new_robo.get_val(i, name))
Example #5
0
 def OnSaveAs(self, event):
     dialog = wx.FileDialog(
         self, message="Save PAR file",
         defaultFile=self.robo.name+'.par',
         defaultDir=self.robo.directory,
         wildcard='*.par'
     )
     if dialog.ShowModal() == wx.ID_CANCEL:
         return tools.FAIL
     self.robo.directory = dialog.GetDirectory()
     self.robo.name = dialog.GetFilename()[:-4]
     parfile.writepar(self.robo)
     self.widgets['name'].SetLabel(self.robo.name)
     self.changed = False
Example #6
0
 def OnSaveAs(self, event):
     result_msg = "The PAR file has been saved at:\n"
     # prompt dialog box for new robot name
     txtdlg = wx.TextEntryDialog(
         self,
         caption="Save As New Robot",
         message="Enter a name for the new robot:",
         style=wx.OK | wx.CANCEL
     )
     if txtdlg.ShowModal() == wx.ID_OK and \
         str(txtdlg.GetValue()).strip():
         # when OK button and user input isn't an empty string
         # save as new robot
         self.robo.name = str(txtdlg.GetValue()).strip()
         self.robo.set_directory()
         self.robo.set_par_file_path()
         parfile.writepar(self.robo)
         self.widgets['name'].SetLabel(self.robo.name)
         self.changed = False
         result_msg = result_msg + self.robo.par_file_path
         self.message_info(result_msg)
     else:
         # prompt message box
         msg = "Do you want to save the PAR file with a new name?"
         msgdlg = wx.MessageDialog(
             self,
             message=msg,
             style=wx.YES_NO | wx.YES_DEFAULT
         )
         if msgdlg.ShowModal() == wx.ID_NO:
             return tools.FAIL
         else:
             # prompt file dialog
             filedlg = wx.FileDialog(
                 self,
                 message="Save PAR file",
                 style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT,
                 defaultDir=self.robo.directory,
                 defaultFile=self.robo.par_file_name,
                 wildcard='*.par'
             )
             if filedlg.ShowModal() == wx.ID_CANCEL:
                 return tools.FAIL
             self.robo.set_directory(filedlg.GetDirectory())
             self.robo.set_par_file_path(filedlg.GetPath())
             parfile.writepar(self.robo)
             self.changed = False
             result_msg = result_msg + self.robo.par_file_path
             self.message_info(result_msg)
Example #7
0
 def OnSave(self, event):
     parfile.writepar(self.robo)
     self.changed = False
Example #8
0
 def OnSave(self, event):
     parfile.writepar(self.robo)
     self.changed = False
    def Export(self, name):
        NJ = len([i for i in self.elements if (isinstance(i, SuperRevoluteJoint) or isinstance(i, SuperPrismaticJoint)) and not i.virtual_joint] )
        NL = len([i for i in self.elements if isinstance(i, Point) and not i.virtual_joint] )-1
        NF = NL+2*(NJ-NL)
        
        if not self.structure:
            return
        if not self.structure[0]-self.structure[1]:
            structure = SIMPLE
        elif not NJ-NL:
            structure = TREE
        else:
            structure = CLOSED_LOOP

        robot = Robot(name, NJ=NJ, NL=NL, NF=NF, is_mobile=False,
                 structure=structure)
        
        robot.G = Matrix([var('G1'), var('G2'), var('G3')])
        if self.structure[4][0]:
            robot.Z = transpose(self.elements[self.structure[4][0]-1].T)

        frames = []
        end = []
        cut = []
        
        for branch in self.branches[self.structure[0]:self.structure[1]+1]:
            frames += [i for i in branch[1:-2] if not isinstance(self.elements[i-1], Point)]
           
            if not self.elements[branch[-2]-1].virtual_joint:
                end.append(branch[-2])
            else:
                cut.append(branch[-2])


        frames = [ i for i in frames if not i in end and not i in cut]
        frames += end + cut
        
        sigma, mu, theta, alpha, gamma, d, r, b, ant = [],[],[],[],[],[],[],[],[]

        for frame in frames:
##            
            if isinstance(self.elements[frame-1], SuperPrismaticJoint):
                sigma.append(1)
            elif isinstance(self.elements[frame-1], SuperRevoluteJoint):
                sigma.append(0)
            else:
                sigma.append(2)
                
            i = [i for i in range(len(frames)) if frames[i] == self.elements[frame-1].ant]
            
            if len(i)==0 and self.elements[frame-1].ant==self.structure[4][0]:
                ant.append(0)
            elif len(i)>0:
                ant.append(i[0]+1)
            else:
                msg = wx.MessageDialog (None, 'Export error, cannot deifne the parameters.', style=wx.OK|wx.CENTRE)
                msg.ShowModal()
                return 

            if self.elements[frame-1].active and not self.elements[frame-1].cut_joint:
                mu.append(1)
            else:
                mu.append(0)
        
            if isinstance(self.elements[frame-1], SuperRevoluteJoint) and not self.elements[frame-1].virtual_joint:
                theta.append(var('th%s' % (len(theta)+1)))
            else:
                theta.append(self.elements[frame-1].theta)
                
            if isinstance(self.elements[frame-1], SuperPrismaticJoint) and not self.elements[frame-1].virtual_joint:
                r.append(var('r%s' % (len(theta)+1)))
            else:
                r.append(self.elements[frame-1].r)
                
            alpha.append(self.elements[frame-1].alpha)
            d.append(self.elements[frame-1].d)
            gamma.append(self.elements[frame-1].gamma)
            b.append(self.elements[frame-1].b)

        robot.sigma[1:] = sigma
        robot.theta[1:] = theta
        robot.alpha[1:] = alpha
        robot.gamma[1:] = gamma
        robot.d[1:] = d
        robot.r[1:] = r
        robot.b[1:] = b
        robot.ant[1:] = ant
        robot.mu[1:] = mu
                    
        parfile.writepar(robot)