🧩 第06章:PoC統合制御構成と run_main.py

本章では、AITL-H PoCにおける統合制御スクリプト run_main.py の構成と制御ループ設計を説明します。
FSM・PID・UART・センサの各モジュールを接続し、PoCとしての一貫した動作を実現します。


1. ⚙️ 統合制御の目的

  • 各制御モジュール(FSM/PID/UART/Sensor)を統合的に連携
  • 外部命令(UART)を受信し、状態制御・出力制御を連動実行
  • センサ値に応じて動的に出力制御量を変化

2. 🧾 run_main.py の基本構成

from uart_driver import UARTDriver
from fsm_engine import FSMEngine
from pid_controller import PIDController
from sensor_interface import SensorInterface

# 初期化
uart = UARTDriver()
fsm = FSMEngine(config_path="fsm_config.yaml")
pid = PIDController(kp=1.2, ki=0.5, kd=0.1)
sensor = SensorInterface()

# 制御ループ
while True:
    # 1. 外部命令を取得(UART)
    command = uart.receive()
    if command:
        fsm.handle_event(command)

    # 2. センサ更新
    sensor.update()

    # 3. FSMの出力目標値を取得
    target_speed = fsm.get_output()

    # 4. 実測値を取得して制御量生成(PID)
    measured_speed = sensor.read_distance()
    pwm = pid.compute(target_speed, measured_speed)

    # 5. PWM制御量を出力(仮想)
    print(f"PWM output: {pwm}")

3. 📡 情報の流れと各層の役割

UART(知性)
   ↓ command
FSM(本能)---→ target_speed
                      ↓
Sensor(現実)       measured_speed
                      ↓
PID(理性)---→ PWM信号出力

このように、FSMとPIDを軸にしたデータフロー制御が成立しています。


4. 🔄 テストとデバッグの観点

  • UART命令を inject_command() でテスト送信可能
  • PIDの出力ログやFSM状態ログを print で確認
  • センサ値は sensor.update() で動的更新可能

🔚 まとめ

PoC制御の中心は run_main.py にあり、FSM・PID・UART・センサを一体化して動作検証を可能にしています。
この構造をもとに、将来的にはFSMの再構成やPIDの自動調整などの拡張が見込まれます。


図6-1:PoC統合制御ブロック図

System Block Diagram