这里有两种方式:
第一种:下载官方新手建议Linux驱动,直接操作官方给出的示例程序,Linux下比Windos稍微简单,直接使用脚本编译即可。
具体步骤:(1)下载驱动并解压后,将获得文件夹,如下图所示:
(2)Linux打开终端进入环境samples目录,运行sample_build.sh 脚本文件。
命令为:bash sample_build.sh 编译平台
(3)这里要注意不同编译平台命令不同:
例如:x86_64:编译linux64 , arrch64:编译arrch64
答主这里是arm 因此,使用命令是:bash sample_build.sh arrch64
这个脚本会编译下面所有的示例程序很长时间,你可以打开它CMakeLists,屏蔽不需要编译。
我只在这里编译SimpleViewer这个程序将是深度和RGB图像显示。
以下是编译成功:
然后cd build/bin 进入bin文件夹
输入sudo ./SimpleViewer即可
运行效果如下:
第二种方法是为自己编写驱动程序,这对新手来说更麻烦,因为需要配置OpenNi优点是代码小比较简单。
这是我简化后写的驱动程序,供参考。UVC相机和Astra plus、
int main(int argc, char *argv[]) { char* buf = (char*)malloc(640 * 480 * 2 640 * 480 * 3); if (buf == NULL) { printf("malloc error\n"); return 0; } memset(buf, 0, sizeof(buf)); ///设备初始化 d2cSwapper* pD2CSwapper = NULL; pD2CSwapper = new AstroProD2C(); int nRet = pD2CSwapper->CameraInit(NORMAL_NO); if (nRet != CAMERA_STATUS_SUCCESS) { printf("camera init failed\n"); getchar(); return -1; } ObD2CType d2cType = NORMAL_NO; //获取相机内外参 SW_D2C soft_d2c; memset(&soft_d2c, 0, sizeof(SW_D2C)); OBCameraParams cameraParams; memset(&cameraParams, 0, sizeof(OBCameraParams)); nRet = pD2CSwapper->GetCameraParam(cameraParams); if (nRet != 0) { // printf("get camera param failed\n"); return -1; } ////获取设备的分辨率 int nWidth = 0; int nHeight = 0; nRet = pD2CSwapper->GetCameraResolution(nWidth, nHeight); if (nRet != 0) { printf("get camera resolution fail,please check pid\n"); return -1; } bool bExit = true; uint16_t nPid = pD2CSwapper->GetDevicePid(); //开关流 int nDepthWidth = 0; int nDepthHeight = 0; nDepthWidth = IMAGE_WIDTH_640; nDepthHeight = IMAGE_HEIGHT_480; std::thread pThreadSend(thread_send_data); pThreadSend.detach(); while (bExit) { cv::Mat cv_rgb(IMAGE_HEIGHT_480, IMAGE_WIDTH_640, CV_8UC3); cv::Mat cv_rgb1(IMAGE_HEIGHT_480, IMAGE_WIDTH_640, CV_8UC3); cv::Mat cv_depth(nDepthHeight, nDepthWidth, CV_16UC1);//640x480 //获取数据 int nRet = pD2CSwapper->GetStreamData(cv_rgb, cv_depth); cv::flip(cv_rgb, cv_rgb1, 1); cv::imshow("Show Rgb", cv_rgb1); cv::imshow("Show Depth", cv_depth); cv::waitKey(1000 / 1000); } nRet = pD2CSwapper->CameraUnInit(); printf("UvcDeInit :%d\n", nRet); if (pD2CSwapper) { delete pD2CSwapper; pD2CSwapper = NULL; } free(buf); return 0; }
头文件为\samples\samples\SimpleViewer路径下的文件。
不同的奥比传感器以不同的方式获取数据流。除此之外,还有以下内容:
streamDepth.readFrame(&frameDepth); streamColor.readFrame(&frameColor);
获取之后,执行我们想要的操作即可。