|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |
Launch files
Messages
Services
Plugins
Recent questions tagged mapoi_webui at Robotics Stack Exchange
|
mapoi_webui package from mapoi repomapoi mapoi_interfaces mapoi_rviz_plugins mapoi_server mapoi_turtlebot3_example mapoi_webui |
ROS Distro
|
Package Summary
| Version | 0.6.0 |
| License | MIT |
| Build type | AMENT_CMAKE |
| Use | RECOMMENDED |
Repository Summary
| Checkout URI | https://github.com/shimz-robotics/mapoi.git |
| VCS Type | git |
| VCS Version | main |
| Last Updated | 2026-07-15 |
| Dev Status | DEVELOPED |
| Released | RELEASED |
| Contributing |
Help Wanted (-)
Good First Issues (-) Pull Requests to Review (-) |
Package Description
Additional Links
Maintainers
- Shunsuke Kimura
Authors
- Shunsuke Kimura
mapoi_webui
English version (primary): README.md 本ファイルは日本語スナップショットです。最新の内容は英語版を参照してください。
mapoi の Web UI パッケージです。 ブラウザから地図の表示、POI の編集、ルートの確認、ナビゲーション操作、ロボット位置の監視ができます。 スマートフォンやタブレットからも利用可能です。
機能
- 地図表示: 占有格子地図をブラウザ上に表示、地図の切り替え、ズームはホイール操作・ドラッグ・ピンチのみ対応(+/− ボタンは無し)
- POI 編集: POI の追加・編集・削除・保存(mapoi_server に自動リロード通知)。地図上の POI はシングルクリックで選択、ダブルクリックで編集パネルを開く、位置ロック解除トグル(既定はロック)を切り替えると選択中の POI をドラッグで移動、扇形(yaw 制約)の先端ハンドルをドラッグで向き(yaw)を回転(いずれも Save で確定)。編集操作は Undo/Redo(Ctrl+Z / Ctrl+Shift+Z)に対応、モバイルではパネルを開かなくても地図上のフローティング Undo ボタンで直前の操作を取り消せる
- ルート表示: ルートのポリライン表示、矢印マーカー、表示/非表示の切り替え
- ナビゲーション操作: POI へのゴール走行、ルート走行、一時停止・再開、停止
- スマホ表示: Navigation を優先して開き、地図は画面の半分程度を確保
-
ナビゲーション backend 検出:
mapoi/nav/backend_statusreadiness topic (#198) 駆動で Navigation connected / unavailable バッジを UI に表示。command topic の subscriber 数による検出は、readiness topic 未受信時の capabilities payload (/api/modeおよび/api/nav/statusのnavigationフィールド) の best-effort フォールバックとしてのみ残る -
自己位置推定 backend 検出:
mapoi/localization/backend_statusreadiness topic (#209) 駆動で Localization connected バッジを表示し、Set Initial Pose UI を gate する - 自己位置推定リセット: POI 選択による Initial Pose の設定
-
ロボット位置表示: TF (
map→base_link) によるリアルタイムのロボット位置マーカー表示 - タグシステム: システムタグ・ユーザータグの表示、タグによる POI 色分け
- UI 表示設定: UI 全体(ヘッダー・POI パネル)の表示/非表示トグル、POI パネルを地図上に重ねる半透明オーバーレイ表示(不透明度調整可、設定は保持)
ノード
mapoi_webui_node
Flask ベースの HTTP サーバーを内蔵した ROS2 ノードです。
パラメータ
| パラメータ名 | 型 | デフォルト | 説明 |
|---|---|---|---|
maps_path |
string |
"" |
地図ディレクトリのパス |
map_name |
string |
turtlebot3_world |
起動時に読み込む地図名 |
config_file |
string |
mapoi_config.yaml |
設定ファイル名 |
web_port |
int |
8765 |
HTTP サーバーのポート |
web_host |
string |
0.0.0.0 |
HTTP サーバーのバインドアドレス |
map_frame |
string |
map |
TF の親フレーム |
base_frame |
string |
base_link |
TF の子フレーム |
robot_radius |
double |
0.15 |
ロボットの実寸 (m)。frontend の robot marker サイズ・active route connector の到達閾値に使う。Nav2 の robot_radius と意味は同じだが本 node は Nav2 非依存運用も想定するため独立 param とした。Nav2 を併用する場合は両者の値を一致させる (#117) |
パブリッシャー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/goal_pose_poi |
std_msgs/String |
ゴール POI 名の配信 |
mapoi/nav/route |
std_msgs/String |
ルート走行の開始 |
mapoi/nav/pause |
std_msgs/String |
ナビゲーションの一時停止 |
mapoi/nav/resume |
std_msgs/String |
ナビゲーションの再開 |
mapoi/nav/cancel |
std_msgs/String |
ナビゲーションのキャンセル |
mapoi/nav/switch_map |
std_msgs/String |
Navigation map switch 指示。mapoi_nav2_bridge 等の navigation backend が受信して地図切り替えを実行 |
サービスクライアント
| サービス名 | 型 | 説明 |
|---|---|---|
mapoi/request_initial_pose |
RequestInitialPose |
POST /api/nav/initial-pose 受信時に mapoi_server へ publish を依頼 (#211)。WebUI は直接 mapoi/initialpose_poi を publish しない |
サブスクライバー
| トピック名 | 型 | 説明 |
|---|---|---|
mapoi/nav/status |
std_msgs/String |
ナビゲーション状態の受信("status" / "status:target" 形式、transient_local QoS)。: split で target を抽出し REST /api/nav/status の target field として公開 |
mapoi/nav/command_rejected |
std_msgs/String |
reject コマンドのイベント通知の受信(volatile QoS、payload = target 文字列、#354)。mapoi/nav/status の latched snapshot を汚さず、SSE command_rejected event として frontend に転送するだけの薄い変換 |
mapoi/nav/backend_status |
mapoi_interfaces/NavigationBackendStatus |
mapoi_nav2_bridge が 1Hz で publish する navigation backend readiness summary の受信(#198)。Navigation connected バッジの表示と navigation 操作 UI の gate に使う。QoS は transient_local + liveliness(lease 5s、#208)で、publisher 死亡時は UI を disable する |
mapoi/localization/backend_status |
mapoi_interfaces/LocalizationBackendStatus |
mapoi_amcl_localization_bridge(または custom localization bridge)が 1Hz で publish する localization backend readiness summary の受信(#209)。Localization connected バッジの表示と Set Initial Pose UI の gate に使う。QoS は mapoi/nav/backend_status と同一 |
mapoi/config_path |
std_msgs/String |
外部からの地図切り替え検知 |
TF
| 変換 | 説明 |
|---|---|
map → base_link
|
ロボット位置の取得(5Hz) |
REST API
v1.0.0 に向けて URL 階層を editor 系 (/api/editor/*)・nav 系 (/api/nav/*) に分離しています (#340)。「作用対象」列は各 endpoint が触れる範囲を示します:
-
編集 context のみ:
mapoi_server内部の編集対象 (map context / YAML) を変更するだけで、稼働中の実ロボット・Nav2 には一切作用しません -
実ロボットに作用: Nav2 / navigation backend (
mapoi_nav2_bridge等) に指示を送り、稼働中のロボットの挙動 (走行・地図切替・自己位置) を変えます - 読み取りのみ: 状態取得のみで副作用はありません
| メソッド | エンドポイント | 作用対象 | 説明 |
|---|---|---|---|
| GET | /api/maps |
読み取りのみ | 地図一覧と現在の地図名 |
| GET | /api/maps/<name>/image |
読み取りのみ | 地図画像(PNG) |
| GET | /api/maps/<name>/metadata |
読み取りのみ | 地図メタデータ(解像度・原点・サイズ) |
| POST | /api/editor/select-map |
編集 context のみ (実ロボット非接触) |
mapoi_server の編集対象地図を切替 (select_map service)。Nav2 / 実ロボットの走行地図には作用しない。単独で叩くと server の編集 context と Nav2 の実 map が乖離しうる (乖離を解消するのは /api/nav/switch-map) |
| GET | /api/pois |
読み取りのみ | POI 一覧 |
| POST | /api/pois |
編集 context のみ | POI の保存 |
| GET | /api/routes |
読み取りのみ | ルート一覧 |
| POST | /api/routes |
編集 context のみ | ルートの保存 |
| GET | /api/tag-definitions |
読み取りのみ | タグ定義一覧 |
| POST | /api/custom-tags |
編集 context のみ | カスタムタグの保存 |
| GET | /api/nav/status |
読み取りのみ | ナビゲーション状態・ロボット位置・robot_radius (m) |
| POST | /api/nav/goal |
実ロボットに作用 | POI へのゴール走行 |
| POST | /api/nav/route |
実ロボットに作用 | ルート走行の開始 |
| POST | /api/nav/pause |
実ロボットに作用 | ナビゲーションの一時停止 |
| POST | /api/nav/resume |
実ロボットに作用 | ナビゲーションの再開 |
File truncated at 100 lines see the full file
Changelog for package mapoi_webui
This per-package file lists only the changes affecting mapoi_webui
(the mapoi_webui_node REST/SSE backend and the WebUI frontend), in the
flat format expected by bloom / buildfarm. Full project-level narrative:
root CHANGELOG.rst / the GitHub Releases page.
Forthcoming
0.6.0 (2026-07-15)
- Flip the UI toggle (☰)
aria-pressedsemantics so the button lights up (blue) while the UI panel is shown, matching the lock button's "on by default" look (#449). - Vendor Leaflet under
web/vendor/leaflet/and serve it from a new/vendor/<path>static route instead of loading it from theunpkg.comCDN, so the WebUI works fully offline (#394). - Add a Help overlay (
?button / modal, also opened with the?key) listing shortcuts and map/edit/save/POI-list/Navigation usage; Escape closes it with top priority over other shortcuts, and while it is open all other owned shortcuts are disabled to prevent accidental actions behind the modal (#391). - Add
L/Usingle-key shortcuts to toggle POI position-drag lock and UI panel visibility, driving the existing toggle buttons through a single code path; modifier combinations (e.g.Ctrl+L) and key repeat are ignored (#390). - Add a name search box to the POI list: case-insensitive substring
match on
poi.name, filtering the list only (map markers and the current selection are unaffected) (#383). - Pan the map to the selected POI when it is picked from the POI list (or Navigation dropdown) and falls outside the current viewport; selections originating from a map click are never panned since the clicked POI is already visible (#382).
- Warn on tab close / reload / navigation via
beforeunloadwhen a POI/route/tag editor is dirty or has an open edit form, reusing the same blocker definition as the SSE reload guard (#380). - Show a world-coordinate readout (
x: ..., y: ..., formatted to the POI YAML's decimal precision) that follows the mouse over the map and hides onmouseoutor non-finite coordinates (#381). - Skip the SSE-triggered full reload when a tab's own Save
round-trips back to it:
config_changedpayloads now carry aconfig_version(sha256), and the frontend treats a matching version as self-originated, avoiding the undo-history and map-viewport reset that a spurious reload used to cause; a "Saved" toast (shown on a successfulCtrl+Ssave) now gives the save-confirmation feedback that the reload flicker previously provided (#384). - Add
Ctrl+S/Cmd+Sto save all dirty editors, committing an open edit form first (via its OK-equivalent validation) before saving; shows a "No unsaved changes" toast when there is nothing to save, and ignores key repeat and re-entry while a save is in flight (#375). - Add a
Deletekey shortcut to remove the selected POI, with no confirmation dialog — the deletion only touches the working copy and is undoable withCtrl+Z, so an undo-hint toast is shown instead; ignored while an input is focused or a route/POI form is open (#374). - Guard the SSE
config_changedfull reload against silently discarding a dirty tab's unsaved edits and undo history: reload is now held and offered as an OK/Cancel choice (load latest vs. keep editing) whenever a POI/route/tag editor is dirty or has an open edit form (#373).
0.5.0 (2026-07-10)
- Add a machine-readable
codefield to every JSON error response, and extend the optimistic-concurrencyexpected_versioncheck toPOST /api/routesandPOST /api/custom_tags(409 +version_mismatch) (#343, #363). - Forward
mapoi/nav/command_rejectedas an SSEcommand_rejectedevent and show an auto-dismissing toast in the frontend (#354). - Allow the selected POI's marker to be dragged on the map to update
pose.x/pose.yin the working copy (saved on Save) (#239, #274). - Add a rotation handle on the tolerance sector tip to adjust
pose.yawby dragging (#275, #276). - Separate select from edit: a single click selects a POI, a double-click opens the edit form (#240, #272).
- Render a yaw-agnostic POI tolerance (
tolerance.yaw >= pi) as a filled disc and clean up the degree display (#267, #268, #271). - Highlight a POI/route on the map when picked from the Navigation dropdowns (#262, #278).
- Add Undo/Redo to the POI editor (per-mutation snapshot stack capped at 50), with dirty-state derived from saved content (#300, #301).
-
GET /api/poisreturns aconfig_version(sha256) andPOST /api/poisrejects a stale write with409; frontend surfaces a reload-confirmation dialog (#241, #245). - Add a floating button to toggle the header/panel UI and a Display
section with a floating-overlay mode plus a UI-opacity slider
(persisted in
localStorage) (#323, #324, #325). - Add a floating Undo icon on narrow screens and centralize the
route-editor reload guard at the
loadRoutes()call sites (#332, #334). - Reorganize the REST URL hierarchy under
/api/editor/(editor) vs/api/nav/(running robot) and unify separators on kebab-case; old paths return404(#340, #343). - Split
map-viewer.jsintomap-icons.js+MapViewerSectorand extract the custom-tag UI into aTagEditorclass; internal refactor, no behavior change (#346). - Remove the map zoom +/- buttons and lock POI position-drag editing
File truncated at 100 lines see the full file
Package Dependencies
| Deps | Name |
|---|---|
| ament_cmake | |
| ament_cmake_python | |
| mapoi_server | |
| ament_lint_auto | |
| ament_lint_common | |
| ament_cmake_pytest | |
| rclpy | |
| std_srvs | |
| std_msgs | |
| mapoi_interfaces | |
| tf2_ros |
System Dependencies
Dependant Packages
| Name | Deps |
|---|---|
| mapoi | |
| mapoi_turtlebot3_example |