NavVLA は、OmniVLA-edge を用いた移動ロボット向けナビゲーション実装です。
本リポジトリには、以下の 2 つの機能が含まれます。
OmniVLA-edgeのファインチューニング- ROS 2 ノードによるナビゲーション推論
OmniVLA 本体はサブモジュールとして管理され、本リポジトリ側では訓練スクリプト、データセット読み込み、ROS 2 ノード、設定ファイルを提供します。
データセット構成は dataset.yaml の datasets ネストに記述し、複数データセットをまとめて学習できます。
OmniVLAサブモジュールを取得するOmniVLA-edgeの重みをtraining/config/train.yamlのweights_pathに配置する- 学習用データセットを用意し、
training/config/dataset.yamlを更新する - TensorBoard を使う場合は
tensorboardをインストールする
- 学習設定: training/config/train.yaml
- モデル設定: training/config/network.yaml
- データセット設定: training/config/dataset.yaml
python3 train.py \
--config training/config/train.yaml \
--network-config training/config/network.yaml \
--dataset-config training/config/dataset.yaml学習時には TensorBoard ログを出力します。
デフォルトの出力先は training/runs/tensorboard です。
tensorboard --logdir training/runs/tensorboard記録される主な loss:
loss/train_totalloss/train/<dataset_name>_trainloss/train_datasets_totalloss/eval/<dataset_name>_testloss/eval_total
各データセットは以下の形式を想定しています。
<DATA_FOLDER>/
<traj_name_1>/
traj_data.pkl
traj_prompt.txt
0.jpg
1.jpg
2.jpg
...
<traj_name_2>/
traj_data.pkl
traj_prompt.txt
0.jpg
1.jpg
2.jpg
...
train / test split 側は traj_names.txt を持つディレクトリを指定します。
<SPLIT_FOLDER>/
traj_names.txt
traj_prompt.txt は、言語指示を使う modality_id で学習する場合に使用します。
例:
Go to the blue box
Go to the blue box
Turn left at the corner
...
言語指示を使わない modality_id では、traj_prompt.txt は goal modality として利用されません。
| 項目 | 内容 |
|---|---|
data_folder |
画像と traj_data.pkl を含むデータセット本体ディレクトリ |
train |
traj_names.txt を含む train split ディレクトリ |
test |
traj_names.txt を含む test split ディレクトリ |
end_slack |
軌道末尾の余裕フレーム数 |
goals_per_obs |
1 観測あたりに何回 goal をサンプリングするか |
waypoint_spacing |
waypoint の時間間隔 |
modality_id |
使用モダリティ ID |
言語教師データを使う学習では、modality_id に language を含む ID を指定します。
現在の raw trajectory dataset では satellite/map 入力は未実装のため、実用上は 7 または 8 を使用します。
ROS 2 ノード navigation は、画像入力と言語指示などの goal modality を購読または設定し、OmniVLA-edge で推定した軌跡を nav_msgs/Path と geometry_msgs/Twist に変換して出力します。
起動ファイル:
設定ファイル:
ros2 launch navvla navigation.launch.py| Topic | 型 | 方向 | 内容 |
|---|---|---|---|
/image_raw |
sensor_msgs/msg/Image |
Subscribe | 現在観測画像 |
/autonomous |
std_msgs/msg/Bool |
Subscribe | 自律動作の有効 / 無効 |
/prompt |
std_msgs/msg/String |
Subscribe | 言語指示 |
/cmd_vel |
geometry_msgs/msg/Twist |
Publish | 速度指令 |
/path |
nav_msgs/msg/Path |
Publish | 推定 waypoint 列 |
/prompt は modality_id が language を含む場合に goal instruction として使われます。
新しい message を受け取るたびに CLIP text encoder で特徴量を更新し、推論時の feat_text としてモデルへ渡します。起動直後、または language を使わない modality_id では "No language instruction" が使われます。
| 項目 | 内容 |
|---|---|
weights_path |
推論に使う OmniVLA-edge 重み |
context_size |
観測履歴長 |
len_traj_pred |
予測 waypoint 長 |
interval_ms |
推論周期 |
modality_id |
使用モダリティ |
metric_waypoint_spacing |
waypoint のメートル換算係数 |
goal_pose |
目標姿勢 |
goal_image_path |
ゴール画像パス |
linear_max_vel |
最大並進速度 |
angular_max_vel |
最大角速度 |
言語指示は nav.yaml の固定値ではなく、/prompt トピックから std_msgs/msg/String として入力します。
| ID | 内容 |
|---|---|
| 0 | satellite only |
| 1 | pose and satellite |
| 2 | satellite and image |
| 3 | all |
| 4 | pose only |
| 5 | pose and image |
| 6 | image only |
| 7 | language only |
| 8 | language and pose |
本リポジトリの独自実装部分は MIT License を想定しています。
一方で OmniVLA/ はサブモジュールとして管理される別プロジェクトであり、OmniVLA 側のライセンスに従います。
- 本リポジトリ独自コード: MIT
OmniVLA/: OmniVLA/LICENSE に従う