AstraSDK 在瑞芯微elf2(rk3588)开发板( aarch64)上的安装与示例运行全记录

近期在 elf2 开发板(aarch64 架构)上集成 Astra 深度相机时遇到了一些问题,经过多次调试后成功解决。以下是完整的安装过程、问题排查及示例运行记录,供参考。

一、环境准备
  • 开发板:elf2(aarch64 架构,运行 Ubuntu 系统)
  • 相机:Orbbec Astra Pro
  • SDK:AstraSDK-v2.1.3-Linux-aarch64.tar.gz(官网下载,需匹配架构)
二、SDK 安装步骤
  1. 解压压缩包
    进入存放压缩包的目录,执行解压命令(根据架构选择对应文件):

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  
    • 终端会输出深度帧的宽度、高度、时间戳等信息,验证数据获取功能。
四、常见问题及解决方法
  1. sudo ./install.sh找不到命令

    • 原因:未解压压缩包,目录下仅有.tar.gz文件。
    • 解决:先执行解压命令,再进入解压后的目录操作。
  2. 编译后找不到可执行文件

    • 原因:可执行文件默认生成在build/bin/目录,而非示例子目录。
    • 解决:通过find . -type f -executable搜索路径,或直接进入bin目录运行。
  3. 缺少库文件(如 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  # 运行多传感器数据查看器
  1. 常见操作

    • ESC键退出程序。
    • 部分示例支持通过鼠标或键盘调整视角、缩放等。

示例源码位置

每个示例的源代码通常位于对应的子目录中,例如:

  • SimpleDepthViewer-SFML的源码:
    samples/sfml/SimpleDepthViewer-SFML/main.cpp

你可以通过以下命令查看源码:

vim samples/sfml/SimpleDepthViewer-SFML/main.cpp

适合学习的示例推荐

  1. 入门首选

    • SimpleDepthViewer-SFML:基础深度图像显示,适合理解深度数据获取和渲染流程。
    • SimpleColorViewer-SFML:彩色图像显示,演示 RGB 流的使用。
  2. 进阶学习

    • 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 集成指南

root@elf2-desktop:/mnt# ldd test linux-vdso.so.1 (0x0000007fb59e5000) libatomic.so.1 => /lib/aarch64-linux-gnu/libatomic.so.1 (0x0000007fb5970000) libQt5Widgets.so.5 => /lib/aarch64-linux-gnu/libQt5Widgets.so.5 (0x0000007fb52b0000) libQt5Gui.so.5 => /lib/aarch64-linux-gnu/libQt5Gui.so.5 (0x0000007fb4c40000) libQt5Core.so.5 => /lib/aarch64-linux-gnu/libQt5Core.so.5 (0x0000007fb46f0000) libmali-hook.so.1 => not found libmali.so.1 => not found libdrm.so.2 => /lib/aarch64-linux-gnu/libdrm.so.2 (0x0000007fb46c0000) libwayland-client.so.0 => /lib/aarch64-linux-gnu/libwayland-client.so.0 (0x0000007fb46a0000) libwayland-server.so.0 => /lib/aarch64-linux-gnu/libwayland-server.so.0 (0x0000007fb4670000) libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007fb4440000) libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007fb43a0000) libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007fb4370000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fb41c0000) /lib/ld-linux-aarch64.so.1 (0x0000007fb59ad000) libGL.so.1 => /lib/aarch64-linux-gnu/libGL.so.1 (0x0000007fb40c0000) libpng16.so.16 => /lib/aarch64-linux-gnu/libpng16.so.16 (0x0000007fb4070000) libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000007fb4040000) libharfbuzz.so.0 => /lib/aarch64-linux-gnu/libharfbuzz.so.0 (0x0000007fb3f60000) libmd4c.so.0 => /lib/aarch64-linux-gnu/libmd4c.so.0 (0x0000007fb3f40000) libdouble-conversion.so.3 => /lib/aarch64-linux-gnu/libdouble-conversion.so.3 (0x0000007fb3f10000) libicui18n.so.70 => /lib/aarch64-linux-gnu/libicui18n.so.70 (0x0000007fb3be0000) libicuuc.so.70 => /lib/aarch64-linux-gnu/libicuuc.so.70 (0x0000007fb39d0000) libpcre2-16.so.0 => /lib/aarch64-linux-gnu/libpcre2-16.so.0 (0x0000007fb3940000) libzstd.so.1 => /lib/aarch64-linux-gnu/libzstd.so.1 (0x0000007fb3870000) libglib-2.0.so.0 => /lib/aarch64-linux-gnu/libglib-2.0.so.0 (0x0000007fb3720000) libffi.so.8 => /lib/aarch64-linux-gnu/libffi.so.8 (0x0000007fb3700000) libGLdispatch.so.0 => /lib/aarch64-linux-gnu/libGLdispatch.so.0 (0x0000007fb3570000) libGLX.so.0 => /lib/aarch64-linux-gnu/libGLX.so.0 (0x0000007fb3520000) libfreetype.so.6 => /lib/aarch64-linux-gnu/libfreetype.so.6 (0x0000007fb3450000) libgraphite2.so.3 => /lib/aarch64-linux-gnu/libgraphite2.so.3 (0x0000007fb3420000) libicudata.so.70 => /lib/aarch64-linux-gnu/libicudata.so.70 (0x0000007fb17f0000) libpcre.so.3 => /lib/aarch64-linux-gnu/libpcre.so.3 (0x0000007fb1770000) libX11.so.6 => /lib/aarch64-linux-gnu/libX11.so.6 (0x0000007fb1620000) libbrotlidec.so.1 => /lib/aarch64-linux-gnu/libbrotlidec.so.1 (0x0000007fb1600000) libxcb.so.1 => /lib/aarch64-linux-gnu/libxcb.so.1 (0x0000007fb15c0000) libbrotlicommon.so.1 => /lib/aarch64-linux-gnu/libbrotlicommon.so.1 (0x0000007fb1580000) libXau.so.6 => /lib/aarch64-linux-gnu/libXau.so.6 (0x0000007fb1560000) libXdmcp.so.6 => /lib/aarch64-linux-gnu/libXdmcp.so.6 (0x0000007fb1540000) libbsd.so.0 => /lib/aarch64-linux-gnu/libbsd.so.0 (0x0000007fb1510000) libmd.so.0 => /lib/aarch64-linux-gnu/libmd.so.0 (0x0000007fb14f0000) 我交叉编译了移植了QT5.12.6的程序并复制到了RK3588,但运行提示缺库,我ldd分析一下,出现这个,如何解决,RK3588无法上网
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值