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

인공 지능을 사용한 장애물 회피

구성품 및 소모품

SparkFun Arduino Pro Mini 328 - 5V/16MHz
× 1
초음파 센서 - HC-SR04(일반)
× 1
SparkFun 듀얼 H-Bridge 모터 드라이버 L298
× 1
DC 모터(일반)
60RPM DC 모터
× 2
바퀴
× 4
점퍼 와이어(일반)
× 1
SparkFun 납땜 가능 브레드보드 - 미니
× 1
충전식 배터리, 리튬 이온
7.2볼트 리튬 이온 배터리
× 1
9V 배터리(일반)
× 1
9V 배터리 클립
× 1
PCBWay 맞춤형 PCB
× 1
C&K 스위치 JS 시리즈 스위치
× 1

필요한 도구 및 기계

납땜 인두(일반)
납땜 와이어, 무연
납땜 플럭스, 납땜
납땜 제거 펌프, 디럭스 SOLDAPULLT®
와이어 스트리퍼 및 절단기, 18-10 AWG / 0.75-4mm² 용량 전선
뜨거운 글루건(일반)
테이프, 양면

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

AI/강화 학습을 사용한 장애물 회피 로봇

문제 설명: 주요 목표는 "N" 에피소드에서 장애물을 피하고 최적의 행동을 배우는 것입니다. 이 경우 로봇이 최적의 행동을 '오른쪽'으로 학습해야 한다고 가정해 보겠습니다.

사용된 강화 알고리즘: Q 학습

L298N이 2개의 DC 모터를 구동하는 방법:

HC-SR04 센서가 거리를 계산하는 방법:

강화 학습의 중요 용어:

1. 상태: 이것이 로봇이 처한 상황입니다. 여기에서 기본적인 장애물회피로봇의 상태는 총 2가지가 있는데 ……1차 상태는 장애물이 없는 상태이고 2차 상태는 앞에 장애물이 있는 상태입니다. 동일한 동작이 예상되는 상태일 수 있습니다. 더 복잡한 환경을 설명하기 위해 이렇게 한 이유입니다.)

2. 조치: 특정 상태에서 로봇은 특정 작업을 수행합니다. 로봇이 두 번째 상태에서 수행할 수 있는 작업은 4가지가 있습니다. “앞으로”, “뒤로”, “왼쪽”, “중지” 첫 번째 상태에서 로봇은 4가지 작업을 수행할 수 있지만 작업을 더 쉽게 하기 위해 로봇은 "앞으로"() 한 가지 작업만 수행할 수 있다고 가정했습니다. 이는 LEFT와 같은 작업을 고려하는 것이 절름발이이기 때문입니다. 또는 뒤로 근처에 장애물이 없을 때.

int ACTIONS =[0,1,2,3]

/* 여기 :
0 =앞으로
1 =뒤로
2 =중지
3 =오른쪽*/

3. 다음 상태: 이것은 로봇이 특정 “ACTION”을 수행할 때 들어가는 상태입니다. 현재 'STATE'. 로봇 케이스를 피하는 장애물에서 NEXT STATE '크래시'일 수 있습니다. 상태 또는 '생존' 상태. (여기서 SURVIVE 상태는 로봇이 에피소드가 시작될 때의 시작 상태와 같습니다.)

/*행동을 수행한 후 로봇은 이 장애물의 경우 다음 상태로 이동합니다. 
로봇을 피합니다*/

int NEXT_STATE;
int STATE =0;
NEXT_STATE =상태+1;

4. Q 테이블 / Q 매트릭스: 이 테이블은 "STATES"의 수와 "ACTIONS"의 수로 구성됩니다. 장애물 회피 로봇의 경우 이 표는 다음과 같습니다.

float Q[N_STATES][NUMBER_OF_ACTIONS] ={{0.0,0.0,0.0,0.0}, 
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0 ,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0},
{0.0,0.0,0.0,0.0 }};

여기서 N_STATES =10 AND N_ACTIONS =4. 여기에서 "0.0"은 4가지 가능한 작업 중 하나에서 모든 작업을 수행할 수 있음을 나타냅니다. 그러나 미립자를 제거하려면 상태의 작업은 매트릭스에서 "0.0"을 "-1.0"으로 대체합니다. "-1.0"은 해당 상태에서 작업을 수행할 수 없음을 나타냅니다. 여기에서는 각 상태가 동일한 작업을 기대하는 10개의 다른 상태가 있다고 가정합니다. 로봇이 각 상태에서 다른 동작을 학습하도록 하려면 코드의 보상 매트릭스에서 보상을 변경하세요.

5. 터미널 상태: 이것은 로봇이 있을 수 있는 마지막 상태입니다. 장애물 회피 로봇의 경우 이 상태는 존재하지 않습니다. 왜냐하면 우리는 최종 상태가 없고 로봇 학습을 영원히 유지하기를 원하기 때문입니다.

6. 보상 매트릭스: 이 테이블 또는 매트릭스는 특정 행동에 대해 로봇에게 보상을 제공하는 데 사용됩니다. 보상은 행동의 질에 따라 양수 또는 음수입니다.

int REWARDS[STATES][NUMBER_OF_ACTIONS] ={{-10,-2,-1,10}, 
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10},
{-10,-2,-1,10}};

7. 환경: 이것은 또한 로봇의 세계로 가정되거나 고려될 수 있습니다. 예를 들어, 우리 인간은 지구에 살고 있으므로 기본적으로 지구는 우리의 환경입니다.

강화 학습의 초매개변수:

1. 학습률(알파): 학습률 또는 단계 크기는 새로 획득한 정보가 이전 정보보다 어느 정도 우선하는지를 결정합니다. 계수 0은 에이전트가 아무것도 배우지 않게 하고(이전 지식만 활용), 계수 1은 에이전트가 가장 최근의 정보만 고려하게 합니다(가능성을 탐색하기 위해 사전 지식 무시). 완전 결정적 환경에서는 ALPHA =1.0의 학습률이 최적입니다. 문제가 확률적일 때 알고리즘은 학습률이 0으로 감소해야 하는 일부 기술 조건에서 수렴됩니다. 실제로 모든 시나리오에 대해 ALPHA =0.1과 같이 일정한 학습률이 사용되는 경우가 많습니다.

float ALPHA =0.2; 

2. 할인 요인(감마): 0의 할인 계수는 미래 보상의 중요성을 결정합니다. 요소가 0이면 현재 보상만을 고려하여 에이전트를 "근시"(근시)로 만들고 요소가 1에 접근하면 장기적으로 높은 보상을 얻으려고 노력합니다. 할인 요인이 1을 충족하거나 초과하면 조치 값이 다를 수 있습니다. GAMMA =1.0의 경우 터미널 상태가 없거나 에이전트가 절대 상태에 도달하지 않으면 모든 환경 기록이 무한히 길어지고 추가적 할인되지 않은 보상이 있는 유틸리티는 일반적으로 무한대가 됩니다. 할인율이 1보다 약간 낮은 경우에도 Q 함수 학습은 가치 함수를 인공 신경망으로 근사할 때 오류와 불안정의 전파로 이어집니다. 이 경우 더 낮은 할인 요소에서 시작하여 최종 값을 향해 증가시키면 학습이 가속화됩니다.

부동 감마 =0.9; 

3. 탐사율(엡실론): 이 매개변수는 로봇이 환경을 탐색해야 하는 정도를 결정합니다. 환경을 탐색한다는 것은 임의의 행동을 하고 그 결과를 Q Values를 통해 분석하는 것을 의미합니다. 일반적으로 Q Learning(SARSA와 달리)에서는 Robot이 점점 더 많이 학습함에 따라 결국 이 매개변수를 제거합니다. 그러나 이 프로젝트에서는 터미널 상태가 없기 때문에 Epsilon을 제거하지 않습니다. 이 경우 엡실론은 어느 정도 감소한 다음 임계값 아래로 내려가면 다시 재설정됩니다. 이렇게 하면 로봇이 우리 인간처럼 평생 탐험을 계속할 수 있습니다.

부동 EPSILON =0.75; 

Q-학습 알고리즘:

<울>
  • Q-값 테이블 초기화, Q(s, a) . 이 값을 0.0으로 초기화했습니다.
  • 현재 상태 관찰, s .
  • 작업을 선택합니다. a , 이전 페이지(📷-soft, 📷-greedy 또는 softmax)에 설명된 작업 선택 정책 중 하나를 기반으로 한 해당 상태입니다.
  • <사전><코드>//////////////////////////Epsilon 탐욕 정책/////////////// ///////////////

    PROB =RANDOM(EPSILON);
    if (PROB<=EPSILON) //동작 탐색
    {
    ACTION =random(0,4);
    FLAG =2;
    }
    else //Q 테이블에서 작업 활용
    {
    ACTION =ARGMAX(Q, 상태);
    플래그 =2;
    } <울>
  • 조치를 취하고 보상을 관찰하십시오. r , 새 상태 s' .
  • 관찰된 보상과 다음 상태에 대해 가능한 최대 보상을 사용하여 상태에 대한 Q-값을 업데이트합니다. 업데이트는 위에서 설명한 공식과 매개변수에 따라 수행됩니다.
  • 상태를 새 상태로 설정하고 최종 상태에 도달할 때까지 프로세스를 반복합니다.
  • Q-러닝을 이해하려면 다음 링크를 방문하는 것이 좋습니다. https://towardsdatascience.com/a-beginners-guide-to-q-learning-c3e2a30a653c
  • //////////////////Q_Learning Formula 구현///////////////////// ////

    Q_OLD =Q_TABLE[S][A];
    Q_MAX =MAX(Q_TABLE, NEXT_S);
    Q_NEW =(1-LEARNING_RATE)*Q_OLD + LEARNING_RATE*(R + DISCOUNT_FACTOR*Q_MAX);
    Serial.print("Q 값:");
    Serial.println(Q_NEW);
    Q_TABLE[S][A] =Q_NEW;

    작업 영상:AI 로봇의 작업 영상도 잊지 말고 확인하세요 :)


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

    코드

    <울>
  • Q-LEARNING을 사용한 장애물 회피 로봇
  • Q-LEARNING을 사용한 장애물 회피 로봇C/C++
    이것은 인공 지능 기반 장애물 회피 로봇의 메인 코드입니다.
    /* 이것은 강화 학습/AI를 사용한 장애물 회피 로봇입니다. 이 프로젝트의 저자 :이 프로젝트에 사용된 Varun Walimbe 알고리즘:Q learning장애물 회피는 어떻게 작동합니까?1.Ultrasonic 센서는 에코 및 트리거 핀을 사용하여 장애물로부터의 거리를 측정하는 데 사용됩니다.2. 거리가 측정될 때 거리가 20cm 미만이면 근처에 장애물이 있고 그렇지 않으면 로봇이 안전하고 앞으로 계속 진행합니다.3. 장애물이 감지되면 로봇이 이동합니다. 상황에 따라 좌회전 또는 우회전.AI 기반 장애물 회피는 어떻게 작동합니까?(Q learning)1.여기서 위 기사의 1단계는 그대로입니다.그러나 2단계는 다릅니다.2.로봇의 동작 목록은 다음과 같습니다. 먼저 초기화했습니다. 예를 들어 이 경우 로봇의 동작은 다음과 같습니다. 왼쪽, 앞으로, 뒤로, 정지.3. 로봇이 장애물에 가까워지면 동작을 수행해야 합니다. 그러나 이 경우 로봇은 미리 프로그래밍되지 않았기 때문에 어떤 조치를 취해야 할지 모르고 장애물을 피하기 위해 스스로 학습하게 됩니다. 4. 로봇 앞에 장애물이 있을 때 로봇이 멈추면 다음과 같이 보상을 받습니다. 0 로봇이 정지하고 후진하면 -5 보상을 받습니다. 로봇이 장애물을 무시하고 계속 전진하면 -10 보상을 받습니다. 로봇이 장애물이 감지되자마자 왼쪽으로 이동하면 +105 보상을 얻습니다. 이런 식으로 로봇 보상 메커니즘에 의해 장애물을 피하기 위해 스스로 학습합니다.*//////////로봇의 하드웨어 매개변수////////////////////int TRIG_PIN =7;int ECHO_PIN =8;int duration;float distance;int M1 =13;int M2 =12;int M3 =11;int M4 =10;bool 장애물 =false;int FLAG;////////// ///////////////끝////////////////////////////////// ////////////////////////////////Q 학습 매개변수/////////////// ////////////////////////////플로트 알파 =0.1; //학습률float GAMMA =0.5; //DISCOUNT FACTORfloat EPSILON =0.90; //탐색 매개변수int REWARD; //행동 수행에 대한 보상int 에피소드 =100;int STATE; // ROBOTint 작업의 현재 상태 =0; //로봇(0:FORWARD,1:BACKWARD ,2;STOP,3:LEFT)이 수행한 작업 float PROB; // EPSILON DECAY에 사용됨 bool ACTION_TAKEN =false; //이 변수는 조치가 취해졌는지 여부를 알려줍니다. NEXT_STATE; // 로봇의 다음 상태 const int STATES =10; //환경의 상태 수 int ACTIONS[4] ={1,2,3,4};const int NUMBER_OF_ACTIONS =4; //총 4가지 전진, 후진, 좌회전, 정지/*이것은 Q 매트릭스 또는 Q 테이블입니다. 이것은 기본적으로 로봇이 행동을 수행하기 전에 살펴볼 일기입니다. 행동에 따라 로봇은 보상을 받고 Q 값은 이 Q 테이블에서 업데이트됩니다. 여기에서 10개 주를 고려했습니다. 나는 모든 상태가 동일하다고 가정했지만 기본적으로 장애물 회피 로봇에는 두 가지 상태만 포함됩니다. 10개의 다른 상태에서 동일한/다른 작업을 기대합니다.*/float Q[STATES][NUMBER_OF_ACTIONS] ={{0.0,0.0,0.0,0.0}, //모든 것 중 가장 중요한 것은 Q 테이블입니다. {0.0,0.0,0.0,0.0}, //그것은 행 {0.0,0.0,0.0,0.0}으로 상태에 의해 형성되고, //행동 수 {0.0,0.0,0.0,0.0}, / /INITIALIZED TO ZERO IN THE START {0.0,0.0,0.0,0.0}, // 이것은 향후 업데이트될 것입니다. {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}, {0.0,0.0,0.0,0.0}};/*이것은 보상 매트릭스 또는 보상 테이블입니다. 이것은 특정 행동을 수행한 로봇에게 보상을 제공할 책임이 있습니다. 그것은 상태에서 취한 각 행동에 대한 보상을 저장합니다. 수행한 작업이 양호하면 보상이 양수이고 작업이 나쁜 결과를 초래하면 음수입니다.*/int REWARDS[STATES][NUMBER_OF_ACTIONS] ={{-10,-2,-1,10}, {-10,-2 ,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {-10, -2,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {-10,-2,-1,10}, {- 10,-2,-1,10}}; ////////////////////////////////////////////끝///// ////////////////////////////////////////////////////// ////////////Q 학습 업데이트 매개변수///////////float Q_OLD;float Q_NEW;float Q_MAX;////////////// //////////////END////////////////////////// 무효 setup() { Serial.begin(9600 ); 핀모드(TRIG_PIN, 출력); 핀모드(ECHO_PIN,INPUT); 핀모드(M1, 출력); 핀모드(M2, 출력); 핀모드(M3, 출력); 핀모드(M4, 출력); randomSeed(analogRead(A0)); 상태 =0; Serial.println("5초 후에 교육이 시작됩니다:"); 지연(5000);} /////////////////////////////로봇의 기능/////////////// ///////////////////포워드 포워드(){ digitalWrite(M1,LOW); 디지털 쓰기(M2,HIGH); 디지털 쓰기(M3,LOW); 디지털 쓰기(M4, 높음); } 무효 Backward(){ digitalWrite(M1, HIGH); 디지털 쓰기(M2,LOW); 디지털 쓰기(M3,HIGH); digitalWrite(M4,LOW);} 무효 Left(){ digitalWrite(M1,HIGH); 디지털 쓰기(M2,LOW); 디지털 쓰기(M3,LOW); digitalWrite(M4,HIGH);}오른쪽 무효(){ digitalWrite(M1,LOW); 디지털 쓰기(M2,HIGH); 디지털 쓰기(M3,HIGH); digitalWrite(M4,LOW);} 무효 Stop(){ digitalWrite(M1,LOW); 디지털 쓰기(M2,LOW); 디지털 쓰기(M3,LOW); digitalWrite(M4,LOW);}bool Obstacle_Avoider(){ digitalWrite(TRIG_PIN, HIGH); 지연마이크로초(10); 디지털 쓰기(TRIG_PIN, LOW); 지속 시간 =pulseIn(ECHO_PIN ,HIGH); 거리 =(지속시간/2)/29.1; if(distance<15) { 장애물 =true; } if(거리>15) { 장애물 =거짓; } 지연(10); 장애물 반환;}//////////////////////////////////////////////END/ ////////////////////////////////////////////////////// ////////////////////////////로봇의 Q 학습 기능/////////////////// //////////////////float RANDOM(float EXPLORATION_PARAMETER){ /*이 함수는 수행할 작업이 무작위인지 또는 Q_TABLE에서인지 여부를 결정하는 무작위 번호를 찾습니다.*/ float RANDOM_VARIABLE; 플로트 확률; RANDOM_VARIABLE =임의(0,100); 확률 =RANDOM_VARIABLE/100; return PROBABILITY;}float DECAY(float PARAMETER){ /*이 함수는 시간에 따라 엡실론(탐색 매개변수)을 줄이는 데 사용됩니다. 마지막에는 엡실론을 타고 로봇이 자체적으로 장애물을 피하는 법을 배웁니다 =*/ 매개변수 *0.98; // PARAMETER는 EPSILON입니다. return PARAMETER;}int GET_STATE(){ int STATE_NUMBER; STATE_NUMBER =임의(0,10); return STATE_NUMBER;}float MAX(float Q_Table[][4],int NEXT_S){ /*이 함수는 Q_TABLE[NEXT_STATE]에서 가장 큰 숫자를 찾습니다. 이 함수의 주요 역할은 Q_MAX PARAMETER*/ float LIST[4]를 찾는 것입니다. 플로트 N1; 플로트 N2; 부동 MAX_VALUE=0.0; 부동 소수점; for(int b =0; b<=3; b++) { LIST[b] =Q[NEXT_S][b]; } for(int j =0; j<=2; j++) { if(MAX_VALUE>LIST[j]) { N1 =MAX_VALUE; } 그렇지 않으면 { N1 =목록[j]; } N2 =목록[j+1]; 차이 =N1-N2; if(차이> 0) { MAX_VALUE =N1; } 그렇지 않으면 { MAX_VALUE =N2; } } return MAX_VALUE;}int ARGMAX(float Q_Table[][4],int S){ /*이 함수는 Q TABLE[STATE]*/ float ARRAY[4]에서 가장 큰 Q 값의 인덱스를 찾습니다. 플로트 N1; 플로트 N2; 부동 MAX_VALUE =0.0; 부동 소수점; 부동 소수점; 정수 MAX_INDEX; for(int u=0; u<=3; u++) { ARRAY[u] =Q_Table[S][u]; } for(int p =0; p<=2; p++) { if(MAX_VALUE>ARRAY[p]) { N1 =MAX_VALUE; } else { N1 =ARRAY[p]; } N2 =어레이[p+1]; 차이 =N1-N2; if(차이> 0) { MAX_VALUE =N1; } 그렇지 않으면 { MAX_VALUE =N2; } } for(int r =0; r<=3;r++) { 숫자 =ARRAY[r]; if(숫자 ==MAX_VALUE) { MAX_INDEX =r; 부서지다; } } return MAX_INDEX;}void Update(float Q_TABLE[][4] , int S, int NEXT_S, int A, int ACTIONS[], int R, float LEARNING_RATE, float DISCOUNT_FACTOR){ /*이 함수는 Q 테이블을 업데이트하고 Q 가치. 이 업데이트는 메인 루프가 끝날 때까지 계속됩니다. 에피소드가 끝나면 Q 테이블은 다양한 값으로 채워집니다. 가치가 클수록 특정 상태에서 조치가 갖는 중요성이 커집니다. "Q_OLD"는 Q 매트릭스에 있는 이전 값입니다. 이것은 결국 업데이트되는 값입니다. Q_NEW는 Q 학습 공식에 의해 계산되는 새로운 Q_VALUE입니다. 여기에 사용된 Q 학습 공식은 BELLMAN 방정식이 시간 미분 학습 접근 방식을 사용하는 것을 기반으로 합니다.(몬테 카를로 접근 방식은 로봇을 피하는 장애물이 있는 경우 작동하지 않습니다.*/ Q_OLD =Q_TABLE[S_MAX][A]; NEXT_S), Q_NEW =(1-LEARNING_RATE)*Q_OLD + LEARNING_RATE*(R + DISCOUNT_FACTOR*Q_MAX), Serial.print("Q VALUE:"), Serial.println(Q_NEW), Q_TABLE[S][A] =Q_NEW; }////////////////////////////////////////////////// ///////////끝////////////////////////////////////// ////////////////////////////////////////////////////// /////////////////메인 루프 시작/////////////////////////////// /////////////////// 무효 루프() { /////////////////////////// ///////////////훈련////////////////////////////////// ////////// for(int I =0; I  

    회로도

    장애물_회피_로봇_사용_ai_DcoMCWIOFm.fzz

    제조공정

    1. Arrow Electronics, 인공 지능 체험 투어 발표
    2. 비전 기반 장애물 회피 기능이 있는 모바일 로봇
    3. Bosch, Industry 4.0에 인공 지능 추가
    4. 인공 지능은 허구입니까 아니면 일시적입니까?
    5. 인공 지능이 쿠버네티스의 엄청난 부스트
    6. 인공 지능은 IoT에서 중요한 역할을 합니다.
    7. ICS 사이버 보안에서 인공 지능은 아직 이르다
    8. 양자 시스템의 동작을 예측하는 인공 지능
    9. 인공 지능을 사용하여 삼림 벌채 추적
    10. 인공 지능 로봇