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:unconfined和shm_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顯示。