Edit on GitHub

Step 3: Leader and Follower Example

NOTE: It assumes that you have already installed and built the SDK.

Make cpp file

Check the Port Names

Source Code Description

#include "dynamixel_easy_sdk/dynamixel_easy_sdk.hpp"

int main(){

  dynamixel::Connector connector("/dev/ttyACM0", 57600);
  std::unique_ptr<dynamixel::Motor> leader_motor = connector.createMotor(1);
  std::unique_ptr<dynamixel::Motor> follower_motor = connector.createMotor(2);
  int min_position = leader_motor->getMinPositionLimit().value() + 100;
  int max_position = leader_motor->getMaxPositionLimit().value() - 100;

  leader_motor->disableTorque();
  follower_motor->disableTorque();
  follower_motor->setOperatingMode(dynamixel::Motor::OperatingMode::POSITION);
  follower_motor->enableTorque();

  while (true) {
    int present_position = leader_motor->getPresentPosition().value();
    std::cout << "Leader Motor Present Position: " << present_position << std::endl;

    if (present_position < min_position) {
      leader_motor->enableTorque();
      leader_motor->setGoalPosition(min_position);
      while(true){
        present_position = leader_motor->getPresentPosition().value();
        if(present_position >= min_position) break;
      }
      leader_motor->disableTorque();
    } else if (present_position > max_position) {
      leader_motor->enableTorque();
      leader_motor->setGoalPosition(max_position);
      while(true){
        present_position = leader_motor->getPresentPosition().value();
        if(present_position <= max_position) break;
      }
      leader_motor->disableTorque();
    }
    follower_motor->setGoalPosition(present_position);
  }
}

Add Header Files

Create Connector and Motor Object

Set Position Limits

Set Operating Mode to Position Control Mode

Leader and Follower Control Loop

Error Handling

Compile and Run