예제 #1
0
파일: tune.py 프로젝트: alexcdot/cs134
def cb_loop(msg):
    # Grab the time.
    tloop = rospy.Time.now()

    # Compute the nominal position/velocity based on the floating.
    if (floating == FloatMode.ALL):
        for i in range(dofs):
            nompos[i] = msg.position[i]
            nomvel[i] = msg.velocity[i]
    elif (floating == FloatMode.ONE):
        for i in range(dofs):
            nomvel[i] = 0.0
        nompos[joint] = msg.position[joint]
        nomvel[joint] = msg.velocity[joint]
    else:
        t = (tloop - tspline).to_sec()
        for i in range(dofs):
            (nompos[i], nomvel[i]) = spline[i].calc(t)

    # Populate the command message, adding gravity torques if available.
    for i in range(dofs):
        cmdmsg.position[i] = nompos[i]
        cmdmsg.velocity[i] = nomvel[i]
    try:
        cmdmsg.effort = gravity.gravity(cmdmsg.position)
        if (len(cmdmsg.effort) != dofs):
            cmdmsg.effort = [0.0] * dofs
    except:
        cmdmsg.effort = [0.0] * dofs

    # Overlay the triangle wave
    if waving:
        t = (tloop - twave).to_sec()
        if (t <= 0.25 * waveperiod):
            cmdmsg.position[wavejoint] += wavespeed * t
            cmdmsg.velocity[wavejoint] += wavespeed
        elif (t <= 0.75 * waveperiod):
            cmdmsg.position[wavejoint] -= wavespeed * (t - 0.5 * waveperiod)
            cmdmsg.velocity[wavejoint] -= wavespeed
        else:
            cmdmsg.position[wavejoint] += wavespeed * (t - waveperiod)
            cmdmsg.velocity[wavejoint] += wavespeed
        # If we have exceeded a period, shift and update.
        if (t >= waveperiod):
            wave_shift()

    # Publish
    cmdmsg.header.stamp = tloop
    cmdpub.publish(cmdmsg)
예제 #2
0
파일: tune.py 프로젝트: alexcdot/cs134
    rospy.init_node('tune')

    # Define/check the robot joints.
    hebi_define_robot(family, names)

    # Create a publisher to send commands to the robot.  Add some time
    # for the subscriber to connect so we don't loose initial commands.
    cmdpub = rospy.Publisher('/hebiros/robot/command/joint_state',
                             JointState,
                             queue_size=10)
    rospy.sleep(0.4)

    # Grab the initial position/velocity/effort/gravity.
    (initpos, initvel, initeff) = get_joints()
    try:
        initgrav = gravity.gravity(initpos)
    except:
        initgrav = [0.0] * dofs
        rospy.logwarn("No gravity model!")
    if (len(initgrav) != dofs):
        rospy.logerr("Gravity model returned incorrect number of joints!")
        raise ValueError("Bad gravity model number of joints")

    # Start commanding, ramping up the effort.
    N = 50
    for n in range(N):
        cmdmsg.header.stamp = rospy.Time.now()
        for i in range(dofs):
            cmdmsg.position[i] = initpos[i]
            cmdmsg.velocity[i] = 0.0
            cmdmsg.effort[i] = initeff[i] + n * (
예제 #3
0
extract_size = 512
#extract_level=3; extract_size=1024
t0 = time.time()
print('start')
for sim in simlist:
    frame = TL.loops[sim].target_frame
    this_looper = TL.loops[sim]
    ds = TL.loops[sim].load(frame)
    print('make cg')
    if 'cg' not in dir():
        cg = ds.covering_grid(extract_level, [0.0] * 3, [extract_size] * 3)
        rho = cg[YT_density]
    else:
        print('use old cg')
    if 'ggg' not in dir():
        ggg = gravity.gravity(rho, ds.parameters['GravitationalConstant'])
        print('do solve')
        ggg.solve()
        print('done')
    else:
        print("WARNING old ggg")

    if 1:
        ms = trackage.mini_scrubber(this_looper.tr, core_id)
        c = nar([ms.mean_x[-1], ms.mean_y[-1], ms.mean_z[-1]])

        if 'rho_hack' not in dir():
            print("On board the memory train")
            rho_hack = rho + 0
            x = cg[YT_x].v
            y = cg[YT_y].v
예제 #4
0
Cap.label = 'Capacitor Charging'
Cap.file = 'capacitor.html'
physics.append(Cap)
Induction = induction.induction(left, size, plot2d, msgwin)
Induction.label = 'Electromagnetic Induction'
physics.append(Induction)
Trans = transformer.tran(left, size, plot2d, msgwin)
Trans.label = 'Mutual Induction between coils'
physics.append(Trans)
Pendulum = pendulum.pend(left, size, plot2d, msgwin)
Pendulum.label ='Pendulum Waveform'
physics.append(Pendulum)
Rodpend = rodpend.rodpend(left, size, plot2d, msgwin)
Rodpend.label = 'Rod Pendulum measuring gravity'
physics.append(Rodpend)
Gravity = gravity.gravity(left, size, plot2d, msgwin)
Gravity.label = 'Gravity by Time of Flight'
physics.append(Gravity)
Sound = usound.sound(left, size, plot2d, msgwin)
Sound.label = 'Study Sound with 40KHz Piezo '
physics.append(Sound)
Pt100 = pt100.pt100(left, size, plot2d, msgwin)
Pt100.label = 'Temperature (PT100)'
physics.append(Pt100)
Rad = radiation.rad(left, size, plot2d, msgwin)
Rad.label = 'Radiation Detection (MCA)'
physics.append(Rad)
Gm = gm.gm(left, size, plot2d, msgwin)
Gm.label = 'GM Counter'
physics.append(Gm)
예제 #5
0
                      fields=['density', YT_grav_energy])

if 0:
    #projections
    fig, ax = plt.subplots(1, 1)
    ax.imshow(cg[YT_density].sum(axis=0).v)
    fig.savefig('plots_to_sort/grav_20.png')

    proj = ds.proj(YT_grav_energy, 0)
    proj.to_pw().save('plots_to_sort/grav_21.png')

if 0:
    cg.set_field_parameter('center', ds.arr([0.5] * 3, 'code_length'))
    fig, ax = plt.subplots(1, 1)
    plt.scatter(cg['radius'], cg[YT_potential_field])
    fig.savefig('plots_to_sort/grav_22.png')

if 1:
    import gravity
    reload(gravity)
    G = ds.parameters['GravitationalConstant']  #wants the 4pi
    ggg = gravity.gravity(cg['density'].v, G)
    ggg.solve()

    fig, ax = plt.subplots(1, 1)
    #ax.scatter(cg['radius'],ggg.phi)
    #ax.scatter(cg['radius'],cg[YT_potential_field])
    ax.scatter(ggg.phi, cg[YT_potential_field])

    fig.savefig('plots_to_sort/grav_23.png')