示例#1
0
 def get_joint_load(self, joint_id):
     """
     calculate effective mass, center of mass,
     and inertia tensor for a joint specified by jointID
     """
     m_eff = 0
     cm_eff = np.array([0, 0, 0])
     iT_eff = np.zeros((3,3))
     for body in self.robot.bodies[joint_id:]:
         (m_eff, cm_eff, iT_eff) = mass_combine(m_eff, body.m,
                                                cm_eff, body.cm_gl,
                                                iT_eff, body.iT_gl)
     return m_eff, cm_eff, iT_eff
示例#2
0
 def add_mass(self, cm_new, m_new, iT_new_ar, align, isLoad=False):
     """
     add a new mass to body obj. Overall cm, iT, m are updated
     Local Coordinate Sys
     """
     iT_new = tensor(*iT_new_ar)
     cm = self.cm
     iT = self.iT
     m = self.m
     cm_new_aligned = align @ cm_new
     if isLoad:
         cm_new_aligned = cm_new_aligned + self.dimension
     iT_new_aligned = align @ iT_new @ align.T
     res = mass_combine(m, m_new, cm, cm_new_aligned, iT, iT_new_aligned)
     (self.m, self.cm, self.iT) = res
示例#3
0
 def remove_mass(self, cm_target, m_target, iT_target_ar, align):
     """
     add a new mass to body obj. Overall cm, iT, m are updated
     Local Coordinate Sys
     """
     iT_target = tensor(*iT_target_ar)
     cm = self.cm
     iT = self.iT
     m = self.m
     cm_target_aligned = align @ cm_target
     cm_target_aligned = cm_target_aligned + self.dimension
     iT_target_aligned = align @ iT_target @ align.T
     res = mass_combine(-m, m_target, cm, cm_target_aligned, iT,
                        -iT_target_aligned)
     (self.m, self.cm, self.iT) = res
def masspara_combine(filename, sheetname, max_row):
    m = 0
    cm = np.array([0, 0, 0])
    it = tensor(*np.array([0, 0, 0, 0, 0, 0]))
    table = load_workbook(filename)
    sheet = table[sheetname]
    for idx_r in range(15, max_row):
        item = []
        for idx_c in range(2, 13):
            item.append(sheet.cell(row=idx_r + 1, column=idx_c + 1).value)
        m_new = item[0]
        cm_new = np.array(item[1:4]) * 1e-3
        it_new = tensor(*(np.array(item[4:-1]) * 1e-6))
        m, cm, it = mass_combine(m, m_new, cm, cm_new, it, it_new)
    it = tear_tensor(it)
    return m, cm, it