锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

Linux下开启Astra摄像头,获取数据流和显示图像

时间:2022-09-19 03:00:00 fly传感器

这里有两种方式:

第一种:下载官方新手建议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、Gemini模块和模块。

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);

获取之后,执行我们想要的操作即可。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章