!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! McGill's Scorpion Robot Model ! ! ADAMS 12.0.0 code compatible. ! ! Written by James Andrew Smith (jasmith@cim.mcgill.ca) ! April, 2002 ! ! Original Code by Ralf and Company. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! "dyn_scorp_old.adm" is being rewritten to make it more macro-like. ! This will make it a whole lot easier to modify parameters as part of ! the design study. ! ! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ------------------------------------------------------- ! New Session - Set units, ! create a model, ! setup ground, ! setup material, ! and set gravity ! -------------------------------------------------------- ! undo begin ! default units len=mm mass=kg force=newton model create model="scorpion_mcgill" fit_to_view=yes part attrib part_name=ground name_vis=off part modify rigid_body mass_properties part_name=ground & material=.materials.aluminum force create body gravitational gravity=gravity & x_comp=0 y_comp=-9806.65 z_comp=0 ! ! Set some other options ! defaults command_file echo_commands=off update_screen=off defaults attributes icon_visibility="on" !! Simulation Settings simulation single set update = none ! ! ! ! ------------------------------------------ ! ! Load the ADAMS/Control Plugin / Toolbox ! ! ----------------------------------------- plugin load plugin_name=.mdi.plugins.controls ! ! !------------------------------------------- ! ! Variables ! !------------------------------------------- ! source, in addition, to guestimations: ! "Biomimetic Walking Robot Scorpion: Control and Modeling" ! by Klaassen, Linnemann, Spenneberg, Kirchner ! ! total robot mass: 9.8 kg. (6-legged), 12.5 kg. (8-legged) ! body mass: 9.8 - 3*6*0.2 - 6*0.2 - 6*0.05 = 9.8-5.1 = 4.7 ~= 5 kg ! total length: 52 cm (6 leg), 65 cm (8 leg) ! simplified body dimensions (box): ! 52cm (long) x 10 cm (wide) x 12.5 cm (high) ! density: 5 kg / 0.0065 m^3 = 770 kg / m^3 ! actuator: 12.5 cm (length), 3.5 cm (diameter), 200 g (mass, rounded up) ! distal link: 23 cm (length), 2.5 cm (diameter), 200 g (mass, rounded up) ! basalar link: 2.5 cm (length), 2.5 cm (diameter) , 50 g (mass) ! thoracic link: not included. ! var set var=number_of_hip_pairs inte=3 ! ! I believe that these dimensions where taken from dyn_scorp_old.adm ! ! hip_block: the lateral bars connecting hip pairs var set var=hip_block_x units=length real=100 range=0,200 !! was 109 in dyn_scorp_old.adm var set var=hip_block_y units=length real=125 range=0,200 var set var=hip_block_z units=length real=20 range=0,100 ! ! body_block: the boxes connecting hip_blocks together. var set var=body_block_x units=length real=100 range=0,200 !! was 60 in dyn_scorp_old.adm var set var=body_block_y units=length real=125 range=0,200 var set var=body_block_z units=length real=230 range=0,300 !! was 190, changed to 230 to get total body length of 540, with 3*20mm hip_block_z. ! ! ! Body mass var set var=body_mass real=1.8 range=0,500 !! 1.8 kg.; new robot should be 1.5 kg [Dirk Email, July 19, 2002] ! ! Actuator mass var set var=actuator_mass real=0.2 range=0,1 !! 200 g. ! ! Actuator link mass (unsprung mass) var set var=unsprung_link_mass real=0.15 range=0,2 !! the mass of the link between basalar and distal; also, the link above the spring. ! ! L1: spacing between hips var set var=L1 units=length real=250 range=0,400 !! was 210 prior to body_block_z change. ! ! H1: the initial robot height. var set var=H1 units=length real=250 range=0,500 !! ! ! ! link_length: Link Length (leg) !! was 153, then 76.5, now 25+17*2 var set var = link_length units=length real=61 range=0,300 !! was 59mm; changed July 19, 2002. ! ! link_radius: Link radius (leg) !! !! var set var = link_radius units=length real=10 range=0,40 !! was 12.5mm; changed July 22, 2002. ... this is now set below, based on mass, length and density of the cylinder. ! ! thoracic_link_length: space between the centres of the thoracic and basalar joints var set var = thoracic_link_length units=length real=35 range=0,50 ! ! actuator_length: Actuator Length (leg) var set var = actuator_length units=length real=120 range=0,200 !! was 125 mm; changed on July 19, 2002 ! ! actuator_radius: Actuator Radius (leg) var set var = actuator_radius units=length real=14.5 range=0, 50 !! was 17 mm; changed on July 19, 2002 ! ! toe_radius: Toe Radius (Toe) var set var = toe_radius units=length real=10 range=0, 50 !! was 12.5 mm; changed on July 19, 2002 ! ! sprung_link_length: Link Length (leg) var set var = sprung_link_length units=length real=(200-eval(actuator_radius)-eval(link_length)-eval(toe_radius)) range=0,600 !! was 230 mm; changed on July 19, 2002. ! ! sprung_link_radius: Link radius (leg) var set var = sprung_link_radius units=length real=12.5 range=0,40 ! ! Sprung Link Mass: the mass of the distal link below the spring. var set var=sprung_link_mass real=0.1 range=0,1 !! 0.1 kg. ! ! leg_spring_constant: Spring constant in the basalar slider !! Units: [N/mm] var set var = leg_spring_constant real=1.75 range=0, 50000 !! was 0.2 ! ! leg_damper_constant: Spring constant in the basalar slider !! Units: [N*sec/mm] var set var = leg_damper_constant real=((eval(leg_spring_constant))/100) range=0, 50000 !! 1 is good, too ! ! body_height_extrude: the vertical height of the robot body !! was 110 var set var=body_height_extrude units=length real=(eval(body_block_y)) range=0,500 ! ! ! Thoracic actuator angle, with respect to the vertical. ! ... this is not the angle about the thoracic joint's axis of ! rotation. Rather, it is angle at which the actuator is tilted ! with respect to the side wall of the body. var set var=thoracic_actuator_angle real=60 range=0,90 ! ! Set the basic unit of time for the spline definitions var set var=u_t real=0.20 range=0,1 ! !! Thoracic Motion Splines !! ---------------------------------------------------------------------------- data_element create spline spline_name = thoracic_position_spline_phase1 & x=0,(eval(1*(eval(u_t)))),(eval(2*(eval(u_t)))),(eval(3*(eval(u_t)))),(eval(4*(eval(u_t)))),(eval(5*(eval(u_t)))),(eval(6*(eval(u_t)))),(eval(7*(eval(u_t)))),(eval(8*(eval(u_t)))),(eval(9*(eval(u_t)))),(eval(10*(eval(u_t)))),(eval(11*(eval(u_t)))),(eval(12*(eval(u_t)))),(eval(13*(eval(u_t)))),(eval(14*(eval(u_t)))),(eval(15*(eval(u_t)))),(eval(16*(eval(u_t)))),(eval(17*(eval(u_t)))),(eval(18*(eval(u_t)))),(eval(19*(eval(u_t)))),(eval(20*(eval(u_t)))),(eval(21*(eval(u_t)))),(eval(22*(eval(u_t)))),(eval(23*(eval(u_t)))),(eval(24*(eval(u_t)))),(eval(25*(eval(u_t)))),(eval(26*(eval(u_t)))),(eval(27*(eval(u_t)))),(eval(28*(eval(u_t)))),(eval(29*(eval(u_t)))),(eval(30*(eval(u_t)))),(eval(31*(eval(u_t)))),(eval(32*(eval(u_t)))),(eval(33*(eval(u_t)))),(eval(34*(eval(u_t)))),(eval(35*(eval(u_t)))),(eval(36*(eval(u_t)))),(eval(37*(eval(u_t)))),(eval(38*(eval(u_t)))),(eval(39*(eval(u_t)))),(eval(40*(eval(u_t)))),(eval(41*(eval(u_t)))),(eval(42*(eval(u_t)))),(eval(43*(eval(u_t)))),(eval(44*(eval(u_t)))),(eval(45*(eval(u_t)))),(eval(46*(eval(u_t)))),(eval(47*(eval(u_t)))),(eval(48*(eval(u_t)))),(eval(49*(eval(u_t)))),(eval(50*(eval(u_t)))),(eval(51*(eval(u_t)))),(eval(52*(eval(u_t)))),(eval(53*(eval(u_t)))),(eval(54*(eval(u_t)))),(eval(55*(eval(u_t)))),(eval(56*(eval(u_t)))),(eval(57*(eval(u_t)))),(eval(58*(eval(u_t)))),(eval(59*(eval(u_t)))),(eval(60*(eval(u_t)))),(eval(61*(eval(u_t)))),(eval(62*(eval(u_t)))),(eval(63*(eval(u_t)))),(eval(64*(eval(u_t)))),(eval(65*(eval(u_t)))),(eval(66*(eval(u_t)))),(eval(67*(eval(u_t)))),(eval(68*(eval(u_t)))),(eval(69*(eval(u_t)))),(eval(70*(eval(u_t)))),(eval(71*(eval(u_t)))),(eval(72*(eval(u_t)))),(eval(73*(eval(u_t)))),(eval(74*(eval(u_t)))),(eval(75*(eval(u_t)))),(eval(76*(eval(u_t)))),(eval(77*(eval(u_t)))),(eval(78*(eval(u_t)))),(eval(79*(eval(u_t)))),(eval(80*(eval(u_t)))),(eval(81*(eval(u_t)))),(eval(82*(eval(u_t)))),(eval(83*(eval(u_t)))),(eval(84*(eval(u_t)))),(eval(85*(eval(u_t)))),(eval(86*(eval(u_t)))),(eval(87*(eval(u_t)))),(eval(88*(eval(u_t)))),(eval(89*(eval(u_t)))),(eval(90*(eval(u_t)))),(eval(91*(eval(u_t)))),(eval(92*(eval(u_t)))),(eval(93*(eval(u_t)))),(eval(94*(eval(u_t)))),(eval(95*(eval(u_t)))),(eval(96*(eval(u_t)))),(eval(97*(eval(u_t)))),(eval(98*(eval(u_t)))),(eval(99*(eval(u_t)))),(eval(100*(eval(u_t)))) ,(eval(101*(eval(u_t)))),(eval(102*(eval(u_t)))),(eval(103*(eval(u_t)))),(eval(104*(eval(u_t)))),(eval(105*(eval(u_t)))),(eval(106*(eval(u_t)))),(eval(107*(eval(u_t)))),(eval(108*(eval(u_t)))),(eval(109*(eval(u_t)))),(eval(110*(eval(u_t)))),(eval(111*(eval(u_t)))),(eval(112*(eval(u_t)))),(eval(113*(eval(u_t)))),(eval(114*(eval(u_t)))),(eval(115*(eval(u_t)))),(eval(116*(eval(u_t)))),(eval(117*(eval(u_t)))),(eval(118*(eval(u_t)))),(eval(119*(eval(u_t)))),(eval(120*(eval(u_t)))),(eval(121*(eval(u_t)))),(eval(122*(eval(u_t)))),(eval(123*(eval(u_t)))),(eval(124*(eval(u_t)))),(eval(125*(eval(u_t)))),(eval(126*(eval(u_t)))),(eval(127*(eval(u_t)))),(eval(128*(eval(u_t)))),(eval(129*(eval(u_t)))),(eval(130*(eval(u_t)))),(eval(131*(eval(u_t)))),(eval(132*(eval(u_t)))),(eval(133*(eval(u_t)))),(eval(134*(eval(u_t)))),(eval(135*(eval(u_t)))),(eval(136*(eval(u_t)))),(eval(137*(eval(u_t)))),(eval(138*(eval(u_t)))),(eval(139*(eval(u_t)))),(eval(140*(eval(u_t)))),(eval(141*(eval(u_t)))),(eval(142*(eval(u_t)))),(eval(143*(eval(u_t)))),(eval(144*(eval(u_t)))),(eval(145*(eval(u_t)))),(eval(146*(eval(u_t)))),(eval(147*(eval(u_t)))),(eval(148*(eval(u_t)))),(eval(149*(eval(u_t)))),(eval(150*(eval(u_t)))),(eval(151*(eval(u_t)))),(eval(152*(eval(u_t)))),(eval(153*(eval(u_t)))),(eval(154*(eval(u_t)))),(eval(155*(eval(u_t)))),(eval(156*(eval(u_t)))),(eval(157*(eval(u_t)))),(eval(158*(eval(u_t)))),(eval(159*(eval(u_t)))),(eval(160*(eval(u_t)))),(eval(161*(eval(u_t)))),(eval(162*(eval(u_t)))),(eval(163*(eval(u_t)))),(eval(164*(eval(u_t)))),(eval(165*(eval(u_t)))),(eval(166*(eval(u_t)))),(eval(167*(eval(u_t)))),(eval(168*(eval(u_t)))),(eval(169*(eval(u_t)))),(eval(170*(eval(u_t)))),(eval(171*(eval(u_t)))),(eval(172*(eval(u_t)))),(eval(173*(eval(u_t)))),(eval(174*(eval(u_t)))),(eval(175*(eval(u_t)))),(eval(176*(eval(u_t)))),(eval(177*(eval(u_t)))),(eval(178*(eval(u_t)))),(eval(179*(eval(u_t)))),(eval(180*(eval(u_t)))),(eval(181*(eval(u_t)))),(eval(182*(eval(u_t)))),(eval(183*(eval(u_t)))),(eval(184*(eval(u_t)))),(eval(185*(eval(u_t)))),(eval(186*(eval(u_t)))),(eval(187*(eval(u_t)))),(eval(188*(eval(u_t)))),(eval(189*(eval(u_t)))),(eval(190*(eval(u_t)))),(eval(191*(eval(u_t)))),(eval(192*(eval(u_t)))),(eval(193*(eval(u_t)))),(eval(194*(eval(u_t)))),(eval(195*(eval(u_t)))),(eval(196*(eval(u_t)))),(eval(197*(eval(u_t)))),(eval(198*(eval(u_t)))),(eval(199*(eval(u_t)))) & y=0,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491 & linear_extrapolate = yes data_element create spline spline_name = thoracic_position_spline_phase2 & x=0,(eval(1*(eval(u_t)))),(eval(2*(eval(u_t)))),(eval(3*(eval(u_t)))),(eval(4*(eval(u_t)))),(eval(5*(eval(u_t)))),(eval(6*(eval(u_t)))),(eval(7*(eval(u_t)))),(eval(8*(eval(u_t)))),(eval(9*(eval(u_t)))),(eval(10*(eval(u_t)))),(eval(11*(eval(u_t)))),(eval(12*(eval(u_t)))),(eval(13*(eval(u_t)))),(eval(14*(eval(u_t)))),(eval(15*(eval(u_t)))),(eval(16*(eval(u_t)))),(eval(17*(eval(u_t)))),(eval(18*(eval(u_t)))),(eval(19*(eval(u_t)))),(eval(20*(eval(u_t)))),(eval(21*(eval(u_t)))),(eval(22*(eval(u_t)))),(eval(23*(eval(u_t)))),(eval(24*(eval(u_t)))),(eval(25*(eval(u_t)))),(eval(26*(eval(u_t)))),(eval(27*(eval(u_t)))),(eval(28*(eval(u_t)))),(eval(29*(eval(u_t)))),(eval(30*(eval(u_t)))),(eval(31*(eval(u_t)))),(eval(32*(eval(u_t)))),(eval(33*(eval(u_t)))),(eval(34*(eval(u_t)))),(eval(35*(eval(u_t)))),(eval(36*(eval(u_t)))),(eval(37*(eval(u_t)))),(eval(38*(eval(u_t)))),(eval(39*(eval(u_t)))),(eval(40*(eval(u_t)))),(eval(41*(eval(u_t)))),(eval(42*(eval(u_t)))),(eval(43*(eval(u_t)))),(eval(44*(eval(u_t)))),(eval(45*(eval(u_t)))),(eval(46*(eval(u_t)))),(eval(47*(eval(u_t)))),(eval(48*(eval(u_t)))),(eval(49*(eval(u_t)))),(eval(50*(eval(u_t)))),(eval(51*(eval(u_t)))),(eval(52*(eval(u_t)))),(eval(53*(eval(u_t)))),(eval(54*(eval(u_t)))),(eval(55*(eval(u_t)))),(eval(56*(eval(u_t)))),(eval(57*(eval(u_t)))),(eval(58*(eval(u_t)))),(eval(59*(eval(u_t)))),(eval(60*(eval(u_t)))),(eval(61*(eval(u_t)))),(eval(62*(eval(u_t)))),(eval(63*(eval(u_t)))),(eval(64*(eval(u_t)))),(eval(65*(eval(u_t)))),(eval(66*(eval(u_t)))),(eval(67*(eval(u_t)))),(eval(68*(eval(u_t)))),(eval(69*(eval(u_t)))),(eval(70*(eval(u_t)))),(eval(71*(eval(u_t)))),(eval(72*(eval(u_t)))),(eval(73*(eval(u_t)))),(eval(74*(eval(u_t)))),(eval(75*(eval(u_t)))),(eval(76*(eval(u_t)))),(eval(77*(eval(u_t)))),(eval(78*(eval(u_t)))),(eval(79*(eval(u_t)))),(eval(80*(eval(u_t)))),(eval(81*(eval(u_t)))),(eval(82*(eval(u_t)))),(eval(83*(eval(u_t)))),(eval(84*(eval(u_t)))),(eval(85*(eval(u_t)))),(eval(86*(eval(u_t)))),(eval(87*(eval(u_t)))),(eval(88*(eval(u_t)))),(eval(89*(eval(u_t)))),(eval(90*(eval(u_t)))),(eval(91*(eval(u_t)))),(eval(92*(eval(u_t)))),(eval(93*(eval(u_t)))),(eval(94*(eval(u_t)))),(eval(95*(eval(u_t)))),(eval(96*(eval(u_t)))),(eval(97*(eval(u_t)))),(eval(98*(eval(u_t)))),(eval(99*(eval(u_t)))),(eval(100*(eval(u_t)))) ,(eval(101*(eval(u_t)))),(eval(102*(eval(u_t)))),(eval(103*(eval(u_t)))),(eval(104*(eval(u_t)))),(eval(105*(eval(u_t)))),(eval(106*(eval(u_t)))),(eval(107*(eval(u_t)))),(eval(108*(eval(u_t)))),(eval(109*(eval(u_t)))),(eval(110*(eval(u_t)))),(eval(111*(eval(u_t)))),(eval(112*(eval(u_t)))),(eval(113*(eval(u_t)))),(eval(114*(eval(u_t)))),(eval(115*(eval(u_t)))),(eval(116*(eval(u_t)))),(eval(117*(eval(u_t)))),(eval(118*(eval(u_t)))),(eval(119*(eval(u_t)))),(eval(120*(eval(u_t)))),(eval(121*(eval(u_t)))),(eval(122*(eval(u_t)))),(eval(123*(eval(u_t)))),(eval(124*(eval(u_t)))),(eval(125*(eval(u_t)))),(eval(126*(eval(u_t)))),(eval(127*(eval(u_t)))),(eval(128*(eval(u_t)))),(eval(129*(eval(u_t)))),(eval(130*(eval(u_t)))),(eval(131*(eval(u_t)))),(eval(132*(eval(u_t)))),(eval(133*(eval(u_t)))),(eval(134*(eval(u_t)))),(eval(135*(eval(u_t)))),(eval(136*(eval(u_t)))),(eval(137*(eval(u_t)))),(eval(138*(eval(u_t)))),(eval(139*(eval(u_t)))),(eval(140*(eval(u_t)))),(eval(141*(eval(u_t)))),(eval(142*(eval(u_t)))),(eval(143*(eval(u_t)))),(eval(144*(eval(u_t)))),(eval(145*(eval(u_t)))),(eval(146*(eval(u_t)))),(eval(147*(eval(u_t)))),(eval(148*(eval(u_t)))),(eval(149*(eval(u_t)))),(eval(150*(eval(u_t)))),(eval(151*(eval(u_t)))),(eval(152*(eval(u_t)))),(eval(153*(eval(u_t)))),(eval(154*(eval(u_t)))),(eval(155*(eval(u_t)))),(eval(156*(eval(u_t)))),(eval(157*(eval(u_t)))),(eval(158*(eval(u_t)))),(eval(159*(eval(u_t)))),(eval(160*(eval(u_t)))),(eval(161*(eval(u_t)))),(eval(162*(eval(u_t)))),(eval(163*(eval(u_t)))),(eval(164*(eval(u_t)))),(eval(165*(eval(u_t)))),(eval(166*(eval(u_t)))),(eval(167*(eval(u_t)))),(eval(168*(eval(u_t)))),(eval(169*(eval(u_t)))),(eval(170*(eval(u_t)))),(eval(171*(eval(u_t)))),(eval(172*(eval(u_t)))),(eval(173*(eval(u_t)))),(eval(174*(eval(u_t)))),(eval(175*(eval(u_t)))),(eval(176*(eval(u_t)))),(eval(177*(eval(u_t)))),(eval(178*(eval(u_t)))),(eval(179*(eval(u_t)))),(eval(180*(eval(u_t)))),(eval(181*(eval(u_t)))),(eval(182*(eval(u_t)))),(eval(183*(eval(u_t)))),(eval(184*(eval(u_t)))),(eval(185*(eval(u_t)))),(eval(186*(eval(u_t)))),(eval(187*(eval(u_t)))),(eval(188*(eval(u_t)))),(eval(189*(eval(u_t)))),(eval(190*(eval(u_t)))),(eval(191*(eval(u_t)))),(eval(192*(eval(u_t)))),(eval(193*(eval(u_t)))),(eval(194*(eval(u_t)))),(eval(195*(eval(u_t)))),(eval(196*(eval(u_t)))),(eval(197*(eval(u_t)))),(eval(198*(eval(u_t)))),(eval(199*(eval(u_t)))) & y=0,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491,-0.3491,0.3491 & linear_extrapolate = yes ! !! Basalar Motion Splines (twice the frequency of Thoracic Motion Splines) !! ---------------------------------------------------------------------------- data_element create spline spline_name = basalar_position_spline_phase1 & x=0,(eval(1/2*(eval(u_t)))),(eval(2/2*(eval(u_t)))),(eval(3/2*(eval(u_t)))),(eval(4/2*(eval(u_t)))),(eval(5/2*(eval(u_t)))),(eval(6/2*(eval(u_t)))),(eval(7/2*(eval(u_t)))),(eval(8/2*(eval(u_t)))),(eval(9/2*(eval(u_t)))),(eval(10/2*(eval(u_t)))),(eval(11/2*(eval(u_t)))),(eval(12/2*(eval(u_t)))),(eval(13/2*(eval(u_t)))),(eval(14/2*(eval(u_t)))),(eval(15/2*(eval(u_t)))),(eval(16/2*(eval(u_t)))),(eval(17/2*(eval(u_t)))),(eval(18/2*(eval(u_t)))),(eval(19/2*(eval(u_t)))),(eval(20/2*(eval(u_t)))),(eval(21/2*(eval(u_t)))),(eval(22/2*(eval(u_t)))),(eval(23/2*(eval(u_t)))),(eval(24/2*(eval(u_t)))),(eval(25/2*(eval(u_t)))),(eval(26/2*(eval(u_t)))),(eval(27/2*(eval(u_t)))),(eval(28/2*(eval(u_t)))),(eval(29/2*(eval(u_t)))),(eval(30/2*(eval(u_t)))),(eval(31/2*(eval(u_t)))),(eval(32/2*(eval(u_t)))),(eval(33/2*(eval(u_t)))),(eval(34/2*(eval(u_t)))),(eval(35/2*(eval(u_t)))),(eval(36/2*(eval(u_t)))),(eval(37/2*(eval(u_t)))),(eval(38/2*(eval(u_t)))),(eval(39/2*(eval(u_t)))),(eval(40/2*(eval(u_t)))),(eval(41/2*(eval(u_t)))),(eval(42/2*(eval(u_t)))),(eval(43/2*(eval(u_t)))),(eval(44/2*(eval(u_t)))),(eval(45/2*(eval(u_t)))),(eval(46/2*(eval(u_t)))),(eval(47/2*(eval(u_t)))),(eval(48/2*(eval(u_t)))),(eval(49/2*(eval(u_t)))),(eval(50/2*(eval(u_t)))),(eval(51/2*(eval(u_t)))),(eval(52/2*(eval(u_t)))),(eval(53/2*(eval(u_t)))),(eval(54/2*(eval(u_t)))),(eval(55/2*(eval(u_t)))),(eval(56/2*(eval(u_t)))),(eval(57/2*(eval(u_t)))),(eval(58/2*(eval(u_t)))),(eval(59/2*(eval(u_t)))),(eval(60/2*(eval(u_t)))),(eval(61/2*(eval(u_t)))),(eval(62/2*(eval(u_t)))),(eval(63/2*(eval(u_t)))),(eval(64/2*(eval(u_t)))),(eval(65/2*(eval(u_t)))),(eval(66/2*(eval(u_t)))),(eval(67/2*(eval(u_t)))),(eval(68/2*(eval(u_t)))),(eval(69/2*(eval(u_t)))),(eval(70/2*(eval(u_t)))),(eval(71/2*(eval(u_t)))),(eval(72/2*(eval(u_t)))),(eval(73/2*(eval(u_t)))),(eval(74/2*(eval(u_t)))),(eval(75/2*(eval(u_t)))),(eval(76/2*(eval(u_t)))),(eval(77/2*(eval(u_t)))),(eval(78/2*(eval(u_t)))),(eval(79/2*(eval(u_t)))),(eval(80/2*(eval(u_t)))),(eval(81/2*(eval(u_t)))),(eval(82/2*(eval(u_t)))),(eval(83/2*(eval(u_t)))),(eval(84/2*(eval(u_t)))),(eval(85/2*(eval(u_t)))),(eval(86/2*(eval(u_t)))),(eval(87/2*(eval(u_t)))),(eval(88/2*(eval(u_t)))),(eval(89/2*(eval(u_t)))),(eval(90/2*(eval(u_t)))),(eval(91/2*(eval(u_t)))),(eval(92/2*(eval(u_t)))),(eval(93/2*(eval(u_t)))),(eval(94/2*(eval(u_t)))),(eval(95/2*(eval(u_t)))),(eval(96/2*(eval(u_t)))),(eval(97/2*(eval(u_t)))),(eval(98/2*(eval(u_t)))),(eval(99/2*(eval(u_t)))),(eval(100/2*(eval(u_t)))),(eval(101/2*(eval(u_t)))),(eval(102/2*(eval(u_t)))),(eval(103/2*(eval(u_t)))),(eval(104/2*(eval(u_t)))),(eval(105/2*(eval(u_t)))),(eval(106/2*(eval(u_t)))),(eval(107/2*(eval(u_t)))),(eval(108/2*(eval(u_t)))),(eval(109/2*(eval(u_t)))),(eval(110/2*(eval(u_t)))),(eval(111/2*(eval(u_t)))),(eval(112/2*(eval(u_t)))),(eval(113/2*(eval(u_t)))),(eval(114/2*(eval(u_t)))),(eval(115/2*(eval(u_t)))),(eval(116/2*(eval(u_t)))),(eval(117/2*(eval(u_t)))),(eval(118/2*(eval(u_t)))),(eval(119/2*(eval(u_t)))),(eval(120/2*(eval(u_t)))),(eval(121/2*(eval(u_t)))),(eval(122/2*(eval(u_t)))),(eval(123/2*(eval(u_t)))),(eval(124/2*(eval(u_t)))),(eval(125/2*(eval(u_t)))),(eval(126/2*(eval(u_t)))),(eval(127/2*(eval(u_t)))),(eval(128/2*(eval(u_t)))),(eval(129/2*(eval(u_t)))),(eval(130/2*(eval(u_t)))),(eval(131/2*(eval(u_t)))),(eval(132/2*(eval(u_t)))),(eval(133/2*(eval(u_t)))),(eval(134/2*(eval(u_t)))),(eval(135/2*(eval(u_t)))),(eval(136/2*(eval(u_t)))),(eval(137/2*(eval(u_t)))),(eval(138/2*(eval(u_t)))),(eval(139/2*(eval(u_t)))),(eval(140/2*(eval(u_t)))),(eval(141/2*(eval(u_t)))),(eval(142/2*(eval(u_t)))),(eval(143/2*(eval(u_t)))),(eval(144/2*(eval(u_t)))),(eval(145/2*(eval(u_t)))),(eval(146/2*(eval(u_t)))),(eval(147/2*(eval(u_t)))),(eval(148/2*(eval(u_t)))),(eval(149/2*(eval(u_t)))),(eval(150/2*(eval(u_t)))),(eval(151/2*(eval(u_t)))),(eval(152/2*(eval(u_t)))),(eval(153/2*(eval(u_t)))),(eval(154/2*(eval(u_t)))),(eval(155/2*(eval(u_t)))),(eval(156/2*(eval(u_t)))),(eval(157/2*(eval(u_t)))),(eval(158/2*(eval(u_t)))),(eval(159/2*(eval(u_t)))),(eval(160/2*(eval(u_t)))),(eval(161/2*(eval(u_t)))),(eval(162/2*(eval(u_t)))),(eval(163/2*(eval(u_t)))),(eval(164/2*(eval(u_t)))),(eval(165/2*(eval(u_t)))),(eval(166/2*(eval(u_t)))),(eval(167/2*(eval(u_t)))),(eval(168/2*(eval(u_t)))),(eval(169/2*(eval(u_t)))),(eval(170/2*(eval(u_t)))),(eval(171/2*(eval(u_t)))),(eval(172/2*(eval(u_t)))),(eval(173/2*(eval(u_t)))),(eval(174/2*(eval(u_t)))),(eval(175/2*(eval(u_t)))),(eval(176/2*(eval(u_t)))),(eval(177/2*(eval(u_t)))),(eval(178/2*(eval(u_t)))),(eval(179/2*(eval(u_t)))),(eval(180/2*(eval(u_t)))),(eval(181/2*(eval(u_t)))),(eval(182/2*(eval(u_t)))),(eval(183/2*(eval(u_t)))),(eval(184/2*(eval(u_t)))),(eval(185/2*(eval(u_t)))),(eval(186/2*(eval(u_t)))),(eval(187/2*(eval(u_t)))),(eval(188/2*(eval(u_t)))),(eval(189/2*(eval(u_t)))),(eval(190/2*(eval(u_t)))),(eval(191/2*(eval(u_t)))),(eval(192/2*(eval(u_t)))),(eval(193/2*(eval(u_t)))),(eval(194/2*(eval(u_t)))),(eval(195/2*(eval(u_t)))),(eval(196/2*(eval(u_t)))),(eval(197/2*(eval(u_t)))),(eval(198/2*(eval(u_t)))),(eval(199/2*(eval(u_t)))),(eval(200/2*(eval(u_t)))),(eval(201/2*(eval(u_t)))),(eval(202/2*(eval(u_t)))),(eval(203/2*(eval(u_t)))),(eval(204/2*(eval(u_t)))),(eval(205/2*(eval(u_t)))),(eval(206/2*(eval(u_t)))),(eval(207/2*(eval(u_t)))),(eval(208/2*(eval(u_t)))),(eval(209/2*(eval(u_t)))),(eval(210/2*(eval(u_t)))),(eval(211/2*(eval(u_t)))),(eval(212/2*(eval(u_t)))),(eval(213/2*(eval(u_t)))),(eval(214/2*(eval(u_t)))),(eval(215/2*(eval(u_t)))),(eval(216/2*(eval(u_t)))),(eval(217/2*(eval(u_t)))),(eval(218/2*(eval(u_t)))),(eval(219/2*(eval(u_t)))),(eval(220/2*(eval(u_t)))),(eval(221/2*(eval(u_t)))),(eval(222/2*(eval(u_t)))),(eval(223/2*(eval(u_t)))),(eval(224/2*(eval(u_t)))),(eval(225/2*(eval(u_t)))),(eval(226/2*(eval(u_t)))),(eval(227/2*(eval(u_t)))),(eval(228/2*(eval(u_t)))),(eval(229/2*(eval(u_t)))),(eval(230/2*(eval(u_t)))),(eval(231/2*(eval(u_t)))),(eval(232/2*(eval(u_t)))),(eval(233/2*(eval(u_t)))),(eval(234/2*(eval(u_t)))),(eval(235/2*(eval(u_t)))),(eval(236/2*(eval(u_t)))),(eval(237/2*(eval(u_t)))),(eval(238/2*(eval(u_t)))),(eval(239/2*(eval(u_t)))),(eval(240/2*(eval(u_t)))),(eval(241/2*(eval(u_t)))),(eval(242/2*(eval(u_t)))),(eval(243/2*(eval(u_t)))),(eval(244/2*(eval(u_t)))),(eval(245/2*(eval(u_t)))),(eval(246/2*(eval(u_t)))),(eval(247/2*(eval(u_t)))),(eval(248/2*(eval(u_t)))),(eval(249/2*(eval(u_t)))),(eval(250/2*(eval(u_t)))),(eval(251/2*(eval(u_t)))),(eval(252/2*(eval(u_t)))),(eval(253/2*(eval(u_t)))),(eval(254/2*(eval(u_t)))),(eval(255/2*(eval(u_t)))),(eval(256/2*(eval(u_t)))),(eval(257/2*(eval(u_t)))),(eval(258/2*(eval(u_t)))),(eval(259/2*(eval(u_t)))),(eval(260/2*(eval(u_t)))),(eval(261/2*(eval(u_t)))),(eval(262/2*(eval(u_t)))),(eval(263/2*(eval(u_t)))),(eval(264/2*(eval(u_t)))),(eval(265/2*(eval(u_t)))),(eval(266/2*(eval(u_t)))),(eval(267/2*(eval(u_t)))),(eval(268/2*(eval(u_t)))),(eval(269/2*(eval(u_t)))),(eval(270/2*(eval(u_t)))),(eval(271/2*(eval(u_t)))),(eval(272/2*(eval(u_t)))),(eval(273/2*(eval(u_t)))),(eval(274/2*(eval(u_t)))),(eval(275/2*(eval(u_t)))),(eval(276/2*(eval(u_t)))),(eval(277/2*(eval(u_t)))),(eval(278/2*(eval(u_t)))),(eval(279/2*(eval(u_t)))),(eval(280/2*(eval(u_t)))),(eval(281/2*(eval(u_t)))),(eval(282/2*(eval(u_t)))),(eval(283/2*(eval(u_t)))),(eval(284/2*(eval(u_t)))),(eval(285/2*(eval(u_t)))),(eval(286/2*(eval(u_t)))),(eval(287/2*(eval(u_t)))),(eval(288/2*(eval(u_t)))),(eval(289/2*(eval(u_t)))),(eval(290/2*(eval(u_t)))),(eval(291/2*(eval(u_t)))),(eval(292/2*(eval(u_t)))),(eval(293/2*(eval(u_t)))),(eval(294/2*(eval(u_t)))),(eval(295/2*(eval(u_t)))),(eval(296/2*(eval(u_t)))),(eval(297/2*(eval(u_t)))),(eval(298/2*(eval(u_t)))),(eval(299/2*(eval(u_t)))),(eval(300/2*(eval(u_t)))),(eval(301/2*(eval(u_t)))),(eval(302/2*(eval(u_t)))),(eval(303/2*(eval(u_t)))),(eval(304/2*(eval(u_t)))),(eval(305/2*(eval(u_t)))),(eval(306/2*(eval(u_t)))),(eval(307/2*(eval(u_t)))),(eval(308/2*(eval(u_t)))),(eval(309/2*(eval(u_t)))),(eval(310/2*(eval(u_t)))),(eval(311/2*(eval(u_t)))),(eval(312/2*(eval(u_t)))),(eval(313/2*(eval(u_t)))),(eval(314/2*(eval(u_t)))),(eval(315/2*(eval(u_t)))),(eval(316/2*(eval(u_t)))),(eval(317/2*(eval(u_t)))),(eval(318/2*(eval(u_t)))),(eval(319/2*(eval(u_t)))),(eval(320/2*(eval(u_t)))),(eval(321/2*(eval(u_t)))),(eval(322/2*(eval(u_t)))),(eval(323/2*(eval(u_t)))),(eval(324/2*(eval(u_t)))),(eval(325/2*(eval(u_t)))),(eval(326/2*(eval(u_t)))),(eval(327/2*(eval(u_t)))),(eval(328/2*(eval(u_t)))),(eval(329/2*(eval(u_t)))),(eval(330/2*(eval(u_t)))),(eval(331/2*(eval(u_t)))),(eval(332/2*(eval(u_t)))),(eval(333/2*(eval(u_t)))),(eval(334/2*(eval(u_t)))),(eval(335/2*(eval(u_t)))),(eval(336/2*(eval(u_t)))),(eval(337/2*(eval(u_t)))),(eval(338/2*(eval(u_t)))),(eval(339/2*(eval(u_t)))),(eval(340/2*(eval(u_t)))),(eval(341/2*(eval(u_t)))),(eval(342/2*(eval(u_t)))),(eval(343/2*(eval(u_t)))),(eval(344/2*(eval(u_t)))),(eval(345/2*(eval(u_t)))),(eval(346/2*(eval(u_t)))),(eval(347/2*(eval(u_t)))),(eval(348/2*(eval(u_t)))),(eval(349/2*(eval(u_t)))),(eval(350/2*(eval(u_t)))),(eval(351/2*(eval(u_t)))),(eval(352/2*(eval(u_t)))),(eval(353/2*(eval(u_t)))),(eval(354/2*(eval(u_t)))),(eval(355/2*(eval(u_t)))),(eval(356/2*(eval(u_t)))),(eval(357/2*(eval(u_t)))),(eval(358/2*(eval(u_t)))),(eval(359/2*(eval(u_t)))),(eval(360/2*(eval(u_t)))),(eval(361/2*(eval(u_t)))),(eval(362/2*(eval(u_t)))),(eval(363/2*(eval(u_t)))),(eval(364/2*(eval(u_t)))),(eval(365/2*(eval(u_t)))),(eval(366/2*(eval(u_t)))),(eval(367/2*(eval(u_t)))),(eval(368/2*(eval(u_t)))),(eval(369/2*(eval(u_t)))),(eval(370/2*(eval(u_t)))),(eval(371/2*(eval(u_t)))),(eval(372/2*(eval(u_t)))),(eval(373/2*(eval(u_t)))),(eval(374/2*(eval(u_t)))),(eval(375/2*(eval(u_t)))),(eval(376/2*(eval(u_t)))),(eval(377/2*(eval(u_t)))),(eval(378/2*(eval(u_t)))),(eval(379/2*(eval(u_t)))),(eval(380/2*(eval(u_t)))),(eval(381/2*(eval(u_t)))),(eval(382/2*(eval(u_t)))),(eval(383/2*(eval(u_t)))),(eval(384/2*(eval(u_t)))),(eval(385/2*(eval(u_t)))),(eval(386/2*(eval(u_t)))),(eval(387/2*(eval(u_t)))),(eval(388/2*(eval(u_t)))),(eval(389/2*(eval(u_t)))),(eval(390/2*(eval(u_t)))),(eval(391/2*(eval(u_t)))),(eval(392/2*(eval(u_t)))),(eval(393/2*(eval(u_t)))),(eval(394/2*(eval(u_t)))),(eval(395/2*(eval(u_t)))),(eval(396/2*(eval(u_t)))),(eval(397/2*(eval(u_t)))),(eval(398/2*(eval(u_t)))),(eval(399/2*(eval(u_t)))) & !! 400 members y=0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2 & !! 400 members linear_extrapolate = yes data_element create spline spline_name = basalar_position_spline_phase2 & x=0,(eval(1/2*(eval(u_t)))),(eval(2/2*(eval(u_t)))),(eval(3/2*(eval(u_t)))),(eval(4/2*(eval(u_t)))),(eval(5/2*(eval(u_t)))),(eval(6/2*(eval(u_t)))),(eval(7/2*(eval(u_t)))),(eval(8/2*(eval(u_t)))),(eval(9/2*(eval(u_t)))),(eval(10/2*(eval(u_t)))),(eval(11/2*(eval(u_t)))),(eval(12/2*(eval(u_t)))),(eval(13/2*(eval(u_t)))),(eval(14/2*(eval(u_t)))),(eval(15/2*(eval(u_t)))),(eval(16/2*(eval(u_t)))),(eval(17/2*(eval(u_t)))),(eval(18/2*(eval(u_t)))),(eval(19/2*(eval(u_t)))),(eval(20/2*(eval(u_t)))),(eval(21/2*(eval(u_t)))),(eval(22/2*(eval(u_t)))),(eval(23/2*(eval(u_t)))),(eval(24/2*(eval(u_t)))),(eval(25/2*(eval(u_t)))),(eval(26/2*(eval(u_t)))),(eval(27/2*(eval(u_t)))),(eval(28/2*(eval(u_t)))),(eval(29/2*(eval(u_t)))),(eval(30/2*(eval(u_t)))),(eval(31/2*(eval(u_t)))),(eval(32/2*(eval(u_t)))),(eval(33/2*(eval(u_t)))),(eval(34/2*(eval(u_t)))),(eval(35/2*(eval(u_t)))),(eval(36/2*(eval(u_t)))),(eval(37/2*(eval(u_t)))),(eval(38/2*(eval(u_t)))),(eval(39/2*(eval(u_t)))),(eval(40/2*(eval(u_t)))),(eval(41/2*(eval(u_t)))),(eval(42/2*(eval(u_t)))),(eval(43/2*(eval(u_t)))),(eval(44/2*(eval(u_t)))),(eval(45/2*(eval(u_t)))),(eval(46/2*(eval(u_t)))),(eval(47/2*(eval(u_t)))),(eval(48/2*(eval(u_t)))),(eval(49/2*(eval(u_t)))),(eval(50/2*(eval(u_t)))),(eval(51/2*(eval(u_t)))),(eval(52/2*(eval(u_t)))),(eval(53/2*(eval(u_t)))),(eval(54/2*(eval(u_t)))),(eval(55/2*(eval(u_t)))),(eval(56/2*(eval(u_t)))),(eval(57/2*(eval(u_t)))),(eval(58/2*(eval(u_t)))),(eval(59/2*(eval(u_t)))),(eval(60/2*(eval(u_t)))),(eval(61/2*(eval(u_t)))),(eval(62/2*(eval(u_t)))),(eval(63/2*(eval(u_t)))),(eval(64/2*(eval(u_t)))),(eval(65/2*(eval(u_t)))),(eval(66/2*(eval(u_t)))),(eval(67/2*(eval(u_t)))),(eval(68/2*(eval(u_t)))),(eval(69/2*(eval(u_t)))),(eval(70/2*(eval(u_t)))),(eval(71/2*(eval(u_t)))),(eval(72/2*(eval(u_t)))),(eval(73/2*(eval(u_t)))),(eval(74/2*(eval(u_t)))),(eval(75/2*(eval(u_t)))),(eval(76/2*(eval(u_t)))),(eval(77/2*(eval(u_t)))),(eval(78/2*(eval(u_t)))),(eval(79/2*(eval(u_t)))),(eval(80/2*(eval(u_t)))),(eval(81/2*(eval(u_t)))),(eval(82/2*(eval(u_t)))),(eval(83/2*(eval(u_t)))),(eval(84/2*(eval(u_t)))),(eval(85/2*(eval(u_t)))),(eval(86/2*(eval(u_t)))),(eval(87/2*(eval(u_t)))),(eval(88/2*(eval(u_t)))),(eval(89/2*(eval(u_t)))),(eval(90/2*(eval(u_t)))),(eval(91/2*(eval(u_t)))),(eval(92/2*(eval(u_t)))),(eval(93/2*(eval(u_t)))),(eval(94/2*(eval(u_t)))),(eval(95/2*(eval(u_t)))),(eval(96/2*(eval(u_t)))),(eval(97/2*(eval(u_t)))),(eval(98/2*(eval(u_t)))),(eval(99/2*(eval(u_t)))),(eval(100/2*(eval(u_t)))),(eval(101/2*(eval(u_t)))),(eval(102/2*(eval(u_t)))),(eval(103/2*(eval(u_t)))),(eval(104/2*(eval(u_t)))),(eval(105/2*(eval(u_t)))),(eval(106/2*(eval(u_t)))),(eval(107/2*(eval(u_t)))),(eval(108/2*(eval(u_t)))),(eval(109/2*(eval(u_t)))),(eval(110/2*(eval(u_t)))),(eval(111/2*(eval(u_t)))),(eval(112/2*(eval(u_t)))),(eval(113/2*(eval(u_t)))),(eval(114/2*(eval(u_t)))),(eval(115/2*(eval(u_t)))),(eval(116/2*(eval(u_t)))),(eval(117/2*(eval(u_t)))),(eval(118/2*(eval(u_t)))),(eval(119/2*(eval(u_t)))),(eval(120/2*(eval(u_t)))),(eval(121/2*(eval(u_t)))),(eval(122/2*(eval(u_t)))),(eval(123/2*(eval(u_t)))),(eval(124/2*(eval(u_t)))),(eval(125/2*(eval(u_t)))),(eval(126/2*(eval(u_t)))),(eval(127/2*(eval(u_t)))),(eval(128/2*(eval(u_t)))),(eval(129/2*(eval(u_t)))),(eval(130/2*(eval(u_t)))),(eval(131/2*(eval(u_t)))),(eval(132/2*(eval(u_t)))),(eval(133/2*(eval(u_t)))),(eval(134/2*(eval(u_t)))),(eval(135/2*(eval(u_t)))),(eval(136/2*(eval(u_t)))),(eval(137/2*(eval(u_t)))),(eval(138/2*(eval(u_t)))),(eval(139/2*(eval(u_t)))),(eval(140/2*(eval(u_t)))),(eval(141/2*(eval(u_t)))),(eval(142/2*(eval(u_t)))),(eval(143/2*(eval(u_t)))),(eval(144/2*(eval(u_t)))),(eval(145/2*(eval(u_t)))),(eval(146/2*(eval(u_t)))),(eval(147/2*(eval(u_t)))),(eval(148/2*(eval(u_t)))),(eval(149/2*(eval(u_t)))),(eval(150/2*(eval(u_t)))),(eval(151/2*(eval(u_t)))),(eval(152/2*(eval(u_t)))),(eval(153/2*(eval(u_t)))),(eval(154/2*(eval(u_t)))),(eval(155/2*(eval(u_t)))),(eval(156/2*(eval(u_t)))),(eval(157/2*(eval(u_t)))),(eval(158/2*(eval(u_t)))),(eval(159/2*(eval(u_t)))),(eval(160/2*(eval(u_t)))),(eval(161/2*(eval(u_t)))),(eval(162/2*(eval(u_t)))),(eval(163/2*(eval(u_t)))),(eval(164/2*(eval(u_t)))),(eval(165/2*(eval(u_t)))),(eval(166/2*(eval(u_t)))),(eval(167/2*(eval(u_t)))),(eval(168/2*(eval(u_t)))),(eval(169/2*(eval(u_t)))),(eval(170/2*(eval(u_t)))),(eval(171/2*(eval(u_t)))),(eval(172/2*(eval(u_t)))),(eval(173/2*(eval(u_t)))),(eval(174/2*(eval(u_t)))),(eval(175/2*(eval(u_t)))),(eval(176/2*(eval(u_t)))),(eval(177/2*(eval(u_t)))),(eval(178/2*(eval(u_t)))),(eval(179/2*(eval(u_t)))),(eval(180/2*(eval(u_t)))),(eval(181/2*(eval(u_t)))),(eval(182/2*(eval(u_t)))),(eval(183/2*(eval(u_t)))),(eval(184/2*(eval(u_t)))),(eval(185/2*(eval(u_t)))),(eval(186/2*(eval(u_t)))),(eval(187/2*(eval(u_t)))),(eval(188/2*(eval(u_t)))),(eval(189/2*(eval(u_t)))),(eval(190/2*(eval(u_t)))),(eval(191/2*(eval(u_t)))),(eval(192/2*(eval(u_t)))),(eval(193/2*(eval(u_t)))),(eval(194/2*(eval(u_t)))),(eval(195/2*(eval(u_t)))),(eval(196/2*(eval(u_t)))),(eval(197/2*(eval(u_t)))),(eval(198/2*(eval(u_t)))),(eval(199/2*(eval(u_t)))),(eval(200/2*(eval(u_t)))),(eval(201/2*(eval(u_t)))),(eval(202/2*(eval(u_t)))),(eval(203/2*(eval(u_t)))),(eval(204/2*(eval(u_t)))),(eval(205/2*(eval(u_t)))),(eval(206/2*(eval(u_t)))),(eval(207/2*(eval(u_t)))),(eval(208/2*(eval(u_t)))),(eval(209/2*(eval(u_t)))),(eval(210/2*(eval(u_t)))),(eval(211/2*(eval(u_t)))),(eval(212/2*(eval(u_t)))),(eval(213/2*(eval(u_t)))),(eval(214/2*(eval(u_t)))),(eval(215/2*(eval(u_t)))),(eval(216/2*(eval(u_t)))),(eval(217/2*(eval(u_t)))),(eval(218/2*(eval(u_t)))),(eval(219/2*(eval(u_t)))),(eval(220/2*(eval(u_t)))),(eval(221/2*(eval(u_t)))),(eval(222/2*(eval(u_t)))),(eval(223/2*(eval(u_t)))),(eval(224/2*(eval(u_t)))),(eval(225/2*(eval(u_t)))),(eval(226/2*(eval(u_t)))),(eval(227/2*(eval(u_t)))),(eval(228/2*(eval(u_t)))),(eval(229/2*(eval(u_t)))),(eval(230/2*(eval(u_t)))),(eval(231/2*(eval(u_t)))),(eval(232/2*(eval(u_t)))),(eval(233/2*(eval(u_t)))),(eval(234/2*(eval(u_t)))),(eval(235/2*(eval(u_t)))),(eval(236/2*(eval(u_t)))),(eval(237/2*(eval(u_t)))),(eval(238/2*(eval(u_t)))),(eval(239/2*(eval(u_t)))),(eval(240/2*(eval(u_t)))),(eval(241/2*(eval(u_t)))),(eval(242/2*(eval(u_t)))),(eval(243/2*(eval(u_t)))),(eval(244/2*(eval(u_t)))),(eval(245/2*(eval(u_t)))),(eval(246/2*(eval(u_t)))),(eval(247/2*(eval(u_t)))),(eval(248/2*(eval(u_t)))),(eval(249/2*(eval(u_t)))),(eval(250/2*(eval(u_t)))),(eval(251/2*(eval(u_t)))),(eval(252/2*(eval(u_t)))),(eval(253/2*(eval(u_t)))),(eval(254/2*(eval(u_t)))),(eval(255/2*(eval(u_t)))),(eval(256/2*(eval(u_t)))),(eval(257/2*(eval(u_t)))),(eval(258/2*(eval(u_t)))),(eval(259/2*(eval(u_t)))),(eval(260/2*(eval(u_t)))),(eval(261/2*(eval(u_t)))),(eval(262/2*(eval(u_t)))),(eval(263/2*(eval(u_t)))),(eval(264/2*(eval(u_t)))),(eval(265/2*(eval(u_t)))),(eval(266/2*(eval(u_t)))),(eval(267/2*(eval(u_t)))),(eval(268/2*(eval(u_t)))),(eval(269/2*(eval(u_t)))),(eval(270/2*(eval(u_t)))),(eval(271/2*(eval(u_t)))),(eval(272/2*(eval(u_t)))),(eval(273/2*(eval(u_t)))),(eval(274/2*(eval(u_t)))),(eval(275/2*(eval(u_t)))),(eval(276/2*(eval(u_t)))),(eval(277/2*(eval(u_t)))),(eval(278/2*(eval(u_t)))),(eval(279/2*(eval(u_t)))),(eval(280/2*(eval(u_t)))),(eval(281/2*(eval(u_t)))),(eval(282/2*(eval(u_t)))),(eval(283/2*(eval(u_t)))),(eval(284/2*(eval(u_t)))),(eval(285/2*(eval(u_t)))),(eval(286/2*(eval(u_t)))),(eval(287/2*(eval(u_t)))),(eval(288/2*(eval(u_t)))),(eval(289/2*(eval(u_t)))),(eval(290/2*(eval(u_t)))),(eval(291/2*(eval(u_t)))),(eval(292/2*(eval(u_t)))),(eval(293/2*(eval(u_t)))),(eval(294/2*(eval(u_t)))),(eval(295/2*(eval(u_t)))),(eval(296/2*(eval(u_t)))),(eval(297/2*(eval(u_t)))),(eval(298/2*(eval(u_t)))),(eval(299/2*(eval(u_t)))),(eval(300/2*(eval(u_t)))),(eval(301/2*(eval(u_t)))),(eval(302/2*(eval(u_t)))),(eval(303/2*(eval(u_t)))),(eval(304/2*(eval(u_t)))),(eval(305/2*(eval(u_t)))),(eval(306/2*(eval(u_t)))),(eval(307/2*(eval(u_t)))),(eval(308/2*(eval(u_t)))),(eval(309/2*(eval(u_t)))),(eval(310/2*(eval(u_t)))),(eval(311/2*(eval(u_t)))),(eval(312/2*(eval(u_t)))),(eval(313/2*(eval(u_t)))),(eval(314/2*(eval(u_t)))),(eval(315/2*(eval(u_t)))),(eval(316/2*(eval(u_t)))),(eval(317/2*(eval(u_t)))),(eval(318/2*(eval(u_t)))),(eval(319/2*(eval(u_t)))),(eval(320/2*(eval(u_t)))),(eval(321/2*(eval(u_t)))),(eval(322/2*(eval(u_t)))),(eval(323/2*(eval(u_t)))),(eval(324/2*(eval(u_t)))),(eval(325/2*(eval(u_t)))),(eval(326/2*(eval(u_t)))),(eval(327/2*(eval(u_t)))),(eval(328/2*(eval(u_t)))),(eval(329/2*(eval(u_t)))),(eval(330/2*(eval(u_t)))),(eval(331/2*(eval(u_t)))),(eval(332/2*(eval(u_t)))),(eval(333/2*(eval(u_t)))),(eval(334/2*(eval(u_t)))),(eval(335/2*(eval(u_t)))),(eval(336/2*(eval(u_t)))),(eval(337/2*(eval(u_t)))),(eval(338/2*(eval(u_t)))),(eval(339/2*(eval(u_t)))),(eval(340/2*(eval(u_t)))),(eval(341/2*(eval(u_t)))),(eval(342/2*(eval(u_t)))),(eval(343/2*(eval(u_t)))),(eval(344/2*(eval(u_t)))),(eval(345/2*(eval(u_t)))),(eval(346/2*(eval(u_t)))),(eval(347/2*(eval(u_t)))),(eval(348/2*(eval(u_t)))),(eval(349/2*(eval(u_t)))),(eval(350/2*(eval(u_t)))),(eval(351/2*(eval(u_t)))),(eval(352/2*(eval(u_t)))),(eval(353/2*(eval(u_t)))),(eval(354/2*(eval(u_t)))),(eval(355/2*(eval(u_t)))),(eval(356/2*(eval(u_t)))),(eval(357/2*(eval(u_t)))),(eval(358/2*(eval(u_t)))),(eval(359/2*(eval(u_t)))),(eval(360/2*(eval(u_t)))),(eval(361/2*(eval(u_t)))),(eval(362/2*(eval(u_t)))),(eval(363/2*(eval(u_t)))),(eval(364/2*(eval(u_t)))),(eval(365/2*(eval(u_t)))),(eval(366/2*(eval(u_t)))),(eval(367/2*(eval(u_t)))),(eval(368/2*(eval(u_t)))),(eval(369/2*(eval(u_t)))),(eval(370/2*(eval(u_t)))),(eval(371/2*(eval(u_t)))),(eval(372/2*(eval(u_t)))),(eval(373/2*(eval(u_t)))),(eval(374/2*(eval(u_t)))),(eval(375/2*(eval(u_t)))),(eval(376/2*(eval(u_t)))),(eval(377/2*(eval(u_t)))),(eval(378/2*(eval(u_t)))),(eval(379/2*(eval(u_t)))),(eval(380/2*(eval(u_t)))),(eval(381/2*(eval(u_t)))),(eval(382/2*(eval(u_t)))),(eval(383/2*(eval(u_t)))),(eval(384/2*(eval(u_t)))),(eval(385/2*(eval(u_t)))),(eval(386/2*(eval(u_t)))),(eval(387/2*(eval(u_t)))),(eval(388/2*(eval(u_t)))),(eval(389/2*(eval(u_t)))),(eval(390/2*(eval(u_t)))),(eval(391/2*(eval(u_t)))),(eval(392/2*(eval(u_t)))),(eval(393/2*(eval(u_t)))),(eval(394/2*(eval(u_t)))),(eval(395/2*(eval(u_t)))),(eval(396/2*(eval(u_t)))),(eval(397/2*(eval(u_t)))),(eval(398/2*(eval(u_t)))),(eval(399/2*(eval(u_t)))) & !! 400 members y=0,0,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0,0,0.2,0,0 & !! 400 members linear_extrapolate = yes ! !! Distal Motion Splines !! ---------------------------------------------------------------------------- data_element create spline spline_name = distal_position_spline_phase1 & x=0,(eval(1/2*(eval(u_t)))),(eval(2/2*(eval(u_t)))),(eval(3/2*(eval(u_t)))),(eval(4/2*(eval(u_t)))),(eval(5/2*(eval(u_t)))),(eval(6/2*(eval(u_t)))),(eval(7/2*(eval(u_t)))),(eval(8/2*(eval(u_t)))),(eval(9/2*(eval(u_t)))),(eval(10/2*(eval(u_t)))),(eval(11/2*(eval(u_t)))),(eval(12/2*(eval(u_t)))),(eval(13/2*(eval(u_t)))),(eval(14/2*(eval(u_t)))),(eval(15/2*(eval(u_t)))),(eval(16/2*(eval(u_t)))),(eval(17/2*(eval(u_t)))),(eval(18/2*(eval(u_t)))),(eval(19/2*(eval(u_t)))),(eval(20/2*(eval(u_t)))),(eval(21/2*(eval(u_t)))),(eval(22/2*(eval(u_t)))),(eval(23/2*(eval(u_t)))),(eval(24/2*(eval(u_t)))),(eval(25/2*(eval(u_t)))),(eval(26/2*(eval(u_t)))),(eval(27/2*(eval(u_t)))),(eval(28/2*(eval(u_t)))),(eval(29/2*(eval(u_t)))),(eval(30/2*(eval(u_t)))),(eval(31/2*(eval(u_t)))),(eval(32/2*(eval(u_t)))),(eval(33/2*(eval(u_t)))),(eval(34/2*(eval(u_t)))),(eval(35/2*(eval(u_t)))),(eval(36/2*(eval(u_t)))),(eval(37/2*(eval(u_t)))),(eval(38/2*(eval(u_t)))),(eval(39/2*(eval(u_t)))),(eval(40/2*(eval(u_t)))),(eval(41/2*(eval(u_t)))),(eval(42/2*(eval(u_t)))),(eval(43/2*(eval(u_t)))),(eval(44/2*(eval(u_t)))),(eval(45/2*(eval(u_t)))),(eval(46/2*(eval(u_t)))),(eval(47/2*(eval(u_t)))),(eval(48/2*(eval(u_t)))),(eval(49/2*(eval(u_t)))),(eval(50/2*(eval(u_t)))),(eval(51/2*(eval(u_t)))),(eval(52/2*(eval(u_t)))),(eval(53/2*(eval(u_t)))),(eval(54/2*(eval(u_t)))),(eval(55/2*(eval(u_t)))),(eval(56/2*(eval(u_t)))),(eval(57/2*(eval(u_t)))),(eval(58/2*(eval(u_t)))),(eval(59/2*(eval(u_t)))),(eval(60/2*(eval(u_t)))),(eval(61/2*(eval(u_t)))),(eval(62/2*(eval(u_t)))),(eval(63/2*(eval(u_t)))),(eval(64/2*(eval(u_t)))),(eval(65/2*(eval(u_t)))),(eval(66/2*(eval(u_t)))),(eval(67/2*(eval(u_t)))),(eval(68/2*(eval(u_t)))),(eval(69/2*(eval(u_t)))),(eval(70/2*(eval(u_t)))),(eval(71/2*(eval(u_t)))),(eval(72/2*(eval(u_t)))),(eval(73/2*(eval(u_t)))),(eval(74/2*(eval(u_t)))),(eval(75/2*(eval(u_t)))),(eval(76/2*(eval(u_t)))),(eval(77/2*(eval(u_t)))),(eval(78/2*(eval(u_t)))),(eval(79/2*(eval(u_t)))),(eval(80/2*(eval(u_t)))),(eval(81/2*(eval(u_t)))),(eval(82/2*(eval(u_t)))),(eval(83/2*(eval(u_t)))),(eval(84/2*(eval(u_t)))),(eval(85/2*(eval(u_t)))),(eval(86/2*(eval(u_t)))),(eval(87/2*(eval(u_t)))),(eval(88/2*(eval(u_t)))),(eval(89/2*(eval(u_t)))),(eval(90/2*(eval(u_t)))),(eval(91/2*(eval(u_t)))),(eval(92/2*(eval(u_t)))),(eval(93/2*(eval(u_t)))),(eval(94/2*(eval(u_t)))),(eval(95/2*(eval(u_t)))),(eval(96/2*(eval(u_t)))),(eval(97/2*(eval(u_t)))),(eval(98/2*(eval(u_t)))),(eval(99/2*(eval(u_t)))),(eval(100/2*(eval(u_t)))),(eval(101/2*(eval(u_t)))),(eval(102/2*(eval(u_t)))),(eval(103/2*(eval(u_t)))),(eval(104/2*(eval(u_t)))),(eval(105/2*(eval(u_t)))),(eval(106/2*(eval(u_t)))),(eval(107/2*(eval(u_t)))),(eval(108/2*(eval(u_t)))),(eval(109/2*(eval(u_t)))),(eval(110/2*(eval(u_t)))),(eval(111/2*(eval(u_t)))),(eval(112/2*(eval(u_t)))),(eval(113/2*(eval(u_t)))),(eval(114/2*(eval(u_t)))),(eval(115/2*(eval(u_t)))),(eval(116/2*(eval(u_t)))),(eval(117/2*(eval(u_t)))),(eval(118/2*(eval(u_t)))),(eval(119/2*(eval(u_t)))),(eval(120/2*(eval(u_t)))),(eval(121/2*(eval(u_t)))),(eval(122/2*(eval(u_t)))),(eval(123/2*(eval(u_t)))),(eval(124/2*(eval(u_t)))),(eval(125/2*(eval(u_t)))),(eval(126/2*(eval(u_t)))),(eval(127/2*(eval(u_t)))),(eval(128/2*(eval(u_t)))),(eval(129/2*(eval(u_t)))),(eval(130/2*(eval(u_t)))),(eval(131/2*(eval(u_t)))),(eval(132/2*(eval(u_t)))),(eval(133/2*(eval(u_t)))),(eval(134/2*(eval(u_t)))),(eval(135/2*(eval(u_t)))),(eval(136/2*(eval(u_t)))),(eval(137/2*(eval(u_t)))),(eval(138/2*(eval(u_t)))),(eval(139/2*(eval(u_t)))),(eval(140/2*(eval(u_t)))),(eval(141/2*(eval(u_t)))),(eval(142/2*(eval(u_t)))),(eval(143/2*(eval(u_t)))),(eval(144/2*(eval(u_t)))),(eval(145/2*(eval(u_t)))),(eval(146/2*(eval(u_t)))),(eval(147/2*(eval(u_t)))),(eval(148/2*(eval(u_t)))),(eval(149/2*(eval(u_t)))),(eval(150/2*(eval(u_t)))),(eval(151/2*(eval(u_t)))),(eval(152/2*(eval(u_t)))),(eval(153/2*(eval(u_t)))),(eval(154/2*(eval(u_t)))),(eval(155/2*(eval(u_t)))),(eval(156/2*(eval(u_t)))),(eval(157/2*(eval(u_t)))),(eval(158/2*(eval(u_t)))),(eval(159/2*(eval(u_t)))),(eval(160/2*(eval(u_t)))),(eval(161/2*(eval(u_t)))),(eval(162/2*(eval(u_t)))),(eval(163/2*(eval(u_t)))),(eval(164/2*(eval(u_t)))),(eval(165/2*(eval(u_t)))),(eval(166/2*(eval(u_t)))),(eval(167/2*(eval(u_t)))),(eval(168/2*(eval(u_t)))),(eval(169/2*(eval(u_t)))),(eval(170/2*(eval(u_t)))),(eval(171/2*(eval(u_t)))),(eval(172/2*(eval(u_t)))),(eval(173/2*(eval(u_t)))),(eval(174/2*(eval(u_t)))),(eval(175/2*(eval(u_t)))),(eval(176/2*(eval(u_t)))),(eval(177/2*(eval(u_t)))),(eval(178/2*(eval(u_t)))),(eval(179/2*(eval(u_t)))),(eval(180/2*(eval(u_t)))),(eval(181/2*(eval(u_t)))),(eval(182/2*(eval(u_t)))),(eval(183/2*(eval(u_t)))),(eval(184/2*(eval(u_t)))),(eval(185/2*(eval(u_t)))),(eval(186/2*(eval(u_t)))),(eval(187/2*(eval(u_t)))),(eval(188/2*(eval(u_t)))),(eval(189/2*(eval(u_t)))),(eval(190/2*(eval(u_t)))),(eval(191/2*(eval(u_t)))),(eval(192/2*(eval(u_t)))),(eval(193/2*(eval(u_t)))),(eval(194/2*(eval(u_t)))),(eval(195/2*(eval(u_t)))),(eval(196/2*(eval(u_t)))),(eval(197/2*(eval(u_t)))),(eval(198/2*(eval(u_t)))),(eval(199/2*(eval(u_t)))),(eval(200/2*(eval(u_t)))),(eval(201/2*(eval(u_t)))),(eval(202/2*(eval(u_t)))),(eval(203/2*(eval(u_t)))),(eval(204/2*(eval(u_t)))),(eval(205/2*(eval(u_t)))),(eval(206/2*(eval(u_t)))),(eval(207/2*(eval(u_t)))),(eval(208/2*(eval(u_t)))),(eval(209/2*(eval(u_t)))),(eval(210/2*(eval(u_t)))),(eval(211/2*(eval(u_t)))),(eval(212/2*(eval(u_t)))),(eval(213/2*(eval(u_t)))),(eval(214/2*(eval(u_t)))),(eval(215/2*(eval(u_t)))),(eval(216/2*(eval(u_t)))),(eval(217/2*(eval(u_t)))),(eval(218/2*(eval(u_t)))),(eval(219/2*(eval(u_t)))),(eval(220/2*(eval(u_t)))),(eval(221/2*(eval(u_t)))),(eval(222/2*(eval(u_t)))),(eval(223/2*(eval(u_t)))),(eval(224/2*(eval(u_t)))),(eval(225/2*(eval(u_t)))),(eval(226/2*(eval(u_t)))),(eval(227/2*(eval(u_t)))),(eval(228/2*(eval(u_t)))),(eval(229/2*(eval(u_t)))),(eval(230/2*(eval(u_t)))),(eval(231/2*(eval(u_t)))),(eval(232/2*(eval(u_t)))),(eval(233/2*(eval(u_t)))),(eval(234/2*(eval(u_t)))),(eval(235/2*(eval(u_t)))),(eval(236/2*(eval(u_t)))),(eval(237/2*(eval(u_t)))),(eval(238/2*(eval(u_t)))),(eval(239/2*(eval(u_t)))),(eval(240/2*(eval(u_t)))),(eval(241/2*(eval(u_t)))),(eval(242/2*(eval(u_t)))),(eval(243/2*(eval(u_t)))),(eval(244/2*(eval(u_t)))),(eval(245/2*(eval(u_t)))),(eval(246/2*(eval(u_t)))),(eval(247/2*(eval(u_t)))),(eval(248/2*(eval(u_t)))),(eval(249/2*(eval(u_t)))),(eval(250/2*(eval(u_t)))),(eval(251/2*(eval(u_t)))),(eval(252/2*(eval(u_t)))),(eval(253/2*(eval(u_t)))),(eval(254/2*(eval(u_t)))),(eval(255/2*(eval(u_t)))),(eval(256/2*(eval(u_t)))),(eval(257/2*(eval(u_t)))),(eval(258/2*(eval(u_t)))),(eval(259/2*(eval(u_t)))),(eval(260/2*(eval(u_t)))),(eval(261/2*(eval(u_t)))),(eval(262/2*(eval(u_t)))),(eval(263/2*(eval(u_t)))),(eval(264/2*(eval(u_t)))),(eval(265/2*(eval(u_t)))),(eval(266/2*(eval(u_t)))),(eval(267/2*(eval(u_t)))),(eval(268/2*(eval(u_t)))),(eval(269/2*(eval(u_t)))),(eval(270/2*(eval(u_t)))),(eval(271/2*(eval(u_t)))),(eval(272/2*(eval(u_t)))),(eval(273/2*(eval(u_t)))),(eval(274/2*(eval(u_t)))),(eval(275/2*(eval(u_t)))),(eval(276/2*(eval(u_t)))),(eval(277/2*(eval(u_t)))),(eval(278/2*(eval(u_t)))),(eval(279/2*(eval(u_t)))),(eval(280/2*(eval(u_t)))),(eval(281/2*(eval(u_t)))),(eval(282/2*(eval(u_t)))),(eval(283/2*(eval(u_t)))),(eval(284/2*(eval(u_t)))),(eval(285/2*(eval(u_t)))),(eval(286/2*(eval(u_t)))),(eval(287/2*(eval(u_t)))),(eval(288/2*(eval(u_t)))),(eval(289/2*(eval(u_t)))),(eval(290/2*(eval(u_t)))),(eval(291/2*(eval(u_t)))),(eval(292/2*(eval(u_t)))),(eval(293/2*(eval(u_t)))),(eval(294/2*(eval(u_t)))),(eval(295/2*(eval(u_t)))),(eval(296/2*(eval(u_t)))),(eval(297/2*(eval(u_t)))),(eval(298/2*(eval(u_t)))),(eval(299/2*(eval(u_t)))),(eval(300/2*(eval(u_t)))),(eval(301/2*(eval(u_t)))),(eval(302/2*(eval(u_t)))),(eval(303/2*(eval(u_t)))),(eval(304/2*(eval(u_t)))),(eval(305/2*(eval(u_t)))),(eval(306/2*(eval(u_t)))),(eval(307/2*(eval(u_t)))),(eval(308/2*(eval(u_t)))),(eval(309/2*(eval(u_t)))),(eval(310/2*(eval(u_t)))),(eval(311/2*(eval(u_t)))),(eval(312/2*(eval(u_t)))),(eval(313/2*(eval(u_t)))),(eval(314/2*(eval(u_t)))),(eval(315/2*(eval(u_t)))),(eval(316/2*(eval(u_t)))),(eval(317/2*(eval(u_t)))),(eval(318/2*(eval(u_t)))),(eval(319/2*(eval(u_t)))),(eval(320/2*(eval(u_t)))),(eval(321/2*(eval(u_t)))),(eval(322/2*(eval(u_t)))),(eval(323/2*(eval(u_t)))),(eval(324/2*(eval(u_t)))),(eval(325/2*(eval(u_t)))),(eval(326/2*(eval(u_t)))),(eval(327/2*(eval(u_t)))),(eval(328/2*(eval(u_t)))),(eval(329/2*(eval(u_t)))),(eval(330/2*(eval(u_t)))),(eval(331/2*(eval(u_t)))),(eval(332/2*(eval(u_t)))),(eval(333/2*(eval(u_t)))),(eval(334/2*(eval(u_t)))),(eval(335/2*(eval(u_t)))),(eval(336/2*(eval(u_t)))),(eval(337/2*(eval(u_t)))),(eval(338/2*(eval(u_t)))),(eval(339/2*(eval(u_t)))),(eval(340/2*(eval(u_t)))),(eval(341/2*(eval(u_t)))),(eval(342/2*(eval(u_t)))),(eval(343/2*(eval(u_t)))),(eval(344/2*(eval(u_t)))),(eval(345/2*(eval(u_t)))),(eval(346/2*(eval(u_t)))),(eval(347/2*(eval(u_t)))),(eval(348/2*(eval(u_t)))),(eval(349/2*(eval(u_t)))),(eval(350/2*(eval(u_t)))),(eval(351/2*(eval(u_t)))),(eval(352/2*(eval(u_t)))),(eval(353/2*(eval(u_t)))),(eval(354/2*(eval(u_t)))),(eval(355/2*(eval(u_t)))),(eval(356/2*(eval(u_t)))),(eval(357/2*(eval(u_t)))),(eval(358/2*(eval(u_t)))),(eval(359/2*(eval(u_t)))),(eval(360/2*(eval(u_t)))),(eval(361/2*(eval(u_t)))),(eval(362/2*(eval(u_t)))),(eval(363/2*(eval(u_t)))),(eval(364/2*(eval(u_t)))),(eval(365/2*(eval(u_t)))),(eval(366/2*(eval(u_t)))),(eval(367/2*(eval(u_t)))),(eval(368/2*(eval(u_t)))),(eval(369/2*(eval(u_t)))),(eval(370/2*(eval(u_t)))),(eval(371/2*(eval(u_t)))),(eval(372/2*(eval(u_t)))),(eval(373/2*(eval(u_t)))),(eval(374/2*(eval(u_t)))),(eval(375/2*(eval(u_t)))),(eval(376/2*(eval(u_t)))),(eval(377/2*(eval(u_t)))),(eval(378/2*(eval(u_t)))),(eval(379/2*(eval(u_t)))),(eval(380/2*(eval(u_t)))),(eval(381/2*(eval(u_t)))),(eval(382/2*(eval(u_t)))),(eval(383/2*(eval(u_t)))),(eval(384/2*(eval(u_t)))),(eval(385/2*(eval(u_t)))),(eval(386/2*(eval(u_t)))),(eval(387/2*(eval(u_t)))),(eval(388/2*(eval(u_t)))),(eval(389/2*(eval(u_t)))),(eval(390/2*(eval(u_t)))),(eval(391/2*(eval(u_t)))),(eval(392/2*(eval(u_t)))),(eval(393/2*(eval(u_t)))),(eval(394/2*(eval(u_t)))),(eval(395/2*(eval(u_t)))),(eval(396/2*(eval(u_t)))),(eval(397/2*(eval(u_t)))),(eval(398/2*(eval(u_t)))),(eval(399/2*(eval(u_t)))) & !! 400 members y=0,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233 & !! 400 members linear_extrapolate = yes data_element create spline spline_name = distal_position_spline_phase2 & x=0,(eval(1/2*(eval(u_t)))),(eval(2/2*(eval(u_t)))),(eval(3/2*(eval(u_t)))),(eval(4/2*(eval(u_t)))),(eval(5/2*(eval(u_t)))),(eval(6/2*(eval(u_t)))),(eval(7/2*(eval(u_t)))),(eval(8/2*(eval(u_t)))),(eval(9/2*(eval(u_t)))),(eval(10/2*(eval(u_t)))),(eval(11/2*(eval(u_t)))),(eval(12/2*(eval(u_t)))),(eval(13/2*(eval(u_t)))),(eval(14/2*(eval(u_t)))),(eval(15/2*(eval(u_t)))),(eval(16/2*(eval(u_t)))),(eval(17/2*(eval(u_t)))),(eval(18/2*(eval(u_t)))),(eval(19/2*(eval(u_t)))),(eval(20/2*(eval(u_t)))),(eval(21/2*(eval(u_t)))),(eval(22/2*(eval(u_t)))),(eval(23/2*(eval(u_t)))),(eval(24/2*(eval(u_t)))),(eval(25/2*(eval(u_t)))),(eval(26/2*(eval(u_t)))),(eval(27/2*(eval(u_t)))),(eval(28/2*(eval(u_t)))),(eval(29/2*(eval(u_t)))),(eval(30/2*(eval(u_t)))),(eval(31/2*(eval(u_t)))),(eval(32/2*(eval(u_t)))),(eval(33/2*(eval(u_t)))),(eval(34/2*(eval(u_t)))),(eval(35/2*(eval(u_t)))),(eval(36/2*(eval(u_t)))),(eval(37/2*(eval(u_t)))),(eval(38/2*(eval(u_t)))),(eval(39/2*(eval(u_t)))),(eval(40/2*(eval(u_t)))),(eval(41/2*(eval(u_t)))),(eval(42/2*(eval(u_t)))),(eval(43/2*(eval(u_t)))),(eval(44/2*(eval(u_t)))),(eval(45/2*(eval(u_t)))),(eval(46/2*(eval(u_t)))),(eval(47/2*(eval(u_t)))),(eval(48/2*(eval(u_t)))),(eval(49/2*(eval(u_t)))),(eval(50/2*(eval(u_t)))),(eval(51/2*(eval(u_t)))),(eval(52/2*(eval(u_t)))),(eval(53/2*(eval(u_t)))),(eval(54/2*(eval(u_t)))),(eval(55/2*(eval(u_t)))),(eval(56/2*(eval(u_t)))),(eval(57/2*(eval(u_t)))),(eval(58/2*(eval(u_t)))),(eval(59/2*(eval(u_t)))),(eval(60/2*(eval(u_t)))),(eval(61/2*(eval(u_t)))),(eval(62/2*(eval(u_t)))),(eval(63/2*(eval(u_t)))),(eval(64/2*(eval(u_t)))),(eval(65/2*(eval(u_t)))),(eval(66/2*(eval(u_t)))),(eval(67/2*(eval(u_t)))),(eval(68/2*(eval(u_t)))),(eval(69/2*(eval(u_t)))),(eval(70/2*(eval(u_t)))),(eval(71/2*(eval(u_t)))),(eval(72/2*(eval(u_t)))),(eval(73/2*(eval(u_t)))),(eval(74/2*(eval(u_t)))),(eval(75/2*(eval(u_t)))),(eval(76/2*(eval(u_t)))),(eval(77/2*(eval(u_t)))),(eval(78/2*(eval(u_t)))),(eval(79/2*(eval(u_t)))),(eval(80/2*(eval(u_t)))),(eval(81/2*(eval(u_t)))),(eval(82/2*(eval(u_t)))),(eval(83/2*(eval(u_t)))),(eval(84/2*(eval(u_t)))),(eval(85/2*(eval(u_t)))),(eval(86/2*(eval(u_t)))),(eval(87/2*(eval(u_t)))),(eval(88/2*(eval(u_t)))),(eval(89/2*(eval(u_t)))),(eval(90/2*(eval(u_t)))),(eval(91/2*(eval(u_t)))),(eval(92/2*(eval(u_t)))),(eval(93/2*(eval(u_t)))),(eval(94/2*(eval(u_t)))),(eval(95/2*(eval(u_t)))),(eval(96/2*(eval(u_t)))),(eval(97/2*(eval(u_t)))),(eval(98/2*(eval(u_t)))),(eval(99/2*(eval(u_t)))),(eval(100/2*(eval(u_t)))),(eval(101/2*(eval(u_t)))),(eval(102/2*(eval(u_t)))),(eval(103/2*(eval(u_t)))),(eval(104/2*(eval(u_t)))),(eval(105/2*(eval(u_t)))),(eval(106/2*(eval(u_t)))),(eval(107/2*(eval(u_t)))),(eval(108/2*(eval(u_t)))),(eval(109/2*(eval(u_t)))),(eval(110/2*(eval(u_t)))),(eval(111/2*(eval(u_t)))),(eval(112/2*(eval(u_t)))),(eval(113/2*(eval(u_t)))),(eval(114/2*(eval(u_t)))),(eval(115/2*(eval(u_t)))),(eval(116/2*(eval(u_t)))),(eval(117/2*(eval(u_t)))),(eval(118/2*(eval(u_t)))),(eval(119/2*(eval(u_t)))),(eval(120/2*(eval(u_t)))),(eval(121/2*(eval(u_t)))),(eval(122/2*(eval(u_t)))),(eval(123/2*(eval(u_t)))),(eval(124/2*(eval(u_t)))),(eval(125/2*(eval(u_t)))),(eval(126/2*(eval(u_t)))),(eval(127/2*(eval(u_t)))),(eval(128/2*(eval(u_t)))),(eval(129/2*(eval(u_t)))),(eval(130/2*(eval(u_t)))),(eval(131/2*(eval(u_t)))),(eval(132/2*(eval(u_t)))),(eval(133/2*(eval(u_t)))),(eval(134/2*(eval(u_t)))),(eval(135/2*(eval(u_t)))),(eval(136/2*(eval(u_t)))),(eval(137/2*(eval(u_t)))),(eval(138/2*(eval(u_t)))),(eval(139/2*(eval(u_t)))),(eval(140/2*(eval(u_t)))),(eval(141/2*(eval(u_t)))),(eval(142/2*(eval(u_t)))),(eval(143/2*(eval(u_t)))),(eval(144/2*(eval(u_t)))),(eval(145/2*(eval(u_t)))),(eval(146/2*(eval(u_t)))),(eval(147/2*(eval(u_t)))),(eval(148/2*(eval(u_t)))),(eval(149/2*(eval(u_t)))),(eval(150/2*(eval(u_t)))),(eval(151/2*(eval(u_t)))),(eval(152/2*(eval(u_t)))),(eval(153/2*(eval(u_t)))),(eval(154/2*(eval(u_t)))),(eval(155/2*(eval(u_t)))),(eval(156/2*(eval(u_t)))),(eval(157/2*(eval(u_t)))),(eval(158/2*(eval(u_t)))),(eval(159/2*(eval(u_t)))),(eval(160/2*(eval(u_t)))),(eval(161/2*(eval(u_t)))),(eval(162/2*(eval(u_t)))),(eval(163/2*(eval(u_t)))),(eval(164/2*(eval(u_t)))),(eval(165/2*(eval(u_t)))),(eval(166/2*(eval(u_t)))),(eval(167/2*(eval(u_t)))),(eval(168/2*(eval(u_t)))),(eval(169/2*(eval(u_t)))),(eval(170/2*(eval(u_t)))),(eval(171/2*(eval(u_t)))),(eval(172/2*(eval(u_t)))),(eval(173/2*(eval(u_t)))),(eval(174/2*(eval(u_t)))),(eval(175/2*(eval(u_t)))),(eval(176/2*(eval(u_t)))),(eval(177/2*(eval(u_t)))),(eval(178/2*(eval(u_t)))),(eval(179/2*(eval(u_t)))),(eval(180/2*(eval(u_t)))),(eval(181/2*(eval(u_t)))),(eval(182/2*(eval(u_t)))),(eval(183/2*(eval(u_t)))),(eval(184/2*(eval(u_t)))),(eval(185/2*(eval(u_t)))),(eval(186/2*(eval(u_t)))),(eval(187/2*(eval(u_t)))),(eval(188/2*(eval(u_t)))),(eval(189/2*(eval(u_t)))),(eval(190/2*(eval(u_t)))),(eval(191/2*(eval(u_t)))),(eval(192/2*(eval(u_t)))),(eval(193/2*(eval(u_t)))),(eval(194/2*(eval(u_t)))),(eval(195/2*(eval(u_t)))),(eval(196/2*(eval(u_t)))),(eval(197/2*(eval(u_t)))),(eval(198/2*(eval(u_t)))),(eval(199/2*(eval(u_t)))),(eval(200/2*(eval(u_t)))),(eval(201/2*(eval(u_t)))),(eval(202/2*(eval(u_t)))),(eval(203/2*(eval(u_t)))),(eval(204/2*(eval(u_t)))),(eval(205/2*(eval(u_t)))),(eval(206/2*(eval(u_t)))),(eval(207/2*(eval(u_t)))),(eval(208/2*(eval(u_t)))),(eval(209/2*(eval(u_t)))),(eval(210/2*(eval(u_t)))),(eval(211/2*(eval(u_t)))),(eval(212/2*(eval(u_t)))),(eval(213/2*(eval(u_t)))),(eval(214/2*(eval(u_t)))),(eval(215/2*(eval(u_t)))),(eval(216/2*(eval(u_t)))),(eval(217/2*(eval(u_t)))),(eval(218/2*(eval(u_t)))),(eval(219/2*(eval(u_t)))),(eval(220/2*(eval(u_t)))),(eval(221/2*(eval(u_t)))),(eval(222/2*(eval(u_t)))),(eval(223/2*(eval(u_t)))),(eval(224/2*(eval(u_t)))),(eval(225/2*(eval(u_t)))),(eval(226/2*(eval(u_t)))),(eval(227/2*(eval(u_t)))),(eval(228/2*(eval(u_t)))),(eval(229/2*(eval(u_t)))),(eval(230/2*(eval(u_t)))),(eval(231/2*(eval(u_t)))),(eval(232/2*(eval(u_t)))),(eval(233/2*(eval(u_t)))),(eval(234/2*(eval(u_t)))),(eval(235/2*(eval(u_t)))),(eval(236/2*(eval(u_t)))),(eval(237/2*(eval(u_t)))),(eval(238/2*(eval(u_t)))),(eval(239/2*(eval(u_t)))),(eval(240/2*(eval(u_t)))),(eval(241/2*(eval(u_t)))),(eval(242/2*(eval(u_t)))),(eval(243/2*(eval(u_t)))),(eval(244/2*(eval(u_t)))),(eval(245/2*(eval(u_t)))),(eval(246/2*(eval(u_t)))),(eval(247/2*(eval(u_t)))),(eval(248/2*(eval(u_t)))),(eval(249/2*(eval(u_t)))),(eval(250/2*(eval(u_t)))),(eval(251/2*(eval(u_t)))),(eval(252/2*(eval(u_t)))),(eval(253/2*(eval(u_t)))),(eval(254/2*(eval(u_t)))),(eval(255/2*(eval(u_t)))),(eval(256/2*(eval(u_t)))),(eval(257/2*(eval(u_t)))),(eval(258/2*(eval(u_t)))),(eval(259/2*(eval(u_t)))),(eval(260/2*(eval(u_t)))),(eval(261/2*(eval(u_t)))),(eval(262/2*(eval(u_t)))),(eval(263/2*(eval(u_t)))),(eval(264/2*(eval(u_t)))),(eval(265/2*(eval(u_t)))),(eval(266/2*(eval(u_t)))),(eval(267/2*(eval(u_t)))),(eval(268/2*(eval(u_t)))),(eval(269/2*(eval(u_t)))),(eval(270/2*(eval(u_t)))),(eval(271/2*(eval(u_t)))),(eval(272/2*(eval(u_t)))),(eval(273/2*(eval(u_t)))),(eval(274/2*(eval(u_t)))),(eval(275/2*(eval(u_t)))),(eval(276/2*(eval(u_t)))),(eval(277/2*(eval(u_t)))),(eval(278/2*(eval(u_t)))),(eval(279/2*(eval(u_t)))),(eval(280/2*(eval(u_t)))),(eval(281/2*(eval(u_t)))),(eval(282/2*(eval(u_t)))),(eval(283/2*(eval(u_t)))),(eval(284/2*(eval(u_t)))),(eval(285/2*(eval(u_t)))),(eval(286/2*(eval(u_t)))),(eval(287/2*(eval(u_t)))),(eval(288/2*(eval(u_t)))),(eval(289/2*(eval(u_t)))),(eval(290/2*(eval(u_t)))),(eval(291/2*(eval(u_t)))),(eval(292/2*(eval(u_t)))),(eval(293/2*(eval(u_t)))),(eval(294/2*(eval(u_t)))),(eval(295/2*(eval(u_t)))),(eval(296/2*(eval(u_t)))),(eval(297/2*(eval(u_t)))),(eval(298/2*(eval(u_t)))),(eval(299/2*(eval(u_t)))),(eval(300/2*(eval(u_t)))),(eval(301/2*(eval(u_t)))),(eval(302/2*(eval(u_t)))),(eval(303/2*(eval(u_t)))),(eval(304/2*(eval(u_t)))),(eval(305/2*(eval(u_t)))),(eval(306/2*(eval(u_t)))),(eval(307/2*(eval(u_t)))),(eval(308/2*(eval(u_t)))),(eval(309/2*(eval(u_t)))),(eval(310/2*(eval(u_t)))),(eval(311/2*(eval(u_t)))),(eval(312/2*(eval(u_t)))),(eval(313/2*(eval(u_t)))),(eval(314/2*(eval(u_t)))),(eval(315/2*(eval(u_t)))),(eval(316/2*(eval(u_t)))),(eval(317/2*(eval(u_t)))),(eval(318/2*(eval(u_t)))),(eval(319/2*(eval(u_t)))),(eval(320/2*(eval(u_t)))),(eval(321/2*(eval(u_t)))),(eval(322/2*(eval(u_t)))),(eval(323/2*(eval(u_t)))),(eval(324/2*(eval(u_t)))),(eval(325/2*(eval(u_t)))),(eval(326/2*(eval(u_t)))),(eval(327/2*(eval(u_t)))),(eval(328/2*(eval(u_t)))),(eval(329/2*(eval(u_t)))),(eval(330/2*(eval(u_t)))),(eval(331/2*(eval(u_t)))),(eval(332/2*(eval(u_t)))),(eval(333/2*(eval(u_t)))),(eval(334/2*(eval(u_t)))),(eval(335/2*(eval(u_t)))),(eval(336/2*(eval(u_t)))),(eval(337/2*(eval(u_t)))),(eval(338/2*(eval(u_t)))),(eval(339/2*(eval(u_t)))),(eval(340/2*(eval(u_t)))),(eval(341/2*(eval(u_t)))),(eval(342/2*(eval(u_t)))),(eval(343/2*(eval(u_t)))),(eval(344/2*(eval(u_t)))),(eval(345/2*(eval(u_t)))),(eval(346/2*(eval(u_t)))),(eval(347/2*(eval(u_t)))),(eval(348/2*(eval(u_t)))),(eval(349/2*(eval(u_t)))),(eval(350/2*(eval(u_t)))),(eval(351/2*(eval(u_t)))),(eval(352/2*(eval(u_t)))),(eval(353/2*(eval(u_t)))),(eval(354/2*(eval(u_t)))),(eval(355/2*(eval(u_t)))),(eval(356/2*(eval(u_t)))),(eval(357/2*(eval(u_t)))),(eval(358/2*(eval(u_t)))),(eval(359/2*(eval(u_t)))),(eval(360/2*(eval(u_t)))),(eval(361/2*(eval(u_t)))),(eval(362/2*(eval(u_t)))),(eval(363/2*(eval(u_t)))),(eval(364/2*(eval(u_t)))),(eval(365/2*(eval(u_t)))),(eval(366/2*(eval(u_t)))),(eval(367/2*(eval(u_t)))),(eval(368/2*(eval(u_t)))),(eval(369/2*(eval(u_t)))),(eval(370/2*(eval(u_t)))),(eval(371/2*(eval(u_t)))),(eval(372/2*(eval(u_t)))),(eval(373/2*(eval(u_t)))),(eval(374/2*(eval(u_t)))),(eval(375/2*(eval(u_t)))),(eval(376/2*(eval(u_t)))),(eval(377/2*(eval(u_t)))),(eval(378/2*(eval(u_t)))),(eval(379/2*(eval(u_t)))),(eval(380/2*(eval(u_t)))),(eval(381/2*(eval(u_t)))),(eval(382/2*(eval(u_t)))),(eval(383/2*(eval(u_t)))),(eval(384/2*(eval(u_t)))),(eval(385/2*(eval(u_t)))),(eval(386/2*(eval(u_t)))),(eval(387/2*(eval(u_t)))),(eval(388/2*(eval(u_t)))),(eval(389/2*(eval(u_t)))),(eval(390/2*(eval(u_t)))),(eval(391/2*(eval(u_t)))),(eval(392/2*(eval(u_t)))),(eval(393/2*(eval(u_t)))),(eval(394/2*(eval(u_t)))),(eval(395/2*(eval(u_t)))),(eval(396/2*(eval(u_t)))),(eval(397/2*(eval(u_t)))),(eval(398/2*(eval(u_t)))),(eval(399/2*(eval(u_t)))) & !! 400 members y=0,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233,-0.5233 & !! 400 members linear_extrapolate = yes ! ! ! ! ------------------------------------------------------- ! Determine the density of the parts. Using once the densities ! are set, ADAMS can figure out the mass, centre of mass, etc. ! ------------------------------------------------------- ! ! Body Density (derive density) ! var set var=body_density real=(eval(((eval(body_mass))/(eval(body_block_y) * eval(body_block_x) * ((eval(number_of_hip_pairs))*(eval(hip_block_z)) + (eval(number_of_hip_pairs)-1)*(eval(body_block_z))))))) range=0,5000 ! ! ! Actuator Density Motor and Case (derive density) ! ! actuator_density: density of the motor, case, etc. var set var=actuator_density real=(eval( (eval(actuator_mass))/((eval(pi))*(eval(actuator_radius))*(eval(actuator_radius))*(eval(actuator_length))))) range=0,5000 ! ! ! Actuator Unsprung Link radius ! Determine the actuator radius. Assume that link length is given and link density ! is the same as the actuator density determined above. Assume that the cylinder is ! solid, not hollow (as it is in the real robot). ! var set var=unsprung_link_radius real=( sqrt( (eval(unsprung_link_mass)) / ( (eval(actuator_density))*(eval(link_length))*(eval(pi)) ))) range=0,100 !!. var set var=link_radius real=(eval(unsprung_link_radius)) !! update the link_radius value. ! ! ! ! ! Sprung Link: figure out the density. ! !! divide up the mass between the cylinder and the toe's: var set var=sprung_link_density real=( (eval(sprung_link_mass)) / ( (eval(pi))*(eval(sprung_link_radius))*(eval(sprung_link_radius))*(eval(sprung_link_length))+ 4/3*(eval(pi))*(eval(toe_radius))*(eval(toe_radius))*(eval(toe_radius)) ) ) ! ! ! undo end !------------------------------------------- ! ! ------------------------------------------------------------------- ! CREATE Coordinate System ! ------------------------------------------------------------------- marker create marker=.scorpion_mcgill.ground.MAR_1 & location = 0.0, 0.0, 0.0 & orientation= 0d, 0d, 0d group modify group=SELECT_LIST object=.scorpion_mcgill.ground.MAR_1 ! marker attributes marker_name=.scorpion_mcgill.ground.MAR_1 & size_of_icons=200 color=.colors.BLUE ! ------------------------------------------------------------------- ! ! ! undo end ! ! ! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! CREATE PLANE undo begin marker create marker=.scorpion_mcgill.ground.MARKER_2 & location=(-4*(eval(hip_block_x))), 0.0, (-3*(eval(hip_block_x))) & orientation=180.0, 90.0, 180.0 geometry create shape plane & plane_name=.scorpion_mcgill.ground.PLANE_1 & x_minimum= (-60*(eval(hip_block_x))) y_minimum = (-400*(eval(hip_block_x))) & !! x_min was 0.0mm x_maximum= (200*(eval(hip_block_x))) y_maximum = (200*(eval(hip_block_x))) & !! (0.0mm) & ref_marker_name=.scorpion_mcgill.ground.MARKER_2 group modify group=SELECT_LIST object=.scorpion_mcgill.ground undo end !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! ! ! undo begin ! -------------------------------------------------------------------- ! Create Body ! -------------------------------------------------------------------- ! ! Create the three arrays (X,Y,Z) that will contain the ! points about which the extrusion will be made var set var=Xvalues real=({}) var set var=Yvalues real=({}) var set var=Zvalues real=({}) ! ! ! ---------------------------------------------------------- ! ! -------------------------------------------- ! Create extrusion outline points for the body ! -------------------------------------------- ! ! Set up the first point for the extrusion var modify var=Xvalues real=({0}) var modify var=Yvalues real=({ (eval(H1))+(eval(hip_block_y)) }) var modify var=Zvalues real=({0}) ! ! if condition=((eval(number_of_hip_pairs)) <= 1) !! i.e. a biped ! ! ! ...nothing in here yet... ! ! ! else !! i.e a quadruped, etc. ! ! ! ----------------------------------------------- ! Begin the FOR Loop (PORT SIDE: Most points, starting from the front) ! ----------------------------------------------- ! ! variable create variable_name=ajsint integer_value=0 ! for variable_name=loop_cntr start_value=1 end_value=(eval(number_of_hip_pairs)-1) variable modify variable_name=ajsint integer_value=(eval(loop_cntr)) ! ! var modify var=Xvalues real=( Xvalues // {-(eval(hip_block_x))/2,-(eval(hip_block_x))/2,-(eval(body_block_x))/2,-(eval(body_block_x))/2 }) var modify var=Yvalues real=( Yvalues // {(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)) }) var modify var=Zvalues real=( Zvalues // {(eval(L1)*((eval(ajsint))-1)),(eval(L1)*((eval(ajsint))-1)+(eval(hip_block_z))),(eval(L1)*((eval(ajsint))-1)+(eval(hip_block_z))),(eval(L1)*((eval(ajsint))-1)+(eval(hip_block_z))+(eval(body_block_z)))}) ! end !! end the for loop ! ! ! ----------------------------------------------- ! Add two points on the rear hip (PORT SIDE) ! ----------------------------------------------- ! ! var modify var=Xvalues real=( Xvalues // {-(eval(hip_block_x))/2,-(eval(hip_block_x))/2 }) var modify var=Yvalues real=( Yvalues // {(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)) }) var modify var=Zvalues real=( Zvalues // {(eval(L1)*((eval(number_of_hip_pairs))-1)),(eval(L1)*((eval(number_of_hip_pairs))-1)+(eval(hip_block_z))) }) ! ! ! ! ----------------------------------------------- ! Begin the FOR Loop (STARBOARD SIDE: Most points, starting from the rear) ! ----------------------------------------------- ! ! for variable_name=loop_cntr & start_value=(eval(number_of_hip_pairs)-1) & increment_value=-1 & end_value=1 variable modify variable_name=ajsint integer_value=(eval(loop_cntr)) ! ! var modify var=Xvalues real=( Xvalues // {(eval(hip_block_x))/2,(eval(hip_block_x))/2,(eval(body_block_x))/2,(eval(body_block_x))/2 }) var modify var=Yvalues real=( Yvalues // {(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y)) }) var modify var=Zvalues real=( Zvalues // {(eval(ajsint))*(eval(hip_block_z)) + (eval(L1)) + ((eval(ajsint))-1)*(eval(body_block_z)),(eval(ajsint))*(eval(hip_block_z)) + (eval(L1)) + ((eval(ajsint))-1)*(eval(body_block_z))-(eval(hip_block_z)),(eval(ajsint))*(eval(hip_block_z)) + (eval(L1)) + ((eval(ajsint))-1)*(eval(body_block_z))-(eval(hip_block_z)),(eval(L1)*((eval(ajsint))-1)+(eval(hip_block_z))) }) ! end !! end the for loop ! ! ! ! ! ! ----------------------------------------------- ! Add two points on the front hip (STARBOARD SIDE) ! ----------------------------------------------- ! ! var modify var=Xvalues real=( Xvalues // {(eval(hip_block_x))/2,(eval(hip_block_x))/2}) var modify var=Yvalues real=( Yvalues // {(eval(H1))+(eval(hip_block_y)),(eval(H1))+(eval(hip_block_y))}) var modify var=Zvalues real=( Zvalues // {(eval(hip_block_z)),(eval(0))}) ! ! end !! end the if statement ! var del var=ajsint ! ----------------------------------------- ! Create the body part ! ----------------------------------------- part create rigid_body name_and_position & part_name = .scorpion_mcgill.BODY & ground_part = no & orientation = 0.0, 0.0, 0.0 part attributes part_name=.scorpion_mcgill.BODY color=BLUE name_vis=off ! ----------------------------------------- ! Create the polyline describing the top surface of the body ! ----------------------------------------- geometry create curve polyline & polyline_name = .scorpion_mcgill.BODY.POL2 & location = ({.scorpion_mcgill.Xvalues, .scorpion_mcgill.Yvalues, .scorpion_mcgill.Zvalues}) & relative_to = .scorpion_mcgill & close = yes marker create & marker_name = .scorpion_mcgill.BODY.MAR & orientation = 0.0, 90.0d, 0.0 ! ----------------------------------------- ! Extrude the polyline into the body ! ----------------------------------------- geometry create shape extrusion & extrusion_name = .scorpion_mcgill.BODY.EXT & reference_marker = .scorpion_mcgill.BODY.MAR & profile_curve = .scorpion_mcgill.BODY.POL2 & length_along_z_axis = (eval(body_height_extrude)) ! ----------------------------------------- ! Add Center of Mass marker, Mass and Inertia ! ----------------------------------------- marker create & marker_name = .scorpion_mcgill.BODY.cm & location = ({0,(eval(H1))+(eval(hip_block_y))/2,((eval(number_of_hip_pairs))*(hip_block_z)+((eval(number_of_hip_pairs))-1)*(body_block_z))/2}) & orientation = 0.0, 0.0, 0.0 part modify rigid mass_properties & part_name = .scorpion_mcgill.BODY & !! mass = (eval(body_mass)) & !! center_of_mass_marker = .scorpion_mcgill.BODY.cm & !! ixx = (eval(body_inertia_ixx)) & !! iyy = (eval(body_inertia_iyy)) & !! izz = (eval(body_inertia_izz)) & density = (eval(body_density)) ! ! ! ! -------------------------------------------------------------------- ! ! Create Thoracic (hip) actuator housings ! ! ------------------------------------------------------------------- ! ! ---------------------- ! CREATE the Thoracic (hip) actuators (Port side) ! ---------------------- ! variable create variable_name=ajsint10 integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=ajsint10 integer_value=(eval(tempreal)) ! !---create temporary name string variable var set var=tmpnam string=(eval("thoracic_actuator_housing_"//ajsint10)) ! ! ! ! Part pose (location and orientation); relative to ground marker. ! part create rigid_body name_and_position part_name=(eval(tmpnam)) & location=(LOC_RELATIVE_TO({-(eval(hip_block_x))/2-(eval(actuator_radius)),H1,(L1*((eval(ajsint10))-1))}, .scorpion_mcgill.ground.MAR_1)) & orientation=(ORI_RELATIVE_TO({(eval(thoracic_actuator_angle))d,0d,0d}, .scorpion_mcgill.ground.MAR_1)) part modify rigid_body mass_properties part_name=(eval(tmpnam)) & material=.materials.aluminum !! this should no longer be here. part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmpnam)) & density = (eval(actuator_density)) part attributes part_name=(eval(tmpnam)) color=RED name_vis=off defaults model part_name=(eval(tmpnam)) ! ! Marker definition (for defining pose of the object) ! marker create marker=thoracic_actuator_marker & location = 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,-90d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=thoracic_actuator_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! Marker definition (for calculation of rotation wrt body) ! marker create marker=thoracic_actuator_angle_marker & location = 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,0d,0d & relative_to= .scorpion_mcgill.ground.mar_1 marker attributes marker_name=thoracic_actuator_angle_marker & size_of_icons=80 color=GREEN & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (cylinder) ! geometry create shape cylinder & cylinder_name=thoracic_actuator_cylinder & radius= (eval(actuator_radius)) & center_marker=thoracic_actuator_marker & length= (eval(actuator_length)) ! end ! end of the FOR loop !---delete temporary name string variable var del var=tmpnam ! ! !! ---------------------- ! CREATE the hip actuators (Starboard side) ! ---------------------- ! variable create variable_name=ajsint11 integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=ajsint11 integer_value=((eval(tempreal))+(eval(number_of_hip_pairs))) ! !---create temporary name string variable var set var=tmpnam string=(eval("thoracic_actuator_housing_"//ajsint11)) ! ! ! ! Part pose (location and orientation); relative to ground marker. ! part create rigid_body name_and_position part_name=(eval(tmpnam)) & location=(LOC_RELATIVE_TO({(eval(hip_block_x))/2+(eval(actuator_radius)), H1,(L1*((eval(ajsint11))-1-eval(number_of_hip_pairs)))},.scorpion_mcgill.ground.MAR_1)) & orientation=(ORI_RELATIVE_TO({-(eval(thoracic_actuator_angle))d,0d,0d}, .scorpion_mcgill.ground.MAR_1)) part modify rigid_body mass_properties part_name=(eval(tmpnam)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmpnam)) & density = (eval(actuator_density)) part attributes part_name=(eval(tmpnam)) color=RED name_vis=off defaults model part_name=(eval(tmpnam)) ! ! Marker definition (for defining pose of the cylinder) ! marker create marker=thoracic_actuator_marker & location = 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,-90d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=thoracic_actuator_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! Marker definition (for determining angle wrt thoracic cylinder) ! marker create marker=thoracic_actuator_angle_marker & location = 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,0d,0d & relative_to= .scorpion_mcgill.ground.mar_1 marker attributes marker_name=thoracic_actuator_angle_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (cylinder) ! geometry create shape cylinder & cylinder_name=thoracic_actuator_cylinder & radius= (eval(actuator_radius)) & center_marker=thoracic_actuator_marker & length= (eval(actuator_length)) ! end ! end of the FOR loop !---delete temporary name string variable var del var=tmpnam ! ! ! ! ! -------------------------------------------------------------------- ! ! Create Basalar (knee) actuator housings ! ! ------------------------------------------------------------------- ! ! ---------------------- ! CREATE Basalar (knee) actuators (Port side) ! ---------------------- ! variable create variable_name=ajsint12 integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=ajsint12 integer_value=(eval(tempreal)) ! !---create temporary name string variable var set var=tmpnam string=(eval("basalar_actuator_housing_"//ajsint12)) var set var=tmpnam2 string=(eval("thoracic_actuator_housing_"//ajsint12//".cm")) ! ! ! ! Part pose (location and orientation); relative to the thoracic actuator. part create rigid_body name_and_position part_name=(eval(tmpnam)) & !! location=(LOC_RELATIVE_TO({-(eval(actuator_radius))*2,0,-(eval(actuator_length))/2}, (eval(tmpnam2)) )) & location=(LOC_RELATIVE_TO({-(eval(thoracic_link_length)),0,-(eval(actuator_length))/2}, (eval(tmpnam2)) )) & !! [July 19, 2002] orientation=(ORI_RELATIVE_TO({-90d,0d,0d}, (eval(tmpnam2)) )) part modify rigid_body mass_properties part_name=(eval(tmpnam)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmpnam)) & density = (eval(actuator_density)) part attributes part_name=(eval(tmpnam)) color=RED name_vis=off defaults model part_name=(eval(tmpnam)) ! ! Marker definition (for definition of the cylinder) ! marker create marker=basalar_actuator_marker & location = 0,0,0 & !! location=0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2)& orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=basalar_actuator_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! ! Marker definition (for defining angle of the actuator) ! marker create marker=basalar_actuator_angle_marker & location = 0,0,0 & !! location = 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=basalar_actuator_angle_marker & size_of_icons=80 color=WHITE & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (cylinder) ! geometry create shape cylinder & cylinder_name=basalar_actuator_cylinder & radius= (eval(actuator_radius)) & center_marker=basalar_actuator_marker & length= (eval(actuator_length)) ! end ! end of the FOR loop !---delete temporary name string variable var del var=tmpnam var del var=tmpnam2 var del var=ajsint12 ! ! !! ---------------------- ! CREATE Basalar (knee) actuators (Starboard side) ! ---------------------- ! variable create variable_name=ajsint13 integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=ajsint13 integer_value=((eval(tempreal))+(eval(number_of_hip_pairs))) ! !---create temporary name string variable var set var=tmpnam string=(eval("basalar_actuator_housing_"//ajsint13)) var set var=tmpnam2 string=(eval("thoracic_actuator_housing_"//ajsint13//".cm")) ! ! ! ! Part pose (location and orientation); relative to ground marker. ! part create rigid_body name_and_position part_name=(eval(tmpnam)) & !! location=(LOC_RELATIVE_TO({(eval(actuator_radius))*2,0,-(eval(actuator_length))/2}, (eval(tmpnam2)) )) & location=(LOC_RELATIVE_TO({(eval(thoracic_link_length)),0,-(eval(actuator_length))/2}, (eval(tmpnam2)) )) & !! [July 19, 2002] orientation=(ORI_RELATIVE_TO({90d,0d,0d}, (eval(tmpnam2)) )) part modify rigid_body mass_properties part_name=(eval(tmpnam)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmpnam)) & density = (eval(actuator_density)) part attributes part_name=(eval(tmpnam)) color=RED name_vis=off defaults model part_name=(eval(tmpnam)) ! ! Marker definition (for definition of the cylinder) ! marker create marker=basalar_actuator_marker & location = 0,0,0 & !! 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=basalar_actuator_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! ! Marker definition (for calculation of the angle) ! marker create marker=basalar_actuator_angle_marker & location = 0,0,0 & !! 0,(eval(hip_block_y)/2-eval(actuator_length)/2),(eval(hip_block_z)/2) & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=basalar_actuator_angle_marker & size_of_icons=80 color=WHITE & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (cylinder) ! geometry create shape cylinder & cylinder_name=basalar_actuator_cylinder & radius= (eval(actuator_radius)) & center_marker=basalar_actuator_marker & length= (eval(actuator_length)) ! end ! end of the FOR loop !---delete temporary name string variable var del var=tmpnam var del var=ajsint13 ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ---------------------- ! CREATE Revolute Joints between Thoracic Actuator and Torso (BODY) Parts ! ---------------------- ! variable create variable_name=temp_int integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=temp_int integer_value=(eval(tempreal)) ! !---create three temporary name string variables ! (Body, thoracic cylinder, and thoracic joint name) var set var=tmp1 string=(eval("BODY")) var set var=tmp2 string=(eval("thoracic_actuator_housing_"// (eval(temp_int)))) !! Port Side var set var=tmp3 string=(eval("thoracic_joint_"// (eval(temp_int)))) !! Port Side var set var=tmp4 string=(eval("thoracic_actuator_housing_"//(eval(eval(temp_int) +(eval(number_of_hip_pairs))))))!! Starboard Side var set var=tmp5 string=(eval("thoracic_joint_"//(eval(eval(temp_int)+(eval(number_of_hip_pairs)))))) !! Starboard Side var set var=tmp7 string=(eval("thoracic_rev_motion_"//(eval(temp_int)))) !! Port Side var set var=tmp8 string=(eval("thoracic_rev_motion_"//(eval(temp_int)+eval(number_of_hip_pairs)))) !! Starboard Side ! ! ! ! -------------------------------- PORT SIDE Revolute Joint ----------------------------------------------------- ! ! ! Create first marker. Make it a child of the body component @ the CoM of the Thoracic Joint. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp1)) // ".THORACIC_JOINT_MARKER_BODYPART_" // (eval(temp_int)))) & location=(LOC_RELATIVE_TO({0,0,0},(eval(".scorpion_mcgill."// (eval(tmp2)) //".cm")))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(".scorpion_mcgill."// (eval(tmp2)) //".cm")))) marker attributes marker_name=(eval(".scorpion_mcgill." // (eval(tmp1)) // ".THORACIC_JOINT_MARKER_BODYPART_" // (eval(temp_int)))) & size_of_icons=80 color=BLUE & visibility=on name_visibility=off ! ! Create Second marker. Make it a child of the thoracic actuator component and locate it at the ! Center of Mass of the Thoracic Joint. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".THORACIC_JOINT_MARKER_THORACICPART_"//(eval(temp_int)) )) & location=(LOC_RELATIVE_TO({0,0,0},(eval(".scorpion_mcgill."// (eval(tmp2)) //".cm")))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(".scorpion_mcgill."// (eval(tmp2)) //".cm")))) marker attributes marker_name=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".THORACIC_JOINT_MARKER_THORACICPART_"//(eval(temp_int)) )) & size_of_icons=80 color=BLUE & visibility=on name_visibility=off ! ! Describe the constraint ! constraint create joint Revolute & joint_name=(eval(".scorpion_mcgill." // (eval(tmp3)))) & i_marker_name= (eval(".scorpion_mcgill." // (eval(tmp1)) // ".THORACIC_JOINT_MARKER_BODYPART_" // (eval(temp_int)))) & j_marker_name=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".THORACIC_JOINT_MARKER_THORACICPART_"// (eval(temp_int)))) constraint attribute constraint_name=(eval(".scorpion_mcgill." // (eval(tmp3)))) name_vis=off scale_of_icons=0.5 ! ! Group Modify ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp3)))) ! ! ! CREATE Thoracic ROTATIONAL MOTION ! ! Alternate between even and odd pairs, so that legs are out of phase. ! if condition=(eval((mod(eval(temp_int),2)))==1) !! Leg is on an odd hip pair, (test using Modulo) constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp3)))) & type=rotational & time_derivative=displacement & function="akispl(time,0,thoracic_position_spline_phase1,0)" !! Phase 1 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp7)))) else !! Leg is on an even hip pair constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp3)))) & type=rotational & time_derivative=displacement & function="akispl(time,0,thoracic_position_spline_phase2,0)" !! Phase 2 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp7)))) end ! ! ! ! ! -------------------------------- STARBOARD SIDE Revolute Joint ----------------------------------------------------- ! ! ! Create first marker. Make it a child of the body component @ the CoM of the Thoracic Joint. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp1)) // ".THORACIC_JOINT_MARKER_BODYPART_" // (eval(temp_int)) +(eval(number_of_hip_pairs)))) & location=(LOC_RELATIVE_TO({0,0,0},(eval(".scorpion_mcgill."// (eval(tmp4)) //".cm")))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(".scorpion_mcgill."// (eval(tmp4)) //".cm")))) marker attributes marker_name=(eval(".scorpion_mcgill." // (eval(tmp1)) // ".THORACIC_JOINT_MARKER_BODYPART_" // (eval(temp_int)) +(eval(number_of_hip_pairs)))) & size_of_icons=80 color=BLUE & visibility=on name_visibility=off ! ! Create Second marker. Make it a child of the thoracic actuator component and locate it at the ! Center of Mass of the Thoracic Joint. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp4)) // ".THORACIC_JOINT_MARKER_THORACICPART_" // (eval(temp_int)) +(eval(number_of_hip_pairs)) )) & location=(LOC_RELATIVE_TO({0,0,0},(eval(".scorpion_mcgill."// (eval(tmp4)) //".cm")))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(".scorpion_mcgill."// (eval(tmp4)) //".cm")))) marker attributes marker_name=(eval(".scorpion_mcgill." // (eval(tmp4)) // ".THORACIC_JOINT_MARKER_THORACICPART_" // (eval(temp_int)) +(eval(number_of_hip_pairs)) )) & size_of_icons=80 color=BLUE & visibility=on name_visibility=off ! ! Describe the constraint ! constraint create joint Revolute & joint_name=(eval(".scorpion_mcgill." // (eval(tmp5)) )) & i_marker_name= (eval(".scorpion_mcgill." // (eval(tmp1)) // ".THORACIC_JOINT_MARKER_BODYPART_" // (eval(temp_int)) +(eval(number_of_hip_pairs)) )) & j_marker_name=(eval(".scorpion_mcgill." // (eval(tmp4)) // ".THORACIC_JOINT_MARKER_THORACICPART_" // (eval(temp_int)) +(eval(number_of_hip_pairs)) )) constraint attribute constraint_name=(eval(".scorpion_mcgill." // (eval(tmp5)))) name_vis=off scale_of_icons=0.5 ! ! Group Modify ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp5)))) ! ! ! CREATE Thoracic ROTATIONAL MOTION ! ! Alternate between even and odd pairs, so that legs are out of phase. ! if condition=(eval((mod(eval(temp_int),2)))==1) !! Leg is on an odd hip pair, (test using Modulo) constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp5)))) & type=rotational & time_derivative=displacement & function="-1*akispl(time,0,thoracic_position_spline_phase2,0)" !! Phase 2 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp8)))) else !! Leg is on an even hip pair constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp5)))) & type=rotational & time_derivative=displacement & function="-1*akispl(time,0,thoracic_position_spline_phase1,0)" !! Phase 1 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp8)))) end ! ! ! ! ! ! end ! end of the FOR loop !---delete temporary name string variables var del var=tmp1 var del var=tmp2 var del var=tmp3 var del var=tmp4 var del var=tmp5 var del var=tmp7 var del var=tmp8 var del var=temp_int ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ---------------------- ! CREATE Revolute Joints between Basalar Actuator and Thoracic Acutator ! ---------------------- ! variable create variable_name=temp_int integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=temp_int integer_value=(eval(tempreal)) ! !---create three temporary name string variables ! (thoracic and basalar actuator housings and basalar joint name) var set var=tmp1 string=(eval("thoracic_actuator_housing_"//temp_int)) !! Port Side var set var=tmp2 string=(eval("basalar_actuator_housing_"//temp_int)) !! Port Side var set var=tmp3 string=(eval("basalar_joint_"//temp_int)) !! Port Side var set var=tmp4 string=(eval("thoracic_actuator_housing_"//(eval(temp_int)+eval(number_of_hip_pairs)) )) !! Starboard Side var set var=tmp5 string=(eval("basalar_actuator_housing_"//(eval(temp_int)+eval(number_of_hip_pairs)) )) !! Starboard Side var set var=tmp6 string=(eval("basalar_joint_"// (eval(temp_int)+eval(number_of_hip_pairs)) )) !! Starboard Side var set var=tmp7 string=(eval("basalar_rev_motion_"//(eval(temp_int)))) !! Port Side var set var=tmp8 string=(eval("basalar_rev_motion_"//(eval(temp_int)+eval(number_of_hip_pairs)))) !! Starboard Side ! ! ! ! -------------------------------- PORT SIDE Revolute Joint ----------------------------------------------------- ! ! Create first marker. Make it a child of the THORACIC actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp1)) //".BASALAR_JOINT_MARKER_1")) & !! location=(LOC_RELATIVE_TO({-(eval(actuator_radius))*2,0,0},(eval(tmp1 // ".cm")) )) & !! rel. to Thor. CoM marker. !! orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp1 // ".cm")) )) !! rel. to Thor. CoM marker. location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp2 // ".basalar_actuator_angle_marker")) )) & !! rel. to Bas. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp2 // ".basalar_actuator_angle_marker")) )) !! rel. to Bas. Angle Marker [July 29, 2002] ! ! Create Second marker. Make it a child of the BASALAR actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".BASALAR_JOINT_MARKER_2")) & !! location=(LOC_RELATIVE_TO({-(eval(actuator_radius))*2,0,0},(eval(tmp1 // ".cm")) )) & !! rel. to Thor. CoM marker. !! orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp1 // ".cm")) )) !! rel. to Thor. CoM marker. location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp2 // ".basalar_actuator_angle_marker")) )) & !! rel. to Bas. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp2 // ".basalar_actuator_angle_marker")) )) !! rel. to Bas. Angle Marker [July 29, 2002] ! ! Describe the constraint ! constraint create joint Revolute & joint_name=(eval(".scorpion_mcgill." // (eval(tmp3)))) & i_marker_name=(eval(".scorpion_mcgill." // (eval(tmp1)) // ".BASALAR_JOINT_MARKER_1")) & j_marker_name=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".BASALAR_JOINT_MARKER_2")) constraint attribute constraint_name=(eval(".scorpion_mcgill." // (eval(tmp3)))) name_vis=off scale_of_icons=0.5 ! ! Group Modify ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp3)))) ! ! ! ! ! ! CREATE Basalar ROTATIONAL MOTION ! ! Alternate between even and odd pairs, so that legs are out of phase. ! if condition=(eval((mod(eval(temp_int),2)))==1) !! Leg is on an odd hip pair, (test using Modulo) constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp3)))) & type=rotational & time_derivative=displacement & function="akispl(time,0,basalar_position_spline_phase1,0)" !! Phase 1 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp7)))) else !! Leg is on an even hip pair constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp3)))) & type=rotational & time_derivative=displacement & function="akispl(time,0,basalar_position_spline_phase2,0)" !! Phase 2 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp7)))) end ! ! ! ! ! ! ! -------------------------------- STARBOARD SIDE Revolute Joint ----------------------------------------------------- ! ! Create first marker. Make it a child of the THORACIC actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp4)) //".BASALAR_JOINT_MARKER_1")) & !! location=(LOC_RELATIVE_TO({(eval(actuator_radius))*2,0,0},(eval(tmp4 // ".cm")) )) & !! rel. to Thor. CoM marker. !! orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp4 // ".cm")) )) !! rel. to Thor. CoM marker. location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp5 // ".basalar_actuator_angle_marker")) )) & !! rel. to Bas. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp5 // ".basalar_actuator_angle_marker")) )) !! rel. to Bas. Angle Marker [July 29, 2002] ! ! Create Second marker. Make it a child of the BASALAR actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp5)) // ".BASALAR_JOINT_MARKER_2")) & !! location=(LOC_RELATIVE_TO({(eval(actuator_radius))*2,0,0},(eval(tmp4 // ".cm")) )) & !! rel. to Thor. CoM marker. !! orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp4 // ".cm")) )) !! rel. to Thor. CoM marker. location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp5 // ".basalar_actuator_angle_marker")) )) & !! rel. to Bas. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp5 // ".basalar_actuator_angle_marker")) )) !! rel. to Bas. Angle Marker [July 29, 2002] ! ! Describe the constraint ! constraint create joint Revolute & joint_name=(eval(".scorpion_mcgill." // (eval(tmp6)))) & i_marker_name=(eval(".scorpion_mcgill." // (eval(tmp4)) // ".BASALAR_JOINT_MARKER_1")) & j_marker_name=(eval(".scorpion_mcgill." // (eval(tmp5)) // ".BASALAR_JOINT_MARKER_2")) constraint attribute constraint_name=(eval(".scorpion_mcgill." // (eval(tmp6)))) name_vis=off scale_of_icons=0.5 ! ! Group Modify ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp6)))) ! ! ! CREATE Basalar ROTATIONAL MOTION ! ! Alternate between even and odd pairs, so that legs are out of phase. ! if condition=(eval((mod(eval(temp_int),2)))==1) !! Leg is on an odd hip pair, (test using Modulo) constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp6)))) & type=rotational & time_derivative=displacement & function="-1*akispl(time,0,basalar_position_spline_phase2,0)" !! Phase 2 (Opposite of Port leg) constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp8)))) else !! Leg is on an even hip pair constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp6)))) & type=rotational & time_derivative=displacement & function="-1*akispl(time,0,basalar_position_spline_phase1,0)" !! Phase 1 (Opposite of Starboard Leg) constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp8)))) end ! ! ! end ! end of the FOR loop !---delete temporary name string variables var del var=tmp1 var del var=tmp2 var del var=tmp3 var del var=tmp4 var del var=tmp5 var del var=tmp6 var del var=tmp7 var del var=tmp8 var del var=temp_int ! ! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! -------------------------------------------------------------------- ! ! Create Basalar (knee) links ! ! ------------------------------------------------------------------- ! ! ---------------------- ! CREATE Basalar (knee) links ! ---------------------- ! variable create variable_name=temp_int integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=temp_int integer_value=(eval(tempreal)) ! !---create temporary name string variable var set var=tmp string=(eval("basalar_link_"//temp_int)) !! Port Side var set var=tmp2 string=(eval("basalar_sprung_link_"//temp_int)) !! Port Side var set var=tmp3 string=(eval("basalar_toe_"//temp_int)) !! Port Side var set var=tmp4 string=(eval("contact_"//temp_int)) !! Port Side var set var=tmp5 string=(eval("GCONTACT_"//temp_int)) !! Port Side var set var=tmp6 string=(eval("basalar_actuator_housing_"//temp_int)) !! Port Side var set var=tmp7 string=(eval("basalar_link_"// (eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp8 string=(eval("basalar_sprung_link_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp9 string=(eval("basalar_toe_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp10 string=(eval("contact_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp11 string=(eval("GCONTACT_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp12 string=(eval("basalar_actuator_housing_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side ! ! ! ! ! -------------------------------- PORT SIDE Basalar Cylindrical Link --------------------------------- ! ! ! Part pose (location and orientation); relative to ground marker. ! ! Create the first part, the leg link part create rigid_body name_and_position part_name=(eval(tmp)) & location=(LOC_RELATIVE_TO({0,(-(eval(actuator_radius))),0},(eval(tmp6 // ".cm")))) & !! Relative to Basalar Actuator Housing CoM. orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp6 // ".cm")))) !! Relative to Basalar Actuator Housing CoM. part modify rigid_body mass_properties part_name=(eval(tmp)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp)) & density = (eval(actuator_density)) !! yes, I know it should be link density, but it needs to be merged with the actuator. part attributes part_name=(eval(tmp)) color=GREEN name_vis=off defaults model part_name=(eval(tmp)) ! ! ! Marker definition (for definition of the cylinder) ! marker create marker=basalar_link_marker & location = 0,0,0 & orientation = 0d,90d,0d & relative_to= (eval(tmp)) marker attributes marker_name=basalar_link_marker & size_of_icons=80 color=GREEN & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (main cylinder) ! geometry create shape cylinder & cylinder_name=basalar_link_cylinder & radius= (eval(link_radius)) & center_marker=basalar_link_marker & length= (eval(link_length)) ! ! ! MERGE the larger link and the basalar actuator. ! part merge rigid_body part_name=(eval(tmp)) into_part=(eval(tmp6)) ! ! ! ! -------------------------------- STARBOARD SIDE Basalar Cylindrical Link ---------------------------------------- ! ! ! ! ! Part pose (location and orientation); relative to ground marker. ! ! Create the first part, the leg link part create rigid_body name_and_position part_name=(eval(tmp7)) & location=(LOC_RELATIVE_TO({0,(-(eval(actuator_radius))),0},(eval(tmp12 // ".cm")))) & !! Relative to Basalar Actuator Housing CoM. orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp12 // ".cm")))) !! Relative to Basalar Actuator Housing CoM. part modify rigid_body mass_properties part_name=(eval(tmp7)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp7)) & density = (eval(actuator_density)) !! yes, I know it should be link density, but it needs to be merged with the actuator. part attributes part_name=(eval(tmp7)) color=GREEN name_vis=off defaults model part_name=(eval(tmp7)) ! ! ! Marker definition (for definition of the cylinder) ! marker create marker=basalar_link_marker & location = 0,0,0 & orientation = 0d,90d,0d & relative_to= (eval(tmp7)) marker attributes marker_name=basalar_link_marker & size_of_icons=80 color=GREEN & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (main cylinder) ! geometry create shape cylinder & cylinder_name=basalar_link_cylinder & radius= (eval(link_radius)) & center_marker=basalar_link_marker & length= (eval(link_length)) ! ! ! ! MERGE the larger link and the basalar actuator. ! part merge rigid_body part_name=(eval(tmp7)) into_part=(eval(tmp12)) end !! END the FOR Loop. var del var=tmp var del var=tmp2 var del var=tmp3 var del var=tmp4 var del var=tmp5 var del var=tmp6 var del var=tmp7 var del var=tmp8 var del var=tmp9 var del var=tmp10 var del var=tmp11 var del var=tmp12 var del var=temp_int !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! -------------------------------------------------------------------- ! ! Create Distal (ankle) actuator housings ! ! ------------------------------------------------------------------- ! ! ---------------------- ! CREATE Distal (ankle) actuators (Port side) ! ---------------------- ! variable create variable_name=ajsint integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=ajsint integer_value=(eval(tempreal)) ! !---create temporary name string variable var set var=tmpnam string=(eval("distal_actuator_housing_"//ajsint)) var set var=tmpnam3 string=(eval("basalar_actuator_housing_"//ajsint//".basalar_actuator_marker")) ! ! ! ! Part pose (location and orientation) ! It used to be relative to the ground marker. ! Now, make it relative to (parallel to) the basalar actuator. part create rigid_body name_and_position part_name=(eval(tmpnam)) & location=(LOC_RELATIVE_TO({0,-(eval(link_length)+2*eval(actuator_radius)),0}, (eval(tmpnam3)) )) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmpnam3)) )) part modify rigid_body mass_properties part_name=(eval(tmpnam)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmpnam)) & density = (eval(actuator_density)) part attributes part_name=(eval(tmpnam)) color=RED name_vis=off defaults model part_name=(eval(tmpnam)) ! ! Marker definition (for definition of the cylinder) ! marker create marker=distal_actuator_marker & location = 0,0,0 & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=distal_actuator_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! ! Marker definition (for defining angle of the actuator) ! marker create marker=distal_actuator_angle_marker & location = 0,0,0 & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=distal_actuator_angle_marker & size_of_icons=80 color=WHITE & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (cylinder) ! geometry create shape cylinder & cylinder_name=distal_actuator_cylinder & radius= (eval(actuator_radius)) & center_marker=distal_actuator_marker & length= (eval(actuator_length)) ! end ! end of the FOR loop !---delete temporary name string variable var del var=tmpnam var del var=tmpnam3 var del var=ajsint ! ---------------------- ! CREATE Distal (ankle) actuators (Starboard side) ! ---------------------- ! variable create variable_name=ajsint integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=ajsint integer_value=((eval(tempreal))+(eval(number_of_hip_pairs))) ! !---create temporary name string variable var set var=tmpnam string=(eval("distal_actuator_housing_"//ajsint)) var set var=tmpnam3 string=(eval("basalar_actuator_housing_"//ajsint//".basalar_actuator_marker")) ! ! ! ! Part pose (location and orientation) ! It used to be relative to the ground marker. ! Now, make it relative to (parallel to) the basalar actuator. part create rigid_body name_and_position part_name=(eval(tmpnam)) & location=(LOC_RELATIVE_TO({0,-(eval(link_length)+2*eval(actuator_radius)),0}, (eval(tmpnam3)) )) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmpnam3)) )) part modify rigid_body mass_properties part_name=(eval(tmpnam)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmpnam)) & density = (eval(actuator_density)) part attributes part_name=(eval(tmpnam)) color=RED name_vis=off defaults model part_name=(eval(tmpnam)) ! ! Marker definition (for definition of the cylinder) ! marker create marker=distal_actuator_marker & location = 0,0,0 & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=distal_actuator_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! ! Marker definition (for defining angle of the actuator) ! marker create marker=distal_actuator_angle_marker & location = 0,0,0 & orientation = 0d,0d,0d & relative_to= (eval(tmpnam)) marker attributes marker_name=distal_actuator_angle_marker & size_of_icons=80 color=WHITE & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (cylinder) ! geometry create shape cylinder & cylinder_name=distal_actuator_cylinder & radius= (eval(actuator_radius)) & center_marker=distal_actuator_marker & length= (eval(actuator_length)) ! end ! end of the FOR loop !---delete temporary name string variable var del var=tmpnam var del var=tmpnam3 var del var=ajsint ! -------------------------------------------------------------------- ! ! Create Distal (ankle) links ! ! ------------------------------------------------------------------- ! ! ---------------------- ! CREATE Distal (ankle) links ! ---------------------- ! variable create variable_name=temp_int integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=temp_int integer_value=(eval(tempreal)) ! !---create temporary name string variable var set var=tmp string=(eval("distal_link_"//temp_int)) !! Port Side var set var=tmp2 string=(eval("distal_sprung_link_"//temp_int)) !! Port Side var set var=tmp3 string=(eval("distal_toe_"//temp_int)) !! Port Side var set var=tmp4 string=(eval("contact_"//temp_int)) !! Port Side var set var=tmp5 string=(eval("GCONTACT_"//temp_int)) !! Port Side var set var=tmp6 string=(eval("distal_actuator_housing_"//temp_int)) !! Port Side var set var=tmp7 string=(eval("distal_link_"// (eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp8 string=(eval("distal_sprung_link_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp9 string=(eval("distal_toe_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp10 string=(eval("contact_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp11 string=(eval("GCONTACT_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side var set var=tmp12 string=(eval("distal_actuator_housing_"//(eval(temp_int))+(eval(number_of_hip_pairs)))) !! Starboard Side ! ! ! ! ! -------------------------------- PORT SIDE Distal Cylindrical Link, Slider and Toe --------------------------------- ! ! ! Part pose (location and orientation) ! ! Create the first part, the leg link part create rigid_body name_and_position part_name=(eval(tmp)) & location=(LOC_RELATIVE_TO({0,-(eval(actuator_radius)),0},(eval(tmp6 // ".cm")))) & !! Relative to Distal Actuator Housing CoM. orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp6 // ".cm")))) !! Relative to Distal Actuator Housing CoM. part modify rigid_body mass_properties part_name=(eval(tmp)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp)) & density = (eval(actuator_density)) !! yes, I know it should be link density, but it needs to be merged with the actuator. part attributes part_name=(eval(tmp)) color=GREEN name_vis=off defaults model part_name=(eval(tmp)) ! ! ! Marker definition (for definition of the cylinder) ! marker create marker=distal_link_marker & location = 0,0,0 & orientation = 0d,90d,0d & relative_to= (eval(tmp)) marker attributes marker_name=distal_link_marker & size_of_icons=80 color=GREEN & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (main cylinder) ! geometry create shape cylinder & cylinder_name=distal_link_cylinder & radius= (eval(link_radius)) & center_marker=distal_link_marker & length= (eval(link_length)) ! ! ------------ ! ! Insert object (thinner sliding cylinder) ! ! ------------ ! ! Create the second part, the sliding leg end. part create rigid_body name_and_position part_name=(eval(tmp2)) & location=(LOC_RELATIVE_TO({0,0,0},(eval((eval(tmp) // ".cm"))))) & !! relative to the larger cylinder's CoM. orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval((eval(tmp) // ".cm"))))) !! relative to the larger cylinder's CoM. part modify rigid_body mass_properties part_name=(eval(tmp2)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp2)) & density = (eval(sprung_link_density)) part attributes part_name=(eval(tmp2)) color=BLUE name_vis=off defaults model part_name=(eval(tmp2)) ! ! ! Marker definition (for def'n of the sliding cylinder) ! marker create marker=distal_sprung_link_marker & location = 0,0,0 & orientation = 0d,90d,0d & relative_to= (eval(tmp2)) marker attributes marker_name=distal_sprung_link_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! geometry create shape cylinder & cylinder_name=distal_sprung_link_cylinder & radius= (eval(sprung_link_radius)) & center_marker=distal_sprung_link_marker & length= (eval(sprung_link_length)) ! ! ! ------------ ! ! Insert object (Toe at end of the distal link: distal_toe) ! ! ------------ ! ! Create the toe at the end of the distal link part create rigid_body name_and_position part_name=(eval(tmp3)) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp2)) )) part modify rigid_body mass_properties part_name=(eval(tmp3)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp2)) & density = (eval(sprung_link_density)) part attributes part_name=(eval(tmp3)) color=BLUE name_vis=off defaults model part_name=(eval(tmp3)) ! ! ! Marker definition (for def'n of the toe ellipsoid) ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp3)) // ".center_marker")) & location= (LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp2)))) & orientation= 0d,0d,0d geometry create shape ellipsoid & ellipsoid_name=(eval(".scorpion_mcgill." // (eval(tmp3)) // ".ellipsoid")) & x_scale_factor=(2*eval(toe_radius)) & y_scale_factor=(2*eval(toe_radius)) & z_scale_factor=(2*eval(toe_radius)) & center_marker=(eval(".scorpion_mcgill." // (eval(tmp3)) // ".center_marker")) group modify group=SELECT_LIST object=(eval(tmp3)) ! ! ! ! ! MERGE the larger link and the distal actuator. ! part merge rigid_body part_name=(eval(tmp)) into_part=(eval(tmp6)) ! ! ! ------------ ! ! Create fixed (locked) joint between the distal slider and the toe ! ! I would like to use a MERGE between these parts due to the large forces that ! will occur at the fixed joint except that I need the ellipsoid for the contact forces. ! ------------ ! ! Marker on 1st object: slider ! marker create marker=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//temp_int))//".MARKER_2")) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp2)) )) ! ! Marker on the 2nd object: ! marker create marker=(eval(".scorpion_mcgill."//(eval(tmp3))//".MARKER_2")) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp2)) )) ! ! Describe the resulting constraint (Fixed) ! constraint create joint Fixed & joint_name=(eval(".scorpion_mcgill."//(eval("distal_toe_FIXED_JOINT_"//temp_int)))) & i_marker_name= (eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//temp_int))//".MARKER_2")) & !! first marker j_marker_name= (eval(".scorpion_mcgill."//(eval(tmp3))//".MARKER_2")) !! second marker ! constraint attribute constraint_name=(eval(".scorpion_mcgill."//(eval("distal_toe_FIXED_JOINT_"//temp_int)))) name_vis=off scale_of_icons=0.1 ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill."//(eval("distal_toe_FIXED_JOINT_"//temp_int)))) ! ! ! ----------------------- ! ! Create contact force between the toe and the ground plane. ! ! ----------------------- ! contact create contact_name = (eval(".scorpion_mcgill."//(eval(tmp4)))) & i_geometry_name = (eval(".scorpion_mcgill."//(eval(tmp3))//".ellipsoid")) & j_geometry_name = .scorpion_mcgill.ground.PLANE_1 & i_flip_normal = "no" & & stiffness = 1.0E+005 & damping = 10.0 & !! Solver docs say this should be 1 per cent of stiffness. exponent = 2.2 & dmax = 0.1 & !! Solver docs that this should be 0.01 mm. & coulomb_friction = on & mu_static = 0.8 & !! Dry Rubber on Dry Rubber; pg 57 Solver Doc. mu_dynamic = 0.76 & !! Dry Rubber on Dry Rubber; pg 57 Solver Doc. stiction_transition_velocity = 500 & !! was 0.1 [mm/sec?] friction_transition_velocity = 1000 !! was 1.0 [mm/sec?] geometry create shape gcontact & contact_force_name = (eval(".scorpion_mcgill."//(eval(tmp5)))) & contact_element_name = (eval(".scorpion_mcgill."//(eval(tmp4)))) & force_display = components ! ! ! ------------ ! ! Create translational joint between the two distal cylinders ! ! ------------ ! ! Marker on 1st object: slider ! marker create marker=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//temp_int))//".MARKER_1")) & location=(LOC_RELATIVE_TO({0,0,0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(tmp2)) )) ! ! Marker on the 2nd object: larger cylinder ! marker create marker=(eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//temp_int))//".MARKER_2")) & location=(LOC_RELATIVE_TO({0,0,0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(tmp2)) )) ! ! Describe the resulting constraint (translational) ! constraint create joint Translational & joint_name=(eval(".scorpion_mcgill."//(eval("distal_TRANS_JOINT_"//temp_int)))) & i_marker_name= (eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//temp_int))//".MARKER_1")) & !! first marker j_marker_name= (eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//temp_int))//".MARKER_2")) !! second marker ! constraint attribute constraint_name=(eval(".scorpion_mcgill."//(eval("distal_TRANS_JOINT_"//temp_int)))) name_vis=off ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill."//(eval("distal_TRANS_JOINT_"//temp_int)))) ! ! ------------ ! ! Create translational spring between the two cylinders ! ! ------------ ! default coordinate_system default_coordinate_system=.scorpion_mcgill marker create marker=(eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//temp_int))//".spring_MARKER_1")) & location=(LOC_RELATIVE_TO({0,0,0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp2)) )) marker create marker=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//temp_int))//".spring_MARKER_2")) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length))/2,0}, (eval(tmp2)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp2)) )) undo begin suppress=yes assembly create instance instance=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int)) & definition=.mdi.forces.spring variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".i_marker")) obj=(eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//temp_int))//".spring_MARKER_1")) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".j_marker")) obj=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//temp_int))//".spring_MARKER_2")) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".stiffness_mode")) str="linear" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".stiffness_coefficient")) real=(eval(leg_spring_constant)) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".stiffness_spline")) obj=(none) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".damping_mode")) str="linear" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".damping_coefficient")) real=(eval(leg_damper_constant)) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".damping_spline")) obj=(none) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".free_length_mode")) str="design_length" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".i_dynamic_visibility")) str="on" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".j_dynamic_visibility")) str="off" entity attributes entity_name=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".i_marker")) color=red undo end group modify group=SELECT_LIST object=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//temp_int//".i_marker")) ! ! ! ! ! ! -------------------------------- STARBOARD SIDE Distal Cylindrical Link ---------------------------------------- ! ! ! ! ! Part pose (location and orientation); relative to ground marker. ! ! Create the first part, the leg link part create rigid_body name_and_position part_name=(eval(tmp7)) & location=(LOC_RELATIVE_TO({0,-(eval(actuator_radius)),0},(eval(tmp12 // ".cm")))) & !! Relative to Distal Actuator Housing CoM. orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp12 // ".cm")))) !! Relative to Distal Actuator Housing CoM. part modify rigid_body mass_properties part_name=(eval(tmp7)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp7)) & density = (eval(actuator_density)) !! yes, I know it should be link density, but it needs to be merged with the actuator. part attributes part_name=(eval(tmp7)) color=GREEN name_vis=off defaults model part_name=(eval(tmp7)) ! ! ! Marker definition (for definition of the cylinder) ! marker create marker=distal_link_marker & location = 0,0,0 & orientation = 0d,90d,0d & relative_to= (eval(tmp7)) marker attributes marker_name=distal_link_marker & size_of_icons=80 color=GREEN & visibility=no_opinion name_visibility=no_opinion ! ! Insert object (main cylinder) ! geometry create shape cylinder & cylinder_name=distal_link_cylinder & radius= (eval(link_radius)) & center_marker=distal_link_marker & length= (eval(link_length)) ! ! ! ------------ ! ! Insert object (thinner sliding cylinder) ! ! ------------ ! ! Create the second part, the sliding leg end. part create rigid_body name_and_position part_name=(eval(tmp8)) & location=(LOC_RELATIVE_TO({0,0,0},(eval((eval(tmp7) // ".cm"))))) & !! relative to the larger cylinder's CoM. orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval((eval(tmp7) // ".cm"))))) !! relative to the larger cylinder's CoM. part modify rigid_body mass_properties part_name=(eval(tmp8)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp8)) & density = (eval(sprung_link_density)) part attributes part_name=(eval(tmp8)) color=BLUE name_vis=off defaults model part_name=(eval(tmp8)) ! ! ! Marker definition (for def'n of the sliding cylinder) ! marker create marker=distal_sprung_link_marker & location = 0,0,0 & orientation = 0d,90d,0d & relative_to= (eval(tmp8)) marker attributes marker_name=distal_sprung_link_marker & size_of_icons=80 color=BLUE & visibility=no_opinion name_visibility=no_opinion ! ! geometry create shape cylinder & cylinder_name=distal_sprung_link_cylinder & radius= (eval(sprung_link_radius)) & center_marker=distal_sprung_link_marker & length= (eval(sprung_link_length)) ! ! ! ------------ ! ! Insert object (Toe at end of the distal link: distal_toe) ! ! ------------ ! ! Create the toe at the end of the distal link part create rigid_body name_and_position part_name=(eval(tmp9)) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp8)) )) part modify rigid_body mass_properties part_name=(eval(tmp9)) & material=.materials.aluminum part modify rigid mass_properties & !! change the density of the part part_name = (eval(tmp9)) & density = (eval(sprung_link_density)) part attributes part_name=(eval(tmp9)) color=BLUE name_vis=off defaults model part_name=(eval(tmp9)) ! ! ! Marker definition (for def'n of the toe ellipsoid) ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp9)) // ".center_marker")) & location= (LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp8)))) & orientation= 0d,0d,0d geometry create shape ellipsoid & ellipsoid_name=(eval(".scorpion_mcgill." // (eval(tmp9)) // ".ellipsoid")) & x_scale_factor=(2*eval(toe_radius)) & y_scale_factor=(2*eval(toe_radius)) & z_scale_factor=(2*eval(toe_radius)) & center_marker=(eval(".scorpion_mcgill." // (eval(tmp9)) // ".center_marker")) group modify group=SELECT_LIST object=(eval(tmp9)) ! ! ! MERGE the larger link and the distal actuator. ! part merge rigid_body part_name=(eval(tmp7)) into_part=(eval(tmp12)) ! ! ------------ ! ! Create fixed (locked) joint between the distal slider and the toe ! ! I would like to use a MERGE between these parts due to the large forces that ! will occur at the fixed joint except that I need the ellipsoid for the contact forces. ! ------------ ! ! Marker on 1st object: slider ! marker create marker=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".MARKER_2")) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp8)) )) ! ! Marker on the 2nd object: ! marker create marker=(eval(".scorpion_mcgill."//(eval(tmp9))//".MARKER_2")) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length)),0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp8)) )) ! ! Describe the resulting constraint (Fixed) ! constraint create joint Fixed & joint_name=(eval(".scorpion_mcgill."//(eval("distal_toe_FIXED_JOINT_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))))) & i_marker_name= (eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".MARKER_2")) & !! first marker j_marker_name= (eval(".scorpion_mcgill."//(eval(tmp9))//".MARKER_2")) !! second marker ! constraint attribute constraint_name=(eval(".scorpion_mcgill."//(eval("distal_toe_FIXED_JOINT_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))))) name_vis=off scale_of_icons=0.1 ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill."//(eval("distal_toe_FIXED_JOINT_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))))) ! ! ! ----------------------- ! ! Create contact force between the toe and the ground plane. ! ! ----------------------- ! contact create contact_name = (eval(".scorpion_mcgill."//(eval(tmp10)))) & i_geometry_name = (eval(".scorpion_mcgill."//(eval(tmp9))//".ellipsoid")) & j_geometry_name = .scorpion_mcgill.ground.PLANE_1 & i_flip_normal = "no" & & stiffness = 1.0E+005 & damping = 10.0 & exponent = 2.2 & dmax = 0.1 & & coulomb_friction = on & mu_static = 0.3 & mu_dynamic = 0.1 & stiction_transition_velocity = 0.1 & friction_transition_velocity = 1.0 geometry create shape gcontact & contact_force_name = (eval(".scorpion_mcgill."//(eval(tmp11)))) & contact_element_name = (eval(".scorpion_mcgill."//(eval(tmp10)))) & force_display = components ! ! ! ! ! ! ------------ ! ! Create translational joint between the two distal cylinders ! ! ------------ ! ! Marker on 1st object: slider ! marker create marker=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".MARKER_1")) & location=(LOC_RELATIVE_TO({0,0,0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(tmp8)) )) ! ! Marker on the 2nd object: larger cylinder ! marker create marker=(eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".MARKER_2")) & location=(LOC_RELATIVE_TO({0,0,0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,90d,0d}, (eval(tmp8)) )) ! ! Describe the resulting constraint (translational) ! constraint create joint Translational & joint_name=(eval(".scorpion_mcgill."//(eval("distal_TRANS_JOINT_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))))) & i_marker_name= (eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".MARKER_1")) & !! first marker j_marker_name= (eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".MARKER_2")) !! second marker ! constraint attribute constraint_name=(eval(".scorpion_mcgill."//(eval("distal_TRANS_JOINT_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))))) name_vis=off ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill."//(eval("distal_TRANS_JOINT_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))))) ! ! ------------ ! ! Create translational spring between the two cylinders ! ! ------------ ! default coordinate_system default_coordinate_system=.scorpion_mcgill marker create marker=(eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".spring_MARKER_1")) & location=(LOC_RELATIVE_TO({0,0,0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp8)) )) marker create marker=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".spring_MARKER_2")) & location=(LOC_RELATIVE_TO({0,-(eval(sprung_link_length))/2,0}, (eval(tmp8)))) & orientation=(ORI_RELATIVE_TO({0d,0d,0d}, (eval(tmp8)) )) undo begin suppress=yes assembly create instance instance=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs)))))) & definition=.mdi.forces.spring variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".i_marker")) obj=(eval(".scorpion_mcgill."//(eval("distal_actuator_housing_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".spring_MARKER_1")) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".j_marker")) obj=(eval(".scorpion_mcgill."//(eval("distal_sprung_link_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))))//".spring_MARKER_2")) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".stiffness_mode")) str="linear" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".stiffness_coefficient")) real=(eval(leg_spring_constant)) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".stiffness_spline")) obj=(none) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".damping_mode")) str="linear" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".damping_coefficient")) real=(eval(leg_damper_constant)) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".damping_spline")) obj=(none) variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".free_length_mode")) str="design_length" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".i_dynamic_visibility")) str="on" variable modify variable=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".j_dynamic_visibility")) str="off" entity attributes entity_name=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".i_marker")) color=red undo end group modify group=SELECT_LIST object=(eval(".scorpion_mcgill.distal_TRANS_SPRING_"//(eval((eval(temp_int))+(eval(number_of_hip_pairs))))//".i_marker")) ! ! ! end !! END the FOR Loop. !! delete temporary variables var del var=temp_int var del var=tmp var del var=tmp2 var del var=tmp3 var del var=tmp4 var del var=tmp5 var del var=tmp6 var del var=tmp7 var del var=tmp8 var del var=tmp9 var del var=tmp10 var del var=tmp11 var del var=tmp12 ! ---------------------- ! CREATE Revolute Joints between Distal Actuator and Basalar Link (which is merged with the actuator housing) ! ---------------------- ! variable create variable_name=temp_int integer_value=0 ! ! Begin the FOR Loop ! for variable_name=tempreal start_value=1 end_value=(eval(number_of_hip_pairs)) variable modify variable_name=temp_int integer_value=(eval(tempreal)) ! !---create temporary name string variables ! (basalar and distal actuator housings and distal joint name) var set var=tmp1 string=(eval("basalar_actuator_housing_"//temp_int)) !! Port Side var set var=tmp2 string=(eval("distal_actuator_housing_"//temp_int)) !! Port Side var set var=tmp3 string=(eval("distal_joint_"//temp_int)) !! Port Side var set var=tmp4 string=(eval("basalar_actuator_housing_"//(eval(temp_int)+eval(number_of_hip_pairs)) )) !! Starboard Side var set var=tmp5 string=(eval("distal_actuator_housing_"//(eval(temp_int)+eval(number_of_hip_pairs)) )) !! Starboard Side var set var=tmp6 string=(eval("distal_joint_"// (eval(temp_int)+eval(number_of_hip_pairs)) )) !! Starboard Side var set var=tmp7 string=(eval("distal_rev_motion_"//(eval(temp_int)))) !! Port Side var set var=tmp8 string=(eval("distal_rev_motion_"//(eval(temp_int)+eval(number_of_hip_pairs)))) !! Starboard Side ! ! ! ! -------------------------------- PORT SIDE Revolute Joint ----------------------------------------------------- ! ! Create first marker. Make it a child of the BASALAR actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp1)) //".DISTAL_JOINT_MARKER_1")) & !! location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp2 // ".distal_link_marker")) )) & !! rel. to Distal link marker. !! orientation=(ORI_RELATIVE_TO({180d,90d,0d},(eval(tmp2 // ".distal_link_marker")) )) !! rel. to Distal Link Marker. location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp2 // ".distal_actuator_angle_marker")) )) & !! rel. to Dist. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp2 // ".distal_actuator_angle_marker")) )) !! rel. to Dist. Angle Marker [July 29, 2002] ! ! Create Second marker. Make it a child of the DISTAL actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".DISTAL_JOINT_MARKER_2")) & !! location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp2 // ".distal_link_marker")) )) & !! rel. to distal link marker. !! orientation=(ORI_RELATIVE_TO({180d,90d,0d},(eval(tmp2 // ".distal_link_marker")) )) !! rel. to distal link marker location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp2 // ".distal_actuator_angle_marker")) )) & !! rel. to Dist. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp2 // ".distal_actuator_angle_marker")) )) !! rel. to Dist. Angle Marker [July 29, 2002] ! ! Describe the constraint ! constraint create joint Revolute & joint_name=(eval(".scorpion_mcgill." // (eval(tmp3)))) & i_marker_name=(eval(".scorpion_mcgill." // (eval(tmp1)) // ".DISTAL_JOINT_MARKER_1")) & j_marker_name=(eval(".scorpion_mcgill." // (eval(tmp2)) // ".DISTAL_JOINT_MARKER_2")) constraint attribute constraint_name=(eval(".scorpion_mcgill." // (eval(tmp3)))) name_vis=off scale_of_icons=0.5 ! ! Group Modify ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp3)))) ! ! ! ! ! ! CREATE Distal ROTATIONAL MOTION ! ! Alternate between even and odd pairs, so that legs are out of phase. ! if condition=(eval((mod(eval(temp_int),2)))==1) !! Leg is on an odd hip pair, (test using Modulo) constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp3)))) & type=rotational & time_derivative=displacement & function="akispl(time,0,distal_position_spline_phase1,0)" !! Phase 1 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp7)))) else !! Leg is on an even hip pair constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp3)))) & type=rotational & time_derivative=displacement & function="akispl(time,0,distal_position_spline_phase2,0)" !! Phase 2 constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp7)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp7)))) end ! ! ! ! ! ! ! -------------------------------- STARBOARD SIDE Revolute Joint ----------------------------------------------------- ! ! Create first marker. Make it a child of the BASALAR actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp4)) //".DISTAL_JOINT_MARKER_1")) & !! location=(LOC_RELATIVE_TO({(eval(actuator_radius))*2,0,0},(eval(tmp5 // ".distal_link_marker")) )) & !! rel. to Distal link marker !! orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp5 // ".distal_link_marker")) )) !! rel. to Distal link marker !! location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp5 // ".distal_link_marker")) )) & !! rel. to Distal link marker. !! orientation=(ORI_RELATIVE_TO({180d,90d,0d},(eval(tmp5 // ".distal_link_marker")) )) !! rel. to Distal Link Marker. location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp5 // ".distal_actuator_angle_marker")) )) & !! rel. to Dist. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp5 // ".distal_actuator_angle_marker")) )) !! rel. to Dist. Angle Marker [July 29, 2002] ! ! Create Second marker. Make it a child of the DISTAL actuator cylinder component. ! marker create marker=(eval(".scorpion_mcgill." // (eval(tmp5)) // ".DISTAL_JOINT_MARKER_2")) & !! location=(LOC_RELATIVE_TO({(eval(actuator_radius))*2,0,0},(eval(tmp5 // ".distal_link_marker")) )) & !! rel. to Distal link marker. !! orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp5 // ".distal_link_marker")) )) !! rel. to Distal link marker !! location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp5 // ".distal_link_marker")) )) & !! rel. to distal link marker. !! orientation=(ORI_RELATIVE_TO({180d,90d,0d},(eval(tmp5 // ".distal_link_marker")) )) !! rel. to distal link marker location=(LOC_RELATIVE_TO({0,0,0},(eval(tmp5 // ".distal_actuator_angle_marker")) )) & !! rel. to Dist. Angle Marker [July 29, 2002] orientation=(ORI_RELATIVE_TO({0d,0d,0d},(eval(tmp5 // ".distal_actuator_angle_marker")) )) !! rel. to Dist. Angle Marker [July 29, 2002] ! ! Describe the constraint ! constraint create joint Revolute & joint_name=(eval(".scorpion_mcgill." // (eval(tmp6)))) & i_marker_name=(eval(".scorpion_mcgill." // (eval(tmp4)) // ".DISTAL_JOINT_MARKER_1")) & j_marker_name=(eval(".scorpion_mcgill." // (eval(tmp5)) // ".DISTAL_JOINT_MARKER_2")) constraint attribute constraint_name=(eval(".scorpion_mcgill." // (eval(tmp6)))) name_vis=off scale_of_icons=0.5 ! ! Group Modify ! group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp6)))) ! ! ! ! CREATE Distal ROTATIONAL MOTION ! ! Alternate between even and odd pairs, so that legs are out of phase. ! if condition=(eval((mod(eval(temp_int),2)))==1) !! Leg is on an odd hip pair, (test using Modulo) constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp6)))) & type=rotational & time_derivative=displacement & function="-1*akispl(time,0,distal_position_spline_phase2,0)" !! Phase 2 (Opposite of Port leg) constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp8)))) else !! Leg is on an even hip pair constraint create motion motion_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) & joint=(eval(".scorpion_mcgill." // (eval(tmp6)))) & type=rotational & time_derivative=displacement & function="-1*akispl(time,0,distal_position_spline_phase1,0)" !! Phase 1 (Opposite of Starboard Leg) constraint attributes constraint_name=(eval(".scorpion_mcgill." // (eval(tmp8)))) name_vis=off group modify group=SELECT_LIST object=(eval(".scorpion_mcgill." // (eval(tmp8)))) end ! ! ! end ! end of the FOR loop !---delete temporary name string variables var del var=tmp1 var del var=tmp2 var del var=tmp3 var del var=tmp4 var del var=tmp5 var del var=tmp6 var del var=tmp7 var del var=tmp8 var del var=temp_int ! ! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ! Create variables, measures and functions for ! measuring and defining angles, angular velocity, ! torque, etc. ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ------------------------------------------------------------------------------- undo end