在妙算3(Manifold 3)上 Rootless 安装 ROS2 Foxy 并完成 Bag 测试(完整踩坑记录)
🛠 妙算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 XXXcannot open shared object file→ 检查 LD_LIBRARY_PATHKeyError: command→ Python 插件初始化失败
可使用:
ldd xxx.so
检查依赖链。
完成 🎉
现在你已经在妙算3上成功运行 rootless ROS2 并完成 bag 测试。
更多推荐



所有评论(0)