关闭

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

标签: OSVRVRARPLUGIN
2014人阅读 评论(0) 收藏 举报
分类:

制作一个简单的设备插件

建议查看官方英文文档,以下为个人翻译,如有出错,烦请指出,尽量以原文为准。
编写设备插件意味着你将需要使用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)

1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:218414次
    • 积分:2629
    • 等级:
    • 排名:第14330名
    • 原创:65篇
    • 转载:0篇
    • 译文:10篇
    • 评论:33条
    文章分类
    最新评论