Skip to content

Releases: StvLi/dsh-ros2

dsh-ros2 v0.10.0

Choose a tag to compare

@StvLi StvLi released this 21 Aug 07:43

New: ros2_install — FishROS one-click ROS2 install (interactive)

When the host has no ROS2, the agent can — after user confirmation via approval — launch the FishROS one-click installer (http://fishros.com/install) and drive it interactively to completion.

  • 38th tool ros2_install (L2, approval-gated):
    • check: probes ROS2 state — usable / installed-but-not-sourced (detects /opt/ros setup.bash, advises rosSetup, prevents accidental re-install) / absent
    • start (approval): launches the installer in an interactive PTY session (supports sudo password prompts and numeric menus)
    • send / status / stop: drive menus, watch progress, cancel anytime
  • scripts/pty_session.py: pure-stdlib PTY session manager (daemonized; non-blocking master).
  • installer param allows local path / file:// overrides (mirrors, offline, tests).
  • Tests: 83 pass incl. end-to-end mock-installer menu flow; machine smoke verifies installed-but-not-sourced refusal. Docs + skill updated.

dsh-ros2 v0.9.3

Choose a tag to compare

@StvLi StvLi released this 21 Aug 03:46

GPU passthrough rendering verified (30 Hz cap reached)

Tested the GPU-passthrough plan on the NVIDIA RTX 4060 Ti: the offscreen renderer now reaches the full 30 Hz request rate (was ~22 Hz on llvmpipe), with no extra pipeline cost (GPU->CPU readback 1-2ms vs ~20ms saved per frame).

Fix

NVIDIA GLX context creation failed with BadValue: rviz's default FSAA=4 makes OGRE select 32-bit ARGB-visual fbconfigs, which NVIDIA GLX refuses for GL 3.0 core contexts (verified: only 24-bit / samples=0 configs create). Fix: RenderSystem::disableAntiAliasing() in rviz_offscreen_node.

Results (1000x750, 0.39M-tris low-poly, rate=30)

metric llvmpipe NVIDIA GPU
steady fps (static) 21.5-22.9 Hz 30.0 Hz
steady fps (motion) 21.5 Hz 30.0 Hz
onUpdate (render) ~30 ms ~9 ms
llvmpipe regression - 22.4 Hz (no degradation)

Full report: docs/gpu-passthrough-test.md (hardware, 3-layer troubleshooting: NVML/DRM-perms/32-bit-visual GLX, usage).

dsh-ros2 v0.9.2

Choose a tag to compare

@StvLi StvLi released this 21 Aug 03:24

Fixed: double rendering eliminated (30Hz request reaches ~22Hz, 2x)

Profiling at rate=30 exposed the real bottleneck: VisualizationManager::onUpdate() already renders the scene (ogre_root_->renderOneFrame(), gated by render_requested_ / >10ms wall time), and the main loop then called win->render() again - a second render of the same scene every frame (+31ms/frame).

Results (0.39M-tris low-poly, 1000x750, rate=30)

config fps
original (double render + events every frame) 11.1 Hz
+ events throttle (5 frames) 14.2 Hz
+ remove redundant win->render() 21.5-24.2 Hz (motion 21.5 Hz steady, 400+ frames)
regression: 10Hz request 10.3 Hz (at cap)
  • Published frame is pixel-identical to before (verified fg 73331).
  • TF refresh stays at full rate (onUpdate every frame; the v0.9.1 onUpdate/2 compromise is no longer needed).
  • Code comment documents the cause. Docs: architecture.md 5.2, robot-state-vision-test.md 8.4.

dsh-ros2 v0.9.1

Choose a tag to compare

@StvLi StvLi released this 21 Aug 02:30

Performance: 30 Hz request measurement + loop-budget optimizations

Measuring at rate=30 revealed the frame rate is capped by fixed per-loop overhead independent of the requested rate (10 Hz and 30 Hz both landed near 11 Hz): onUpdate ~30ms + processEvents ~30ms + render ~31ms.

Optimizations

  1. Throttle app.processEvents() to every 5 frames - per-frame Qt event processing triggers paint events causing a second OGRE render (~30ms/frame). events 30ms -> 0ms.
  2. vm.onUpdate() every 2 frames - rendering stays per-frame; TF pose refresh at 15Hz is buffered by the FrameManager transformer (no data loss). Display-update cost amortized in half.

Measured (1000x750, 0.39M-tris low-poly, 30Hz request)

config fps
original (events every frame) 11.1 Hz
+ events throttle 14.2 Hz
+ onUpdate/2 16.2 Hz
800x600 + all 17.1 Hz
30Hz + motion 15.6 Hz
regression: 10Hz request 10.3 Hz (at cap)

Conclusion: llvmpipe software rasterization (render 27-31ms/frame, scales with triangle count not resolution) is the hard floor; 30 Hz requires GPU passthrough (non-llvmpipe). Docs: architecture.md 5.2, robot-state-vision-test.md 8.4.

dsh-ros2 v0.9.0

Choose a tag to compare

@StvLi StvLi released this 20 Aug 12:13

Performance: offscreen motion rendering 5.4x faster

As an embodied-agent base plugin dsh-ros2 must be invoked very quickly. The offscreen render of robot motion was the bottleneck (1.9 Hz steady frame rate for the 2.76M-triangle lite_urdf scene).

Two key optimizations (verified)

  1. Render-dedicated low-poly meshes - new scripts/simplify_visual_meshes.py (open3d quadric decimation, 2.76M -> 0.39M tris): 1.9 -> 7.1 Hz, RSS 962 -> 386 MB, mesh load ~90s -> ~40s, rendered content 99.7% preserved. (Do NOT use fast_simplification - its output loses ~70% of rendered content in OGRE.)
  2. Direct pixel read - rviz_offscreen_node reads the OGRE render target via copyContentsToMemory instead of PNG capture + decode: capture 38ms -> 1-2ms/frame, frame 74ms -> 31ms, frame rate 7.1 -> 10.2 Hz (at the rate cap).

Net effect

  • Steady motion-render frame rate 1.9 -> 10.2 Hz (5.4x)
  • RSS 962 -> 386 MB (2.5x less), mesh load ~90s -> ~40s
  • Pixel output identical to the PNG path (verified)
  • Per-100-frame frame-timing log for frame-budget observability

Docs: architecture.md 5.1, robot-state-vision-test.md 8, README, CHANGELOG.

dsh-ros2 v0.8.2

Choose a tag to compare

@StvLi StvLi released this 20 Aug 11:31

Colored URDF rendering verified (lite_urdf materials). See CHANGELOG.md.

dsh-ros2 v0.8.1

Choose a tag to compare

@StvLi StvLi released this 20 Aug 08:41

Fixes

  • RViz2 offscreen render: meshes piled at origin — the URDF published to RobotModel had _link-suffixed link names that did not match the live TF frame names, so every link transform lookup failed and all meshes rendered at the fixed-frame origin. Fix: publish the robot's actual /robot_description (link names == TF frames) with file:// mesh paths.
  • Removed a self-built rclcpp::spin(raw_node) thread that crashed with "node already added to an executor" (VisualizationManager already spins its internal executor in onUpdate()).
  • Added FrameManager diagnostics (transformer id, frame names, transformHasProblems) to the render node log.

Changed

  • Orbit camera Distance ≈ 1.5–2.0 m for an RViz-like close robot view.
  • robot-state-vision-analysis skill updated with Jazzy Description Source/Topic, URDF↔TF frame-name matching, file:// mesh paths, camera distance and the FM frames diagnostic.
  • Docs: architecture.md §4.4, robot-state-vision-test.md §6; refreshed docs/images/robot_mesh_full.jpg with the verified render.

dsh-ros2 v0.8.0

Choose a tag to compare

@StvLi StvLi released this 20 Aug 08:03

v0.8.0

  • RViz2 离屏渲染支持机器人本体 mesh 渲染(修复 Jazzy RobotModel 属性、file:// mesh 路径、视距三个根因)
  • RViz2 可视化 + 头部/手眼相机 4 路联合分析验证(状态正常)
  • 实时视觉流水线(vlm_node / vlm_bridge_node / vision_bringup / rviz_offscreen)
  • 37 工具 + 2 skill(ros2-diagnostics / robot-state-vision-analysis)
  • 79 tests green; CI Node 22/24