Group of 3 hexapod legs
Tripod.cpp
- Committer:
- el13cj
- Date:
- 2016-05-02
- Revision:
- 0:22d279b8c2f1
- Child:
- 1:c6ba788a29a1
File content as of revision 0:22d279b8c2f1:
#include "Tripod.h" Tripod::Tripod(PCA9685 Board, Hexapod_Leg Leg_1, Hexapod_Leg Leg_2, Hexapod_Leg Leg_3, int group) : leg_1(Leg_1), leg_2(Leg_2), leg_3(Leg_3), group_number(group), board(Board) { } void Tripod::gait_step(void) { switch(group_number) { case 1: leg_1.set_leg_position(leg_1_angles[next_state_1]); leg_2.set_leg_position(leg_5_angles[next_state_1]); leg_3.set_leg_position(leg_3_angles[next_state_1]); next_state_1++; if (next_state_1 > 5) { next_state_1 = 0; } break; case 2: leg_1.set_leg_position(leg_4_angles[next_state_2]); leg_2.set_leg_position(leg_2_angles[next_state_2]); leg_3.set_leg_position(leg_6_angles[next_state_2]); next_state_2++; if (next_state_2 > 5) { next_state_2 = 0; } break; default: break; } //i2c.stop(); board.update(); } void Tripod::sweep_step_group(void) { switch (group_number) { case 1: { float an_a_1 = (leg_1_angles[current_state_1].a + ((leg_1_angles[next_state_1].a - leg_1_angles[current_state_1].a) / NUM_STEPS) * i); float an_b_1 = (leg_1_angles[current_state_1].b + ((leg_1_angles[next_state_1].b - leg_1_angles[current_state_1].b) / NUM_STEPS) * i); float an_c_1 = (leg_1_angles[current_state_1].c + ((leg_1_angles[next_state_1].c - leg_1_angles[current_state_1].c) / NUM_STEPS) * i); float an_a_2 = (leg_5_angles[current_state_1].a + ((leg_5_angles[next_state_1].a - leg_5_angles[current_state_1].a) / NUM_STEPS) * i); float an_b_2 = (leg_5_angles[current_state_1].b + ((leg_5_angles[next_state_1].b - leg_5_angles[current_state_1].b) / NUM_STEPS) * i); float an_c_2 = (leg_5_angles[current_state_1].c + ((leg_5_angles[next_state_1].c - leg_5_angles[current_state_1].c) / NUM_STEPS) * i); float an_a_3 = (leg_3_angles[current_state_1].a + ((leg_3_angles[next_state_1].a - leg_3_angles[current_state_1].a) / NUM_STEPS) * i); float an_b_3 = (leg_3_angles[current_state_1].b + ((leg_3_angles[next_state_1].b - leg_3_angles[current_state_1].b) / NUM_STEPS) * i); float an_c_3 = (leg_3_angles[current_state_1].c + ((leg_3_angles[next_state_1].c - leg_3_angles[current_state_1].c) / NUM_STEPS) * i); leg_1.set_joint_angles(an_a_1, an_b_1, an_c_1); leg_2.set_joint_angles(an_a_2, an_b_2, an_c_2); leg_3.set_joint_angles(an_a_3, an_b_3, an_c_3); i++; if (i > NUM_STEPS) { group_ticker.detach(); i = 0; } current_state_1 = next_state_1; next_state_1++; if (next_state_1 > 5) { next_state_1 = 0; } } break; case 2: { float an_a_1 = (leg_4_angles[current_state_2].a + ((leg_4_angles[next_state_2].a - leg_4_angles[current_state_2].a) / NUM_STEPS) * i); float an_b_1 = (leg_4_angles[current_state_2].b + ((leg_4_angles[next_state_2].b - leg_4_angles[current_state_2].b) / NUM_STEPS) * i); float an_c_1 = (leg_4_angles[current_state_2].c + ((leg_4_angles[next_state_2].c - leg_4_angles[current_state_2].c) / NUM_STEPS) * i); float an_a_2 = (leg_2_angles[current_state_2].a + ((leg_2_angles[next_state_2].a - leg_2_angles[current_state_2].a) / NUM_STEPS) * i); float an_b_2 = (leg_2_angles[current_state_2].b + ((leg_2_angles[next_state_2].b - leg_2_angles[current_state_2].b) / NUM_STEPS) * i); float an_c_2 = (leg_2_angles[current_state_2].c + ((leg_2_angles[next_state_2].c - leg_2_angles[current_state_2].c) / NUM_STEPS) * i); float an_a_3 = (leg_6_angles[current_state_2].a + ((leg_6_angles[next_state_2].a - leg_6_angles[current_state_2].a) / NUM_STEPS) * i); float an_b_3 = (leg_6_angles[current_state_2].b + ((leg_6_angles[next_state_2].b - leg_6_angles[current_state_2].b) / NUM_STEPS) * i); float an_c_3 = (leg_6_angles[current_state_2].c + ((leg_6_angles[next_state_2].c - leg_6_angles[current_state_2].c) / NUM_STEPS) * i); leg_1.set_joint_angles(an_a_1, an_b_1, an_c_1); leg_2.set_joint_angles(an_a_2, an_b_2, an_c_2); leg_3.set_joint_angles(an_a_3, an_b_3, an_c_3); j++; if (j > NUM_STEPS) { group_ticker.detach(); j = 0; } current_state_2 = next_state_2; next_state_2++; if (next_state_2 > 5) { next_state_2 = 0; } } break; default: break; } board.update(); //i2c.stop(); } void Tripod::gait_smooth(void) { group_ticker.attach(this, &Tripod::sweep_step_group, 0.1); }