2026-08-02追記: Issue #21(P5)は技術検証ベースライン(通信基盤・診断ログ・記録再生・バックグラウンド常駐)の確立をもってcloseした。本書に書かれた製品要求(4以降)はまだ実現していない。実用アプリとしての残りスコープは、仕様策定→最小実装→試用→仕様修正のスパイラル開発としてIssue #38「P6: トラクター耕耘アシストアプリ UI仕様策定とスパイラル開発」へ引き継いだ。本書の製品要求・設計論点はP6でも参照する前提資料として残す。
Issue #21「P5: トラクター耕耘アシストアプリ製品化」と、その最初のTrack #34「P5-1 製品要求・運用シナリオ・受入条件の確定」の初稿です。
P3までに実装・実証したAndroid standard版を土台とします。基準局の常設化はIssue #33で扱い、P5は本番基準局10.0.0.4:2101/RTK2B_BASEを標準接続先として進めます。
Androidタブレット
WireGuard: 10.0.0.3
|
| Wi-Fi(開発環境)またはBluetoothテザリング(圃場)
| WireGuard / VPS
v
本番基準局Pi
10.0.0.4:2101/RTK2B_BASE
|
| NTRIP / RTCM3
v
Android製品アプリ
|
| Bluetooth SPPでRTCM3送信・NMEA受信
v
DG-PRO1RWS
開発環境ではWi-Fiを下位ネットワークとして利用できますが、基準局宛10.0.0.4はWireGuard tun0を通します。圃場ではスマホBluetoothテザリングを下位ネットワークとします。製品アプリ自身が本番基準局へNTRIP接続します。
開発場所は天空視界が狭いため、ライブ測位だけを前提に開発しません。生RTCM3、生NMEA、状態遷移を記録し、同じ入力を開発環境で再生できる構造を先に作ります。詳細はp5-rtk-development-and-test-strategy.mdを参照してください。
製品アプリは、公式Drogger GPSがインストールされていなくても、通常作業を単独で完結できなければなりません。公式Drogger GPSは#31の接続実証と、必要に応じた保守・比較診断にだけ使用し、製品の前提条件、通常操作、障害復旧へ含めません。
製品アプリは少なくとも次を一体で担当します。
スマホはインターネット接続を提供するだけで、専用アプリを必要としません。現場運用中は公式Drogger GPSと製品アプリを同時起動しません。
測位・通信・記録の所有者は画面ではなく常駐処理とします。利用者が他アプリへ切り替えた場合や画面をOFFにした場合も、作業セッションが終了または一時停止されていない限り、Bluetooth/NTRIP通信、RTCM転送、NMEA受信、測位品質判定、軌跡・診断ログの記録を継続しなければなりません。Activityは表示と操作を担当し、ActivityやViewModelのライフサイクルを測位継続の条件にしません。
フィールドではタブレットを開発PCへUSB接続せず、プログラム変更も行わないことを前提とします。最初の屋外・実車試験へ進む前に、次をPC、記録済みデータ、同一LAN、タブレット実機で完了させます。
フィールドで残してよい作業は、実測値の入力・調整、実走行、ログ採取、利用者評価だけとします。
Running、DG-PRO1RWSの3D DGNSS FLOATを確認済み。製品アプリ自身のNTRIP/RTCM転送は未実装。機種名・型式は設定プロファイルを識別するための情報として保持できますが、位置補正や誘導計算にはカタログ値を直接使用しません。アンテナの取付位置や作業機の状態で実際の位置関係が変わるため、計算には利用者が測った値を使用します。
次の値を「車体・作業機プロファイル」として保存し、初期値を入れた状態から設定画面で変更できるようにします。
KL240 + RL15)機種別の固定値から自動計算せず、取付後の実測値を正とします。同じトラクター・ロータリーでもアンテナ位置を変えた場合は値を再測定するか、別プロファイルとして保存します。
設定UIでは次を満たします。
数値の初期値は実測後に決めます。実測前に仮の数値を製品既定値として固定しません。
FIX、FLOAT、単独測位を色だけに依存せず、文字または記号でも区別する。FIX、FLOAT、単独測位、無効、stale等の製品内品質区分ログ保存量、生NMEAの保持期間、エクスポート形式はP5-3で確定します。
10.0.0.4宛がAndroidのWireGuard tun0、送信元10.0.0.3になる。10.0.0.4:2101/RTK2B_BASEへNTRIP接続し、必要RTCM5種を継続受信できる。FIX/FLOAT/単独測位の識別とログが実際のDrogger表示と整合する。次の値は仮決めで実装へ固定せず、設定またはポリシーとして分離します。各値について、誰が何を根拠に決めるか、暫定値を置く段階、最終確定する段階を次のとおり定めます。
| 未確定値 | 決定者・決定方法 | 暫定値を置く段階 | 検証・最終確定 |
|---|---|---|---|
| 誘導を許可する最低測位品質 | 開発側が誤誘導防止を優先して安全側の初期ポリシーを作り、実測ログと利用者の作業継続可否で判断する | P5-6(測位品質フェイルセーフ設計) | Cで品質遷移を検証し、Dの実車結果で確定 |
FLOAT時に誘導を許可するか |
利用者が希望する運用と、C・Dで測ったFLOATの横方向再現性を合わせて判断する | P5-1で希望を確認し、P5-6で切替可能な初期ポリシーを設定 | Dの実車試験で確定 |
| 測位をstaleとする時間 | 開発側が実際の更新周期、受信遅延、切断検出時間から算出し、自動テストで誤判定がない値を選ぶ | P5-6 | Bで通信断、Cで実更新周期を検証して確定。Dで不都合があれば再調整 |
| 許容横ずれ | 利用者が必要な作業精度を提示し、実耕幅・重ね幅・実車の横方向再現性から決める | P5-1で希望値を確認し、P5-5で設定項目として実装 | Dの実車試験で確定 |
| 警告を出す横ずれ | 開発側が許容横ずれより手前に安全側の初期値を置き、利用者が表示の早さ・煩わしさを評価する | P5-6 | Dの屋外視認性・実作業評価で確定 |
| 基準線確定に必要な最低走行距離・最低速度 | 開発側が幾何計算と記録済みNMEA再生で、安定した直線・courseを得られる条件を求める | P5-5 | Cの低リスク移動試験で検証し、Dのトラクター速度で確定 |
| courseを方位として利用できる最低速度 | 開発側が速度別course分散をログから算出し、停止・極低速で誘導しない境界を決める | P5-6 | Cで速度別に検証し、Dの実車試験で確定 |
| 耕耘幅、重ね幅、安全マージン | 利用者が実測した耕耘幅と通常の重ね幅を入力する。安全マージンは希望する余裕と実車結果から利用者と開発側で決める | P5-4(車体・作業機設定) | Dで実際の耕耘跡を確認してプロファイル値を確定 |
| アンテナから作業機中心までの前後・左右オフセット | 利用者が本番取付後に実測し、開発側が符号・座標系と補正結果を確認する | P5-4 | Dで取付状態と軌跡を確認してプロファイル値を確定 |
上表の値も、後から変更できない設計定数にはしません。各Trackで決めた暫定値または実測値を初期値として持ち、ユーザー設定UIと同じく、変更、永続保存、初期値への復元を可能にします。
具体的な製品初期値、変更可能範囲、入力検証、リセット値の策定と段階的な検証はIssue #35で管理します。
設定画面での扱いは次の2段階に分けます。
FLOAT時に誘導を許可するか詳細設定は誤変更による誘導品質低下を避けるため、通常設定と区別し、値の意味と影響を表示します。入力可能範囲を設け、無効FixやBluetooth切断中でも誘導を許可するような安全要件の解除はできません。設定変更は次回の作業開始時から適用し、進行中の作業へ即時反映しません。
利用者が決める値や表示方法は文書やアプリ内部へ固定せず、しょっちゅう変更しない永続設定として扱います。
すべてのユーザー設定は次の共通動作を持ちます。
初期値へ戻す操作は誤操作を避けるため確認を求めます。項目単位または設定区分単位で戻せるようにし、保存前には入力値を検証します。進行中の作業へ設定変更を遡及させず、作業開始時の設定値を作業ログへ複製して再現可能にします。
設定画面では次を扱います。
FLOAT時に誘導を許可するか安全上、無効Fix、stale、Bluetooth切断時の誘導停止は利用者が解除できない固定要件とします。
圃場で最初に行う走行とその後の往復手順は、圃場ごとに都度その場で判断するものとし、アプリは固定の順序を強制しない(P5-1で利用者と確認する定性的事項1)。作業中に許可する操作は、安全要求にある「結果が残る操作は停止中に行う」以外に一律の制限を設けない(同項2)。実装後に複数の安全な運用方式が必要になった場合だけ、選択可能な設定へ追加します。
初期値の具体的な数値は、前節の決定方法と確定時期に従って各Trackで設定します。未実測値へ根拠のない数値を入れず、実測が必要な項目は初回設定を促す状態も許容します。
数値設定をUIへ移しても、実際の使い方と表示の希望は利用者への確認なしに確定しません。P5-1では次の回答を得て、運用シナリオ、画面要件、安全要求へ反映しました(2026-08-01、Track #36作業中に確認)。