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

PID制御ラインフォロワーロボット

コンポーネントと消耗品

KittenBot陽極酸化アルミニウムシャーシ
× 1
KittenBotRosBotベースボード
× 1
>
金属ボール付きKittenBot直径ボールキャスター(ペア)
× 1
>
モーターハブセット付きKittenBotラバーホイール(ペア)
× 1
>
KittenBot5チャンネルIRライン追従トラッカーセンサー
× 1
DCモーター(汎用)
× 1
9Vバッテリー(汎用)
× 1
Arduino UNO
× 1

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

>
Arduino IDE

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

概要

ほとんどのローバー自律型ロボットに必要な機能の1つは、ラインフォローです。このプロジェクトの目的は、ラインフォロワーロボットを構築し、楽しい方法でPIDコントローラーの学習を開始することです。

パーツ

ロボットは、RosbotBaseboardと5チャンネルセンサーの2つのモーターで適切に機能します。他とは異なり、RosbotBaseboardには2xHブリッジデュアルドライバーが組み込まれているため、追加のHブリッジモータードライバーやさまざまなコンポーネントを購入する必要はありません。モーターをRosbotベースボードに接続するだけで、ArduinoUnoよりも多くの電力を供給できます。

<図>

<図>
  • ロボットのフレーム: KittenBot陽極酸化アルミニウムシャーシ

たくさんの取り付け穴(4.8mm LEGO Technic)を備えたクールで頑丈なシャーシで、このシャーシを他の楽しいプロジェクトに確実に再利用できます。

  • ロボットの脳 :RosBotベースボード

2xオンボードデュアルHブリッジモータードライバーを備えたArduinoUNOベースのメインボード。

  • ロボットの目 :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; pixel.setPixelColor(2、pixels.Color(0、50、0));バイアス=1;壊す;ケースB00001:ケースB00011:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(0、200、0));バイアス=2;壊す;ケースB00100:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(0、0、20));バイアス=0;壊す;ケースB01000:ケースB01100:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(50、0、0));バイアス=-1;壊す;ケースB10000:ケースB11000:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(200、0、0));バイアス=-2;壊す;デフォルト:Serial.println(a、BIN); outlineCnt ++;壊す; }  

エラー、比例項、積分項、微分項の値はすでに設定されています。

<図>
  float Kp =25; float Ki =0.15; float Kd =1200; float error、errorLast、erroInte; float calcPid(float input){float errorDiff;フロート出力;エラー=エラー* 0.7 +入力* 0.3; //フィルター//エラー=入力; errorDiff =error-errorLast; erroInte =Constraint(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 =エラー;出力を返す;  

値を操作して、ロボットに最適なものを見つけてください。

コード

  • ラインフォロワーロボット
ラインフォロワーロボット Arduino
コードには、AdafruitのNeoPixelが含まれていますが、これはオプションです。 spdL、int spdR){spdR =-spdR; if(spdL <0){analogWrite(5、0); analogWrite(6、-spdL); } else {analogWrite(5、spdL); analogWrite(6、0); } if(spdR <0){analogWrite(9、0); analogWrite(10、-spdR); } else {analogWrite(9、spdR); analogWrite(10、0); }} intbias =0; intoutlineCnt =0; void stateMachine(int a){switch(a){case B00000:outlineCnt ++;壊す;ケースB11111:outlineCnt ++;壊す;ケースB00010:ケースB00110:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(0、50、0));バイアス=1;壊す;ケースB00001:ケースB00011:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(0、200、0));バイアス=2;壊す;ケースB00100:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(0、0、20));バイアス=0;壊す;ケースB01000:ケースB01100:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(50、0、0));バイアス=-1;壊す;ケースB10000:ケースB11000:outlineCnt =0; pixel.setPixelColor(2、pixels.Color(200、0、0));バイアス=-2;壊す;デフォルト:Serial.println(a、BIN); outlineCnt ++;壊す; } pixel.setPixelColor(0、pixels.Color(outlineCnt * 10、0、0)); if(outlineCnt> 10){doDcSpeed(0,0); } else {float ff =150; float ctrl =calcPid(bias); doDcSpeed(ff-ctrl、ff + ctrl); } pixel.show();} float Kp =25; float Ki =0.15; float Kd =1200; float error、errorLast、erroInte; float calcPid(float input){float errorDiff;フロート出力;エラー=エラー* 0.7 +入力* 0.3; //フィルター//エラー=入力; errorDiff =error-errorLast; erroInte =Constraint(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; int a [5]; for(int i =0; i <5; i ++){a [i] =Constraint((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. スカラロボットライン拡張
  7. Assembly Line Robots:A Definitive Guide
  8. 材料を供給するための産業用ラインフォロワー
  9. Speed Line Follower Robot V4
  10. Matlab/SimulinkでのロボットグリッパーのPID制御
  11. 自動包装ラインの品質管理