Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 11

#include <Dynamixel2Arduino.

h>

#define BOARD_BUTTON_PIN 23

#if defined(ARDUINO_OpenCM904) // When using official ROBOTIS board with DXL circuit.

#define DXL_SERIAL Serial3 //OpenCM9.04 EXP Board's DXL port Serial. (Serial1 for the DXL port on
the OpenCM 9.04 board)

#define DEBUG_SERIAL Serial

const uint8_t DXL_DIR_PIN = 22; //OpenCM9.04 EXP Board's DIR PIN. (28 for the DXL port on the
OpenCM 9.04 board)

#endif

//leg1

const uint8_t L1motor1 = 11;

const uint8_t L1motor2 = 12;

const uint8_t L1motor3 = 13;

const uint8_t L1motor4 = 14;

//leg2

const uint8_t L2motor1 = 21;

const uint8_t L2motor2 = 22;

const uint8_t L2motor3 = 23;

const uint8_t L2motor4 = 24;

//leg3

const uint8_t L3motor1 = 31;

const uint8_t L3motor2 = 32;

const uint8_t L3motor3 = 33;

const uint8_t L3motor4 = 34;

//leg4
const uint8_t L4motor1 = 41;

const uint8_t L4motor2 = 42;

const uint8_t L4motor3 = 43;

const uint8_t L4motor4 = 44;

Dynamixel2Arduino dxl(DXL_SERIAL, DXL_DIR_PIN);

//This namespace is required to use Control table item names

using namespace ControlTableItem;

void setup() {

pinMode(BOARD_BUTTON_PIN, INPUT_PULLDOWN);

DEBUG_SERIAL.begin(115200);

dxl.begin(1000000);

dxl.setPortProtocolVersion(2);

//////////////////////////////leg1

//moto1

dxl.ping(L1motor1);

dxl.torqueOff(L1motor1);

dxl.setOperatingMode(L1motor1, OP_POSITION);

dxl.torqueOn(L1motor1);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor2

dxl.ping(L1motor2);
dxl.torqueOff(L1motor2);

dxl.setOperatingMode(L1motor2, OP_POSITION);

dxl.torqueOn(L1motor2);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor3

dxl.ping(L1motor3);

dxl.torqueOff(L1motor3);

dxl.setOperatingMode(L1motor3, OP_POSITION);

dxl.torqueOn(L1motor3);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//wheelmotor4

dxl.ping(L1motor4);

dxl.torqueOff(L1motor4);

dxl.setOperatingMode(L1motor4, OP_VELOCITY);

dxl.torqueOn(L1motor4);

/////////////////////////////////

//////////////////leg2

//motor1

dxl.ping(L2motor1);

dxl.torqueOff(L2motor1);

dxl.setOperatingMode(L2motor1, OP_POSITION);

dxl.torqueOn(L2motor1);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);


//motor2

dxl.ping(L2motor2);

dxl.torqueOff(L2motor2);

dxl.setOperatingMode(L2motor2, OP_POSITION);

dxl.torqueOn(L2motor2);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor3

dxl.ping(L2motor3);

dxl.torqueOff(L2motor3);

dxl.setOperatingMode(L2motor3, OP_POSITION);

dxl.torqueOn(L2motor3);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//wheelmotor4

dxl.ping(L2motor4);

dxl.torqueOff(L2motor4);

dxl.setOperatingMode(L2motor4, OP_VELOCITY);

dxl.torqueOn(L2motor4);

///////////----------------------//////////////////////

//////////////////////////////leg3

//moto1

dxl.ping(L3motor1);

dxl.torqueOff(L3motor1);

dxl.setOperatingMode(L3motor1, OP_POSITION);

dxl.torqueOn(L3motor1);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed
//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor2

dxl.ping(L3motor2);

dxl.torqueOff(L3motor2);

dxl.setOperatingMode(L3motor2, OP_POSITION);

dxl.torqueOn(L3motor2);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor3

dxl.ping(L3motor3);

dxl.torqueOff(L3motor3);

dxl.setOperatingMode(L3motor3, OP_POSITION);

dxl.torqueOn(L3motor3);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//wheelmotor4

dxl.ping(L3motor4);

dxl.torqueOff(L3motor4);

dxl.setOperatingMode(L3motor4, OP_VELOCITY);

dxl.torqueOn(L3motor4);

/////////////////////////////////

//////////////////leg4

//motor1

dxl.ping(L4motor1);

dxl.torqueOff(L4motor1);

dxl.setOperatingMode(L4motor1, OP_POSITION);
dxl.torqueOn(L4motor1);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor2

dxl.ping(L4motor2);

dxl.torqueOff(L4motor2);

dxl.setOperatingMode(L4motor2, OP_POSITION);

dxl.torqueOn(L4motor2);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//motor3

dxl.ping(L4motor3);

dxl.torqueOff(L4motor3);

dxl.setOperatingMode(L4motor3, OP_POSITION);

dxl.torqueOn(L4motor3);

// Limit the maximum velocity in Position Control Mode. Use 0 for Max speed

//dxl.writeControlTableItem(PROFILE_VELOCITY, DXL_ID, 30);

//wheelmotor4

dxl.ping(L4motor4);

dxl.torqueOff(L4motor4);

dxl.setOperatingMode(L4motor4, OP_VELOCITY);

dxl.torqueOn(L4motor4);

///////////////to run code for once.

stand();

delay(2000);

//walk();
//wheel();

///////////////////////////////end of config

void stand(){

dxl.setGoalPosition(L1motor1, 137, UNIT_DEGREE);

dxl.setGoalPosition(L1motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L1motor3, 180, UNIT_DEGREE);

//

dxl.setGoalPosition(L2motor1, 137, UNIT_DEGREE);

dxl.setGoalPosition(L2motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L2motor3, 180, UNIT_DEGREE);

//

dxl.setGoalPosition(L3motor1, 137, UNIT_DEGREE);

dxl.setGoalPosition(L3motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L3motor3, 180, UNIT_DEGREE);

//

dxl.setGoalPosition(L4motor1, 137, UNIT_DEGREE);

dxl.setGoalPosition(L4motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L4motor3, 180, UNIT_DEGREE);

/*

* //delay(400);

DEBUG_SERIAL.print("Present Position(degree) : ");

DEBUG_SERIAL.println(dxl.getPresentPosition(L1motor1));

DEBUG_SERIAL.println(dxl.getPresentPosition(L4motor1));

*/

}
void wheel(){

dxl.setGoalVelocity(L1motor4, 250);

dxl.setGoalVelocity(L2motor4, 250);

dxl.setGoalVelocity(L3motor4, 250);

dxl.setGoalVelocity(L4motor4, 250);

void counterLeft(){

dxl.setGoalVelocity(L1motor4, -60, UNIT_RPM);

dxl.setGoalVelocity(L2motor4, 60, UNIT_RPM);

dxl.setGoalVelocity(L3motor4, 60, UNIT_RPM);

dxl.setGoalVelocity(L4motor4, -60, UNIT_RPM);

void counterRight(){

dxl.setGoalVelocity(L1motor4, 60, UNIT_RPM);

dxl.setGoalVelocity(L2motor4, -60, UNIT_RPM);

dxl.setGoalVelocity(L3motor4, -60, UNIT_RPM);

dxl.setGoalVelocity(L4motor4, 60, UNIT_RPM);

void stay(){

dxl.setGoalPosition(L1motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L2motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L3motor2, 180, UNIT_DEGREE);

dxl.setGoalPosition(L4motor2, 180, UNIT_DEGREE);

void walk(){

//leg1

dxl.setGoalPosition(L1motor1, 198, UNIT_DEGREE);


dxl.setGoalPosition(L1motor2, 238, UNIT_DEGREE);

//leg3

dxl.setGoalPosition(L3motor1, 130, UNIT_DEGREE);

dxl.setGoalPosition(L3motor2, 198, UNIT_DEGREE);

//leg2

dxl.setGoalPosition(L2motor1, 130, UNIT_DEGREE);

dxl.setGoalPosition(L2motor2, 198, UNIT_DEGREE);

//leg4

dxl.setGoalPosition(L4motor1, 198, UNIT_DEGREE);

dxl.setGoalPosition(L4motor2, 238, UNIT_DEGREE);

delay(600);

//leg1

dxl.setGoalPosition(L1motor1, 128, UNIT_DEGREE);

dxl.setGoalPosition(L1motor2, 198, UNIT_DEGREE);

//leg3

dxl.setGoalPosition(L3motor1, 198, UNIT_DEGREE);

dxl.setGoalPosition(L3motor2, 240, UNIT_DEGREE);

//leg2

dxl.setGoalPosition(L2motor1, 198, UNIT_DEGREE);

dxl.setGoalPosition(L2motor2, 240, UNIT_DEGREE);

//leg4

dxl.setGoalPosition(L4motor1, 130, UNIT_DEGREE);

dxl.setGoalPosition(L4motor2, 178, UNIT_DEGREE);

delay(600);

void pace(){

dxl.setGoalPosition(L1motor1, 137, UNIT_DEGREE);

int initial_present_position = 0;
int final_present_position = 180;

while (abs(180 - initial_present_position) > 90)

final_present_position = dxl.getPresentPosition(L1motor1, UNIT_DEGREE);

initial_present_position = dxl.getPresentPosition(L1motor2, UNIT_DEGREE);

delay(800);

dxl.setGoalPosition(L1motor1,220, UNIT_DEGREE);

while (abs(140 - final_present_position) > 90)

final_present_position = dxl.getPresentPosition(L1motor1, UNIT_DEGREE);

initial_present_position = dxl.getPresentPosition(L1motor2);

delay(800);

void amble(){

dxl.setGoalPosition(L2motor1, 135, UNIT_DEGREE);///1

dxl.setGoalPosition(L3motor1, 135, UNIT_DEGREE);///4

dxl.setGoalPosition(L2motor2, 235, UNIT_DEGREE);///knee

dxl.setGoalPosition(L3motor2, 235, UNIT_DEGREE);///kne

delay(100);

dxl.setGoalPosition(L1motor1, 135, UNIT_DEGREE);///1

dxl.setGoalPosition(L4motor1, 135, UNIT_DEGREE);///4

dxl.setGoalPosition(L1motor2, 170, UNIT_DEGREE);///

dxl.setGoalPosition(L4motor2, 170, UNIT_DEGREE);///knee

delay(900);

dxl.setGoalPosition(L2motor2, 170, UNIT_DEGREE);///knee


dxl.setGoalPosition(L3motor2, 170, UNIT_DEGREE);///kne

dxl.setGoalPosition(L1motor2, 235, UNIT_DEGREE);///

dxl.setGoalPosition(L4motor2, 235, UNIT_DEGREE);///knee

delay(900);

void loop(){

walk();

//amble();

//wheel;

You might also like