# [期末プロジェクト] LEGO EV3に基づくライントレーシング及びマテリアルハンドリングロボットシステムの設計と実装

## 概要

本プロジェクトでは、LEGO MINDSTORMS EV3プラットフォームをベースとしたインテリジェントなライントレーシング及びマテリアルハンドリングロボットを設計・実装した。複雑なコースにおける多分岐路の識別、動的ライントレーシング、特定マテリアルの把持要求に対応するため、本システムは低層運動制御に離散時間システムに基づく改良型比例-微分(PD)制御アルゴリズムを導入し、差動駆動運動学モデルと組み合わせることで、ロボットの滑らかで適応的な軌道追従を実現した。マクロ経路計画とタスク実行においては、ブール論理と有限状態機(FSM)に基づく決定性決定木モデルを構築し、「センサのブラインド化」、「交差点の誤判定」、「偽陽性終点」といった典型的な工学的課題を解決した。本稿では、本システムの制御理論の基礎、アルゴリズムの数学的導出、ソフトウェア・ハードウェア協調設計について詳述し、制御論の歴史及び関連する実証研究と併せて、直線、楕円、8の字の複雑軌道における異なるコントローラの性能比較を行う。同時に、組込みシステムの物理的特性(CPUスターべーション、PWM制御応答など)に対し、低層の計算資源最適化策を提案する$^{[1]}$。

## 1. はじめに

移動ロボット分野において、ライントレーシング(Line Tracking)と自律航法は複雑なタスクを実現するための基盤であり、その核心は動的環境とハードウェア制約に対応可能な信頼性の高いコントローラを設計することにある。初期の自動制御の発展においては、単純なオンオフ制御(Bang-Bang制御またはON-OFF制御)がよく採用されていたが、この「白か黒か」の制御論理はロボットの走行軌道に激しい振動をもたらし、機械的摩耗が大きく、高速走行時に容易に脱線するという問題があった。二輪差動ロボットは典型的な非ホロノミック拘束(Non-holonomic constraint)システムに属し、その横方向速度は常にゼロであり、ヨー角速度によってのみ横方向偏差を調整する必要があるため、ステアリング指令の滑らかさと精度に極めて高い要求が課せられる$^{[1]}$。

システムのロバスト性と動的応答能力を向上させるため、本プロジェクトでは産業界で広く応用されているPID(Proportional-Integral-Derivative)閉ループ制御アルゴリズムを導入した$^{[2]}$。PID制御理論の歴史は1890年代のガバナ設計に遡り、1922年にロシア系アメリカ人技術者ニコラス・ミノルスキー(Nicolas Minorsky)が米国海軍の船舶自動操舵システムを設計する際に、初めて厳密な数学的理論分析を行った$^{[2]}$。ミノルスキーは操舵手の動作を観察し、優れた制御には現在の誤差だけでなく、過去の累積誤差と誤差の変化傾向も考慮する必要があることを発見した$^{[2]}$。これに基づき、本研究ではLEGO EV3のマルチフォトセンサ融合技術を組み合わせ、従来のPIDを離散化及び次元削減により改良し、ガイドラインへの適応的追従を実現した。関連する実証研究によれば、LEGO EV3ロボットにPIDコントローラを実装することで、シャーシの高周波振動を効果的に除去し、複雑なコースにおけるライントレーシングの効率と安定性を向上できることが示されている$^{[1]}$。

LEGO MINDSTORMS EV3は、LEGO社が開発した第3世代ロボットキットであり、そのコアとなるプログラマブルブロックにはARM9アーキテクチャのTI Sitara AM1808プロセッサ(動作周波数300 MHz)が搭載され、軽量Linuxオペレーティングシステムを実行する$^{[3]}$。EV3は多様なセンサ(カラーセンサ、超音波センサ、ジャイロセンサなど)とサーボモータをサポートし、LabVIEWグラフィカルプログラミング環境やMicroPythonなどの高級言語でプログラミングが可能である$^{[3]}$。これらのハードウェア特性は、制御アルゴリズムの実装基盤を提供する。

## 2. 核心的低層アルゴリズム:差動運動学と改良型PD制御

ライントレーシング制御の核心は、カラーセンサの光量フィードバックを通じて、車体のガイドラインからの逸脱誤差をリアルタイムで計算し、それを左右駆動輪の動的差速に変換することで、修正トルクを生成することにある。本プロジェクトでは、2つのカラーセンサをラインを跨いで配置するハードウェア構成を採用し、組込みマイクロプロセッサのサンプリング特性に適応するデジタルPDコントローラを構築した。

### 2.1 差動駆動ロボットの運動学モデル

制御アルゴリズムを構築する前に、ロボットの運動学的シャーシ特性を明確にし、それを制御量出力の物理的基礎とする必要がある。左右の駆動輪の線速度をそれぞれ $V_L$ および $V_R$、二輪中心間距離(トレッド)を $d$、駆動輪半径を $r$ とする。車輪型移動ロボット(Wheeled Mobile Robot)の非ホロノミック運動学モデルに基づき、ロボット重心の全体線速度 $V$ とヨー角速度 $\omega$ は以下の方程式から導出される$^{[2]}$:

$$V(t) = \frac{V_R(t) + V_L(t)}{2}$$

$$\omega(t) = \frac{V_L(t) - V_R(t)}{d}$$

この数学モデルから、左右輪に大きさが等しく方向が逆の差速補償量(すなわち $V_L$ と $V_R$ の相対的な大きさを変更すること)を印加することで、ロボットのヨー角速度 $\omega$ を線形的に制御できることがわかる。この差速補償がシステムに必要なステアリングトルクであり、ロボットの姿勢修正の動力学的基础となる。

### 2.2 離散時間PID制御アルゴリズムの数学的導出

連続時間領域における古典的なPID制御方程式は、誤差の比例、積分、微分演算を通じて制御出力を計算するものであり、その標準式は以下のように表される$^{[2]}$:

$$u(t) = K_p e(t) + K_i \int_{0}^{t} e(\tau) d\tau + K_d \frac{de(t)}{dt}$$

ここで $K_p, K_i, K_d$ はそれぞれ比例ゲイン、積分ゲイン、微分ゲインであり、$e(t)$ はシステムの設定値とフィードバック値の誤差である$^{[2]}$。

しかし、EV3のメイン制御プロセッサ(ARM9)は離散時間サンプリングに基づくデジタル組込みシステムであり、連続微積分演算を直接処理することはできない。したがって、有限差分法を用いて上記の連続方程式を離散化する必要がある。マイクロプロセッサの一定サンプリング周期を $\Delta t$、第 $k$ 回サンプリングの誤差を $E(k)$ とすると、後退有限差分原理に基づき、一次微分は差分方程式 $\frac{E(k) - E(k-1)}{\Delta t}$ で近似でき、積分項は離散累積和 $\sum_{j=0}^{k} E(j) \Delta t$ で近似できる。これにより、位置型デジタルPID方程式が得られる$^{[2]}$:

$$U(k) = K_p E(k) + K_i \sum_{j=0}^{k} E(j) \Delta t + K_d \frac{E(k) - E(k-1)}{\Delta t}$$

対称配置された二つのフォトセンサによるライントレーシングのシナリオでは、ガイドラインの曲率変化が比較的急峻である。積分項 $I$ を保持した場合、設定値が大きく変動する(大曲率のコーナリングなど)と、積分器が過大な誤差を蓄積する。これにより、制御出力が上下限でクリップされる「積分飽和(Integral Windup)」現象が発生し、システム出力が飽和上限に維持されたまま、誤差の符号が変化しても出力が即座に応答できず、最終的に車体がオーバーシュートしたりコースアウトしたりする可能性がある。そこで本プロジェクトでは、従来モデルに対して次元削減最適化を施し、積分項を除去するとともに、一定のサンプリング周期 $\Delta t$ を暗黙的に係数に組み込み、離散デジタルPDコントローラを得た$^{[2]}$:

$$U(k) = K_p \cdot E(k) + K_d \cdot [E(k) - E(k-1)]$$

### 2.3 ステアリング補償アルゴリズムのシステムレベルマッピングとパラメータ解析

プロジェクトの実際のソフトウェアコードでは、ネストされた高度な数学モジュールを通じて、以下のステアリング補償(Turn)演算方程式を実装している:

$$Turn = (a-b) \times 0.8 + ((a-b)-c) \times 0.6$$

この方程式は、上記で導出した離散デジタルPD方程式と対応関係にある。まず、誤差信号の取得について、$a$ は左側センサの反射光強度デジタル値、$b$ は右側センサの値を表す。光学の拡散反射原理に基づき、現在の誤差信号 $E(k) = a - b$ となる。車体が中央にある場合、左右センサは白黒の境界に位置し、光吸収率が近いため $a-b \approx 0$ となる。車体が右に逸脱すると、左側センサは白色の高反射領域に入り、右側センサは黒色の低反射領域に入るため、正の誤差信号が発生する。

次に、方程式の $(a-b) \times 0.8$ は比例制御項(Proportional Term)に対応する。比例制御は現在の誤差のみを考慮し、現在の偏差に比例した復元トルクを生成する。比例ゲイン $K_p = 0.8$ は、外乱に対するシステムの応答強度を決定し、偏差が大きいほど出力される修正トルクが強くなる。

最後に、方程式の $((a-b)-c) \times 0.6$ は微分制御項(Derivative Term)にマッピングされる。ここで $c$ はレジスタに保存された前周期の履歴誤差 $E(k-1)$ を表す。微分制御項はシステムのダンパーに相当し、誤差の一次導関数を計算して将来のトレンドを予測する。比例制御の作用により車体が中心線に近づくとき、現在位置の誤差 $E(k)$ は依然として0より大きいが、その変化率 $\Delta E(k)$ は既に負の値になっている。このとき微分項は事前に逆向きの制動トルクを生成し、総制御量を弱めることで、不足減衰システムのオーバーシュート(Overshoot)と振動現象を抑制する。$K_d = 0.6$ はシステム調整後の微分減衰係数である。理想的な微分器は高周波ノイズに敏感であるが、本システムではサンプリング周波数が比較的高く、誤差源が二つの光量差のみであるため、追加のローパスフィルタは導入していない。

### 2.4 動的自適応基礎速度(Base Speed)非線形モデル

従来のライントレーシングロボットは一定の基礎速度を採用することが多かったが、直線と曲線を含む複合コースでは、基礎速度を経路曲率に応じて動的に調整する必要がある。本プロジェクトでは、誤差の絶対値に基づく適応的速度フィードバック調整モデルを導入した:

$$BaseSpeed = 100 - |a-b| \times 0.6$$

この方程式は非線形負帰還マッピング関数 $f(|e|)$ を確立する。定数 $100$ は、現在の供給電圧下でシャーシモータに許容される最大PWMデューティ比である。直線の定常状態では、車体が中央に位置するため位置誤差が小さく($|a-b| \approx 0$)、基礎速度は上限の $100$ に近づき、高速直線走行を実現する。曲線に遭遇すると誤差の絶対値が増大し、システムは負帰還により自動的に基礎速度を低下させ、旋回に必要な向心力を低減し、横滑りのリスクを抑える。

注目すべきは、この式の定数項(100)が初期バージョンの定数(80)と異なる点である。複数回の実地テストとパラメータ調整を経て、基礎速度の上限を100に引き上げることで、曲線安定性を犠牲にすることなく、直線区間の平均走行速度を向上させることができた。誤差減衰係数 $0.6$ は調整を経て、速度低下量と旋回要求のバランスを取っている。

### 2.5 完全制御則の数学的统一表現とPythonシミュレーション検証

上記の二つの核心的公式を連立させることで、本プロジェクトで使用する完全な離散時間PD制御則が得られる:

$$\begin{aligned}
BaseSpeed(k) &= 100 - |E(k)| \times 0.6 \\
Turn(k) &= E(k) \times 0.8 + [E(k) - E(k-1)] \times 0.6 \\
LeftPWM(k) &= BaseSpeed(k) - Turn(k) \\
RightPWM(k) &= BaseSpeed(k) + Turn(k)
\end{aligned}$$

ここで $E(k) = a(k) - b(k)$ は現在のサンプリング周期における誤差信号、$E(k-1)$ は前周期の履歴誤差である。左右輪のPWM指令は基礎速度とステアリング補償の線形結合により得られ、$Turn > 0$ のとき左輪減速・右輪加速で左旋回、逆の場合は右旋回となる。

この制御則の収束特性を検証するため、Pythonに基づく離散時間シミュレーションシステムを構築した。本シミュレーションシステムは以下の物理要素をモデル化している:

1. **円形センサ探知モデル**:各カラーセンサの探知領域を直径1.5 cmの円形領域としてモデル化し、数値積分によりこの円形領域と黒色ガイドライン(幅2.0 cm)の重複面積を計算し、反射光強度の読み取り値を精密に算出する$^{[1]}$。
2. **差動駆動運動学**:EV3標準車輪幾何パラメータ(トレッド12.0 cm、車輪半径2.8 cm)に基づき、PWM指令を前進速度とヨー角速度にマッピングする。
3. **トレーリング式センサ配置**:センサ軸は駆動輪軸の前方10.0 cmに位置し、この「トレーリング」構成はレバーアーム効果を生み出し、振動力学挙動の一因となる。
4. **ガウス測定ノイズ**:センサ読み取り値に標準偏差0.3のガウス白色ノイズを重畳し、実環境における光学干渉をシミュレートする。

シミュレーションの初期条件は以下の通り:車体初期ヨー角 $+10^\circ$(右に偏斜)、左側センサ読み取り値 $a=10$(黒線上に完全に被覆)、右側センサ読み取り値 $b=50$(黒線端に半被覆)。シミュレーション時間ステップ $\Delta t = 0.1$ s、初期ヨー角 $+10^\circ$、初期センサ読み取り値 $a=10, b=50$。

EV3 Line-Tracking Robot — Discrete-Time PD Simulation

**図1:EV3ライントレーシングロボット離散時間PD制御シミュレーション結果**

図1は、四組の重要物理量の時間領域発展曲線を示している:

**パネル(a) — センサ反射率と誤差信号**:左センサ $a(t)$(赤色)と右センサ $b(t)$(青色)の読み取り値の時間変化。初期時刻 $a=10$(全黒)、$b=50$(半黒半白)、誤差 $e(t)=a-b=-40$。PDコントローラの介入により、誤差信号は約5秒以内にゼロ付近に速やかに収束し、その後ゼロ付近で小幅な変動を示す。この収束挙動はPD制御則の定常追従能力を検証している。

**パネル(b) — PD制御信号**:基礎速度 $BaseSpeed(t)$(緑色)とステアリング補償 $Turn(t)$(赤色)の時間領域曲線。初期の大きな誤差により基礎速度は $100 - 40 \times 0.6 = 76$ に低下し、同時にステアリング補償は大きな負の値($Turn \approx -40 \times 0.8 + (-40-0) \times 0.6 = -56$)を生成し、右輪加速・左輪減速を駆動して左への修正トルクを発生させる。誤差の収束に伴い、基礎速度は100付近に回復し、ステアリング補償はゼロに近づき、システムは定常直進モードに移行する。

**パネル(c) — ロボットの位置姿勢と振動収束**:ヨー角 $\theta(t)$(橙色)、横方向オフセット $y(t)$(紫色)、ヨー角速度 $\omega(t)$(青色)の時間領域曲線。これはPDコントローラの減衰特性を検証する核心的なパネルである。初期 $+10^\circ$ のヨー角はPD制御下で典型的な不足減衰二次系応答特性を示し、約2-3回の減衰振動を経てゼロに収束する。横方向オフセット $y(t)$ も同様に振動収束傾向を示し、最終的にガイドライン中心付近で安定する。ヨー角速度 $\omega(t)$ の振幅は時間とともに減少し、システムの運動エネルギーが微分減衰項により効果的に散逸されていることを示している。

**パネル(d) — ヨー角振動拡大図(最初の10秒)**:このパネルは各離散サンプリング時刻のヨー角を散布図で示し、PDコントローラが各時間ステップで段階的に修正を行う過程を明確に示している。この「ステップ式」の修正軌跡は、離散時間制御システムの典型的な特徴であり、コントローラが各サンプリング周期で現在の誤差に基づいて新しいPWM指令を計算し、車体姿勢を目標に段階的に近づける。

**パネル(e) — 俯瞰軌跡**:車輪軸心の二次元平面上の運動軌跡。黒色半透明の帯は幅2.0 cmのガイドラインを表す。軌跡曲線は、ロボットが始点(緑色の四角)から出発した後、S字経路を経て速やかにガイドラインに収束し、その後直線に沿って安定して終点(赤色の四角)まで前進することを示している。軌跡の滑らかさはPDコントローラの追従精度を直感的に反映している。

このシミュレーション結果は、本プロジェクトのPD制御則が約5秒以内に初期 $+10^\circ$ のヨー角誤差をゼロに収束させ、定常誤差を $\pm 0.5^\circ$ 以内に抑えられることを理論的に検証している。この収束速度と精度は、その後の実地テストの理論的根拠を提供する。

## 3. マクロ経路計画:有限状態機と決定木アルゴリズム

機械学習と決定分析理論において、決定木(Decision Tree)は特殊な木構造予測モデルであり、オブジェクトの属性とオブジェクト値の間のマッピング関係を表し、条件付き確率の計算や判定ルールの設定を通じて目標に到達する最適な計画を生成する$^{[4]}$。低層のPDアルゴリズムが基本的な軌道連続性を保証する一方で、ロボットは複雑な迷路トポロジーや特定のインタラクションタスクを処理する高次論理能力を備える必要がある。本プロジェクトでは、ネストされた分岐(Nested Switches)を利用して、状態遷移に基づく決定性決定木を構築し、論理の厳密性とロバスト性を確保した。

実験におけるマテリアル処理関連の戦略を明確にするため、プログラムは初期化フェーズで単純なランダム化とカウント変数を導入した:合計2つのバレルを配置し、バレルの位置は4つの候補地点の中から番号1、2、3、4で指定する。初期化時にそれぞれ集合 {1,2} と {3,4} からランダムに1つずつ選択し、把持する2つのバレルの位置を決定する(両方のバレルが同じ側に固定配置されるのを防ぐ)。プログラム実行時には、ブール変数 `HasBarrel` で現在のバレル保持状態を表し、整数変数 `BarrelNum`(初期値0)で把持したバレル数を記録し、バレルを1つ把持するごとに `BarrelNum += 1` とする。整数変数 `CheckNum`(初期値0)で通過した赤色チェックポイントの数を記録し、チェックポイントを通過するごとに `CheckNum += 1` とし、画面上の対応する行にそのチェックポイントの所要時間を出力する。

### 3.1 ブール論理に基づく有限状態機とセンサブラインド化防止

自動マテリアル搬送タスクにおいて、ロボットは超音波センサに依存して対象バレルを検出し、把持を実行する。把持動作完了後、マテリアルは通常センサ前方に留まるため、超音波測距の読み取り値がトリガ条件を満たし続け、繰り返し把持が発生する「センサブラインド化」問題が生じる可能性がある。この問題を解決し、実験要件である2バレル配置戦略を満たすため、本プロジェクトでは有限状態機に以下の変数を導入する:ブール変数 `HasBarrel`(現在のバレル保持状態を表す)、整数カウンタ `BarrelNum`(把持済みバレル数を記録、初期値0)、整数カウンタ `CheckNum`(通過済み赤色チェックポイント数を記録、初期値0)。

把持ロジックのトリガ条件は、引き続き超音波距離を主とする:

$$Trigger = (d_{ultrasonic} < 15) \land \neg HasBarrel$$ 把持動作を実行し、把持成功を確認した時点で、`HasBarrel = True` および `BarrelNum += 1` を実行する。グループ内で合意された配置戦略に従い、最初に把持したバレル(`BarrelNum == 1`)は、その後最初に遭遇する赤色チェックポイントに配置する。2番目に把持したバレル(`BarrelNum == 2`)は終点まで持ち運び、そこで解放する。このため、チェックポイント到達時のバレル解放条件は `HasBarrel == True && BarrelNum == 1` となる。`HasBarrel == True` だが `BarrelNum != 1` の場合は、バレル解放を行わずに、Uターンまたは対応する交差点動作のみを実行する。バレル解放完了後は `HasBarrel` を False にリセットする。 ### 3.2 有限状態機に基づく交差点決定アルゴリズム 分岐コース(T字路や十字路など)に直面した場合、システムは有限状態機に基づく決定性決定木を用いて経路選択を行う。この決定木はネストされた条件分岐により実現され、その内部ロジックは精密にテスト・検証可能である。具体的な実行フローは以下の通り: 左右両側のセンサが反射光強度が閾値未満(< 15)であることを検出すると、システムは交差点領域に進入したと判定する。システムはまずプローブ検証を実行する:右側センサがトリガされた場合、モータは出力30で0.55秒間前進して位置調整を行い、その後30/-30の出力で0.3秒間右折を実行し、中央センサが黒線を検出するまで(反射光強度 < 15)この差速を維持し、最後にモータを停止して0.02秒間待機して安定させる。左側センサがトリガされた場合、モータはまず出力30で0.5秒間前進し、その後-30/30の出力で0.3秒間左折を実行し、中央センサが黒線を検出するまでこの差速を維持する。左右センサがいずれもトリガされず、中央センサが黒線を検出した場合は、デフォルトのPD直進ロジックに移行する。中央センサが赤色マークを検出した場合は、180度Uターン動作を実行する。 ### 3.2.1 本グループ最終版の交差点決定とマテリアル配置ロジック(実装説明) 本節では、本グループの最終プログラムの具体的な実装詳細を説明し、本文中のより汎用的な決定木記述と最終コードの間に生じる可能性のある曖昧さを回避する。重要なポイントは以下の通り(コード実装を優先する): 1. 初期化フェーズでは、4つの候補位置(番号1、2、3、4)の中からランダムに2つのバレル配置位置を選択する:それぞれ集合 {1,2} と {3,4} からランダムに1つずつ選択し、把持する2つのバレルの位置を決定する。 2. 使用する変数:ブール `HasBarrel`(バレル保持状態)、整数 `BarrelNum`(バレル把持カウント、初期値0)、整数 `CheckNum`(チェックポイントカウント、初期値0)。把持成功時に `HasBarrel = True; BarrelNum += 1` を実行する。 3. 配置戦略:最初に把持したバレル(`BarrelNum == 1`)は最初に遭遇する赤色チェックポイントで解放する。2番目に把持したバレル(`BarrelNum == 2`)は終点まで持ち運んで解放する。したがって、チェックポイント到達時にバレル解放をトリガする条件は `HasBarrel == True && BarrelNum == 1` である。解放後は `HasBarrel` を `False` にリセットする。 4. 迷路走行戦略は右手法を採用する:右折可能なら右折、右折不可なら直進、直進不可なら左折。センサは並列配置されており、左右と足元の色・反射光のみを感知できるため、プログラム内では優先順位に従って判断する: - 中央センサが緑色を検出した場合:終点と判定し、メインループを終了して終了プログラムを実行する。 - 中央センサが赤色を検出した場合:チェックポイントと判定し、`CheckNum += 1` を実行し、画面上の対応する行にそのチェックポイントの所要時間を出力する。`HasBarrel == True && BarrelNum == 1` を満たす場合はバレルを解放してUターンし、そうでない場合はUターンのみ実行する。 - そうでない場合、右側センサの反射光が15未満(黒線検出)であれば、直接右折ロジックを実行する。 - そうでない場合、左側センサが黒線を検出した場合は、まず前方に小ステップで探査し、中央センサを再読み取りする:探査後に中央センサが黒線を検出した場合は直進、検出しなかった場合は左折する。 - 上記のいずれもトリガされなかった場合、デフォルトのPDライントレーシングロジックに移行する。 5. PDライントレーシングのバックアップパラメータはコード内で以下のように実装される: $$BaseSpeed = 100 - |a-b| * 0.6$$ $$Turn = (a-b) * 0.8 + ((a-b) - c) * 0.6$$ ここで `a`、`b` は左右センサの読み取り値、`c` は前周期の誤差レジスタである。 本サブセクションは最終版プログラムの実装説明であり、本文中の他の決定木とプローブタイミングの記述は汎用リファレンスであり、実際の動作は本セクションで説明したロジックに従う。 ### 3.3 終点認識:異種センサの分離とソフトウェアデバウンス 初期のテストバージョンでは、終点判定ロジック(終点黒色領域の検出)と交差点判定ロジック(黒線検出)に同じ反射率グレースケール特徴を使用していたため、環境光による閾値変動が誤判定を引き起こす可能性があった。この問題を解決するため、システムは終点標識を緑色ステッカーに設定し、中央に配置された第3のセンサがカラーモード(Color Mode)で識別を行うことで、ナビゲーションと終点判定をセンサレベルで分離した。同時に、スタートエリアの緑色マークによる誤判定を防ぐため、タイマー制約を追加した: $$Condition_{End} = (\text{Color}_{Mid} == 3) \land (\text{Timer}_{Total} > 10s)$$

色彩判定通過後、プログラムはさらに0.1秒のソフトウェアデバウンス(Software Debounce)遅延を追加し、安定した緑色信号を取得した後にのみ終点停止をトリガする。

終点到達時、画面には各チェックポイントの所要時間、総所要時間、および訪問したチェックポイントの数が順に表示される。コード実装上は `CheckNum` を使用して表示行を決定し、チェックポイント通過時に該当する所要時間を即時書き込む。

図2は、LEGO EV3グラフィカルプログラミング環境で実装された完全なプログラムコードのスクリーンショットであり、上記の有限状態機と決定木ロジックを実装している。プログラムソースファイルは main.ev3 である。

EV3プログラムソースコードスクリーンショット

**図2:EV3グラフィカルプログラムソースコード。** プログラムは有限状態機に基づく経路計画とマテリアル搬送制御ロジックを実装しており、初期化、メインループ(交差点決定、把持/解放、終点判定)、および収尾の3つのフェーズを含む。

## 4. 組込みシステムの低層特性と計算資源最適化

LEGO EV3のメイン制御ファームウェアは、低層で軽量Linuxオペレーティングシステム環境上で動作し、そのグラフィカルインターフェースは本質的に低層ハードウェア抽象化層(HAL)のカプセル化呼び出しである$^{[3]}$。ミリ秒単位のリアルタイム応答が要求される閉ループ制御システムにおいて、不適切なコード構造はシステムレベルのリソース問題を引き起こす可能性がある。本プログラムでは、ソフトウェア工学的レベルの最適化を施している。

### 4.1 CPUスターべーション防止(CPU Starvation Avoidance)

メインループ(While Loop)において、介入なしに高頻度の命令実行が行われると、ARMプロセッサのクロックサイクルの大部分を占有し、I/O通信を担当する低層ポーリングデーモン(Daemon)が中断される可能性がある。これが「CPUスターべーション」現象である。直接的な結果として、センサデータレジスタが適時に更新されず、PIDコントローラが古いデータを読み取ってモータ制御に異常をきたす。このため、メインループ末尾に0.01秒の待機(Yield/Delay)モジュールを挿入し、プロセッサのスケジューリングタイムスライス(Time Slice)を能動的に譲ることで、低層I/Oプロセスがセンサレジスタを正常に更新できるようにした。

### 4.2 PWM出力モードの最適化(Coast vs Brake)

モータ駆動モジュールを「指定時間駆動」モードに設定すると、低層ハードウェアドライバは時間閾値到達時に強制的に電気ブレーキ(モータ内部巻線の短絡)をトリガする。頻繁なブレーキは車体に高周波振動を引き起こす。なお、本グループの実装では持続的な常時オン(On)モードは採用していない。常時オンモードでは、モータ駆動中にメインループに戻って他のロジック(センサ読み取り、状態更新、決定など)を処理できず、ブロッキングによるシステム「フリーズ」のリスクが存在するためである。連続出力とスケジューラビリティのバランスを取るため、短時間ステップ駆動戦略を採用した:PDライントレーシングは0.1秒を周期とし、毎回モータを0.1秒だけ駆動(すなわち小ステップ前進)し、その後メインループに戻ってセンサ読み取りと論理判断を行う。この方式は、頻繁なタイマーブレーキによる振動問題を回避すると同時に、システムが他のイベントや状態変化にタイムリーに応答できることを保証する。

### 4.3 プロセス管理と停止手順(Process Management)

音声ファイルを頻繁に呼び出して状態をフィードバックするプログラムアーキテクチャにおいて、非正常的な物理的強制シャットダウンは低層の音声デーモンプロセスに異常を引き起こす可能性がある。システムは終点判定分岐後に標準的な停止手順を導入し、停止モジュールを呼び出すことでセンサとモータポートの安全な電源オフ、バックグラウンドスレッドの適切な破棄を保証し、複数回の連続実行環境下でのシステム安定性を確保している。

## 5. 実験結果とシステム性能分析

設計した「改良型離散PDコントローラ+有限状態機決定木」ハイブリッド制御アーキテクチャのLEGO Mindstorms EV3シャーシ上での実際の総合性能を検証するため、テストフィールドで複数回の性能実測を行い、従来のON-OFFスイッチコントローラとの比較分析を実施した。

### 5.1 実験環境とコース特性

本プロジェクトのテストコースは、長直線道路区間と純粋な直角カーブ(Right-angle Turns)、T字型交差点、十字迷路交差点を組み合わせて構成されている。直角カーブは軌跡方程式上では導関数が存在しない不連続ステップ信号に相当する。このようなステップ信号を含むコースでは、線形PDコントローラのみでは全コースをカバーできず、低層デジタルPDコントローラと有限状態機に基づく決定木を組み合わせた協調処理が必要となる。

図3は、コースレイアウトに基づいて描画されたグリッドマップであり、黒色領域が誘導経路、白色領域が空白領域、始点が右下領域、終点が左上領域に位置する。コースは長直線、直角カーブ、T字型交差点、十字路など多様な路況を含む。

テストコースグリッドマップ(29×29グリッド)

**図3:テストコースグリッドマップ。**

### 5.2 直線区間の動的応答と定常誤差分析

直線軌跡追跡テストにおいて、ON-OFFスイッチコントローラを採用したロボットは明らかな周期的振動現象を示した。スイッチコントローラはセンサの二値化結果にのみ基づいて左右に方向を調整するため、車体がガイドラインの両側で繰り返し振動し、平均推進速度が低かった。

離散PDコントローラを採用した後、車体の振動振幅は大幅に低減した。微分補償項(Derivative Term)は誤差変化率に基づいて事前に逆向きの減衰トルクを生成し、オーバーシュート現象を抑制する。式(2.5)に示す制御則に従い、基礎速度は誤差の絶対値に応じて適応的に調整される:直線定常時は $|a-b| \approx 0$ で基礎速度は上限の100に近づき、偏差が生じると基礎速度は自動的に低下して旋回に必要な向心力を低減する。関連文献の同様のハードウェア条件下での比較測定によれば、PD制御機構の導入後、直線区間の平均推進速度は約36%向上した$^{[1]}$。

### 5.3 直角カーブの決定木制御と実行効能

$90^\circ$ 直角カーブテストにおいて、ON-OFFコントローラや純粋なPIDコントローラは反射率のステップ変化を処理できず、追従遅延やコースアウトが発生した。本システムは有限状態機決定木を用いてこのような交差点を処理する。具体的な実行フローは以下の通り:

左右両側のセンサが反射光強度が閾値未満(< 15)であることを検出すると、システムは交差点領域に進入したと判定する。システムはまずプローブ検証を実行する:右側センサがトリガされた場合、モータは出力30で0.55秒間前進し、その後30/-30の出力で0.3秒間右折を実行し、中央センサが黒線を検出するまで(反射光強度 < 15)この差速を維持し、最後にモータを停止して0.02秒間待機して安定させる。左側センサがトリガされた場合、モータはまず出力30で0.5秒間前進し、その後-30/30の出力で0.3秒間左折を実行し、中央センサが黒線を検出するまでこの差速を維持する。左右センサがいずれもトリガされず、中央センサが黒線を検出した場合は、デフォルトのPD直進ロジックに移行する。 旋回完了後、制御権はPDコントローラに戻され、直線追跡を継続する。このフローは有限状態機の状態遷移を通じて直角カーブの決定論的制御を実現している。 ### 5.4 総合完走率とシステムロバスト性 マテリアル搬送タスクを組み合わせた総合テストにおいて、システムは以下の特性を示した: 1. **CPUスターべーション防止**:メインループ末尾に0.01秒の待機モジュールを挿入し、プロセッサのスケジューリングタイムスライスを能動的に譲ることで、低層I/Oプロセスがセンサレジスタを正常に更新できるようにし、CPUリソース独占によるセンサデータフリーズ問題を回避した。 2. **センサブラインド化防止**:グローバルブール状態変数 `HasBarrel` により有限状態機を構築し、超音波センサの把持トリガ条件を `(distance < 15cm) AND (NOT HasBarrel)` とした。把持完了後に状態が反転するため、その後マテリアルが超音波センサを遮っていても、システムは把持シーケンスを繰り返し実行せず、通常のライントレーシングロジックに移行する。 3. **終点認識**:中央カラーセンサをカラーモードで使用し、緑色ステッカーを終点標識として認識する。0.1秒のソフトウェアデバウンスとタイマー制約(Timer > 10s)を組み合わせることで、始点の緑色マークとの区別と終点判定を実現した。

4. **モータ制御の最適化**:連続ライントレーシングとイベント応答のバランスを取るため、本グループは短時間ステップ駆動戦略を採用した:PDライントレーシングは0.1秒を基本周期とし、毎回モータに0.1秒の駆動コマンドのみを発行(小ステップ前進)し、その後メインループに戻ってセンサ読み取りと論理判断を行う。この方式は、モータを持続的な常時オン(On)モードにした場合に発生する可能性のあるメインループのブロッキング(センサや状態切り替えをタイムリーに処理できなくなる)リスクを回避すると同時に、頻繁なタイマーブレーキによる機械的振動も低減する。

複数回のテストにおいて、システムはほとんどの場合で全コースのライントレーシングとマテリアル搬送タスクを完了できたが、動作中にセンサブラインド化やカラーセンサの誤認識などの問題が依然として発生した。全体的に、これらの問題の多くはセンサのハードウェア特性や環境(照明など)の変化に起因するものであり、ソフトウェアロジックは複数回の検証を経てロバストで回復可能であると判断され、ほとんどのテストで所定のタスクを正常に完了できた。

### 5.5 全コース実測結果

システムの実際のコース上での完全な実行効能を検証するため、図3に示すコース上で順方向と逆方向の2方向の実測を実施した。コースには合計6つの赤色ステッカーチェックポイント(180度Uターンとバレル解放動作をトリガ)が設置されており、各方向でそのうち3つのチェックポイントを通過する。

#### 5.5.1 順方向テスト結果

ロボットは始点から出発し、誘導経路に沿って順方向に進行し、順に3つの赤色チェックポイントを通過して対応するUターンとバレル解放動作を完了し、最終的に終点に到達した。

全行程の実行時間は **54.92秒**、**3つ**のチェックポイントを通過し、各チェックポイントの通過所要時間はそれぞれ:**18.43秒、29.13秒、41.81秒** であった。

#### 5.5.2 逆方向テスト結果

ロボットは終点エリアから出発し、誘導経路に沿って逆方向に進行し、順に別の3つの赤色チェックポイントを通過して対応するUターンとバレル解放動作を完了し、最終的に始点エリアに到達した。

全行程の実行時間は **51.34秒**、**3つ**のチェックポイントを通過し、各チェックポイントの通過所要時間はそれぞれ:**3.066秒、24.54秒、39.42秒** であった。

#### 5.5.3 実験ビデオ

以下のビデオは、順方向と逆方向の2方向の完全な実行過程を記録したものである。

**順方向実行ビデオ:**


https://www.youtube.com/watch?v=aTVxu1YXmjs
**ビデオ1:順方向全コース実行記録**

**逆方向実行ビデオ:**


https://www.youtube.com/watch?v=Uk0Ih7O7AaE
**ビデオ2:逆方向全コース実行記録**

#### 5.5.4 ロボットハードウェア設計

本システムで使用したLEGO EV3ロボットのハードウェア設計を図4に示す。ロボットは二輪差動駆動シャーシを採用し、前端に2つの反射光センサを搭載してライントレーシングを行い、中央にカラーセンサを搭載して終点認識と赤色マーク検出を行い、前方に超音波センサを搭載してマテリアル測距を行う。

EV3ライントレーシングとマテリアル搬送ロボット

**図4:LEGO EV3ライントレーシングとマテリアル搬送ロボットハードウェアプラットフォーム**

## 6. 結論

本プロジェクトでは、離散PD制御アルゴリズム、ブール論理と有限状態機を組み合わせ、LEGO EV3プラットフォームに基づく自律ライントレーシング及びマテリアル搬送システムを構築した。低層運動制御においては、離散化PDコントローラによりガイドラインへの適応的軌道追従を実現した。マクロ経路計画においては、有限状態機により多分岐路、マテリアル把持と解放、終点認識などのタスクの決定論的制御を実現した。同時に、組込みシステムのCPUスターべーション、モータブレーキ振動などの問題に対して低層最適化を施した。実験結果は、本システムが直角カーブ、T字路交差点及びマテリアル搬送タスクを含むコースを安定して完走できることを示しており、LEGO EV3プラットフォームの高度な開発のための参考を提供する。

## 参考文献

[1] A. Stephan, N. Karthick Pugalum Perumal, M. Shivram Kumar, C. Akash, L. Varatharajan and M. Sivapalanirajan, "Performance Analysis of LEGO Mindstorm EV3 Robot with PID Controller for Trajectory Tracking Application," 2023 7th International Conference on Intelligent Computing and Control Systems (ICICCS), Madurai, India, 2023, pp. 1782-1787, doi: 10.1109/ICICCS56967.2023.10142757.

[2] Wikipedia contributors. (2026, May 25). PID controller. In Wikipedia, The Free Encyclopedia. Retrieved 05:44, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=PID_controller&oldid=1356013976

[3] Wikipedia contributors. (2026, May 18). Lego Mindstorms EV3. In Wikipedia, The Free Encyclopedia. Retrieved 05:45, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=Lego_Mindstorms_EV3&oldid=1354810351

[4] Wikipedia contributors. (2026, April 14). Decision tree. In Wikipedia, The Free Encyclopedia. Retrieved 05:49, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=Decision_tree&oldid=1348906127

[5] Wikipedia contributors. (2026, May 24). Finite-state machine. In Wikipedia, The Free Encyclopedia. Retrieved 05:50, May 27, 2026, from https://en.wikipedia.org/w/index.php?title=Finite-state_machine&oldid=1355883596

This author has not provided a description.
Last updated on 2026-06-05