산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

PID 제어 라인 팔로워 로봇

구성품 및 소모품

KittenBot 양극 산화 알루미늄 섀시
× 1
KittenBot RosBot 베이스보드
× 1
KittenBot 직경 볼 캐스터(금속 볼 포함)(쌍)
× 1
KittenBot 고무 바퀴와 모터 허브 세트(쌍)
× 1
KittenBot 5채널 IR 라인 추종 추적기 센서
× 1
DC 모터(일반)
× 1
9V 배터리(일반)
× 1
Arduino UNO
× 1

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

개요

대부분의 로버 자율 로봇에 필요한 기능 중 하나는 라인 따라가기입니다. 이 프로젝트의 목적은 라인 팔로워 로봇을 만들고 PID 컨트롤러를 재미있게 배우기 시작하는 것입니다.

부품

로봇은 2개의 모터, Rosbot Baseboard 및 5-Channel 센서로 제대로 작동합니다. Rosbot Baseboard에는 2x H-bridge 듀얼 드라이버가 내장되어 있기 때문에 다른 것과 달리 추가 H-bridge 모터 드라이버 또는 다양한 구성 요소를 구입할 필요가 없습니다. 모터를 Rosbot 베이스보드에 연결하기만 하면 Arduino Uno보다 더 많은 전력을 공급할 수 있습니다.

<울>
  • 로봇의 프레임: KittenBot 양극 산화 알루미늄 섀시
  • 수많은 장착 구멍(4.8mm LEGO Technic)이 있는 멋지고 견고한 섀시는 다른 재미있는 프로젝트에 이 섀시를 재사용할 수 있습니다.

    <울>
  • 로봇의 두뇌 :RosBot 베이스보드
  • 2개의 온보드 듀얼 H 브리지 모터 드라이버가 있는 Arduino UNO 기반 메인보드.

    <울>
  • 로봇의 눈 :5채널 IR 라인 추종 추적기 센서
  • 5-채널 적외선 감지기, 더 정확하고 안정적입니다.

    1단계:조립

    이 로봇은 조립이 매우 쉽고 지침을 따르면 약 15분이 소요됩니다.

    먼저 모터를 섀시 측면에 부착하고 고무 바퀴를 연결하기만 하면 됩니다.

    섀시 전면에 5채널 IR 센서를 장착합니다.

    Rosbot 베이스보드를 섀시에 부착하면 로봇이 배선될 준비가 된 것입니다.

    2단계:비틀기

    다음은 5-채널 IR 센서에 대한 연결입니다.

    <울>
  • VCC ~ 5V
  • <울>
  • GND에서 RosBot의 GND로
  • <울>
  • T1-T4를 핀 A0-A3에 연결
  • <울>
  • SDA를 고정하는 T5
  • DC 모터는 간단히 A+A- 핀과 B+B- 핀으로 이동합니다.

    코딩

    코드에는 가능한 각 센서 어레이 출력을 나타내는 상태 머신이 있습니다. 로봇은 센서 어레이 출력에 따라 특정 방향으로 이동합니다.

    void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; 부서지다; 사례 B11111:outlineCnt++; 부서지다; 사례 B00010:사례 B00110:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(0, 50, 0)); 편향 =1; 부서지다; 사례 B00001:사례 B00011:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(0, 200, 0)); 편향 =2; 부서지다; 사례 B00100:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(0, 0, 20)); 편향 =0; 부서지다; 사례 B01000:사례 B01100:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(50, 0, 0)); 바이어스 =-1; 부서지다; 케이스 B10000:케이스 B11000:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(200, 0, 0)); 바이어스 =-2; 부서지다; 기본값:Serial.println(a,BIN); 개요Cnt++; 부서지다; } 

    우리는 이미 오차, 비례항, 적분항, 미분항의 값을 설정했습니다.

    float Kp =25;float Ki =0.15;float Kd =1200;float error, errorLast, erroInte;float calcPid(float 입력) { float errorDiff; 플로트 출력; 오류 =오류 * 0.7 + 입력 * 0.3; // 필터 //오류 =입력; errorDiff =오류 - errorLast; erroInte =제약(erroInte + 오류, -50, 50); 출력 =Kp * 오류 + Ki * erroInte + Kd * errorDiff; Serial.print(오류); Serial.print(' '); Serial.print(erroInte); Serial.print(' '); Serial.print(errorDiff); Serial.print(' '); Serial.println(출력); errorLast =오류; 반환 출력; 

    값을 조작하여 로봇에 가장 적합한 것을 찾으십시오.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 라인 팔로워 로봇
  • 라인 팔로워 로봇Arduino
    코드에는 Adafruit의 NeoPixel이 포함되지만 이는 선택 사항입니다.
    #include #define S_NULL 0#define S_ONTRACE 1Adafruit_NeoPixel 픽셀 =Adafruit_NeoPixel(4, 4, NEO_GRB + NEO_KHvoid doDcSpe); spdL, int spdR) { spdR =-spdR; if (spdL <0) { analogWrite(5, 0); analogWrite(6, -spdL); } else { analogWrite(5, spdL); 아날로그 쓰기(6, 0); } if (spdR <0) { analogWrite(9, 0); analogWrite(10, -spdR); } else { analogWrite(9, spdR); 아날로그 쓰기(10, 0); }}int bias =0;int outlineCnt =0;void stateMachine(int a) { switch (a) { case B00000:outlineCnt++; 부서지다; 사례 B11111:outlineCnt++; 부서지다; 사례 B00010:사례 B00110:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(0, 50, 0)); 편향 =1; 부서지다; 사례 B00001:사례 B00011:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(0, 200, 0)); 편향 =2; 부서지다; 사례 B00100:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(0, 0, 20)); 편향 =0; 부서지다; 사례 B01000:사례 B01100:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(50, 0, 0)); 바이어스 =-1; 부서지다; 케이스 B10000:케이스 B11000:outlineCnt =0; 픽셀.setPixelColor(2, 픽셀.색상(200, 0, 0)); 바이어스 =-2; 부서지다; 기본값:Serial.println(a,BIN); 개요Cnt++; 부서지다; } 픽셀.setPixelColor(0, 픽셀.색상(outlineCnt * 10, 0, 0)); if (outlineCnt> 10) { doDcSpeed(0,0); } else { float ff =150; float ctrl =calcPid(편향); doDcSpeed(ff-ctrl,ff+ctrl); }pixels.show();}float Kp =25;float Ki =0.15;float Kd =1200;float 오류, errorLast, erroInte;float calcPid(float 입력) { float errorDiff; 플로트 출력; 오류 =오류 * 0.7 + 입력 * 0.3; // 필터 //오류 =입력; errorDiff =오류 - errorLast; erroInte =제약(erroInte + 오류, -50, 50); 출력 =Kp * 오류 + Ki * erroInte + Kd * errorDiff; Serial.print(오류); Serial.print(' '); Serial.print(erroInte); Serial.print(' '); Serial.print(errorDiff); Serial.print(' '); Serial.println(출력); errorLast =오류; 반환 출력;}int echoTrace() { int ret =0; 정수 a[5]; for (int i =0; i <5; i++) { a[i] =constrain((1025 - analogRead(A0 + i)) / 10 - 4, 0, 20); if (a[i]> 2) ret +=(0x1 < 
    LinefollowRobot
    https://github.com/KittenBot/LinefollowRobot

    회로도


    제조공정

    1. 로봇 공학의 미래
    2. 농구
    3. 골프 공
    4. 자습서 – sPiRobot :로봇이 어디에서나 무엇을 보고 있는지 제어 및 확인
    5. 자동화:재설계된 로봇 라인
    6. SCARA 로봇 라인 확장
    7. 라인 로봇 조립:확실한 가이드
    8. 자재 공급을 위한 산업용 라인 팔로워
    9. Matlab / Simulink에서 로봇 그리퍼의 PID 제어
    10. 자동화된 포장 라인 품질 관리