REPY-2.0 1.0
Mechanical module for modular robotics
Component REPY_module::lower_part ( ) [private]

Generates the lower part of the module.

{
    //-- Create the base:
    //--=======================================================================================================
    //-- Base:
    //------------------------------------------------------------------------------------------------------
    Component base = RoundedTablet( side, side, lower_base_thickness, board_safe);

    //-- Drills of the base:
    //------------------------------------------------------------------------------------------------------
    Component base_drill = Cylinder( pcb->get_drill_diam()/2.0, lower_base_thickness + 0.2, 6, true);
    Component base_drill01 = base_drill.translatedCopy(  pcb->get_drill_x()/2.0,  pcb->get_drill_y()/2.0, 0);
    Component base_drill02 = base_drill.translatedCopy( -pcb->get_drill_x()/2.0,  pcb->get_drill_y()/2.0, 0);
    Component base_drill03 = base_drill.translatedCopy(  pcb->get_drill_x()/2.0, -pcb->get_drill_y()/2.0, 0);
    Component base_drill04 = base_drill.translatedCopy( -pcb->get_drill_x()/2.0, -pcb->get_drill_y()/2.0, 0);

    //-- Aperture on the lower base for wiring, etc
    //-------------------------------------------------------------------------------------------------------
    //-- Wiring_hole_x_thickness: 'y' component of the hole under the servo body along the x axis
    double wiring_hole_x_thickness = (-central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() - lower_front_ear_thickness)
                                   + (  pcb->get_drill_y()/2.0 - pcb->get_drill_diam()/2.0 - lower_screw_safe);

    //-- Wiring_hole_y_thickness: 'y' component of the hole under the servo body along the y axis
    double wiring_hole_y_thickness = (-central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() - lower_front_ear_thickness)
                                   + ( central_part/2.0 - lower_back_ear_thickness - ear_clearance_tol - upper_back_ear_thickness);

    //-- Wiring_hole_leg_thickness: 'y' component of the hole under the servo leg
    double wiring_hole_leg_thickness = ( side/2.0 - lower_border_safe )
                                     - ( -central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() + servo->get_leg_z() );

                            //-- Hole under the servo body, part along X axis
    Component wiring_hole = RoundedTablet( side - 2*lower_border_safe, wiring_hole_x_thickness, lower_base_thickness+0.1, lower_border_safe / 2.5)
                            .translate(0, -wiring_hole_x_thickness/2.0 -central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() - lower_front_ear_thickness, 0)
                            //-- Hole under the servo body, part along y axis
                          + RoundedTablet( pcb->get_drill_x() - pcb->get_drill_diam() - 2*lower_screw_safe, wiring_hole_y_thickness, lower_base_thickness+0.1, lower_border_safe/2.5 )
                            .translate(0,  -wiring_hole_y_thickness/2.0 -central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() - lower_front_ear_thickness, 0)
                            //-- Hole under the servo leg
                          + RoundedTablet( pcb->get_drill_x() - pcb->get_drill_diam() - lower_screw_safe*2, wiring_hole_leg_thickness, lower_base_thickness + 0.1, lower_border_safe/3.0)
                            .translate(0, wiring_hole_leg_thickness/2.0 + ( -central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() + servo->get_leg_z() ), 0);
    //-- Make base:
    //-----------------------------------------------------------------------------------------------------------
    base = base - base_drill01 - base_drill02 - base_drill03 - base_drill04 - wiring_hole;
    base.translate(0, 0, lower_base_thickness/2.0);



    //-- Make ears:
    //--=========================================================================================================
    //-- Front ear:
    //-----------------------------------------------------------------------------------------------------------
    Component front_ear = make_ear( side, servo->get_axis_y()+servo->get_leg_y(), lower_front_ear_thickness,
                                    lower_ear_shift, lower_ear_radius);
    front_ear.rotate( 90, 0, 0).translate( 0, 0, lower_base_thickness);
    front_ear.translate(0, -lower_front_ear_thickness/2.0 , 0);
    front_ear.translate(0, -central_part/2.0 + lower_back_ear_thickness + ear_clearance_tol + upper_back_ear_thickness + servo->get_leg_h() , 0);

    //-- Back ear:
    //-----------------------------------------------------------------------------------------------------------
    Component back_ear = make_ear( side, servo->get_axis_y() + servo->get_leg_y(),lower_back_ear_thickness,
                                   lower_ear_shift, lower_ear_radius);
    back_ear.rotate(90, 0, 0).translate( 0, 0, lower_base_thickness);
    back_ear.translate(0, -central_part/2.0 + upper_back_ear_thickness + ear_clearance_tol + lower_back_ear_thickness/2.0  , 0);

    //-- Make front ear drills:
    //------------------------------------------------------------------------------------------------------------
    Component ear_drills[servo->getLinks().size()-2];

    for (int i = 1; i < servo->getLinks().size()-1 ; i++)
        ear_drills[i-1] =  Cylinder( servo->get_hole_r(), servo->get_leg_z() + lower_front_ear_thickness + 0.2 , 100, false)
                                        .moveToLink(*servo, i).relTranslate(0, 0, -servo->get_leg_z()/2.0 - lower_front_ear_thickness - 0.1);

    if ( servo->getLinks().size()-2 == 4)
    {
        front_ear = front_ear - (ear_drills[0] & ear_drills[1]) - ear_drills[2] - ear_drills[3];
    }
    else
    {
        for (int i = 0; i < servo->getLinks().size()-2; i++)
            front_ear = front_ear - ear_drills[i];
    }

    //-- Result:
    //--===========================================================================================================
    lower = front_ear + back_ear + base - *servo - fake_axis_with_tol;

    if (show_servo)
        lower = lower + *servo;

    //-- Add links to the holes of the base:
    //-------------------------------------------------------------------------------------------------------------
    lower.addLink( RefSys(  pcb->get_drill_x()/2.0,  pcb->get_drill_y()/2.0, 0));
    lower.addLink( RefSys( -pcb->get_drill_x()/2.0,  pcb->get_drill_y()/2.0, 0));
    lower.addLink( RefSys(  pcb->get_drill_x()/2.0, -pcb->get_drill_y()/2.0, 0));
    lower.addLink( RefSys( -pcb->get_drill_x()/2.0, -pcb->get_drill_y()/2.0, 0));

    return lower;

}
 All Classes Functions Variables