Context

實際操作 NeuracoreAI/meta_quest_teleop 的 ros_visualiser,並嘗試用 Tiryoh docker-ros2-desktop-vnc (Humble) 容器跑 ros2_tf_publisher.py。過程中釐清了 publisher 的定位,以及如何用 MuJoCo + Franka 替換實體機器人做驗證。

Key Insights

  • ros2_tf_publisher.py 是視覺化工具,不是 teleop controller:它只把 Quest controller 的 transform 發佈到 ROS2 TF tree 讓 RViz 顯示。Button B 的 home pose 邏輯也只影響 TF 顯示,不控制機器人。實際 teleop 需要另外寫控制迴圈。
  • 實際 teleop 架構不走 ROS topics:以 example_agilex 為參考,pipeline 是 MetaQuestReader → PinkIKSolver → robot controller,完全在 Python 裡,不依賴 ROS2 subscriber。
  • VNC image 取代 X11 forwarding:用 tiryoh/ros2-desktop-vnc:humble 時,不需要 xhost +local:docker 或掛載 /tmp/.X11-unix;虛擬 display :1 已內建。Humble 需額外加 security_opt: seccomp:unconfinedshm_size: 512m
  • numpy/scipy 二進位衝突修法:系統 apt scipy 綁定舊 numpy ABI;用 pip install --upgrade scipy 覆蓋,或直接用含相容版本的 venv(uv 管理),並以 PYTHONPATH=$(pwd):$PYTHONPATH .venv/bin/python 執行,合併 ROS 環境與 venv 套件。
  • MuJoCo 替換 CAN controller 最少改動PinkIKSolver(from example_agilex)是 URDF-agnostic,換 Franka FR3 URDF 和 ee_frame=fr3_hand 即可。只需寫約 30 行的 MujocoSimController,把 data.qpos 設成 IK 輸出的 joint angles,搭配 mujoco.viewer.launch_passive 顯示。

Connections