Skip to content

Adding ROS simulation assets#33

Open
YanzeZhang97 wants to merge 205 commits into
MINT-SJTU:developfrom
YanzeZhang97:main
Open

Adding ROS simulation assets#33
YanzeZhang97 wants to merge 205 commits into
MINT-SJTU:developfrom
YanzeZhang97:main

Conversation

@YanzeZhang97
Copy link
Copy Markdown

Summary

This PR adds the initial tb3 navigation-related ROS simulation module for RoboClaw. Although it is only for tb3 right now with basic slam and navigation functions. I will continue to add other mobile robots and possible CrazySwarm/drone navigation in this folder.

Shiki42 and others added 10 commits April 1, 2026 16:58
Moved the frontend project under roboclaw-web/ui, updated the server to serve the new dist path, and reshaped the interface around a cleaner control layout with a global floating chat entry.

The dashboard and settings surfaces were simplified to reduce visual noise while keeping the core data collection and provider configuration flows intact. Styling was consolidated around reusable card treatments and a tighter black/white/blue palette so the app feels more consistent after the navigation and shell refactor.

Constraint: Production static file serving now needs to resolve the frontend from roboclaw-web/ui/dist
Rejected: Keep the frontend in ui/ and only copy build artifacts | leaves the project layout split and harder to maintain
Confidence: medium
Scope-risk: broad
Reversibility: clean
Directive: If the frontend location changes again, update both roboclaw/web/server.py and the frontend build docs in the same change
Tested: Frontend production build from roboclaw-web/ui
Not-tested: Browser smoke test after the latest visual and directory migration changes
…dling

This bundles the workflow UI, remote explorer, quality validation pipeline, pause/resume controls, and the web chat/runtime changes needed to operate them from one branch. It also fixes the action validator so vector-based datasets such as DROID are no longer misreported as having 100% missing values.

Constraint: Keep the workflow, explorer, and web runtime changes on the existing branch without adding new dependencies
Rejected: Split the work into multiple commits | the current branch already interleaves the workflow backend, frontend, and test surfaces
Confidence: medium
Scope-risk: broad
Directive: Re-run quality validation after pulling; historical quality results still reflect the pre-fix missing-value logic
Tested: npm run build; .venv/bin/pytest tests/test_explorer_remote_api.py tests/test_workflow_annotation_api.py tests/test_workflow_validators.py tests/test_web_channel.py tests/test_loop_save_turn.py -q
Not-tested: Full browser end-to-end exercise against a long-running remote quality batch
Reversibility: clean
@Elvin-yk
Copy link
Copy Markdown
Collaborator

Elvin-yk commented Apr 12, 2026

感谢这个 PR,导航 + 仿真的方向是对的。看完之后有几个建议,主要是关于代码组织方式。

1. 第三方 ROS 包不应该提交到仓库

这个 PR 有 69 万行新增 / 2049 个文件,其中绝大部分来自直接复制进来的第三方包:

文件数 是什么
DynamixelSDK 1598 舵机驱动,含 C#/C/C++/Java/MATLAB/Python 全平台代码
turtlebot3_simulations 253 TB3 的 Gazebo 仿真模型
turtlebot3 134 TB3 的 ROS 驱动
turtlebot3_msgs 16 TB3 消息定义

这些都是公开的上游包,不是我们的代码。直接 vendor 进来会导致:版本无法跟上游同步、仓库体积膨胀、review 不可能做。

Elvin-yk and others added 18 commits April 12, 2026 16:26
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…orkbench

Merge origin/main into PR MINT-SJTU#30 branch. Conflict resolution:

- Discard ui/ → roboclaw-web/ui/ directory move; keep main's ui/ structure
- Move PR's new routes to roboclaw/http/ (main renamed embodied/web/ → http/)
- Fix all import paths: roboclaw.embodied.web → roboclaw.http
- Add PR's new workflow/explorer frontend components to ui/
- Register workflow + explorer routers in http/routes/__init__.py
- Fix datasets_root() to respect manifest config (consistent with routes/datasets.py)
- Add pyarrow dependency

Preserved: dataset workflow workbench, explorer, quality validation,
annotation pipeline, chat image upload, user metadata attachment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
… quality)

Rename the dataset workflow module to "curation" for clarity. Fix critical
path-traversal vulnerability in HF import, remove GET-triggered downloads,
reject unknown validators, cap candidate_limit, split oversized validators.py,
deduplicate shared helpers, fix error swallowing and deep nesting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove media_path from image upload response (info disclosure)
- Fix INSTALLATION.md paths (roboclaw-web/ui → ui/)
- Slim down curation/__init__.py (211→17 lines)
- Lazy import pyarrow in bridge.py
- Add early size check before regex in image upload
- Add CancellationToken for cooperative worker thread cancellation
- Add per-path lock for annotation writes (prevents race)
- Cache is_stage_pause_requested with mtime check
- Add pagination (offset/limit) to /quality-results endpoint

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add centered modal popup on episode hover using React Portal
- Display video player with time synchronization
- Show all available joints dynamically (no hardcoded limits)
- Add comprehensive chart features:
  - Y-axis labels with dynamic scaling
  - X-axis time labels
  - Both Action (orange) and State (blue) trajectory lines
  - Red time indicator line synced with video playback
- Modal sized at 980px (70% of original design)
- Add close button with hover effects
- All values adapt dynamically to different robots
Unify the web UI into a streamlined control surface
PR MINT-SJTU#30 accidentally removed package.json, index.html, tsconfig, tailwind,
postcss, and entry files — breaking `npm run build` and the auto-rebuild
in `roboclaw web start`.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…U#30 merge

PR MINT-SJTU#30 moved ui/ to roboclaw-web/ui/, but the merge kept ui/ and discarded
roboclaw-web/. This left old components importing deleted controllers and
new components missing ux.tsx and i18n keys.

Restored: dashboard.ts, connection.ts, provider.ts, chat.ts, Toast.tsx, ux.tsx
Added: 60+ curation/quality/explorer translation keys (zh+en)
Fixed: DatasetExplorerView null filtering, @dnd-kit dependency

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…rge state

Reverts all changes after 8b283c7 (PR MINT-SJTU#29 merge). PR MINT-SJTU#30's directory
restructure caused broken frontend builds and missing modules.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace scattered sys.platform checks with serial_patterns_for_platform()
that returns the correct glob patterns per OS:
- macOS: cu.* only (correct communication endpoint, no duplicates)
- Linux: ttyACM*, ttyUSB*

Remove _dedupe_macos_serial_ports and related functions — no longer needed
since we only scan cu.* on macOS. Keep port_candidates() for probe
robustness (cu.* tried first on macOS).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- discovery.py: fix `dev=candidate if port.dev else port.dev` (no-op
  when port.dev is truthy) → always record the working candidate path
- motion_detector.py: log warning when all port candidates fail to
  read positions, instead of silently returning empty dict

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Elvin-yk and others added 30 commits April 29, 2026 20:25
…ssions

Allow curation to resolve explorer dataset sessions
…lorer-helpers

Teach explorer helpers to inspect remote dataset episodes
…source-routes

# Conflicts:
#	roboclaw/http/routes/explorer.py
…plorer-source-state

# Conflicts:
#	ui/src/i18n/store.ts
…aset-explorer-source-page

# Conflicts:
#	ui/src/domains/datasets/explorer/pages/DatasetExplorerPage.tsx
#	ui/src/index.css
…sodes-right-rail

# Conflicts:
#	ui/src/domains/datasets/explorer/pages/DatasetExplorerPage.tsx
#	ui/src/index.css
…tory-playback

# Conflicts:
#	ui/src/domains/datasets/explorer/pages/DatasetExplorerPage.tsx
…ource-routes

Route explorer requests across remote local and path datasets
…ource-state

Keep Dataset Explorer source state across sessions
…plorer-source-page

Let Dataset Loading browse remote local and path sources
…nsity-cards

Add collapsed Dataset Loading insight cards
…ight-rail

Put Dataset Loading episodes in a right rail
…playback

Keep trajectory cursor smooth during playback
The data-reading implementation already matches the old account's main branch, but the curation route tests could still inspect real ~/.roboclaw session and dataset state on the developer machine. Isolating those roots keeps verification repeatable while preserving the current data reader behavior.

Constraint: Direct push to main requested; product data-reading files already match Elvin-yk/RoboClaw.
Rejected: Change dataset session listing behavior | would diverge from the requested old-account implementation.
Confidence: high
Scope-risk: narrow
Directive: Keep tests isolated from real ~/.roboclaw state when exercising dataset session discovery.
Tested: uv run pytest tests/test_explorer_remote_api.py tests/test_datasets_crud.py tests/test_embodied_dataset_ops.py tests/test_curation_annotation_api.py
Not-tested: Full repository test suite.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants