demo_api 示例提供了使用数字字符选择执行功能来演示 Xvisio 设备和对应的 SDK API 的基本功能以及执行功能对应的示例代码。
cp -r /usr/share/xvsdk/demo-api <path_to_work>
cp -r /usr/share/xvsdk/pipe_srv <path_to_work>
cd <path_to_work>/demo-api
mkdir build
cd build
cmake ..
make
构建成功会生成名称叫‘demo-api’的可执行二进制程序。使用 USB 线连接 xvisio 设备和 Ubunut 主机。
查看 USB 设备状态,在任意位置打开终端输入:
lsusb
观察终端输出usb状态信息,其中 VID:PID 为"040e:f408" ,设备名为"MCCI XVisio vSLAM" 的USB 设备即为 Xvisio 设备。
通过 Xvisio 设备的 USB Bus 号和对应的总线的 hub 类型来确认当前设备枚举是 USB3.0 或USB2.0 。
请确保 Xvisio 设备的正确枚举
以上描述见下图:
启动终端并导航到 <path_to_work>/demo-api/build 目录
./demo-api
执行这一步前需要确保程序已成功构建并生成了‘demo-api’的可执行二进制程序。
在相同位置打开另一个终端输入程序名称并回车:
./pipe_srv
pipe_srv 和 demo-api 必须在同一目录下打开。
打开成功后,终端会输出功能菜单打印,如下:
pipe server recv has already exist
pipe server send has already exist
wait for client connect....
pipe server get send handle: 3
pipe server get recv handle: 4
ready handle: send:3,recv:4
Demo
------------------------------
1 : Init SDK and get IMU
2 : Stop get IMU, start slam, get 6dof
....
0 : exit program
------------------------------
enter select:
执行菜单功能 pipe-srv的终端上输入对应数字字符后回车 ,执行相应功能,并观察demo-api终端输出结果。 功能菜单描述
版本 | cmake 命令 |
---|---|
VS2019 64位 | cmake -G "Visual Studio 16 2019" -A x64 |
VS2019 32位 | cmake -G "Visual Studio 16 2019" -A Win32 |
VS2017 64位 | cmake -G "Visual Studio 15 2017" -A x64 |
VS2017 32位 | cmake -G "Visual Studio 15 2017" -A Win32 |
./demo-api.exe
注意:
unzip android-ndk-r21e-linux-x86_64.zip
sudo gedit ~/.bashrc
在文件末尾添加
export ANDROID_NDK_ROOT=/path_from_yours/android-ndk-r21e/
export NDK=${ANDROID_NDK_ROOT}
export PATH=${PATH}:$NDK
其中“/path_from_yours/android-ndk-r21e/”替换成 NDK 解压的绝对路径。
sourc ~/.bashrc
ndk-build -v
版本信息正确,无报错。cd android/jni/
ndk-build
会编译出 “Android.mk” 里所有 link 的example 程序。
编译成功无报错,android/libs/目录下的arm64-v8a会生成可编译好的可执行程序。adb root
adb remount
如果 remount 失败,可以执行:
adb disable-verity
adb reboot
adb root
adb remount
如果仍然失败请联系 Android 设备供应商寻求支持
arm64位示例:
adb push arm64-v8a /data/test/
arm32位示例:
adb push armeavi-v7a /data/test/
adb shell
cd /data/test/arm64-v8a/
LD_LIBRARY_PATH=./ ./demo-api
adb shell
cd /data/test/arm64-v8a/
LD_LIBRARY_PATH=./ ./pipe_srv
pipe server recv has already exist
pipe server send has already exist
wait for client connect....
pipe server get send handle: 3
pipe server get recv handle: 4
ready handle: send:3,recv:4
Demo
------------------------------
1 : Init SDK and get IMU
2 : Stop get IMU, start slam, get 6dof
....
0 : exit program
------------------------------
enter select:
平台 | 目录 |
---|---|
Windows | 安装目录下 samples\demo-api 目录,例如:C:\Program Files\xvsdk\samples\demo-api\ |
Linux/Ubuntu | /usr/share/xvsdk/demo-api/ |
Android | Android SDK 压缩包解压后文件夹里的 examples/demo-api/ |
文件 | 描述 |
---|---|
demo-api.cpp | demo-api 主要文件 |
fps_count.hpp | 计算帧率的类实现文件 |
pipe_srv.h | 实现管道功能文件(Windows 平台无效) |
CMakeLists.txt | Cmake 工程文件(Android 平台无效) |
demo-api.cpp 文件 main(....) 函数为入口函数:
int main( int argc, char* argv[] ) try{....}
meun_main[]数组为预设定的功能菜单:
static const char meun_main[] = { ....}
while 循环来等待输入字符命令解析 ,
while (cond) {
Windows平台不使用管道,通过输入字符 'm' 来停止已运行的功能,并输出菜单
#ifdef _WIN32 std::cin >> cCmd; if (cCmd == "m") { if (device) { //stop all running items if (device->display()) { device->display()->close(); } if (device->orientationStream()) { //device->orientationStream()->stop(); device->orientationStream()->unregisterCallback(imuId); } ....
非 Windows 平台等待管道命令:
#else cmd = requestCmdAllPlatform(meun_main, sizeof(meun_main)); #endif
解析命令:
switch (cmd) { case 1: { .... } break; case 3: case 22: case 28: case 36: ....
每个 case 里执行对应序列号的菜单功能,菜单功能描述见第 4 节.
功能菜单描述:
序号 | 功能 | 描述 | 备注 | 关键字 |
---|---|---|---|---|
1 | Init SDK and get IMU | 初始化 SDK 和设备后开始获取 IMU 数据流 | 运行程序后,首先要做的功能,执行此项可以检查 SDK 版本 Xvisio 设备版本等初始信息 | INIT |
2 | Stop get IMU, start slam, get 6dof | 停止获取 IMU ,启动 SLAM 流程获取mixed模式 6dof 数据流 | 测试验证 SLAM 功能时使用 | SLAM |
3 | Stop slam, stop get 6dof, get IMU | 停止获取 6dof ,停止 SLAM 流程,重新启动获取 IMU 数据流 | 测试验证 SLAM 功能时使用 | SLAM |
4 | Get eyetracking data, stop get IMU | 停止获取 IMU ,启动 Eye tracking (眼控) 流程获取 眼控图像流 | 测试验证 ET (眼控) 功能时使用 | ET(眼控) |
5 | Stop get eyetracking data, get IMU | 停止 Eye tracking (眼控) 流程,重新启动获取 IMU 数据流 | 测试验证 ET (眼控) 功能时使用 | ET |
9 | Stop get IMU, get rgb data | 停止获取IMU,启动RGB流程获取RGB数据 | 测试验证RGB相机功能时使用 | RGB |
10 | Stop rgb, get IMU | 停止获取RGB数据,重新启动获取IMU数据流 | 测试验证RGB相机功能时使用 | RGB |
11 | Stop get IMU, get tof data | 停止获取IMU,打开 TOF sensor获取TOF数据 | 测试验证TOF相机功能时使用 | TOF |
12 | Stop tof, get IMU | 停止获取TOF数据,重新启动获取IMU数据流 | 测试验证TOF相机功能时使用 | TOF |
13 | Start tof plane detection, start slam, stop get IMU, get 6dof | 停止获取IMU,启动TOF平面检测流程,并启动slam,获取6DOF数据 | 验证TOF平面检测功能时使用 | TOF plane detection |
14 | Stop tof plane detection, stop slam, get IMU | 停止TOF平面检测流程,并停止slam,重新启动获取IMU数据流程 | 验证TOF平面检测功能时使用 | TOF plane detection |
15 | Stop get IMU, switch to edge mode, get edge 6dof | 停止获取IMU,开启slam,切换至edge模式,获取edge模式下的6dof数据 | 验证edge模式slam功能时使用 | edge slam |
16 | Stop get edge 6dof, get IMU | 停止获取edge模式下的slam数据,重新启动获取IMU数据流程 | 验证edge模式slam功能时使用 | edge slam |
17 | Test display: open display,set brightness to 2,set brightness to 9 | 打开屏显,先设置亮度为2,再设置亮度为9 | 验证屏显亮度调节时使用 | display |
18 | Test display: close display | 关闭屏显设置 | 验证屏显亮度调节时使用 | display |
19 | Stop get IMU, start slam, get 6dof | 停止获取 IMU ,启动 SLAM 流程获取mixed模式 6dof 数据流 | 测试验证 SLAM 功能时使用 | SLAM |
20 | Save shared map | 创建Cslam共享地图并保存成bin文件 | 验证cslam功能时使用 | cslam |
21 | Stop slam, start CSLAM using shared map, start slam | 停止获取IMU,加载创建好的Cslam共享地图,并切换到clsam模式 | 验证cslam功能时使用 | cslam |
22 | Stop slam, get IMU | 停止获取slam,重新启动获取IMU数据流程 | 验证slam功能时使用 | slam |
23 | Start stereo plane detection, start slam, stop get IMU, get 6dof | 停止获取IMU,开启fisheye平面检测获取数据,同时开启slam,获取6dof数据 | 验证fisheye平面检测时使用 | fisheye plane detection |
24 | Stop stereo plane detection, stop slam, get IMU | 停止获取fisheye平面检测数据,停止slam数据,重新开启IMU数据流程 | 验证fisheye平面检测时使用 | fisheye plane detection |
25 | Stop get IMU, switch to EdgeFusionOnHost mode, get 6dof with callback | 停止获取IMU,开启slam,切换至EdgeFusionOnHost模式,获取EdgeFusionOnHost模式下的6dof数据 | 验证edge模式slam功能时使用 | EdgeFusionOnHost slam |
26 | Stop get IMU, switch to EdgeFusionOnHost mode, get 6dof with get-pose | 停止获取EdgeFusionOnHost模式下的slam数据,重新启动获取IMU数据流程 | 验证EdgeFusionOnHost模式slam功能时使用 | EdgeFusionOnHost slam |
27 | Stop get IMU, switch to EdgeFusionOnHost mode, get 6dof with get-pose | 停止获取IMU数据,开启slam并切换至EdgeFusionOnHost模式,通过get-pose接口获取6dof数据 | 验证EdgeFusionOnHost模式下get-pose接口时使用 | EdgeFusionOnHost get-pose |
28 | Stop get 6dof with get-pose, stop EdgeFusionOnHost slam, get IMU | 停止使用get-pose接口获取6dof数据,停止EdgeFusionOnHost模式slam,重启开启imu获取流程 | 验证EdgeFusionOnHost模式下get-pose接口时使用 | EdgeFusionOnHost get-pose |
29 | Call 3Dof get() | 停止获取IMU数据,开启通过get接口获取3dof数据流程 | 测试验证使用get接口获取3dof时使用 | 3dof get |
30 | Stop call 3Dof get(), get IMU | 停止通过get接口获取3dof数据流程,重新开区获取IMU数据流程 | 测试验证使用get接口获取3dof时使用 | 3dof get |
31 | Call 3Dof getAt() | 停止获取IMU数据,开启通过getAt接口获取3dof数据流程 | 测试验证使用getAt接口获取3dof时使用 | 3dof getAt |
32 | Stop call 3Dof getAt(), get IMU | 停止通过getAt接口获取3dof数据流程,重新开区获取IMU数据流程 | 测试验证使用getAt接口获取3dof时使用 | 3dof getAt |
33 | Stop get IMU, switch to mixed mode, get 6dof with callback | 停止获取IMU,开启slam,切换至mixed模式,通过callback形式获取mixed模式下的6dof数据 | 验证mixed模式slam功能时使用 | mixed slam callback |
34 | Stop get 6dof with callback, stop mix slam, get IMU | 停止获取mixed模式下的slam数据callback, 停止slam,重新启动获取IMU数据流程 | 验证mixed模式slam功能时使用 | mixed slam callback |
35 | Stop get IMU, switch to mixed mode, get 6dof with get-pos-at | 停止获取IMU,开启slam,切换至mixed模式,通过get-pose-at接口获取mixed模式下的6dof数据 | 验证mixed模式slam功能的get-pos-at接口时使用 | mixed slam get-pos-at |
36 | Stop get 6dof with get-pos-at, stop mix slam, get IMU | 停止通过get-pos-at接口获取mixed模式下的slam数据,重新启动获取IMU数据流程 | 验证mixed模式slam功能的get-pos-at接口时使用 | mixed slam get-pos-at |
37 | Stop get IMU, read rgb calibration | 停止获取IMU数据,获取RGB标定数据 | 测试验证RGB标定时使用 | RGB Calibration |
38 | Stop get IMU, set rgb resolution | 停止获取IMU数据,设置RGB分辨率 | 测试验证RGB分辨率设置时使用 | RGB Resolution |
39 | Stop get rgb data, get IMU | 停止获取RGB数据,重新开启获取IMU数据流程 | 测试验证RGB相机时使用 | RGB |
40 | Stop get IMU, set rbg format | 停止获取IMU,设置RGB相机格式 | 测试验证RGB格式设置时使用 | RGB format |
41 | Stop get IMU, set rbg exposure mode, white balance control, ISO level, EXP level | 停止获取IMU,设置RGB曝光模式,白平衡及IOS等级 | 测试验证RGB相机功能设置时使用 | RGB |
42 | Stop get IMU, set eyetracking exposure, gain | 停止获取IMU,设置眼控曝光,增益 | 测试验证眼控曝光增益设置时使用 | ET |
43 | Stop get IMu, set eyetracking led control | 停止获取IMU,设置眼控照明灯光控制 | 测试验证眼控照明灯光功能时使用 | ET |
44 | Stop get IMU, read fisheye calibration | 停止获取IMU,读取fisheye标定 | 测试验证fisheye标定时使用 | fisheye calibration |
45 | Stop get IMU, read TOF calibration | 停止获取IMU,读取TOF标定 | 测试验证TOF标定时使用 | TOF calibration |
46 | Stop get IMU, set TOF stream mode | 停止获取IMU,设置TOF模式 | 测试验证TOF模式时使用 | TOF mode |
47 | Stop get IMU, set TOF distance mode | 停止获取IMU,设置TOF距离模式 | 测试验证TOF距离模式时使用 | TOF Distance |
48 | Stop get IMU, set event data | 停止获取IMU,注册事件callback,获取事件数据 | 测试验证事件数据时使用 | event |
49 | Stop get IMU, set CNN data | 停止获取IMU,注册CNN callback,获取CNN数据 | 测试验证CNN数据时使用 | CNN |
50 | Stop get IMU, get gesture stream data | 停止获取IMU数据,注册标准手势callback,获取标准手势index数据 | 测试验证标准手势index获取时使用 | gesture index |
51 | Stop get gesture stream data, get IMU | 停止获取标准手势数据,重新开启IMU数据获取流程 | 测试验证获取标准手势时使用 | gesture |
52 | Stop get IMU, get dynamic gesture stream data | 停止获取IMU数据,注册动态手势callback,获取动态手势index数据 | 测试验证动态手势index获取时使用 | dynamic gesture |
53 | Stop get dynamic gesture stream data, get IMU | 停止获取动态手势数据,重新开启IMU数据获取流程 | 测试验证获取动态手势时使用 | dynamic gesture |
54 | Stop get IMU, get gesture keypoints | 停止获取IMU数据,注册标准手势特征点callback,获取标准手势特征点数据 | 测试验证标准手势特征点获取时使用 | gesture keypoints |
55 | Stop get gesture keypoints, get IMU | 停止获取标准手势特征点数据,重新开启IMU数据获取流程 | 测试验证获取标准手势特征点时使用 | gesture keypoints |
56 | Stop get IMU, get gesture keypoints based on slam | 停止获取IMU数据,注册标准手势基于slam带深度的特征点callback,获取标准手势基于slam带深度的特征点数据 | 测试验证标准手势基于slam带深度的特征点获取时使用 | gesture slam keypoints |
57 | Stop get gesture keypoints based on slam, get IMU | 停止获取标准手势基于slam带深度的特征点数据,重新开启IMU数据获取流程 | 测试验证获取标准手势基于slam带深度的特征点时使用 | gesture slam keypoints |
58 | Set gesture configuration file path | 停止IMU数据,设置标准手势配置文件路径 | 测试验证标准手势配置文件路径设置时使用 | gesture path |
59 | Get display calibration | 停止IMU数据,获取display标定参数 | 测试验证获取display标定参数时使用 | display calibration |
60 | Camera on/off switch | 配置fisheye,rgb,tof相机开关 | 测试验证相机开关时使用 | camera switch |
61 | Start april tag detection | 停止IMU数据,开启April-tag检测功能,获取April-tag回调数据 | 测试验证April-tag功能时使用 | April-tag |
62 | Stop april tag detection, get IMU | 停止April-tag检测功能,关闭April-tag回调数据,重新开启获取IMU数据流程 | 测试验证April-tag功能时使用 | April-tag |
63 | Start surface callback | 停止IMU数据,开启surface检测功能,获取surface回调数据 | 测试验证surface功能时使用 | surface |
64 | Stop surface callback, get IMU | 停止surface检测功能,关闭surface回调数据,重新开启获取IMU数据流程 | 测试验证surface功能时使用 | surface |
65 | Start event callback | 停止IMU数据,开启event回调,获取event回调信息 | 测试验证event回调数据时使用 | event |
66 | Stop event callback, get IMU | 停止event回调,重新开启获取IMU数据流程 | 测试验证event回调数据时使用 | event |
67 | Stop get IMU, start SGBM | 停止获取IMU,启动SGBM流程获取SGBM数据 | 测试验证SGBM相机功能时使用 | SGBM |
68 | Stop SGBM, get IMU | 停止获取SGBM数据,重新启动获取IMU数据流 | 测试验证SGBM相机功能时使用 | SGBM |
69 | Stop get IMU, start get gaze data | 停止获取IMU,启动眼动瞳孔流程获取眼动瞳孔数据 | 测试验证获取眼动瞳孔数据功能时使用 | GAZE |
77 | Start get device status data | 停止IMU数据,开启设备状态回调,获取设备状态数据 | 测试验证设备状态数据时使用 | device status |
78 | Stop get device status data | 停止设备状态回调,关闭获取设备状态数据 | 测试验证设备状态数据时使用 | device status |
79 | Stop get IMU, switch the fisheye resolution to HIGH | 关闭IMU数据,切换fisheye分辨率模式到HIGH | 测试验证fisheye分辨率模式功能时使用 | fisheye resolution mode |
80 | Stop get IMU, switch the fisheye resolution to MEDIUM | 关闭IMU数据,切换fisheye分辨率模式到MEDIUM | 测试验证fisheye分辨率模式功能时使用 | fisheye resolution mode |
81 | Stop get fisheye data, get IMU | 停止获取fisheye数据,重新开启获取IMU数据流程 | 测试fisheye数据时使用 | fisheye |
82 | Start RGBD | 停止获取IMU,启动RGBD流程获取RGBD数据 | 测试验证RGBD相机功能时使用 | RGBD |
83 | Stop RGBD, get IMU | 停止获取RGBD数据,重新启动获取IMU数据流 | 测试验证RGBD相机功能时使用 | RGBD |
84 | Change FE framerate into 50Hz | 关闭IMU数据,切换fisheye帧率到50Hz | 测试验证fisheye帧率切换功能时使用 | fisheye framerate |
85 | Change FE framerate into 60Hz | 关闭IMU数据,切换fisheye帧率到60Hz | 测试验证fisheye帧率切换功能时使用 | fisheye framerate |
86 | Change RGB to AF/MF mode | 切换RGB手动对焦和自动对焦模式 | 测试验证RGB对焦模式切换功能时使用 | rgb mode |
87 | Change RGB local distance | 修改RGB距离 | 测试验证RGB距离切换功能时使用 | rgb mode |
88 | Start get device status data with SLAM | 通过slam获取设备状态 | 测试验证设备状态 | device status |
89 | Stop get device status data and SLAM | 关闭通过slam获取设备状态 | 测试验证设备状态 | device status |
90 | Start get device status data without IMU | 没有IMU的情况下获取设备状态 | 测试验证设备状态 | device status |
99 | Enable/Disable output log | 使能/关闭log打印 | 测试验证log功能时使用 | log mode |
100 | Start gps callback | 打开GPS数据回调 | 测试验证GPS功能时使用 | gps data |
101 | Stop gps callback | 关闭GPS数据回调 | 测试验证GPS功能时使用 | gps data |
102 | Start gps distance callback | 打开GPS距离数据回调 | 测试验证GPS功能时使用 | gps data |
103 | Stop gps distance callback | 关闭GPS距离数据回调 | 测试验证GPS功能时使用 | gps data |
104 | Start fe dewarp callback | 打开fisheye反畸变数据回调 | 测试验证fisheye反畸变功能时使用 | fisheye dewarp |
105 | Stop fe dewarp callback | fisheye反畸变数据回调 | 测试验证fisheye反畸变功能时使用 | fisheye dewarp |
109 | Start STM callback | 打开地磁数据回调 | 测试验证地磁功能时使用 | stm data |
110 | Stop STM callback | 关闭地磁数据回调 | 测试验证地磁功能时使用 | stm data |
111 | Get four eye apriltag | 获取四目相机Apriltag数据 | 测试验证四目相机Apriltag功能时使用 | four eye apriltag |
112 | Get QRcode apriltag | 获取QRCode Apriltag数据 | 测试验证QRCode Apriltag功能时使用 | QRCode Apriltag |