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

PID制御ライントレースロボットキット – Arduino UNO、5ch IRセンサー、アルミシャーシ

必要な部品と材料 (KittenBot RosBotキットベース)

KittenBot アルマイトアルミシャーシ (LEGOテクニック穴 4.8mm ピッチ) × 1
KittenBot RosBot ベースボード (Arduino UNO互換、オンボード 2×Hブリッジ) × 1
KittenBot 金属ボールキャスター (ペア) × 1
KittenBot ゴムホイール+モーターハブセット (ペア) × 1
KittenBot 5ch IRライントレースセンサー × 1
DCモーター (汎用、ベースボード搭載済みの場合あり) × 2
9V電池 (またはLi-ion 2Sパック) × 1
Arduino UNO (RosBotベースボードに搭載、別途不要な場合あり) × 1

開発環境

プロジェクト概要

自律ロボットの基本であるライントレースを、PID制御で安定・高速に走行させる学習用ロボットキットです。RosBotベースボードにはデュアルHブリッジが搭載されており、別途モータードライバーを購入する必要がありません。5チャネルIRセンサーでライン位置を高精度に検出し、PID演算で左右モーターの速度差を制御します。

ハードウェア構成

RosBotベースボードの特徴

5ch IRセンサー接続

センサーピン接続先
VCC5V
GNDGND
T1〜T4A0〜A3 (アナログ入力)
T5SDA (A4) ※デジタル入力としても使用可

モーター接続

組み立て手順 (約15分)

  1. モーターをシャーシ側面に固定、ゴムホイールを装着
  2. ボールキャスターを前部に取り付け
  3. 5ch IRセンサーを前面下部にマウント (地面から 5〜10mm 推奨)
  4. RosBotベースボードをシャーシ中央に固定
  5. 配線: センサー、モーター、電池を接続

ソフトウェア: 状態機械 + PID制御

センサー状態のビットマップ化

5つのセンサー値を閾値処理して 5ビットパターン (例: B00100 = 中央のみ検知) に変換し、stateMachine() で各パターンに対応する bias (偏差) を決定します。

PID演算

float Kp = 25.0;
float Ki = 0.15;
float Kd = 1200.0;
float error, errorLast, errorInte;

float calcPid(float input) {
  // 簡易ローパスフィルターでノイズ低減
  error = error * 0.7 + input * 0.3;
  float errorDiff = error - errorLast;
  errorInte = constrain(errorInte + error, -50, 50); // アンチワインドアップ
  float output = Kp * error + Ki * errorInte + Kd * errorDiff;
  errorLast = error;
  return output;
}

モーター制御


void doDcSpeed(int spdL, int spdR) {
  spdR = -spdR; // 右モーター極性反転 (配線による)
  // 左モーター (PWMピン 5, 6)
  if (spdL < 0) { analogWrite(5, 0); analogWrite(6, -spdL); }
  else          { analogWrite(5, spdL); analogWrite(6, 0); }
  // 右モーター (PWMピン 9, 10)
  if (spdR < 0) { analogWrite(9, 0); analogWrite(10, -spdR); }
  else          { analogWrite(9, spdR); analogWrite(10, 0); }
}

メインループ


void loop() {
  delay(5);
  int pos = echoTrace();        // 5chセンサー読取 → ビットパターン化
  stateMachine(pos);            // bias決定 + NeoPixel表示 (オプション)
  
  if (outlineCnt > 10) {        // ライン見失いカウント超過で停止
    doDcSpeed(0, 0);
  } else {
    float baseSpeed = 150;      // 基準速度 (0-255)
    float ctrl = calcPid(bias); // PID出力
    doDcSpeed(baseSpeed - ctrl, baseSpeed + ctrl);
  }
}

PIDゲイン調整のコツ

  1. Kpのみから開始: 振動しない最大値を探す
  2. Kdを追加: オーバーシュート抑制、応答性向上
  3. Kiを微調整: 定常偏差 (カーブでの内輪差など) を補正
  4. 実走行で微調整: コース形状・床材質・バッテリー電圧で最適値が変わる

完全なスケッチ


#include <Adafruit_NeoPixel.h> // オプション: 状態表示用

#define S_NULL 0
#define S_ONTRACE 1

Adafruit_NeoPixel pixels = Adafruit_NeoPixel(4, 4, NEO_GRB + NEO_KHZ800);

int bias = 0;
int outlineCnt = 0;

void doDcSpeed(int spdL, int spdR) { /* 上記参照 */ }

void stateMachine(int a) {
  switch (a) {
    case B00000: case B11111: outlineCnt++; break; // ライン外 / 全面検知
    case B00010: case B00110: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 50, 0)); bias = 1; break;
    case B00001: case B00011: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 200, 0)); bias = 2; break;
    case B00100: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(0, 0, 20)); bias = 0; break; // 中央
    case B01000: case B01100: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(50, 0, 0)); bias = -1; break;
    case B10000: case B11000: outlineCnt = 0; pixels.setPixelColor(2, pixels.Color(200, 0, 0)); bias = -2; break;
    default: Serial.println(a, BIN); outlineCnt++; break;
  }
  pixels.setPixelColor(0, pixels.Color(outlineCnt * 10, 0, 0));
  pixels.show();
}

float Kp = 25, Ki = 0.15, Kd = 1200;
float error, errorLast, errorInte;

float calcPid(float input) { /* 上記参照 */ }

int echoTrace() {
  int ret = 0;
  for (int i = 0; i < 5; i++) {
    int val = constrain((1025 - analogRead(A0 + i)) / 10 - 4, 0, 20);
    if (val > 2) ret |= (0x1 << i);
  }
  return ret;
}

void setup() {
  Serial.begin(115200);
  pixels.begin();
}

void loop() {
  delay(5);
  int pos = echoTrace();
  stateMachine(pos);
}

リソース

発展課題

製造プロセス

  1. バスケットボール:ネイスミスの1891年発明から現代製造技術まで
  2. ゴルフ:豊かな伝統と現代的魅力を持つグローバルスポーツ
  3. ライブビデオストリーミング付き Pi 搭載ロボットの構築と制御
  4. 産業用ラインフォロワーロボット - 物資輸送用自律走行ロボット
  5. V4スピードラインフォロワーロボット – Arduino Nanoベースの高度な自律走行
  6. MATLAB/Simulinkで3DロボットグリッパーのPID制御をマスター
  7. Wittmann Battenfeld、高クランプ力成形向け新ロボットラインWX153を発表
  8. ファナック、SCARAロボットライン拡充:6モデル、3-20kgペイロード、400-1100mmリーチ
  9. 高度な自動制御システムで包装品質保証を効率化
  10. 組立ラインロボット完全解説:効率・精度・品質を劇的に向上させる導入ガイド
  11. 21世紀のロボティクス:分散システム、テレプレゼンス、宇宙探査