近期在 elf2 开发板(aarch64 架构)上集成 Astra 深度相机时遇到了一些问题,经过多次调试后成功解决。以下是完整的安装过程、问题排查及示例运行记录,供参考。
一、环境准备
- 开发板:elf2(aarch64 架构,运行 Ubuntu 系统)
- 相机:Orbbec Astra Pro
- SDK:AstraSDK-v2.1.3-Linux-aarch64.tar.gz(官网下载,需匹配架构)
二、SDK 安装步骤
-
解压压缩包
进入存放压缩包的目录,执行解压命令(根据架构选择对应文件):
tar -xzvf AstraSDK-v2.1.3-94bca0f52e-20210611T023312Z-Linux-aarch64.tar.gz
进入解压目录并赋予权限
cd AstraSDK-v2.1.3-Linux-aarch64
cd install
chmod +x install.sh # 为安装脚本添加执行权限
执行安装脚本
sudo ./install.sh
安装完成后,终端会提示添加环境变量:
export ASTRA_SDK_INCLUDE=/path/to/sdk/install/include
export ASTRA_SDK_LIB=/path/to/sdk/install/lib
source ~/.bashrc # 使环境变量生效
注意:需将路径替换为实际解压后的路径(如/home/elf/Fly_Car_ws/src/...
)。
三、示例程序编译与运行
SDK 提供了多种示例,包括 SFML 图形界面示例和纯 C++ 命令行示例。以下是编译运行步骤及常见问题解决。
1. 编译前依赖安装
- SFML 图形库(用于可视化示例):
sudo apt-get update sudo apt-get install -y libsfml-dev libglfw3-dev libglew-dev
CMake(编译工具)
sudo apt-get install -y cmake
2. 编译示例程序
进入示例目录并创建编译目录:
cd ~/Fly_Car_ws/src/AstraSDK-v2.1.3-Linux-aarch64/samples
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc) # 多核编译加快速度
- 编译输出分析:
- 若出现
Could NOT find SFML
警告,可忽略(不影响非图形示例),或安装 SFML 库解决。 - 编译完成后,可执行文件生成在
build/bin/
目录下,而非示例子目录中。
- 若出现
3. 运行示例程序
-
SFML 图形界面示例(以深度查看器为例):
cd bin
./SimpleDepthViewer-SFML
- 若弹出窗口显示灰度 / 伪彩色图像,说明相机正常工作。
- 注意:需连接显示器或通过
ssh -X
启用 X11 转发远程显示。
纯 C++ 命令行示例(以深度事件回调为例):
cd bin
./DepthReaderEventCPP
-
- 终端会输出深度帧的宽度、高度、时间戳等信息,验证数据获取功能。
四、常见问题及解决方法
-
sudo ./install.sh
找不到命令- 原因:未解压压缩包,目录下仅有
.tar.gz
文件。 - 解决:先执行解压命令,再进入解压后的目录操作。
- 原因:未解压压缩包,目录下仅有
-
编译后找不到可执行文件
- 原因:可执行文件默认生成在
build/bin/
目录,而非示例子目录。 - 解决:通过
find . -type f -executable
搜索路径,或直接进入bin
目录运行。
- 原因:可执行文件默认生成在
-
缺少库文件(如 libAstra.so)
- 错误提示:
error while loading shared libraries: libAstra.so: cannot open
- 解决:将 SDK 的
lib
路径添加到系统库搜索路径:echo "/path/to/sdk/lib" | sudo tee /etc/ld.so.conf.d/astra.conf sudo ldconfig
- 错误提示:
USB 设备权限不足
-
五、示例程序功能说明
-
SimpleDepthViewer-SFML
:
基于 SFML 的图形界面程序,实时显示深度图像,适合直观验证相机功能。 -
DepthReaderEventCPP
:
纯 C++ 命令行程序,通过事件回调获取深度数据,适合嵌入式环境或无界面开发。
各示例程序功能概述
示例名称 | 功能描述 |
---|---|
ColorizedBodyViewer-SFML | 显示彩色图像和人体骨架追踪结果,不同人体用不同颜色标记。 |
MaskedColorViewer-SFML | 显示彩色图像,并根据深度信息对特定区域进行遮罩处理(如前景 / 背景分离)。 |
MultiSensorViewer-SFML | 同时显示多个传感器数据(如深度图、彩色图、红外图)。 |
RotatedBodyViewer-SFML | 显示人体骨架追踪,并支持视角旋转(3D 效果)。 |
SimpleBodyViewer-SFML | 基础的人体骨架追踪可视化,显示关节点和连接线。 |
SimpleColorViewer-SFML | 仅显示彩色图像(RGB 流)。 |
SimpleDepthViewer-SFML | 仅显示深度图像(你之前尝试运行的示例)。 |
SimpleStreamViewer-SFML | 综合显示深度图、彩色图和点云数据。 |
StandaloneBodyViewer-SFML | 独立的人体追踪查看器,支持更复杂的人体动作分析。 |
进入 bin 目录运行程序
cd bin
./SimpleColorViewer-SFML # 运行彩色图像查看器
./MultiSensorViewer-SFML # 运行多传感器数据查看器
-
常见操作:
- 按
ESC
键退出程序。 - 部分示例支持通过鼠标或键盘调整视角、缩放等。
- 按
示例源码位置
每个示例的源代码通常位于对应的子目录中,例如:
SimpleDepthViewer-SFML
的源码:
samples/sfml/SimpleDepthViewer-SFML/main.cpp
你可以通过以下命令查看源码:
vim samples/sfml/SimpleDepthViewer-SFML/main.cpp
适合学习的示例推荐
-
入门首选:
SimpleDepthViewer-SFML
:基础深度图像显示,适合理解深度数据获取和渲染流程。SimpleColorViewer-SFML
:彩色图像显示,演示 RGB 流的使用。
-
进阶学习:
SimpleBodyViewer-SFML
:人体骨架追踪,学习 SDK 的高级功能(如骨骼节点检测)。MultiSensorViewer-SFML
:多数据流同步处理,适合理解数据融合。
注意事项
- 图形界面依赖:这些示例需要 X11 显示支持,若通过 SSH 连接需添加
-X
参数(如ssh -X elf@your-ip
)。 - 性能要求:部分示例(如 3D 点云渲染)对开发板性能要求较高,可能需要降低分辨率或帧率。
六、总结
AstraSDK 在 aarch64 架构上的安装需注意压缩包匹配、环境变量配置和依赖库安装。编译示例时需关注可执行文件路径,运行图形界面示例需确保显示环境可用。通过以上步骤,可快速验证相机功能并基于示例代码扩展开发。
- 错误提示:
Failed to open device: Permission denied
- 解决:重新加载 udev 规则并插拔相机:
sudo udevadm control --reload-rules && sudo udevadm trigger
samples/sfml
目录下的所有子目录都是基于SFML 图形库的示例程序,用于演示 AstraSDK 的不同功能。这些示例通过可视化界面展示了深度相机的各种应用场景
参考资料:
- Orbbec AstraSDK 官方文档
- ROS Astra Camera 集成指南