orbbec相机安装及使用

 由于之前使用的TOF相机性能比较差,决定给机器人换一个摄像头,选择了orbbec的摄像头,之前都是在笔记本上用realsense,zed,kinetic之类的,基本上下载一个sdk就可以直接用了,但是我们现在机器人用的是ARM架构,这就涉及到很多问题.实现过程中也学习到了一些知识,记录下来,以便回头查阅.

1.相机驱动

 orbbec给了一个ROS包,运行他的ros节点就可以获取相机的点云,rgb图像等数据.但是我们的机器人不是ros系统的,他们又没有c++的API,研究代码以及沟通之后发现他们获取depth数据使用的是Openni,获取rgb数据使用的是libuvc.知道了这些,就可以直接把他们的给的ROS包里我们需要用的驱动扣出来.

 这里我只需要把include文件夹里的头文件和动态库扣出来就可以,他这里的libuvc_camera是自己写的一个driver,对应rgb摄像头数据的读取,openni2是头文件,openni2_redist里放的是各种平台上的动态库,我们把openni2和openni2_redist这两个文件夹里的东西扣出来用就可以.

 另外还需要注意的是usb_rules也需要配置一下,要不然系统是无法识别摄像头的,并且这些库去打开摄像头也需要用到usb_rules的参数.关于usb_rules的解释这篇博客说的很明白:https://www.cnblogs.com/sopost/archive/2013/01/09/2853200.html

操作起来也很简单,只需要把56-orbbec-usb.rules拷贝到/etc/udev/rules.d文件夹下边就可以了

2.depth数据的读取

 奥比相机depth是用Openni2来读取的,网上有一些资料,这里贴上几个参考博客,按照流程做就可以了:

    https://www.cnblogs.com/yemeishu/archive/2012/12/25/2832024.html

    https://kheresy.wordpress.com/2013/03/11/multiple-device-under-openni2/

    过程中遇到的一些坑

    1)奥比的驱动里把一个路径写死了,由于我们采用的是交叉编译,往机器人上拷贝的时候必须把目录结构也拷贝过去,这部分花了一些时间,最后通过修改CMakeLists.txt得到了解决.

 2)还需要注意的是Openni一切操作都要在OpenNI::initialize()之后进行,要不然其他函数都不起作用

 3)由于我们的机器人安装有多个相同型号的奥比摄像头,所以要对摄像头进行区分,最终是通过OpenNI::enumerateDevices(),然后获取设备的Uri,Uri的组成里后边会有一个@1/23之类的标识,这里的1就是Bus编号,23是设备编号,我们可以根据Bus编号来区分设备. 

 4)奥比摄像头的TF设置也挺奇怪的,不过这些东西都可以通过各种翻转加负号等操作解决,想要什么样的TF都行.

3.rgb数据的读取

 我们用的这款摄像头并不能用Openni来读rgb信息,只能用uvc协议来读,尝试了两个不同的库,先是用了v4l,打开以后发现帧率特别低,后边就没有再调,直接用了奥比ROS包里用的libuvc,这个是一个ros包,后边为了方便就把编好的动态库和头文件直接放到我们的代码里了.奥比ROS包里的camera_driver.cpp就是根据libuvc文档里的示例改的,在示例的基础上添加了一些dynamic_reconfiguration.这里把libuvc的文档连接贴上,讲的还是很详细的,基本上常用功能都是实现:

https://ken.tossell.net/libuvc/doc/index.html

 

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值