🛠 妙算3(Manifold 3)Rootless 安装 ROS2 Foxy 全流程实战(含踩坑与解决方案)

关键词:Manifold3、PSDK、Rootless、ROS2 Foxy、rosbag2、LD_LIBRARY_PATH、PYTHONPATH


一、环境说明

硬件平台:
👉 DJI Manifold 3(妙算3)
系统版本:
Ubuntu 20.04 (arm64)
权限情况:
❗ 无 root 权限
❗ 只能使用 /open_app/install 进行 rootless 安装

目标:

  • 安装 ROS2 Foxy
  • 运行 ros2 CLI
  • 运行 ros2 topic
  • 成功录制 rosbag2
  • 成功播放 bag 文件

二、Rootless 安装 ROS2 Foxy

妙算3自带 install.py,支持非 root 权限安装依赖。


1️⃣ 添加 ROS2 源并安装 ros-base

python3 install.py apt ros-foxy-ros-base \
  --source "deb https://mirrors.aliyun.com/ros2/ubuntu/ focal main" \
  --gpg-key "https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc"

建议:

  • 只安装 ros-base
  • 不建议安装 desktop(妙算性能有限)

🔐 如果 GPG 网络异常怎么办?

如果出现:

Unable to establish SSL connection
GPG error

可以手动下载密钥:

wget https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc

然后改用本地密钥:

python3 install.py apt ros-foxy-ros-base \
  --source "deb https://mirrors.aliyun.com/ros2/ubuntu/ focal main" \
  --gpg-key ros.asc

⚠ 注意:

  • 不要在 --source 中使用 signed-by
  • install.py 会自动处理密钥

三、环境变量配置(核心步骤)

Rootless 安装最大的问题不是安装,而是运行时路径。

在 ~/.bashrc 中加入(安装后会有一些是自动加入的):

# >>> userpkg env begin
export OPEN_APP_PREFIX="/open_app/install"

export PATH="$OPEN_APP_PREFIX/usr/bin:$OPEN_APP_PREFIX/opt/ros/foxy/bin:$PATH"

export LD_LIBRARY_PATH="$OPEN_APP_PREFIX/opt/ros/foxy/lib:$OPEN_APP_PREFIX/opt/ros/foxy/lib/aarch64-linux-gnu:$OPEN_APP_PREFIX/usr/lib:$OPEN_APP_PREFIX/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH"

export PKG_CONFIG_PATH="$OPEN_APP_PREFIX/usr/lib/aarch64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"

export CMAKE_PREFIX_PATH="$OPEN_APP_PREFIX:$OPEN_APP_PREFIX/usr:$OPEN_APP_PREFIX/opt/ros:$OPEN_APP_PREFIX/opt/ros/foxy:$CMAKE_PREFIX_PATH"

PYVER=$(python3 -c "import sys; print(f'python{sys.version_info.major}.{sys.version_info.minor}')")
export PYTHONPATH="$OPEN_APP_PREFIX/opt/ros/foxy/lib/$PYVER/site-packages:$PYTHONPATH"
# <<< userpkg env end

然后执行:

source ~/.bashrc

四、常见错误与解决方案


❌ 错误 1:pkg_resources.DistributionNotFound

pkg_resources.DistributionNotFound: ros2cli==0.9.13

原因

Python 没加载 rootless site-packages。

解决

确保设置:

export PYTHONPATH=/open_app/install/opt/ros/foxy/lib/python3.8/site-packages:$PYTHONPATH

❌ 错误 2:librclpy_common.so 找不到

cannot open shared object file

原因

LD_LIBRARY_PATH 未包含 ROS2 lib。

解决

export LD_LIBRARY_PATH=/open_app/install/opt/ros/foxy/lib:$LD_LIBRARY_PATH

❌ 错误 3:libconsole_bridge.so.1.0 找不到

ARM 平台库在:

lib/aarch64-linux-gnu

解决

export LD_LIBRARY_PATH=/open_app/install/opt/ros/foxy/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH

❌ 错误 4:No module named netifaces

Failed to load entry point 'echo'

原因

Python 依赖缺失。

解决

python3 -m pip install --user netifaces

不要 sudo。


五、测试 ROS2(正确流程顺序)

推荐顺序:
先确认 ROS2 正常 → 再确认有数据源 → 再录包 → 再查看 → 再回放验证


1️⃣ 确认 ROS2 CLI 正常

ros2 -h

2️⃣ 查看当前有哪些 Topic

ros2 topic list

如果此时只有:

/rosout
/parameter_events

说明还没有业务节点在发布数据。


3️⃣ 启动测试节点(作为数据源)

如果没有 demo 节点,可以先安装:

python3 install.py apt ros-foxy-demo-nodes-py \
  --source "deb https://mirrors.aliyun.com/ros2/ubuntu/ focal main" \
  --gpg-key "https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc"

启动 talker(打开一个新终端):

ros2 run demo_nodes_py talker

4️⃣ 验证消息是否正常发布

在另一个终端执行:

ros2 topic echo /chatter

如果看到持续输出,说明 Topic 正常发布。

按:

Ctrl + C

退出 echo。


5️⃣ 开始录制 Bag(推荐只录关键 Topic)

ros2 bag record -o my_test_bag /chatter

如果想录全部 Topic:

ros2 bag record -a

停止录制:

Ctrl + C

6️⃣ 查看录制信息

ros2 bag info my_test_bag

7️⃣ 播放 Bag

ros2 bag play my_test_bag

8️⃣ 回放验证

播放时,在另一个终端执行:

ros2 topic echo /chatter

如果能看到回放数据,说明录制与播放完整流程验证成功 ✅

六、重要建议

在妙算3上:

✔ 运行节点
✔ 运行算法
✔ 发布数据

⚠ 不建议:

  • 长时间录制高带宽图像
  • 录制大量点云
  • 大规模写入文件

更推荐架构:

妙算3发布数据 → 网络传输 → 地面PC录制bag

七、总结

在妙算3上 rootless 安装 ROS2 是可行的。

核心难点不是安装,而是:

  • PYTHONPATH
  • LD_LIBRARY_PATH
  • ARM 架构库路径
  • Python 依赖补齐

一旦环境变量配置正确,ROS2 Foxy 可以稳定运行。


八、排错技巧

如果出现:

  • No module named XXX → pip install --user XXX
  • cannot open shared object file → 检查 LD_LIBRARY_PATH
  • KeyError: command → Python 插件初始化失败

可使用:

ldd xxx.so

检查依赖链。


完成 🎉

现在你已经在妙算3上成功运行 rootless ROS2 并完成 bag 测试。

Logo

立足具身智能前沿赛道,致力于搭建全球化、开源化、全栈式技术交流与实践共创平台。

更多推荐