Robots2017.10.09 23:22

Arduino IDE에 햄스터로봇을 추가하고, Hamster 라이브러리를 이용하여 로봇을 제어 할 수 있다. 아래 예제를 Arduino 스케치로 작성하고 실행하며, 햄스터로봇이 손바닥과의 일정 거리를 유지하면서 움직이는것을 볼 수 있다. 
Hamster 라이브러리는 기존의 hamster의 api를 포팅하였음으로 기존의 예제들을 대부분 사용 할 수 있다. 


hamster 라이브러리에서 구현된 함수는 아래와 같다. 모든 api 함수가 포팅된것은 아님으로 주의가 필요하다. 

// API
//
void wheels(double leftSpeed, double rightSpeed);
void leftWheels(double speed);
void rightWheels(double speed);
void stop(void);
void leds(int leftColor, int rightColor);
void leftLed(int color);
void rightLed(int color);
void beep();
void buzzer(double hz);
int leftFloor(void);
int rightFloor(void);
int leftProximity(void);
int rightProximity(void);
int accelerationX(void);
int accelerationY(void);
int accelerationZ(void);
int light(void);
int temperature(void);

 




주의할 점은 hamster.begin 함수의 파라메터로 햄스터 로봇 제어를 위한 USB 동글의 시리얼포트를 입력해 주어야한다. 시리얼 포트 번호를 연결되는 PC마다 다를 수 있기때문에 확인 후에 해당 번호로 입력한다.


#include <hamster.h>


Hamster hamster;



void setup() {

  // put your setup code here, to run once:

  hamster.begin("COM16");

}


void loop() {

  int left;

  int right;

  int length;

  int error;

  int error_handle;

  int motor_speed = 0;

  int l_speed = 0;

  int r_speed = 0;

  int speed_control_out;

  int handle_control_out;

  int error_margin = 3;


  

  left  = hamster.leftProximity();

  right = hamster.rightProximity(); 

  length = left+right / 2;


  error = 60 - length;

  speed_control_out = error / 1;

  if (speed_control_out < error_margin && speed_control_out > -error_margin)

  {

    speed_control_out = 0;

  }

  

  error_handle = (left - right);

  handle_control_out = error_handle / 1;

  if (handle_control_out < error_margin && handle_control_out > -error_margin)

  {

    handle_control_out = 0;

  }

  

  l_speed = speed_control_out - handle_control_out;

  r_speed = speed_control_out + handle_control_out;


  l_speed = constrain(l_speed, -100, 100);

  r_speed = constrain(r_speed, -100, 100);


  if (length == 0)

  {

    l_speed = 0;

    r_speed = 0;

  }

  Serial.print(length);

  Serial.print(" ");  

  Serial.print(error);

  Serial.print(" ");

  Serial.print(speed_control_out);

  Serial.print(" ");

  Serial.print(handle_control_out);

  Serial.print(" ");

  Serial.print(motor_speed);

  Serial.println("");


  hamster.wheels(l_speed, r_speed);

  delay(20);








'Robots' 카테고리의 다른 글

[햄스터로봇] 손따라가기 예제  (0) 2017.10.09
[햄스터로봇] Arduino 하드웨어 설치  (0) 2017.10.09
외골격 로봇  (0) 2017.07.06
Posted by chcbaram