制作一个简单的OSVR设备插件

原创 2016年08月29日 09:54:45

制作一个简单的设备插件

建议查看官方英文文档,以下为个人翻译,如有出错,烦请指出,尽量以原文为准。
编写设备插件意味着你将需要使用PluginKit库来构建插件,PluginKit库提供了C API和只包含头文件的C++的封装接口。这些API不需要强加必须的结构体,所以你可以很容易的整合到现有的驱动代码中。按照以下步骤,你可以很容易的创建自己的插件。(更多的信息,请查阅PluginKit)

  • 拷贝实例文件夹:OSVR-Core\examples\plugin\selfcontained 作为你的插件的开始。核心部分的代码在com_osvr_example_selfcontained.cpp文件中,后续你将要对它进行修改。
    • 这个文件夹建议拷贝出来修改,不要把它放在osvr的代码仓库中。
  • 查看文件夹中EXAMPLE_PLUGIN_README.md文件的指引对文件进行修改、编译。
  • 实现硬件检测回调函数(判断你的设备是否连接):
    com_osvr_example_selfcontained.cpp文件里88行有这个类,看一下这个函数的operator操作,检测设备在这里执行。(参数和返回值看一下代码,翻译起来绕口又费劲)
  • 在检测设备的回调函数中,如果设备已经存在,创建一个你需要的状态位。这里,我们为设备创建了一个对象:在代码中的42行开始定义的。你需要创建OSVR_DeviceInitOptions来描述你将要实现的接口,并使用它(你创建的这个opt)来创建设备标识,发送JSON设备描述符,以及注册更新回到函数。在例子中,这些操作都在sh对象的构造函数中执行。你需要获得设备标识(如范例中的m_dev变量),以及注册OSVR_DeviceInitOptions时返回的接口对象,以便后续发送数据。
  • 在该例子中,从你的设备中发送数据的地方从代码61行开始:一旦有数据,就会将调用发送函数把数据发送出去。(有2个版本的发送函数:一种是你自己手动添加时间戳,另外一种就是在函数被调用时自动创建时间戳。)你的设备上也许含有多种类型的传感器(例如:追踪器、按键、模拟数据),你必须使用相应的接口把每一种数据进行上报。
  • 创建设备描述符JSON,并按格式命名,如:”com_VendorName_DeviceName”。你可以使用简单的JSON描述符或使用Device Descriptor Editor,来创建JSON描述符。每一个接口(例如:追踪器,按键,模拟数据),你都需要描述一下它的语义(名字和数据通道等,这个可以看com_osvr_example_selfcontained.json文件里的”semantics”字段),设备描述符的作用就是为了告诉OSVR服务端,我的设备拥有哪些传感器。设备描述符文件里的vendor和product名字是用来标识设备信息的。

注意这些驱动的结构体都是可以自动配置的。手动配置驱动也是可能的,除了硬件检测回调函数被所定义的设备实例替换,从根本上来说是一样的,可以参考这个例子,com_osvr_example_Configured.cpp。你提供的函数将会被OSVR服务所调用,并且会把JSONJSON文件中的配置参数传递过去。
对于自动配置的驱动,不需要在osvr_server_config.json文件里”driver”字段里列出,这个字段是为了那些手动配置的驱动所用的。否则(如果手动配置的驱动没有添加到driver字段),就会报出如下类型的错误:
[OSVR Server] - com_example_MyDevice/DeviceName No driver initialization callback was registered for the driver name DeviceName

制作你的插件

此例子是基于windows平台,以及visual studio工具进行演示的,其他平台的过程是类似的。

  • 准备好你的源文件和工具:解压官方的运行环境库,确保你的插件源文件是在这个运行库之外的。
    这里写图片描述
  • 设置源代码和生成文件夹:打开CMake,设置源文件和生成的文件夹。最好把这2个文件单独分开(不要把build文件夹放在src文件夹内)。这样可以保持源文件的整洁,并且使源文件不包含生成文件。
    这里写图片描述
  • 添加CMAKE_PREFIX_PATH变量:点击”Add Entry”按钮。在弹出的窗口中“Name”字段,输入“CMAKE_PREFIX_PATH”,在“Type”字段选择PATH。然后点击”Value”字段的”…”,弹出文件夹选择窗口。
    这里写图片描述
    选择官方下载的运行环境包—这个文件夹包括bin,lib等目录。点击“OK”确认文件夹,然后再点击“OK”,完成添加。
    这里写图片描述

此时,你将返回到CMake的主界面,如下图所示:
这里写图片描述

  • 配置和生成脚本和工程文件:点击”Configure”按钮。如果你的生成文件夹不存在,CMake会弹出调试框告诉你它将帮你创建。CMake将搜索依赖库和头文件。
    这里写图片描述

下一步,选择适合的编译环境。在windows上,多数人会使用Visual Studio;在Linux环境上,选择Makefile。点击Finish返回主界面。最后,点击“Generate”生成编译脚本和工程文件。
这里写图片描述

  • 打开工程:在之前设置的build文件夹,CMake将产生一个*.sln文件(如果使用的是Visual Studio)。双击打开工程,编译你的插件。注意这个要根据你下的运行环境来决定生成debug还是release,运行环境和插件生成的版本要一致,否则可能无法运行。
  • 找到你编译插件的文件夹:找到你编译完成的插件(一个*.dll文件),这个文件夹一般在你的build路径下的Debug或Release。
    这里写图片描述

测试你的插件

为了使OSVR服务端可以加载你的插件,从而找到你的设备,你需要创建一个新的osvr_server_config.json文件。你可以根据现有的配置文件,然后做一些修改就可以使用。你需要把你描述在设备描述符里的传感器信息添加路径到osvr_server_config.json文件中。
一旦你的插件加载成功,你可以看到OSVR服务端从你的插件中读取数据。如果你创建一个追踪器的插件,可以看到追踪器变化的图像。
VRPN里的vrpn_print_devices命令可以显示所选设备(算法、按键、追踪器)接口的信息:
vrpn_print_devices org_example_MyDevice/DeviceName@localhost

当你在后台运行osver_server时,你可以发现完整的设备名。在加载插件成功之后,服务端将打印信息类似于:

Added device org_example_MyDevice/DeviceName
以下是追踪器输出信息的例子:
vrpn_print_devices com_osvr_Vuzix/Vuzix@localhost
Opened com_osvr_Vuzix/Vuzix@localhost as: Tracker Button Analog Dial Text
Press ^C to exit.
Tracker com_osvr_Vuzix/Vuzix@localhost, sensor 0:
pos ( 0.00, 0.00, 0.00); quat (-0.08, 0.89, -0.05, 0.45)
Tracker com_osvr_Vuzix/Vuzix@localhost, sensor 0:
pos ( 0.00, 0.00, 0.00); quat (-0.12, 0.78, 0.03, 0.87)
Tracker com_osvr_Vuzix/Vuzix@localhost, sensor 0:
pos ( 0.00, 0.00, 0.00); quat (-0.12, 0.48, 0.03, 0.87)
Tracker com_osvr_Vuzix/Vuzix@localhost, sensor 0:
pos ( 0.00, 0.00, 0.00); quat (-0.12, -0.88, 0.03, 0.46)

版权声明:本文为博主原创文章,未经博主允许不得转载。

SteamVR-OSVR(build 342)

新版本SteamVR-OSVR驱动。 修改点: 该版本包含以下修改点: 1.OpenVR版本更新到V1.0.7 2.将客户端update调用移到一个独立线程中处理。这将减少追踪数据的不稳...
  • huhaoxuan2010
  • huhaoxuan2010
  • 2017年07月25日 08:53
  • 413

VRPN-OSVR介绍

全称:虚拟现实外设网络(Virtual Reality Peripheral Network) 链接:获取并参与 版本控制:https://github.com/vrpn/vrpn 源代码:https...
  • huhaoxuan2010
  • huhaoxuan2010
  • 2017年08月02日 21:08
  • 355

OSVR接入HMD设备

推荐一本书,本文按照书中说提的“是什么,为什么,怎么做”,来说明如何把HMD设备接入到OSVR上。为什么要做OSVR插件对于我们来说,后续要制作的产品是头盔,对于头盔设备通过插件接入OSVR优点如下:...
  • dabenxiong666
  • dabenxiong666
  • 2016年09月05日 18:33
  • 2492

js插件开发的几个简要步骤

JS插件的开发步骤: 一、首先需要闭包,如:     (function(){         //TO DO     })(jQuery);     这种规范的作用是:         1...
  • aphy358
  • aphy358
  • 2015年11月11日 11:41
  • 2217

简单的Jquery 插件编写

jQuery如此流行,各式各样的jQuery插件也是满天飞。你有没有想过把自己的一些常用的JS功能也写成jQuery插件呢?如果你的答案是肯定的,那么来吧!和我一起学写jQuery插件吧! ...
  • xingxing513234072
  • xingxing513234072
  • 2012年07月09日 18:28
  • 1857

简单搜索框的制作

最近刚刚学了CSS,一直没怎么实践,今天就随手写一个比较好看的搜索框,通过Css来实现。虽然前端的工作大多是由前端设计师来完成的。但是这个也还是不错的,和大家分享一下。 search bo...
  • qq_29329775
  • qq_29329775
  • 2015年06月30日 19:38
  • 1061

[Android]自定义简易版日历控件

先来看看效果图,看看是不是各位大佬想要的: 特别的功能并不多,重点是讲解简易日历该如何构造,假若是项目着急要用的话,最好还是找一下其它人写好的日历(附加滑动改变日历日期等功能) ---------...
  • u011596810
  • u011596810
  • 2016年04月01日 15:13
  • 2361

《基础网页制作》一个超简单的div布局,制作静态网页很简单

效果图附上 以下代码超简单的,就不解释啦 Div布局 主要应用于网站首页公告和标签 附加推荐菜单 首页 衣服 裤子 鞋子 头饰 第一页面显示板块...
  • youbeimu
  • youbeimu
  • 2017年11月19日 23:46
  • 600

制作一个简单的扇叶

效果图: 代码:
  • xiaoqiang_66
  • xiaoqiang_66
  • 2017年07月28日 20:24
  • 131

三十分钟做一个网页游戏

这篇文章的目的是短时间之内,通过做出一个简单的缘分对对碰游戏,了解网页开发的基本框架。   对于大部分网页,都要包括HTML、CSS、JavaScript三种技术。而相对应的三种文件格式为.html、...
  • caozhankui
  • caozhankui
  • 2013年08月22日 19:20
  • 3012
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:制作一个简单的OSVR设备插件
举报原因:
原因补充:

(最多只允许输入30个字)