示例#1
0
def main_v2(
    robot,
    delay=0.01,
    startSoT=True,
    go_half_sitting=True,
    urdfFileName='/opt/openrobots/share/hrp2_14_description/urdf/hrp2_14.urdf'
):
    dt = robot.timeStep
    robot.device.setControlInputType('position')

    robot.traj_gen = create_trajectory_generator(robot.device, dt)
    robot.com_traj_gen = create_com_traj_gen(dt)
    robot.rf_traj_gen = SE3TrajectoryGenerator("tg_rf")
    robot.lf_traj_gen = SE3TrajectoryGenerator("tg_lf")
    robot.rf_traj_gen.init(dt)
    robot.lf_traj_gen.init(dt)
    (robot.estimator_ft,
     robot.estimator_kin) = create_estimators(robot, dt, delay)

    robot.ff_locator = create_free_flyer_locator(robot, urdfFileName)
    robot.flex_est = create_flex_estimator(robot, dt)
    robot.floatingBase = create_floatingBase(robot)

    robot.pos_ctrl = create_position_controller(robot, dt)
    robot.torque_ctrl = create_torque_controller(robot)
    #    inv_dyn         = create_inverse_dynamics(robot, dt);
    robot.inv_dyn = create_balance_controller(robot, urdfFileName, dt)
    robot.ctrl_manager = create_ctrl_manager(robot, dt)

    robot.estimator_ft.gyroscope.value = (0.0, 0.0, 0.0)
    #    estimator.accelerometer.value = (0.0, 0.0, 9.81);
    if (startSoT):
        print "Gonna start SoT"
        sleep(1.0)
        start_sot()

        if (go_half_sitting):
            print "Gonna go to half sitting"
            sleep(1.0)
            go_to_position(robot.traj_gen, robot.halfSitting[6:], 10.0)

    return robot
示例#2
0
def create_waist_traj_gen(name, robot, dt):
    waist_traj_gen = SE3TrajectoryGenerator(name)
    ref_waist = robot.dynamic.data.oMi[robot.dynamic.model.getJointId(
        'root_joint')]
    trans = ref_waist.translation
    rot = ref_waist.rotation
    rot = rot.reshape(9)
    initial_value = np.concatenate((trans, rot))
    waist_traj_gen.initial_value.value = tuple(initial_value)
    waist_traj_gen.trigger.value = 1.0
    waist_traj_gen.init(dt)
    return waist_traj_gen
示例#3
0
def main_v3(robot, startSoT=True, go_half_sitting=True, conf=None):
    if (conf is None):
        conf = get_default_conf()
    dt = robot.timeStep

    # TMP: overwrite halfSitting configuration to use SoT joint order
    robot.halfSitting = (
        # Free flyer
        0.,
        0.,
        0.648702,
        0.,
        0.,
        0.,
        # Legs
        0.,
        0.,
        -0.453786,
        0.872665,
        -0.418879,
        0.,
        0.,
        0.,
        -0.453786,
        0.872665,
        -0.418879,
        0.,
        # Chest and head
        0.,
        0.,
        0.,
        0.,
        # Arms
        0.261799,
        -0.17453,
        0.,
        -0.523599,
        0.,
        0.,
        0.1,
        0.261799,
        0.17453,
        0.,
        -0.523599,
        0.,
        0.,
        0.1)

    robot.device.setControlInputType('noInteg')
    robot.ctrl_manager = create_ctrl_manager(conf.control_manager,
                                             conf.motor_params, dt)

    robot.traj_gen = create_trajectory_generator(robot.device, dt)
    robot.com_traj_gen = create_com_traj_gen(conf.balance_ctrl, dt)
    robot.rf_force_traj_gen = create_force_traj_gen(
        "rf_force_ref", conf.balance_ctrl.RF_FORCE_DES, dt)
    robot.lf_force_traj_gen = create_force_traj_gen(
        "lf_force_ref", conf.balance_ctrl.LF_FORCE_DES, dt)

    robot.traj_sync = create_trajectory_switch()
    robot.rf_traj_gen = SE3TrajectoryGenerator("tg_rf")
    robot.lf_traj_gen = SE3TrajectoryGenerator("tg_lf")
    robot.rf_traj_gen.init(dt)
    robot.lf_traj_gen.init(dt)

    robot.encoders = create_encoders(robot)
    robot.imu_offset_compensation = create_imu_offset_compensation(robot, dt)
    (robot.estimator_ft,
     robot.filters) = create_estimators(robot, conf.force_torque_estimator,
                                        conf.motor_params, dt)
    robot.imu_filter = create_imu_filter(robot, dt)
    robot.base_estimator = create_base_estimator(robot, dt,
                                                 conf.base_estimator)

    connect_synchronous_trajectories(robot.traj_sync, [
        robot.com_traj_gen, robot.rf_force_traj_gen, robot.lf_force_traj_gen,
        robot.rf_traj_gen, robot.lf_traj_gen
    ])
    #robot.rf_traj_gen, robot.lf_traj_gen])

    robot.pos_ctrl = create_position_controller(robot, conf.pos_ctrl_gains, dt)
    robot.torque_ctrl = create_torque_controller(robot,
                                                 conf.joint_torque_controller,
                                                 conf.motor_params, dt)
    robot.inv_dyn = create_balance_controller(robot, conf.balance_ctrl,
                                              conf.motor_params, dt)
    robot.adm_ctrl = create_admittance_ctrl(robot, conf.adm_ctrl, dt)
    robot.current_ctrl = create_current_controller(robot, conf.current_ctrl,
                                                   conf.motor_params, dt)
    connect_ctrl_manager(robot)

    # create low-pass filter for computing joint velocities
    robot.encoder_filter = create_chebi2_lp_filter_Wn_03_N_4(
        'encoder_filter', dt, conf.motor_params.NJ)
    plug(robot.encoders.sout, robot.encoder_filter.x)
    plug(robot.encoder_filter.dx, robot.current_ctrl.dq)
    plug(robot.encoder_filter.dx, robot.torque_ctrl.jointsVelocities)
    #plug(robot.encoder_filter.x_filtered, robot.base_estimator.joint_positions);
    #plug(robot.encoder_filter.dx,         robot.base_estimator.joint_velocities);

    robot.ros = RosPublish('rosPublish')
    robot.device.after.addDownsampledSignal('rosPublish.trigger', 1)

    robot.estimator_ft.dgyro.value = (0.0, 0.0, 0.0)
    robot.estimator_ft.gyro.value = (0.0, 0.0, 0.0)
    #    estimator.accelerometer.value = (0.0, 0.0, 9.81);
    if (startSoT):
        print "Gonna start SoT"
        sleep(1.0)
        start_sot()

        if (go_half_sitting):
            print "Gonna go to half sitting in 1 sec"
            sleep(1.0)
            go_to_position(robot.traj_gen, robot.halfSitting[6:], 10.0)

    return robot
示例#4
0
from dynamic_graph.sot.torque_control.se3_trajectory_generator import SE3TrajectoryGenerator
from dynamic_graph.sot.torque_control.tests.robot_data_test import initRobotData

# Instanciate a pose trajectory generator
initial_value = (1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.)
se3tg = SE3TrajectoryGenerator("se3tg_test")
se3tg.init(initRobotData.controlDT)
se3tg.initial_value.value = initial_value
se3tg.trigger.value = 1
se3tg.x.recompute(10)
def main_v3(robot, startSoT=True, go_half_sitting=True, conf=None):
    if(conf is None):
        conf = get_default_conf();
    dt = robot.timeStep;
    
    # TMP: overwrite halfSitting configuration to use SoT joint order
    robot.halfSitting = (
         # Free flyer
         0., 0., 1.018213, 0., 0. , 0.,
         # legs
         0.0,  0.0, -0.411354,  0.859395, -0.448041, -0.001708,
         0.0,  0.0, -0.411354,  0.859395, -0.448041, -0.001708,
         # Chest
         0.0 ,  0.006761,
         # arms
         0.25847 ,  0.173046, -0.0002, -0.525366, 0.0, -0.0,  0.1, -0.005,
         -0.25847 , -0.173046, 0.0002  , -0.525366, 0.0,  0.0,  0.1,-0.005,
         # Head
         0.0,0.0);

    #robot.device.setControlInputType('noInteg');
    robot.ctrl_manager    = create_ctrl_manager(conf.control_manager, conf.motor_params, dt);

    robot.traj_gen        = create_trajectory_generator(robot.device, dt);
    robot.com_traj_gen    = create_com_traj_gen(conf.balance_ctrl, dt);
    robot.rf_force_traj_gen  = create_force_traj_gen("rf_force_ref", conf.balance_ctrl.RF_FORCE_DES, dt);
    robot.lf_force_traj_gen  = create_force_traj_gen("lf_force_ref", conf.balance_ctrl.LF_FORCE_DES, dt);

    robot.traj_sync       = create_trajectory_switch();
    robot.rf_traj_gen     = SE3TrajectoryGenerator("tg_rf");
    robot.lf_traj_gen     = SE3TrajectoryGenerator("tg_lf");
    robot.rf_traj_gen.init(dt);
    robot.lf_traj_gen.init(dt);
    
    robot.encoders                              = create_encoders(robot);
    robot.imu_offset_compensation               = create_imu_offset_compensation(robot, dt);
    #(robot.estimator_ft, robot.filters)         = create_estimators(robot, conf.force_torque_estimator, conf.motor_params, dt);
    robot.filters                               = create_filters(robot, conf.force_torque_estimator, conf.motor_params, dt);
    robot.imu_filter                            = create_imu_filter(robot, dt);
    robot.base_estimator                        = create_base_estimator(robot, dt, conf.base_estimator);

    connect_synchronous_trajectories(robot.traj_sync,
                                     [robot.com_traj_gen,
                                      robot.rf_force_traj_gen, robot.lf_force_traj_gen,
                                      robot.rf_traj_gen, robot.lf_traj_gen])
    #robot.rf_traj_gen, robot.lf_traj_gen])

    robot.pos_ctrl        = create_position_controller(robot, conf.pos_ctrl_gains, dt);
    robot.torque_ctrl     = create_torque_controller(robot, conf.joint_torque_controller, conf.motor_params, dt);
    robot.inv_dyn         = create_balance_controller(robot, conf.balance_ctrl,conf.motor_params, dt);
    #robot.current_ctrl    = create_current_controller(robot, conf.current_ctrl, conf.motor_params, dt);
    connect_ctrl_manager(robot);

    # create low-pass filter for computing joint velocities
    robot.encoder_filter = create_chebi2_lp_filter_Wn_03_N_4('encoder_filter', dt, conf.motor_params.NJ)
    plug(robot.encoders.sout,             robot.encoder_filter.x)
    #plug(robot.encoder_filter.dx,         robot.current_ctrl.dq);
    plug(robot.encoder_filter.dx,         robot.torque_ctrl.jointsVelocities);
    #plug(robot.encoder_filter.x_filtered, robot.base_estimator.joint_positions);
    #plug(robot.encoder_filter.dx,         robot.base_estimator.joint_velocities);

    robot.ros = RosPublish('rosPublish');
    robot.device.after.addDownsampledSignal('rosPublish.trigger',1);

    #robot.estimator_ft.dgyro.value = (0.0, 0.0, 0.0);
    #robot.estimator_ft.gyro.value = (0.0, 0.0, 0.0);
#    estimator.accelerometer.value = (0.0, 0.0, 9.81);
    if(startSoT):
        print "Gonna start SoT";
        sleep(1.0);
        start_sot();

        if(go_half_sitting):
            print "Gonna go to half sitting in 1 sec";
            sleep(1.0);
            go_to_position(robot.traj_gen, robot.halfSitting[6:], 10.0);

    return robot;