3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ポエム]自動航行ヨットを作りたい

3
Posted at

自動航行ヨットとは?——風だけを頼りに、正解の帆走を目指して

はじめに

「自動航行」と聞くと、目的地を指定すれば勝手に着いてくれる船や車を想像するかもしれません。
この記事で扱うのは、それとは少し違う——帆(セール)で風を受けて進む、ヨットの自動航行です。
ヨットや自動航行に詳しくない方でも、「何を目指しているのか」が伝わるように書いていきます。

自動航行の「ボート」と「ヨット」の違い

自動航行のボートは、モーターでプロペラを回して進む船を、コンピュータが操縦するイメージです。
舵(ラダー)の向きとエンジンの出力を制御すれば、目的地まで連れて行くことは、技術的には実現しやすい分野です。

一方、自動航行ヨット帆船型です。
エンジンに頼らず、風の力だけで進むことを前提にしています。
風向・風速・波の向き・艇の傾きなど、変動の多い環境で「どう帆と舵を操るか」を自動で決める必要があり、制御の難しさも目標の高さも、モーター艇の自動航行とは一線を画します。


理想形:エンジンレス、風だけのモビリティ

目指しているのは、エンジンを一切使わないヨットです。
風が吹いている限り、その力だけを使って進む——完全にクリーンなモビリティとしての側面もあります。
ただし、このプロジェクトの主目的は「環境に優しい移動手段」ではなく、もう一歩先にあります(後述)。

想定しているサイズ:人が乗れる「470ディンギー」クラス

「どれくらいの大きさのヨットか」というと、1〜2人が乗れる程度の大きさを想定しています。
具体的には、470(フォーセブンティ)というディンギーに近いサイズ感です。
ディンギーとは、比較的小さな帆船の一種で、オリンピック種目にもなっている艇です。
作者が学生時代に乗っていた艇でもあり、「自分が実際に体験してきたスケールの帆走」を、自動化の対象にしたいという想定があります。

図で見る:艇の主な部位

自動制御するには「何を動かすか」をはっきりさせておく必要があります。ディンギーの主な部位を図にまとめました。

スクリーンショット 2026-02-08 12.52.30.png

  • マスト … 帆を支える縦の柱。
  • メインセール … 風を受けるメインの帆。その「張り具合」で推進力が変わる。
  • ジブ … マストより前の帆。ジブシートで張り具合を調整する。
  • ラダー(舵) … 艇の向きを変える。自動航行ではここを制御して風に対する角度を決める。
  • メインシート … メインセールの張り具合を決めるロープ。引く量でセールの形が変わる。
  • ジブシート … ジブの張り具合を決めるロープ。
  • バング … ブームを下に押さえ、帆の立体形状(ドラフト)を整える。
  • カニンガム … メインセールの前縁の張り。ドラフトの前後の位置を調整する。
  • センターボード … 艇底から下に出す板。横流れを抑え、抵抗とのバランスを取る。

目的地に着くだけではない——「最高・最適なスピードで帆走する」こと

「自動航行」と聞くと、「A地点からB地点まで連れて行ってほしい」というニーズが真っ先に浮かぶかもしれません。
確かに、舵(ラダー)を適切に操作できれば、風任せとはいえ目的地の方向に近づいていくことは、不可能ではありません

しかし、このプロジェクトが目指しているのはそこではありません。
目指しているのは、**「そのときの風と波に対して、最高・最適なスピードで帆走すること」**です。

そのためには、

  • セール(帆)の形状を、風速・風向・艇の傾きに合わせて常に最適に保つ
  • 風に対する角度(どの方向に艇の鼻を向けるか)を、理論とデータに基づいて最適に保つ

といったことを、計算・シミュレーション・機械学習やAIなどを駆使して、常にリアルタイムで制御する必要があります。
「ただ舵を切って目的地に向かう」のではなく、「帆走性能を最大化する制御」がゴールです。

風は一定ではない——ブローとラル、そして時系列変化

風の強さは一定ではありません。
**強く吹く一瞬(ブロー)**や、一時的に弱くなること(ラル)があり、風向きも刻一刻と変わります。
つまり、風は時系列的に絶え間なく変化する
ものです。

だからこそ、

  • その変化をセンサーなどで捉え
  • 次のブローやラルを見据えつつ
  • セールの出し具合や舵角を、常に最適に更新し続ける

ような制御が求められます。
「一度設定したら終わり」ではなく、変化に合わせて「ほぼ完璧」に近い制御をし続ける——それが、この自動航行ヨットの技術的な挑戦の一つです。

動力を使わないクリーンなモビリティ、そしてもう一つの役割

エンジンを使わない帆走は、完全にクリーンなモビリティとしての意義があります。
一方で、作者が最も大切にしているのは、**「人間のヨットスキル向上のための、お手本となるヨット」**であることです。

ヨットの世界に「正解」を——人間の感覚と、自動航行ヨットの役割

ヨットでは、

  • メインシート(帆の張り具合を決めるロープ)をどれくらい引くか
  • 風に対してどの角度で進むか

といった判断は、経験を積むと感覚で分かるようになってきます。
しかし、感覚は定性的なものであり、100%正しいとは言い切れません
「なんとなくこのくらい」で済ませている部分が、少なからずある世界です。

対して、目指している自動航行ヨットは、

  • 風・波・艇の状態を計測し
  • 計算・シミュレーション・AIなどで最適解を出し続ける

ことで、ほぼ常に「100%に近い正解」の操船を実現することを狙っています。

そうなると、次のようなことが可能になります。

  1. 人間のヨット選手が、この自動航行ヨットと一緒に帆走する

    • 「正解の艇」がすぐ横にいるので、自分の操船と比較できる。
  2. 自動航行ヨットからデータを得る

    • 感覚(定性的)ではなく、定量的に自分の操船を分析できる。
    • 「このときメインシートはあと何センチ引くべきだったか」「風角はあと何度だったか」といった「正解」と照らし合わせられる。

「正解がほとんどない」と言われがちなヨットの世界に、正解を提示できる——
それが、この自動航行ヨットプロジェクトの、密かな野望であり、技術ブログで伝えていきたい核心です。

実現のための技術とアプローチ

ここからは、「どういう技術で、どのように実現していくか」を整理します。
ヨットや制御に詳しくない方でも流れが追えるように、全体像→センシング→制御→計算・AI→開発の進め方の順で説明します。

全体像:センサー → 計算 → アクチュエータ

自動航行ヨットのシステムは、おおまかに次の3段階で成り立ちます。

スクリーンショット 2026-02-08 12.53.40.png

  1. センサー … 風・艇の向き・位置・傾きなどを計測する。
  2. 制御コンピュータ … 計測値をもとに「今どう舵と帆を動かすか」を計算する。
  3. アクチュエータ … 舵(ラダー)やメインシートなどを実際に動かす装置。

艇が動くと風の当たり方や傾きが変わり、またセンサーの値が変わるので、「計測 → 計算 → 操作 → また計測」のループが常に回り続けます。
このループを速く・正確に回すことが、ブローやラルへの対応につながります。


1. センシング:何を測るか

「正解に近い操船」をするには、今の状態を正確に把握する必要があります。想定している計測項目は以下の通りです。

計測対象 主なセンサー・方法 役割
風向・風速 風速計(アネモメータ)、風向計 セールの角度・張り具合の基準。ブロー・ラルの検知
艇の向き コンパス(方位センサー)、IMU 風に対する角度(クローズ/ビーム/ラン等)の計算
艇の位置 GPS コース・速度の把握。データロガーとしても利用
艇の傾き IMU(加速度・角速度) ヒール角に応じたセールトリムの補正
舵角・シート位置 ポテンショメータやエンコーダ 実際に「今どうなっているか」をフィードバック

これらをセンサーフュージョン(複数センサーの情報を統合)して、「今の風・艇の姿勢・速度」を一つの状態として扱えるようにします。


2. 制御:何を動かすか(アクチュエータ)

「計算で出した最適値」を、実際の動きに変える部分です。

  • ラダー(舵)

    • サーボモーターやリニアアクチュエータで舵角を制御。
    • 風に対する最適な見かけの風角(アップウィンド/ダウンウィンドなど)を保つ。
  • メインシート

    • ワンチ(巻き取り機構)やリニアアクチュエータで、帆の「出し具合」を制御。
    • 風速・ヒール角に応じて、セールが常に最適な形になるようにする。

これらに加え、ジブ・バング・カニンガム・センターボードも制御対象に含めることで、より細かく「正解」に近い帆走が可能になります。各部位の役割は以下の通りです。

部位 説明 制御で実現すること
ジブ 艇の前側(マストより前)にある小さめの帆。メインセールと組み合わせて使う。ジブシートでその張り具合を調整する。 風向・風速に応じたジブの出し具合を最適化し、メインと協調した推進力とバランスを取る。
バング ブーム(帆の下辺を支える横棒)を下方向に押さえるロープ/機構。ブームの高さや帆のふくらみ(ドラフト)の形に効く。 帆の立体形状を整え、風速やヒールに応じて最適なセール形状を保つ。
カニンガム メインセールの前縁(ルーフ)をマスト側に引っ張る調整機構。帆の前側の張り具合で、ドラフトの前後の位置が変わる。 風が強くなったときなどにドラフトを適切な位置に保ち、失速やパワー不足を防ぐ。
センターボード 艇の底面から下に突き出る板(フィン)。上げ下げできる。水中で横方向の力を受け止め、艇が横に流れるのを抑える。 風向・艇速・ヒールに応じて出し具合を変え、横すべりと抵抗のバランスを最適化する。

470のようなディンギーでは、アップウィンドではジブとメインのバランスが速度に直結し、バング・カニンガムでセール形状を微調整し、センターボードの深さで横流れと抵抗を調整します。
これらをジブシート・バング・カニンガム・センターボード用のアクチュエータで電動化し、制御対象に加えることで、「舵とメインシートだけ」の自動化より一歩踏み込んだ最適帆走を目指せます。

開発の進め方としては、まず舵とメインシートの2つを自動化し、動作を確認してからジブ・バング・カニンガム・センターボードを順に制御対象に加えていくのが現実的です。


3. 計算・アルゴリズム:どう「正解」を出すか

ここが、**「目的地に着くだけ」ではなく「最速・最適帆走」**を実現する中核です。
以下、各段階を「何を用意するか」「どう計算に使うか」まで具体化して書きます。


3.1 物理モデル・シミュレーション

何を用意するか

  • 極線図(ポーラーダイアグラム)
    「風速 X ノットのとき、風角 θ で艇速が何ノットになるか」を表した図(または表・関数)です。
    470 など既存艇なら、クラス協会の公表データや文献、あるいはフェーズ1で有人帆走しながら計測したデータから作成します。
    計測では「風速・風向・艇速・艇の向き(COG)・舵角・各シート長」を同時に記録し、風角ごとの最速点をまとめると極線図の近似が得られます。
  • 船舶運動モデル(オプション)
    帆に働く揚力・抗力、艇体・ラダー・センターボードの力などを式で表し、「舵角・シート量・風向・風速 → 艇の加速度・角速度」を計算するモデルです。
    研究用のオープンな帆船モデル(例:MMG型をベースに帆の項を追加したもの)を参考にし、パラメータは計測データで同定すると、極線図だけでは分からない「過渡応答」や「舵効き」も扱いやすくなります。

制御でどう使うか

  • 極線図(またはその関数化)から、「今の風速・目標コース(アップウィンド/ダウンウィンド等)に対して、理論上最も速い風角」を求め、それを目標見かけ風角として舵の制御に渡します。
  • 船舶運動モデルがある場合は、シミュレータとして「この舵角・シートで数秒先の艇の向き・速度がどうなるか」を予測し、最適化や強化学習の環境に使えます。

具体的な画像・資料

極線図のイメージを掴むための概念図と、参照できる外部資料を挙げます。

image.png

  • 極線図(ポーラーダイアグラム)
    • Wikipedia: Polar diagram (sailing) … 極線図の定義と、ヨットデザイナー・VPP(Velocity Prediction Program)で作られることの説明。
    • NauticEd: How do Polar Plots Work on a Sailboat? … 読み方(風角・風速から艇速を読む)、VMG 最大の風角の考え方、アップ/ダウンウィンドの目標角度の例(英文)。
    • ORC Sailboat Data … Offshore Racing Congress の極線図データベース。多数のヨットの極線データが公開されている(主にクルーザー等。ディンギーは少なめだが、極線図の「形」の参考になる)。
    • BoatDesign.net: 470 polar diagram … 470 の極線図についての議論。実測や VPP で作る場合の注意点など。
  • 船舶運動モデル(MMG・帆船)
    • Springer: The MMG Model … MMG(Mathematical Model for Manoeuvring Ship Motion)の教科書的説明。艇体・プロペラ・舵を分離して表現する考え方。帆船では「帆の項」を追加する拡張が可能。
    • GitHub: mmgdynamics … MMG 型の船舶運動シミュレーションの実装例(コード)。帆船専用ではないが、運動方程式の構造の参考になる。

3.2 最適化:VMGとリアルタイム計算

何を最適化するか

  • VMG(Velocity Made Good)
    目標方向(例えば上風のマーク)に対する「有効な速さ」です。
    • アップウィンドでは「艇速 × cos(目標との角度差)」で、風角を詰めすぎると艇速が落ち、開きすぎると進みが悪いので、そのトレードオフを最大化する風角が存在します。
    • 極線図が「風角 → 艇速」の対応になっていれば、目標方向を固定したとき VMG が最大になる風角を探索(グリッドサーチや勾配ベース)で求められます。

image.png

  • セールトリム
    同じ風角でも、メインシート・ジブシート・バング・カニンガムの組み合わせで艇速が変わります。
    極線図を「風速・風角・トリムパラメータ」を入力にした表や関数に拡張しておき、VMG を最大化するトリムを同様に探索します。

リアルタイムでどう回すか

  • 制御周期(例:10〜50 Hz)ごとに、現在の風速・風向・艇の向き・目標コースを入力に、上記の探索を実行し、「目標舵角」「目標シート長(またはワンチ回転数)」を出します。
  • 計算時間が厳しい場合は、あらかじめルックアップテーブルを作っておき(風速・風角で離散化)、テーブル補間で近似解を返す方式にすると、組み込み機でも現実的です。
  • 最初は「風角だけ最適化し、トリムは簡易ルール」から始め、徐々にトリムも最適化に含めていくのが進めやすいです。

3.3 時系列・変化への対応(ブロー・ラル)

何を予測するか

  • 対象は見かけ風速・見かけ風向(または真風)の時系列です。
    ブロー・ラルは「数秒〜十数秒」のスケールで変動することが多いので、5〜30 秒先までの予測があると制御に使えます。

どう予測するか

  • シンプルな方法
    • 移動平均や指数平滑でトレンドをとり、「直近の傾向が続く」と仮定して外挿する。
    • オートレグレressive(AR)や ARIMA など、短い履歴から次の1〜数ステップを予測する。
  • 少し発展
    • LSTM や 1D-CNN で、過去数十秒の風速・風向の系列を入力に「次の N 秒」の系列を出力するモデルを学習。
    • 教師データは、フェーズ1で取得した「風・艇状態」のログ。ラベルは「その時点から N 秒後の実際の風」にすると、先回り制御用の入力が得られます。

制御でどう使うか

  • 先回り制御
    予測で「5 秒後にブローが来る」と分かれば、その時点に合わせてメインシートをあらかじめ少し緩める、といった前倒しのトリムが可能になります。
    逆に「ラルが来る」と予測すれば、シートを詰めて失速しないようにする、などです。
  • 実装では、「現在の最適トリム」と「予測に基づく補正量」を足し合わせ、さらに変化率をリミットして急な舵角・シート変化を防ぐと、艇の挙動がなめらかになります。

3.4 機械学習・AIの活用

教師あり学習で何をやるか

  • 入出力の設計
    • 入力:その時点の風速・風向(真風/見かけ風)、艇速、艇の向き、ヒール角、目標コース(アップ/ビーム/ダウンなど)。
    • 出力:最適としたい舵角メインシート長(または相対量)、必要ならジブシート・バング・カニンガム・センターボード。
  • 教師データの作り方
    • フェーズ1で熟練者が操船したときの「状態 → そのときの操作」を記録する。
    • あるいは、物理モデル+最適化(3.1・3.2)でシミュレーションを回し、「状態 → 最適操作」のペアを大量に生成する。
      実データとシミュレーションを混ぜた半教師でも構いません。
  • モデル
    状態は連続値なので、多層パーセプトロン(MLP)小さいニューラルネット で「状態ベクトル → 操作量」の回帰を学習。
    計算が軽く、組み込み向きです。必要なら、風角ごとに別モデルにするなどして精度を上げられます。

強化学習で何をやるか

  • 環境
    船舶運動モデル(3.1)でシミュレータを用意し、「状態 = 風・艇の向き・速度など、行動 = 舵角・シート量の変化」とします。
  • 報酬
    • 例:目標方向への VMG を毎ステップ加算、あるいは「N 秒後の目標方向への接近度」を報酬にする。
    • 舵やシートの急変をペナルティに入れておくと、現実に近い滑らかな方策が学習されやすいです。
  • アルゴリズム
    PPO や SAC など、連続行動空間向けのアルゴリズムが扱いやすいです。
    シミュレータと計算環境が整っていれば、物理モデルだけでは拾いきれない「ブローへの素早い反応」などを方策に含められる可能性があります。

ハイブリッドの進め方(現実的にはここから)

  • 物理+ルールで大枠
    極線図と VMG 最適化で「目標風角」「目標トリム」を算出。
    舵は PID などで目標風角に追従、シートは目標値へワンチを動かす、という形でまず自動化します。
  • ML で補正
    • 教師あり:「状態 → 物理モデルとの差分(補正量)」を学習し、物理の出力に足し合わせる。
    • 時系列予測(3.3)の結果を入力に含めれば、「ブロー・ラルへの先回り」も ML で微調整できます。
  • こうすると、物理が効いている間は安定し、ML が効いていない領域でも最低限の操船はできるため、実艇での試行や検証がしやすくなります。

4. 開発の進め方:段階的に作る

いきなり「完全自動・最適帆走」を目指すより、段階を分けて進めるのが安全で、学習も得やすいです。

フェーズ 内容 得られるもの
1. 計測・データ取得 センサーを載せ、有人で帆走しながら風・舵角・シート・位置・速度などを記録 実データ、極線図の検証、ブロー・ラルの時系列データ
2. 舵の自動化 ラダーをアクチュエータで動かし、「風に対する角度を一定に保つ」など単純なルールから開始 自動操舵の実現、制御ループの実装経験
3. 帆の自動化 メインシートを自動化し、風速・ヒールに応じてセールの張り具合を制御 舵+帆の協調、トリムの自動化
4. 最適化・AI 物理モデル・最適化・時系列予測・MLを組み合わせ、常に「正解に近い」操船を目指す お手本となる自動航行ヨット、データ提供によるスキル向上支援

まずはフェーズ1で「正解に近いデータ」を集め、そのデータでシミュレーションやMLを磨く
同時にフェーズ2で舵だけでも自動化し、艇の上で制御の感覚を掴む——という並行の進め方が現実的です。


5. 技術スタックの例(イメージ)

「何を使うか」の一例です。実際の選定はコスト・耐久性・艇のサイズに合わせて変更してかまいません。

分野 備考
ハード Raspberry Pi / Jetson Nano など 船上の振動・水しぶき対策(防水ケース等)が必要
センサー 市販の風速・風向計、IMU、GPS marine グレードのものがあると安心
アクチュエータ サーボ、DCモーター+ワンチ 舵は力が要るため、トルクの大きいものを選ぶ
ソフト Python(制御・ML)、C++(リアルタイム制御) シミュレーションは MATLAB/Simulink や Python で
データ 時系列DB、ログファイル 後から「正解」分析やMLの教師データとして利用

このように、センシング・制御・計算・AIを組み合わせ、段階的に「正解の帆走」に近づけていく——
それが、自動航行ヨットを実現するための技術的な道筋です。
今後の記事では、各フェーズやセンサー選定・制御アルゴリズムなど、もう少し具体的な話を書いていければと思います。


まとめ

  • 自動航行ヨットは、モーター艇の自動航行とは違い、帆船型風の力のみで進むことを目指す。
  • サイズは1〜2人乗り470ディンギーのような艇を想定している。
  • ゴールは「目的地に着く」ことではなく、最高・最適なスピードで帆走すること。
  • そのために、セール形状風に対する角度を、計算・シミュレーション・機械学習・AIで常に最適制御する。
  • 風のブロー・ラルなど時系列的な変化にも、きちんと対応できる制御を目指す。
  • エンジンレスというクリーンなモビリティの側面もありつつ、人間のヨットスキルのお手本となり、感覚ではなく定量的な正解を提示することで、ヨットの世界に「正解」を作る——それがこのプロジェクトの目指すところです。
  • 実現技術としては、センサー → 制御計算 → アクチュエータのループを、計測・舵の自動化・帆の自動化・最適化・AIの順で段階的に組み上げていく。
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?