Newer
Older
RobotCar / src / common / config.py
"""
config
プロジェクト共通の設定値を管理するモジュール
環境固有の値は .env ファイルから読み込む
"""

import os
from pathlib import Path

from dotenv import load_dotenv

# .env ファイルの読み込み(src/ の親ディレクトリを探索)
_env_path = Path(__file__).resolve().parent.parent.parent / ".env"
load_dotenv(_env_path)

# ── ネットワーク設定(.env から読み込み) ──────────────────────

# PC の IP アドレス
PC_IP: str = os.getenv("PC_IP", "127.0.0.1")

# 画像送信ポート(Pi → PC)
IMAGE_PORT: int = int(os.getenv("IMAGE_PORT", "5555"))

# 操舵量送信ポート(PC → Pi)
CONTROL_PORT: int = int(os.getenv("CONTROL_PORT", "5556"))

# ── 画像設定 ──────────────────────────────────────────────

# カメラ画像の幅 (px)
FRAME_WIDTH: int = 320

# カメラ画像の高さ (px)
FRAME_HEIGHT: int = 240

# JPEG 圧縮品質 (0-100)
JPEG_QUALITY: int = 55

# ── 通信設定 ──────────────────────────────────────────────

# 操舵量の送信頻度 (Hz)
CONTROL_PUBLISH_HZ: float = 20.0

# 操舵量の受信タイムアウト (秒),超過でモーター停止
CONTROL_TIMEOUT_SEC: float = 0.5

# ── モーター設定(GPIO ピン番号,BOARD モード) ───────────

# モーター A(左)
MA_IN1: int = 19
MA_IN2: int = 21
MA_PWM: int = 23

# モーター B(右)
MB_IN1: int = 15
MB_IN2: int = 13
MB_PWM: int = 11

# モーター PWM 周波数 (Hz)
MOTOR_PWM_FREQ: int = 100

# モーター極性反転フラグ
MOTOR_LEFT_REVERSED: bool = True
MOTOR_RIGHT_REVERSED: bool = True

# ステアリング方向反転フラグ
STEER_REVERSED: bool = True


# ── アドレス生成ヘルパー ──────────────────────────────────


def image_bind_address() -> str:
    """画像受信側(PC)のバインドアドレスを返す"""
    return f"tcp://*:{IMAGE_PORT}"


def image_connect_address() -> str:
    """画像送信側(Pi)の接続先アドレスを返す"""
    return f"tcp://{PC_IP}:{IMAGE_PORT}"


def control_bind_address() -> str:
    """操舵量送信側(PC)のバインドアドレスを返す"""
    return f"tcp://*:{CONTROL_PORT}"


def control_connect_address() -> str:
    """操舵量受信側(Pi)の接続先アドレスを返す"""
    return f"tcp://{PC_IP}:{CONTROL_PORT}"