Context

實際在 tiryoh/ros2-desktop-vnc:humble Docker container 中安裝並跑起 Meta Quest → Panda IK → MuJoCo viewer 整條 pipeline,過程中踩到多個命名和 API 坑。

Key Insights

  • PyPI 套件名稱陷阱(robotics 生態常見)pip install pink 裝到程式碼格式化工具(0.8.1),正確的是 pip install pin-pinkpip install pinocchio 也是錯的,正確是 pip install pinimport pink / import pinocchio 雖然一樣,但裝錯套件完全不同。
  • colcon build 找不到 README.md:colcon 在 build/<pkg>/ 目錄執行 setup.pyopen("README.md") 找不到 source 目錄的檔案。修法:sed 改成 open(os.path.join(os.path.dirname(__file__), "README.md"))
  • example_agilex 不是 ROS2 package:沒有 package.xml,colcon 直接忽略。解法是把 pink_ik_solver.pyvectorised_posture_task.py 複製到 teleop script 旁邊,同目錄直接 import。
  • robot_descriptions fr3_description 沒有 URDF_PATH:FR3 在 robot_descriptions 只有 MJCF,改用 panda_description.URDF_PATH(Panda 和 FR3 kinematic chain 幾乎相同,驗證 teleop 夠用)。MuJoCo XML 也要對應改成 franka_panda/scene.xml,end-effector frame 改成 panda_hand
  • MetaQuestReader APIget_buttons() 不存在,正確是 last_buttons(屬性,非方法),讀取前加 or {} 防止 None。
  • numpy/scipy ABI 衝突:apt scipy 綁定舊 numpy ABI;pip install pin-pink 升級 numpy 後 scipy 壞掉。修法:pip3 install --upgrade numpy scipy 先升級兩個再裝其他套件。
  • Docker container 就是 venv:在容器內不需要另建 venv;用 colcon build --symlink-install 管理 ROS2 packages,system pip 管理非 ROS2 依賴,source install/setup.bash 統一環境。

Final Setup

FROM tiryoh/ros2-desktop-vnc:humble
RUN apt-get update && apt-get install -y android-tools-adb \
 && rm -rf /var/lib/apt/lists/*
RUN pip3 install --upgrade numpy scipy && \
    pip3 install mujoco pin-pink pin quadprog robot_descriptions
# 一次性
touch ~/ros_ws/src/meta_quest_teleop/README.md   # colcon workaround
colcon build --symlink-install --packages-select meta_quest_teleop
 
# 每次執行
source /opt/ros/humble/setup.bash
source ~/ros_ws/install/setup.bash
python3 mujoco_teleop.py --ip <quest-ip> \
  --xml ~/mujoco_menagerie/franka_panda/scene.xml \
  --ee-frame panda_hand

Connections