工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

人工知能を使用した障害物の回避

コンポーネントと消耗品

>
SparkFun Arduino Pro Mini 328-5V / 16MHz
× 1
超音波センサー-HC-SR04(汎用)
× 1
SparkFunデュアルHブリッジモータードライバーL298
× 1
DCモーター(汎用)
60 RPMDCモーター
× 2
ホイール
× 4
ジャンパー線(汎用)
× 1
SparkFunはんだ付け可能なブレッドボード-ミニ
× 1
充電式バッテリー、リチウムイオン
7.2ボルトのリチウムイオン電池
× 1
9Vバッテリー(汎用)
× 1
9Vバッテリークリップ
× 1
PCBWayカスタムPCB
× 1
C&KスイッチJSシリーズスイッチ
× 1

必要なツールとマシン

>
はんだごて(汎用)
はんだワイヤー、鉛フリー
はんだフラックス、はんだ付け
はんだ除去ポンプ、DeluxeSOLDAPULLT®
ワイヤーストリッパーとカッター、18-10 AWG /0.75-4mm²キャパシティワイヤー
ホットグルーガン(汎用)
テープ、両面

アプリとオンラインサービス

>
Arduino IDE

このプロジェクトについて

AI /強化学習を使用したロボット回避の障害

問題の説明: 主な目的は、「N」エピソードの障害物を回避し、最適なアクションを学ぶことです。この場合、「正しい」として最適なアクションを学習するためにロボットが必要であると仮定しましょう。

使用される補強アルゴリズム: Q学習

L298Nが2つのDCモーターを駆動する方法:

<図>

HC-SR04センサーが距離を計算する方法:

<図>

強化学習の重要な用語:

1。状態: これがロボットの状況です。ここで基本的な障害物回避ロボットの場合、全部で2つの状態があります……1番目の状態は近くに障害物がない場合と2番目の状態はその前に障害物がある場合です(コードを書いたとき、私は10の異なると仮定しました同じアクションを期待する状態である可能性があります。より複雑な環境を説明するためにこれを行った理由。)

2。アクション: 特定の状態では、ロボットは特定のアクションを実行します。ロボットが2番目の状態で実行できるアクションは、「FORWARD」、「BACKWARD」、「LEFT」、「STOP」の4つです。 最初の状態では、ロボットは4つのアクションを実行できますが、簡単にするために、ロボットは「FORWARD」()の1つのアクションしか実行できないと仮定しました。 これは、 LEFT などのアクションを検討するのが難しいためです。 またはバックワード 近くに障害物がないとき。

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

/ *ここに:
0 =前進
1 =後退
2 =停止
3 =右* /

3。次の州: これは、ロボットが特定の「アクション」を実行したときに入る状態です。 現在の「STATE」 ロボットケースを回避する障害物では、次の状態 「クラッシュ」のいずれかになります 州または「SURVIVED」 州。 (ここでのSURVIVE状態は、エピソードの開始時にロボットがいる開始状態と同じです。)

  / *アクションを実行した後、この障害の場合、ロボットは次の状態になります
ロボットを回避します* /

int NEXT_STATE;
int STATE =0;
NEXT_STATE =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および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の学習率が最適です。問題が確率論的である場合、アルゴリズムは、ゼロに減少する必要がある学習率に関するいくつかの技術的条件下で収束します。実際には、多くの場合、すべてのシナリオでALPHA =0.1など、一定の学習率が使用されます。

  float ALPHA =0.2;  

2。割引係数(GAMMA): 割引係数0は、将来の報酬の重要性を決定します。係数が0の場合、エージェントは現在の報酬のみを考慮して「近視眼的」(または近視眼的)になり、係数が1に近づくと、長期的に高い報酬を目指して努力します。割引係数が1以上の場合、アクション値が異なる場合があります。 GAMMA =1.0の場合、ターミナル状態がない場合、またはエージェントがターミナル状態に到達しない場合、すべての環境履歴は無限に長くなり、追加の割引されていない報酬を持つユーティリティは一般に無限になります。割引係数が1よりわずかに低い場合でも、 Q 関数学習は、値関数が人工ニューラルネットワークで近似されるときにエラーと不安定性の伝播につながります。その場合、より低い割引係数から始めて、最終的な値に向かってそれを増やすと、学習が加速します。

  float GAMMA =0.9;  

3。探査率(イプシロン): このパラメータは、ロボットが環境を探索する範囲を決定します。環境を探索するということは、ランダムなアクションを実行し、Q値を使用して結果を分析することを意味します。通常、Qラーニング(SARSAとは異なり)では、ロボットがますます学習を続けるにつれて、最終的にこのパラメーターを取り除きます。ただし、このプロジェクトでは、最終状態がないため、Epsilonを削除しません。この場合のイプシロンはある程度減少し、しきい値を下回ると再びリセットされます。これにより、ロボットは私たち人間と同じように、その寿命まで探索を続けることができます。

  float EPSILON =0.75;  

Q学習アルゴリズム:

  • Q値テーブルを初期化します。 Q(s、a) 。これらの値を0.0に初期化しました。
  • 現在の状態を観察します。 s
  • アクションを選択します。 a 、前のページでここで説明したアクション選択ポリシーの1つに基づくその状態(📷-ソフト、📷-欲張りまたはソフトマックス)。
  ////////////////////////// Epsilon Greedy Policy /////////////// /////////////// 

PROB =RANDOM(EPSILON);
if(PROB <=EPSILON)//アクションを調べる
{
ACTION =random(0,4);
FLAG =2;
}
else // Qテーブルからアクションを抽出する
{
アクション=ARGMAX(Q、STATE);
FLAG =2;
}
  • 行動を起こし、報酬を観察します。 r 、および新しい状態、 s '
  • 観測された報酬と次の州で可能な最大報酬を使用して、州のQ値を更新します。更新は、上記の式とパラメータに従って行われます。
  • 状態を新しい状態に設定し、最終状態に達するまでプロセスを繰り返します。
  • Q学習を理解する このリンクにアクセスしてください:https://towardsdatascience.com/a-beginners-guide-to-q-learning-c3e2a30a653c
<図>
  /////////////////// Q_LearningFormulaの実装///////////////////// //// 

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 VALUE:");
Serial.println(Q_NEW);
Q_TABLE [S] [A] =Q_NEW;

作業ビデオ:AIロボットの作業ビデオを確認することを忘れないでください:)


コード

  • Q学習を使用した障害物回避ロボット
Q学習を使用した障害物回避ロボット C / C ++
これは、人工知能に基づく障害物回避ロボットのメインコードです。
 / *これは、強化学習/ AIを使用した障害物回避ロボットです。このプロジェクトで使用されるVarunWalimbeアルゴリズム:Q学習障害物回避の仕組み1.超音波センサーを使用して、エコーピンとトリガーピンを使用して障害物からの距離を測定します2.距離を測定し、20cm未満の場合、近くに障害物があります。それ以外の場合、ロボットは安全で前進を続けます.3。状況に応じて左または右に曲がりますAIベースの障害物回避の仕組み(Q学習)1。上の記事からの最初のステップは同じですが、2番目のステップは異なります2.ロボットのアクションのリストは次のとおりです最初に初期化されます。たとえば、この場合のロボットのアクションは、左、前進、後退、停止です。3。ロボットが障害物に近づくと、アクションを実行する必要があります。ただし、この場合、ロボットは事前にプログラムされておらず、障害物を回避するために自分で学習しようとしているため、どのアクションを実行するかわからないことに注意してください。 0ロボットが停止して後退すると、-5の報酬を受け取ります。ロボットが障害物を無視して前進し続けると、-10の報酬を受け取ります。ロボットが障害物を検出するとすぐに左に移動すると、+ 105の報酬を受け取ります。報酬メカニズムによって障害物を回避するために独自に学習します。* ///////////ロボットのハードウェアパラメータ//////////////////// intTRIG_PIN =7; int ECHO_PIN =8; int duration; float distance; int M1 =13; int M2 =12; int M3 =11; int M4 =10; bool Obstacle =false; int FLAG; ////////// ///////////////終わり////////////////////////////////// //////////////////////////////// Q学習パラメータ/////////////// //////////////////////////// float ALPHA =0.1; //学習率floatGAMMA =0.5; //割引係数floatEPSILON =0.90; // EXPLORATION PARAMETERint REWARD; //アクションを実行した場合の報酬intEPISODES =100; int STATE; // ROBOTintアクションの現在の状態=0; // ROBOT(0:FORWARD、1:BACKWARD、2; STOP、3:LEFT)floatPROBによって実行されるアクション; // EPSILONDECAYに使用boolACTION_TAKEN =false; //この変数は、アクションが実行されたかどうかを示します。NEXT_STATE; // ROBOTの次の状態constint STATES =10; //環境内の状態の数intACTIONS [4] ={1,2,3,4}; const int NUMBER_OF_ACTIONS =4; //合計4つのアクションがありますフォワード、バックワード、レフト、ストップ/ *これはQマトリックスまたはQテーブルです。これは基本的に、ロボットがアクションを実行する前に確認する日記です。アクションに基づいて、ロボットは報酬を獲得し、Q値はこのQテーブルで更新されます。ここで私は10の州を検討しました。私は、すべての州が同じであるとしても異なると仮定しました。基本的に、ロボットを回避する障害物には2つの州しか含まれていません。同じ/異なるアクションを期待する10の異なる状態。* / floatQ [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}、/ /最初にゼロに初期化{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}}; / *これは報酬マトリックスまたは報酬テーブルです。これは、特定のアクションを実行するためのロボットに報酬を与える責任があります。 ITは、州で行われた各アクションの報酬を保存します。実行されたアクションが良好で、アクションが悪い結果をもたらす場合、報酬は正になります。* / 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学習更新パラメータ//////////// floatQ_OLD; float Q_NEW; float Q_MAX; ///////////// ///////////// END ////////////////////////// void setup(){Serial.begin(9600 ); pinMode(TRIG_PIN、OUTPUT); pinMode(ECHO_PIN、INPUT); pinMode(M1、OUTPUT); pinMode(M2、OUTPUT); pinMode(M3、OUTPUT); pinMode(M4、OUTPUT); randomSeed(analogRead(A0)); STATE =0; Serial.println( "トレーニングは5秒で開始されます:"); delay(5000);} //////////////////////////// ROBOTの機能////////////// /////////////////// void Forward(){digitalWrite(M1、LOW); digitalWrite(M2、HIGH); digitalWrite(M3、LOW); digitalWrite(M4、HIGH); } void Backward(){digitalWrite(M1、HIGH); digitalWrite(M2、LOW); digitalWrite(M3、HIGH); digitalWrite(M4、LOW);} void Left(){digitalWrite(M1、HIGH); digitalWrite(M2、LOW); digitalWrite(M3、LOW); digitalWrite(M4、HIGH);} void Right(){digitalWrite(M1、LOW); digitalWrite(M2、HIGH); digitalWrite(M3、HIGH); digitalWrite(M4、LOW);} void Stop(){digitalWrite(M1、LOW); digitalWrite(M2、LOW); digitalWrite(M3、LOW); digitalWrite(M4、LOW);} bool Obstacle_Avoider(){digitalWrite(TRIG_PIN、HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN、LOW);期間=pulseIn(ECHO_PIN、HIGH);距離=(期間/ 2)/29.1; if(distance <15){障害=true; } if(distance> 15){障害=false; } delay(10); return Obstacle;} //////////////////////////////////////////// END / ////////////////////////////////////////////////// //////////////////////////// ROBOTのQ学習関数////////////////// ////////////////// float RANDOM(float EXPLORATION_PARAMETER){/ *この関数は、実行するアクションがランダムであるかQ_TABLEからであるかを決定する乱数を検出します* / float RANDOM_VARIABLE;フロート確率; RANDOM_VARIABLE =random(0,100);確率=RANDOM_VARIABLE / 100; return PROBABILITY;} float DECAY(float PARAMETER){/ *この関数は、時間の経過とともにEPSILON(EXPLORATION PARAMETER)を減らすために使用されます。 * 0.98; //ここにパラメータがありますEPSILONreturn PARAMETER;} int GET_STATE(){int STATE_NUMBER; STATE_NUMBER =random(0,10); return STATE_NUMBER;} float MAX(float Q_Table [] [4]、int NEXT_S){/ *この関数は、Q_TABLE [NEXT_STATE]の最大数を検出します。この関数の主な役割は、Q_MAXパラメータ* / float LIST [4]を見つけることです。フロートN1;フロートN2; float MAX_VALUE =0.0;フロートDIFF; 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; } else {N1 =LIST [j]; } N2 =LIST [j + 1]; DIFF =N1- N2; if(DIFF> 0){MAX_VALUE =N1; } else {MAX_VALUE =N2; }} return MAX_VALUE;} int ARGMAX(float Q_Table [] [4]、int S){/ *この関数は、Q TABLE [STATE] * / float ARRAY [4];フロートN1;フロートN2; float MAX_VALUE =0.0;フロートDIFF;浮動小数点数; int 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 =ARRAY [p + 1]; DIFF =N1- N2; if(DIFF> 0){MAX_VALUE =N1; } else {MAX_VALUE =N2; }} for(int r =0; r <=3; r ++){NUMBER =ARRAY [r]; if(NUMBER ==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学習式は、ベルマン方程式に基づいており、時間差学習アプローチを使用します(モンテカルロアプローチは、この障害回避ロボットの場合には機能しません。* / Q_OLD =Q_TABLE [S] [A]; Q_MAX =MAX 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;} //////////////////////////////////////////////// ///////////終わり////////////////////////////////////// ////////////////////////////////////////////////// ////////////////メインループの開始////////////////////////////// /////////////////// void loop(){////////////////////////// ///////////////トレーニング////////////////////////////////// ////////// for(int I =0; I  

回路図

障害物_avoiding_robot_using_ai_DcoMCWIOFm.fzz

製造プロセス

  1. アローエレクトロニクスが人工知能体験ツアーを発表
  2. 視覚ベースの障害物回避を備えた移動ロボット
  3. ボッシュがインダストリー4.0に人工知能を追加
  4. 人工知能はフィクションですか、それとも流行ですか?
  5. 巨大なKubernetesブーストを受け取る人工知能
  6. 人工知能はIoTで主要な役割を果たします
  7. ICSサイバーセキュリティの人工知能は早い
  8. 人工知能は量子システムの振る舞いを予測します
  9. 人工知能を使用して森林破壊を追跡する
  10. 人工知能ロボット
  11. 人工知能はアプリではありません。それは方法論です