Beispiel #1
0
    def send_command(self, tau):
        tau = np.squeeze(np.asarray(tau))
        rbdl.CompositeRigidBodyAlgorithm(self.robot, self.q, self.M)
        rbdl.NonlinearEffects(self.robot, self.q, self.dq, self.b)

        self.ddq = np.linalg.inv(self.M).dot(tau-self.b)
        self.dq = self.dq + self.dt*self.ddq
        self.q = self.q + self.dt*self.dq
    def get_inertia_matrix(self):
        """
        Computes the joint space inertia matrix.

        Returns:
            np.array[float[N,N]]: joint space inertia matrix (where `N` is the number of DoFs).
        """
        H = np.zeros(self.num_dofs, self.num_dofs)
        rbdl.CompositeRigidBodyAlgorithm(self.model, self._q, H, update_kinematics=False)
        return H
Beispiel #3
0
    def send_command(self, tau):
        rbdl.CompositeRigidBodyAlgorithm(self.robot, self.q, self.M)
        rbdl.NonlinearEffects(self.robot, self.q, self.dq, self.b)
        try:
            ddq = np.linalg.inv(self.M).dot(tau - self.b)
        except np.linalg.LinAlgError:
            ddq = self.M.T.dot(
                np.linalg.inv(
                    np.dot(self.M, self.M.T) +
                    0.9**2 * np.eye(self.q.size))).dot(tau - self.b)

        self.q = self.q + self.dt * self.dq
        self.dq = self.dq + self.dt * ddq
Beispiel #4
0
def get_M(q_):
    q_ = np.asarray(q_)
    q = np.zeros(7)

    M = np.zeros([7, 7])

    q[0] = q_[0]
    q[1] = q_[1]
    q[2] = q_[2]
    q[3] = q_[3]
    q[4] = q_[4]
    q[5] = q_[5]
    q[6] = q_[6]

    rbdl.CompositeRigidBodyAlgorithm(model, q, M, True)
    return M
Beispiel #5
0
    def test_CompositeRigidBodyAlgorithm_NonlinearEffects(self):

        self.q = np.random.rand(self.model.q_size)
        self.qdot = np.random.rand(self.model.q_size)
        self.qddot = np.random.rand(self.model.q_size)

        tau_nonlin = np.zeros(self.model.q_size)
        H = np.zeros((self.model.q_size, self.model.q_size))

        rbdl.InverseDynamics(self.model, self.q, self.qdot, self.qddot,
                             self.tau)

        rbdl.CompositeRigidBodyAlgorithm(self.model, self.q, H)
        rbdl.NonlinearEffects(self.model, self.q, self.qdot, tau_nonlin)
        tau_comp = H.dot(self.qddot) + tau_nonlin

        assert_almost_equal(tau_comp, self.tau)
def get_M(
    q_
):  # This function computes the joint space inertia matrix from a given model and the generalized state vector
    q_ = np.asarray(q_)
    q = np.zeros(7)

    M = np.zeros([7, 7])

    q[0] = q_[0]
    q[1] = q_[1]
    q[2] = q_[2]
    q[3] = q_[3]
    q[4] = q_[4]
    q[5] = q_[5]
    q[6] = q_[6]

    rbdl.CompositeRigidBodyAlgorithm(model, q, M, True)
    return M
Beispiel #7
0
#!/usr/bin/python
#
# rbdl mass matrix
import rbdl
import numpy as np
import csv

np.set_printoptions(precision=6, suppress=True)
mdl = rbdl.loadModel(
    b'/home/shjliu/workspace/EPR/bullet3-new/20200214/bullet3/examples/pybullet/gym/pybullet_data/franka_panda/panda.urdf'
)
mass_matrix = np.zeros((9, 9), dtype=np.double)
#neutral_joint_angles= [0., -0., 0., -0, 0., 0, 0.]
neutral_joint_angles = [0., -0.3135, 0., -2.515, 0., 2.226, 0.87]

rbdl.CompositeRigidBodyAlgorithm(
    mdl, np.asarray(neutral_joint_angles, dtype=np.double), mass_matrix)
print("mass_matrix=")
print(mass_matrix)
Beispiel #8
0
 
while not rospy.is_shutdown():

   # Leer valores del simulador
   q  = legRobot.read_joint_positions()
   dq = legRobot.read_joint_velocities()
   # Posicion actual del efector final
   x = fkine(q)[0:3,3]
   # Tiempo actual
   jstate.header.stamp = rospy.Time.now()
   
   # ____________________________________________________________
   # Control dinamico
   # ____________________________________________________________
   rbdl.InverseDynamics(leg_model, q, zeros, zeros, g)
   rbdl.CompositeRigidBodyAlgorithm(leg_model,q,M)
   rbdl.NonlinearEffects(leg_model,q,dq,c)

   u = M.dot( ddqdes + Kd.dot(dqdes - dq) + Kp.dot(qdes-q) ) + c
 
   if np.linalg.norm(qdes-q)< 0.01:
       break
   # Simulacion del robot
   legRobot.send_command(u)

   # Log values                                                    
   fxcurrent.write(str(x[0])+' '+str(x[1]) +' '+str(x[2])+'\n')
   fxdesired.write(str(xdes[0])+' '+str(xdes[1])+' '+str(xdes[2])+'\n')
   fq.write(str(q[0])+" "+str(q[1])+" "+str(q[2])+" "+str(q[3])+" "+ str(q[4])+" "+str(q[5])+"\n")
 
   # Publicacion del mensaje
Beispiel #9
0
    fqact.write(
        str(t) + ',' + str(q[0]) + ',' + str(q[1]) + ',' + str(q[2]) + ',' +
        str(q[3]) + ',' + str(q[4]) + ',' + str(q[5]) + ',' + str(q[6]) +
        '\n ')
    fqdes.write(
        str(t) + ',' + str(qdes[0]) + ',' + str(qdes[1]) + ',' + str(qdes[2]) +
        ',' + str(qdes[3]) + ',' + str(qdes[4]) + ',' + str(qdes[5]) + ',' +
        str(qdes[6]) + '\n ')

    # ----------------------------
    # Control dinamico (COMPLETAR)
    # ----------------------------
    M = np.zeros((ndof, ndof))
    b = np.zeros((ndof))

    rbdl.CompositeRigidBodyAlgorithm(modelo, q, M)
    #print(M.shape)
    rbdl.NonlinearEffects(modelo, q, dq, b)

    Kp = np.diag([15.5, 10., 5.0, 3.5, 2.9, 2.8, 2.4])
    Kd = np.diag([7., 6., 3., 2.4, 2.6, 2.3, 2.3])

    y = ddqdes - ddq + Kd.dot(dqdes - dq) + Kp.dot(qdes - q)
    u = M.dot(y) + b
    print(M)
    # Simulacion del robot
    robot.send_command(u)

    # Publicacion del mensaje
    jstate.position = q
    pub.publish(jstate)
 def update_inertia_matrix(self, M, q=None, update_kinematics=True):
     if q is None:
         q = self.q
     rbdl.CompositeRigidBodyAlgorithm(self.model, q, M, update_kinematics)
 def get_inertia_matrix(self, q=None, update_kinematics=True):
     if q is None:
         q = self.q
     M = np.zeros((self.qdot_size, self.qdot_size))
     rbdl.CompositeRigidBodyAlgorithm(self.model, q, M, update_kinematics)
     return M
Beispiel #12
0
def u2c2np(asd):
    return cs.Function("temp",[],[asd])()["o0"].toarray()

def list2np(asd):
    return np.asarray(asd)

n_itr = 1000
for i in range(n_itr):
    for j in range(n_joints):
        q[j] = (q_max[j] - q_min[j])*np.random.rand()-(q_max[j] - q_min[j])/2
        q_kdl[j] = q[j]
        q_np[j] = q[j]


    rbdl.CompositeRigidBodyAlgorithm(snake_rbdl, q_np, M_rbdl)
    kdl.ChainDynParam(snake_chain, gravity_kdl).JntToMass(q_kdl, M_kdl)
    M_pb = pb.calculateMassMatrix(snake_pb, q)
    M_u2c = M_sym(q)

    for row_idx in range(n_joints):
        for col_idx in range(n_joints):
            error_kdl_u2c[row_idx][col_idx] += np.absolute(M_kdl[row_idx,col_idx] - u2c2np(M_u2c[row_idx, col_idx]))
            error_rbdl_u2c[row_idx][col_idx] += np.absolute((M_rbdl[row_idx,col_idx]) - u2c2np(M_u2c[row_idx, col_idx]))
            error_pb_u2c[row_idx][col_idx] += np.absolute(list2np(M_pb[row_idx][col_idx]) - u2c2np(M_u2c[row_idx, col_idx]))
            error_kdl_rbdl[row_idx][col_idx] += np.absolute((M_rbdl[row_idx,col_idx]) - list2np(M_kdl[row_idx, col_idx]))
            error_pb_kdl[row_idx][col_idx] += np.absolute(list2np(M_pb[row_idx][col_idx]) - list2np(M_kdl[row_idx, col_idx]))
            error_pb_rbdl[row_idx][col_idx] += np.absolute((M_rbdl[row_idx,col_idx]) - list2np(M_pb[row_idx][col_idx]))


Beispiel #13
0
    return cs.Function("temp", [], [asd])()["o0"].toarray()


def list2np(asd):
    return np.asarray(asd)


n_itr = 1000
for i in range(n_itr):
    for j in range(n_joints):
        q[j] = (q_max[j] - q_min[j]) * np.random.rand() - (q_max[j] -
                                                           q_min[j]) / 2
        q_kdl[j] = q[j]
        q_np[j] = q[j]

    rbdl.CompositeRigidBodyAlgorithm(gantry_rbdl, q_np, M_rbdl)
    kdl.ChainDynParam(gantry_chain, gravity_kdl).JntToMass(q_kdl, M_kdl)
    M_pb = pb.calculateMassMatrix(gantry_pb, q)
    M_u2c = M_sym(q)

    for row_idx in range(n_joints):
        for col_idx in range(n_joints):
            error_kdl_u2c[row_idx][col_idx] += np.absolute(
                M_kdl[row_idx, col_idx] - u2c2np(M_u2c[row_idx, col_idx]))
            error_rbdl_u2c[row_idx][col_idx] += np.absolute(
                (M_rbdl[row_idx, col_idx]) - u2c2np(M_u2c[row_idx, col_idx]))
            error_pb_u2c[row_idx][col_idx] += np.absolute(
                list2np(M_pb[row_idx][col_idx]) -
                u2c2np(M_u2c[row_idx, col_idx]))
            error_kdl_rbdl[row_idx][col_idx] += np.absolute(
                (M_rbdl[row_idx, col_idx]) - list2np(M_kdl[row_idx, col_idx]))
    return cs.Function("temp", [], [asd])()["o0"].toarray()


def list2np(asd):
    return np.asarray(asd)


n_itr = 1000
for i in range(n_itr):
    for j in range(n_joints):
        q[j] = (q_max[j] - q_min[j]) * np.random.rand() - (q_max[j] -
                                                           q_min[j]) / 2
        q_kdl[j] = q[j]
        q_np[j] = q[j]

    rbdl.CompositeRigidBodyAlgorithm(ur5_rbdl, q_np, M_rbdl)
    kdl.ChainDynParam(ur5_chain, gravity_kdl).JntToMass(q_kdl, M_kdl)
    M_pb = pb.calculateMassMatrix(ur5_pb, q)
    M_u2c = M_sym(q)

    for row_idx in range(n_joints):
        for col_idx in range(n_joints):
            error_kdl_u2c[row_idx][col_idx] += np.absolute(
                M_kdl[row_idx, col_idx] - u2c2np(M_u2c[row_idx, col_idx]))
            error_rbdl_u2c[row_idx][col_idx] += np.absolute(
                (M_rbdl[row_idx, col_idx]) - u2c2np(M_u2c[row_idx, col_idx]))
            error_pb_u2c[row_idx][col_idx] += np.absolute(
                list2np(M_pb[row_idx][col_idx]) -
                u2c2np(M_u2c[row_idx, col_idx]))
            error_kdl_rbdl[row_idx][col_idx] += np.absolute(
                (M_rbdl[row_idx, col_idx]) - list2np(M_kdl[row_idx, col_idx]))