======================================================================== 操舵量計算仕様 (Steering Calculation Specification) ======================================================================== 1. 概要 (Overview) ------------------------------------------------------------------------ 1-0. 目的 カメラ画像から黒線の位置を検出し,PD 制御によって操舵量と速度を 算出する方法を定義する. 1-1. 基本方針 ・制御方式: PD 制御(I 項なしで開始) ・偏差の算出: 画像の近方・遠方2領域から黒線の重心位置を取得する. ・操舵量: 偏差に基づく PD 制御で決定する. ・速度: 操舵量に応じて動的に調整する(カーブ減速,直線加速). 2. 画像処理パイプライン (Image Processing Pipeline) ------------------------------------------------------------------------ 2-1. 処理フロー 1. カメラからフレームを取得する. 2. グレースケールに変換する. 3. ガウシアンブラーを適用する(軽いノイズ除去). 4. 固定閾値で二値化する(BINARY_INV). 5. 横方向クロージングで反射による途切れを補間する. 6. 近方領域・遠方領域それぞれで黒ピクセルの重心 x 座標を算出する. ■ 横方向クロージング 光の反射により線が途切れる問題への対策として, 二値化後にモルフォロジーのクロージング処理(膨張→収縮)を行う. 横長の楕円カーネルを使用することで,縦方向への影響を抑えつつ 線の途切れを左右から埋める. ・カーネル形状: 横長楕円(幅 25 × 高さ 3) ・効果: 反射で欠けた部分を,左右の検出済みピクセルからつなぐ ・注意: カーネル幅は途切れの大きさに応じて調整する 2-2. 2領域方式 カメラは真下を向いているため,画像内の位置が路面上の距離に対応する. 画像を上下2つの領域に分割し,それぞれで線の位置を検出する. 画像上部 ─── 遠方領域(これから通る場所) │ 画像下部 ─── 近方領域(今いる場所) ・近方領域: 画像下部の水平帯.現在の車体位置に対する線のずれを示す. ・遠方領域: 画像上部の水平帯.この先のコース方向を示す. ※ 各領域の具体的な y 座標範囲は実走テストで調整する. 3. 偏差の算出 (Error Calculation) ------------------------------------------------------------------------ 3-1. 基本偏差 各領域で検出した黒線の重心 x 座標と,画像中心 x 座標との差を 偏差とする. e_near = image_center_x - near_line_x e_far = image_center_x - far_line_x ・e > 0: 線が画像の左側にある(右に寄っている) ・e < 0: 線が画像の右側にある(左に寄っている) ・e = 0: 線が画像の中心にある(理想状態) 3-2. 制御用偏差 近方偏差と遠方偏差を重み付きで合成し,制御に使用する偏差とする. e = α * e_near + β * e_far ・α: 近方の重み(現在の位置補正) ・β: 遠方の重み(先読み補正) ・α + β = 1.0 とする. ※ α,β の具体的な値は実走テストで調整する. 4. PD 制御 (PD Control) ------------------------------------------------------------------------ 4-1. 操舵量の計算 steer = Kp * e + Kd * (e - e_prev) / dt ・Kp: 比例ゲイン.偏差に比例した操舵量を出力する. - 大きいほど応答が速いが,振動しやすい. ・Kd: 微分ゲイン.偏差の変化率に比例した操舵量を出力する. - 振動を抑制し,カーブへの追従を滑らかにする. ・e_prev: 前フレームの偏差. ・dt: 前フレームからの経過時間. 4-2. 操舵量の制限 計算結果を -1.0 ~ +1.0 の範囲にクランプする. steer = clamp(steer, -1.0, +1.0) 4-3. I 項について 初期段階では I 項を使用しない. 理由: カーブ中に偏差が蓄積し,カーブ出口でオーバーシュート (ワインドアップ)を引き起こすリスクがあるため. 直線走行で定常的にずれ続ける症状が確認された場合にのみ, 小さい Ki で追加を検討する. 5. 速度制御 (Speed Control) ------------------------------------------------------------------------ 5-1. 基本方式(操舵量連動) throttle = max_throttle - k * |steer| ・max_throttle: 直線での最大速度. ・k: 減速係数.操舵量が大きいほど減速する. ・|steer| が大きい → カーブ中 → 減速 ・|steer| が小さい → 直線 → 加速 5-2. 発展方式(曲率推定連動) 基本方式で速度の限界を感じた場合,近方・遠方の偏差差分から 曲率を推定し,カーブの手前で事前に減速する方式へ移行する. curvature = |e_far - e_near| throttle = max_throttle - k * curvature ※ 基本方式で完走を達成した後に検討する. 6. パラメータ一覧 (Parameters) ------------------------------------------------------------------------ ■ 画像処理パラメータ ・画像解像度: 320x240 ・ブラーカーネルサイズ: 5 ・二値化閾値: 80(固定閾値) ・クロージングカーネル: 幅 25 × 高さ 3(横長楕円) ・近方領域の y 範囲: 画像高さの 70% ~ 100% ・遠方領域の y 範囲: 画像高さの 30% ~ 50% ■ 偏差合成パラメータ ・α(近方の重み): 実走テストで決定 ・β(遠方の重み): 実走テストで決定 ■ PD 制御パラメータ ・Kp(比例ゲイン): 実走テストで決定 ・Kd(微分ゲイン): 実走テストで決定 ■ 速度制御パラメータ ・max_throttle(最大速度): 実走テストで決定 ・k(減速係数): 実走テストで決定