Arduino Nanoで作るAIラインフォローロボット:迷路解析機能搭載
必要な部品と材料
| 部品 | 数量 | 備考 |
|---|---|---|
| Arduino Nano | 1 | |
| Seeed ワイヤレスBluetooth RFトランシーバー(マスター/スレーブ) | 1 | BT通信用 |
| IR赤外線反射型フォトセンサーモジュール | 1 | 7個使用(ライン追跡5個、左右検出2個) |
| 連続回転サーボ | 2 | 左右駆動用 |
| 4.8V バッテリー | 1 |
使用するアプリとオンラインサービス
- Arduino IDE
プロジェクト概要
Arduinoベースのピック&プレースロボット開発後、次のステップとしてAIベースのラインフォローロボット開発に挑戦しました。シンプルなラインフォロワーは初心者向けですが、サーボモーターの代わりに赤外線センサーを追加し、より高度な制御を目指しました。「自分のスキルを上級レベルで試す」ことが目的です。
難易度は高かったものの、オンラインリサーチが大いに役立ちました。
なぜAIベースのラインフォローロボットが必要か?
AIは世界環境と人間生活を変える可能性を秘めた最新技術です。ロボットに知能を持たせ、実世界の問題を理解・解決させる夢は、AIを通じてのみ実現可能です。だからこそ誰もがAIについて語るのです。
- 組立/生産ラインでの搬送ロボット
- 乗客輸送バスの自動走行
私のプロトタイプはまだ初歩的な知能ですが、AIへの第一歩です。ここでは比較的平易な言葉で、AIラインフォローロボットの段階的開発を解説します。リソース不足で実機製作はできませんでしたが、作り方は詳細に説明します。Arduino IDEで動作する正確なコードを提供するので、あなたも最初のAIロボットを比較的容易に開発できるはずです。
Patreonで支援:https://bit.ly/31NfQ6A
動画説明欄に米国最安値の部品リンクがあります。
赤外線センサーの配置と役割
プロジェクトでは図のように7つの赤外線センサーを使用します:
- 5個:PID制御用(ライン中央追従)
- 1個:左側検出用(遠距離)
- 1個:右側検出用(遠距離)
5個のPID制御センサーの役割
これらはデジタル出力(HIGH=1 / LOW=0)を生成します。ライン中央にあるセンサーのみがHIGH(1)になります。想定されるパターン:
10000, 11000, 01000, 01100, 00100, 00110, 00010, 00011, 00001, 00000, 11111
5センサーの値を配列で管理:
int LFSensor[5] = {1,1,1,1,1};
左右検出センサーはアナログ出力:
int farLeftSensor = 0; int farRightSensor = 0;
読み取りコード:
LFSensor[0] = digitalRead(lineFollowSensor0); LFSensor[1] = digitalRead(lineFollowSensor1); LFSensor[2] = digitalRead(lineFollowSensor2); LFSensor[3] = digitalRead(lineFollowSensor3); LFSensor[4] = digitalRead(lineFollowSensor4); farRightSensor = analogRead(farRightSensorPin); farLeftSensor = analogRead(farLeftSensorPin);
迷路左手法則(Left-Hand Rule)
動画で解説しています。要約すると:
- 左手を壁に置く
- 前進開始
- すべての分岐点で、左手を左側の壁に触れ続ける
- 最終的にゴールに到達(最短経路ではないが確実)
2D迷路では8種類の分岐パターンがあります(十字路、T字路、右のみ、左のみ、直進/左、直進/右、行き止まり、ゴール)。左手法則を適用すると各分岐でのアクションは一意に決まります:
- 十字路 → 左へ
- T字路 → 左へ
- 右のみ → 右へ
- 左のみ → 左へ
- 直進/左 → 左へ
- 直進/右 → 直進
- 行き止まり → Uターン
- ゴール → 停止
分岐判定の追加ステップ
「ライン」検出時(十字路かT字路か不明)、「右カーブ」検出時(右のみか直進/右か不明)、「左カーブ」検出時(左のみか直進/左か不明)は、ロボットを「もう少し前進(エクストラインチ)」させて先を確認する必要があります。
フローとしては:
- 行き止まり:Uターン
- ライン検出:エクストラインチ前進 → ラインありなら十字路(左へ)、なしならT字路(左へ)、もう一本ラインならゴール(停止)
- 右カーブ:エクストラインチ前進 → ラインありなら直進/右(直進)、なしなら右のみ(右へ)
- 左カーブ:エクストラインチ前進 → ラインありなら直進/左(左へ)、なしなら左のみ(左へ)※実際は左カーブなら無条件で左へ行くためテスト省略可
関連トピック
Arduinoドライバー問題の解決方法など、動画で解説しています。
コード構成
プロジェクトは以下のモジュールで構成されています:
- RoBot_Maze_Solve_2:メインスケッチ(セットアップ、メインループ、第1パス・第2パス制御)
- Functions:迷路解法、パス記録・簡略化、最適化走行
- GeneralFunctions:LED点滅、BTコマンド受信、手動操作、PID計算等
- sensorFuntions:7センサー読み取り、モード判定(ライン追従/十字路/右カーブ/左カーブ/ラインなし)
- RobotDefines.h:定数、ピン定義、PIDパラメータ、サーボオブジェクト、迷路フェーズ2用変数
- MotorFuntions:モーター停止/前進/後進/旋回、PID制御、エクストラインチ走行、旋回動作
主要アルゴリズムのポイント
PID制御
5センサーのパターンから誤差(-4〜+4)を算出し、PID演算でモーター速度を制御。BT経由でKp, Ki, Kdをリアルタイム調整可能。
迷路解法(2フェーズ)
- 第1パス(探索):左手法則で迷路を探索し、分岐での動作(L/R/S/B)をパス配列に記録。デッドエンド(LBL→S等)をその都度簡略化。
- 第2パス(最適化):記録された最適パスに従って最短時間でゴールまで走行。
Bluetoothリモート操作
BTモジュール経由で手動操作(前進/後進/左右旋回/停止)やPIDパラメータ変更が可能。
製造プロセス
- Raspberry Pi で壁回避ロボットを自作:ステップバイステップガイド
- Raspberry Pi で実現する画像認識ベースの障害物回避モバイルロボット
- Star Automation、NPE2018で書道ロボットを披露
- Wittmann Battenfeld、高クランプ力成形向け新ロボットラインWX153を発表
- ボッシュ、ハノーバーメッセでAI駆動製造ソリューションを発表
- ファナック、SCARAロボットライン拡充:6モデル、3-20kgペイロード、400-1100mmリーチ
- AI駆動ロボティクス:最先端インテリジェントマシン
- ロボットが触覚で90種類以上の物体を識別、視覚・触覚融合のマルチモーダルAI
- AI:メリット、リスク、産業への影響
- ビッグデータとAI:デジタルトランスフォーメーションを支える相乗効果
- 小売におけるAI:一過性の流行ではなく実証済みのメリット