notes
Tools

Foxglove の使い方

起動→接続→panel 追加→message path→layout 保存の一連。live (foxglove_bridge / rosbridge) と rosbag/MCAP 再生の差、message path 記法、代表 panel、自作 extension まで。

要点: Foxglove は「robot 用ダッシュボード」。ROS 2 なら foxglove_bridge を上げて WebSocket で繋ぎ、live で見る。rosbag / MCAP を open すれば同じ layout で再生できる。panel の情報源は message path (/topic.field.subfield) を書くだけ。layout は JSON で export → repo コミット → 誰でも同じ画面で始められる。

一発起動#

ROS 2 側:

ros2 launch foxglove_bridge foxglove_bridge_launch.xml   # ws://localhost:8765
# or
ros2 run foxglove_bridge foxglove_bridge --ros-args -p port:=8765

Foxglove 側: 起動 → Open connection → Foxglove WebSocket → ws://localhost:8765 → 接続。

bag 再生: 起動画面で Open local file → .mcap or .db3 (rosbag2 SQLite) を選ぶ。

データソースの選択肢#

ソース用途速度
Foxglove WebSocket (foxglove_bridge)live ROS 2ネイティブ
Rosbridge (rosbridge_server)live ROS 1/2 both、ブラウザ連携もありやや遅い
MCAP file記録の再生。新プロジェクトは MCAP 推奨速い
ROS 2 bag (SQLite .db3)既存 rosbag2 の re-play遅い (SQLite)
Data platform (SaaS)クラウド越しに複数機の集約ネット越し

MCAP は Foxglove が推してる新コンテナ。ROS 2 の rosbag2 も storage_id: mcap で選べる:

ros2 bag record -a --storage mcap

Layout の考え方#

  • panel: 1 個の UI (3D / Plot / Image / Log / Diagnostics …) を持つタイル
  • layout: panel の配置 + 各 panel の設定を JSON にしたもの
  • 右上メニューから Export layout → ~/repo/layouts/live_debug.json にコミット
  • 起動時に Import from file で同じ画面を再現できる

代表 panel#

Panel何を出すか情報源 (例)
3DTF ツリー、URDF、PointCloud、MarkerArray、Path、Grid、Image on plane/tf, /robot_description, /scan, /plan
Image単眼カメラ像 (compressed / raw)/camera/image_raw/compressed
Plot数値の時系列 (multi-series、二軸、対数)/joint_states.position[0]
State Transitionsenum っぽい topic のガンチャート/hsm/status.state
Diagnostics (Summary / Detail)diagnostic_msgs/DiagnosticArray の集約表示/diagnostics_agg
Raw Messages任意 topic の生 JSON (デバッグの最終手段)/anything
Logrosout をレベル・ノード・keyword でフィルタ/rosout
PublishGUI から Bool / Twist / String を publish任意 topic
Tablearray of struct を表 (例: workpieces 一覧)/salamander/field_state.workpieces
TeleopTwist を仮想 joystick で publish/cmd_vel
Node Playground / User ScriptsJS で受信 → 変換 → 再 publish (Foxglove 内で)任意
Gauge / Indicator数値をメータ or 灯で任意
Variable SliderFoxglove 内変数を GUI でGlobal variables

Message Path 記法#

Foxglove 全 panel の共通言語。ros2 topic echo より柔軟:

/joint_states.position                    # 全配列
/joint_states.position[0]                 # 添字
/joint_states.position[:@name=="base_yaw"]  # フィルタ (name フィールドが等しい要素)
/tf.transforms[:].transform.translation.z   # 全 transform の z
{{ /joint_states.position[0] * 180 / 3.14159 }}  # 数式 (deg 換算)
  • フィルタ: [:@field=="value"] — array を条件で絞る (multi-message 型で頻用)
  • 数式: {{ ... }} — Plot / Gauge 等で単位換算・スケーリング

よく使うショートカット#

キー動作
Space再生 / 一時停止
← / →1 メッセージ戻る/進む
Shift + ←/→大きく巻き戻し/送り
Alt + drag3D パネルで pan
f全画面パネル (もう一度で戻る)
Ctrl + Ktopic ピッカー (subscribe 候補)

拡張 (自作 panel)#

TypeScript + React で書ける:

npm create foxglove-extension@latest
# 実装後
npm run local-install   # ~/.foxglove-studio/extensions/ に配置
  • ROS 2 の型は自動生成される (import { StringMsg } from "...").
  • panel は Foxglove の subscribe / advertise API を使う (context.subscribe([{topic:"/x"}])).
  • 例: ~/salamander_ws/salamander_webui/foxglove_extensions/ に自作パネルを置いて、per-slot bias を heatmap 化する等。

foxglove_bridge の param (よく変える)#

port: 8765
address: 0.0.0.0            # 別 PC から見るときは host バインドしない
use_compression: true       # 帯域が細ければ
send_buffer_limit: 100000000  # 大きい image を送る時に上げる
topic_whitelist: ['.*']     # regex で filter (perception/heavy を切る)
service_whitelist: ['.*']
param_whitelist: ['.*']

注意: foxglove_bridge は launch でしか publish されないパラメータも購読可能にする。ただし non-latched の初期値が 遅く来る — panel は subscribe した瞬間から表示されない → 数フレーム待つ。

落とし穴#

  • Image panel が黒い: QoS 不一致 (best_effort / reliable)。foxglove_bridge の QoS 自動追従を過信しないで、topic 情報ペインで QoS を確認
  • 3D の URDF が出ない: /robot_description を publish していないと出ない。robot_state_publisher が要る (実機 or sim launch で立てておく)
  • Plot が empty: message path が typo。ros2 topic echo で先に手で見る
  • .db3 の再生が遅い: MCAP に convert (ros2 bag convert --storage mcap in.db3 out.mcap)
  • layout が壊れた: JSON を直接触ると復旧できることが多い (panel id / topic name を検索置換)
  • latched (transient_local) が来ない: bridge の QoS override を掛ける、または node 側で latched depth を 1 以上に

rviz2 / rqt との違い#

項目foxgloverviz2rqt
3D シーン○◎ (highend、meshes)△
Plot / Table◎×○
Diagnostics◎ (専用パネル)×○ (rqt_robot_monitor)
rosbag / MCAP 再生◎× (別ツール要)×
リモート (Web)◎ (browser でも)××
layout 共有◎ (JSON export)○ (rviz config)×
ROS 独立○ (MCAP なら)××

使い分け: 3D 中心の可視化・meshes 山盛り = rviz2、それ以外は foxglove。rqt は個別ツール (topic monitor / bag / graph) で残る。

関連#

出典#

最終更新:

On this page