コード例 #1
0
dh_dv_min = mat_zeros((nv, nv)) + 1e10

q_h_max = mat_zeros((nq, nv))
q_h_min = mat_zeros((nq, nv))
q_M_max = createListOfLists(nv, nv)
q_M_min = createListOfLists(nv, nv)
Md = mat_zeros((nv, nv))
for i in range(nv):
    Md[i, i] = (GEAR_RATIO**2) * MOTOR_INERTIA

# acceleration upper bounds as a function of the joint position
ddq_ub_of_q = np.zeros((nq, N_SAMPLING, 2))

for i in range(N_SAMPLING):
    q = se3.randomConfiguration(robot.model, Q_MIN, Q_MAX)
    while (CHECK_COLLISIONS and robot.isInCollision(q)):
        print("* Robot is in collision at sample %d" % i)
        q = se3.randomConfiguration(robot.model, Q_MIN, Q_MAX)

    if (DISPLAY_ROBOT_CONFIGURATIONS):
        robot.display(q)

    v = np.multiply(DQ_MAX, 2.0 * rand(nv) - 1.0)
    M = robot.mass(q) + Md
    h = robot.biais(q, v)
    #    dM = dcrba(q);          # d/dq M(q)  so that d/dqi M = Mp[:,:,i] (symmetric), then dtau = tensordot(Mp,dq,[2,0])
    dh_dv = coriolis(q, v)
    # d/dvq RNEA(q,vq) = C(q,vq)
    dh_dq = drnea(q, v, dv)
    # d/dq RNEA(q,vq,aq)
    ddqUb = np.divide(TAU_MAX - h, mat_diag(M))
    if (rightAnswerCounter > 10):
        ans = input(
            "The model has been right for %d times in a row. Do you wanna stop?"
            % rightAnswerCounter)
        if 'y' in ans:
            print("Stopping script")
            print("Active collision pairs are: [", end=' ')
            for (cp, active) in enumerate(
                    robot.collision_data.activeCollisionPairs):
                if (active):
                    print("%d, " % cp, end=' ')
            print("]")
            break

    q = se3.randomConfiguration(robot.model, Q_MIN, Q_MAX)
    if (robot.isInCollision(q)):
        print("\n *** Robot is in collision at sample %d ***" % i)
        robot.display(q)
        collPairList = robot.findAllCollisionPairs()
        ans = input("Do you think the robot is in collision [y/n]? ")
        if ('n' in ans):
            rightAnswerCounter = 0
            print("Deactivating all these collisions")
            for cp in collPairList:
                print("    collision %d:" % cp[0], cp[1], end=' ')
                robot.collision_data.deactivateCollisionPair(cp[0])
        else:
            rightAnswerCounter += 1
    else:
        print("\n *** Robot NOT IN COLLISION at sample %d ***" % i)
        robot.display(q)