Python的一面

virtualrealit的Python项目详细描述


虚拟现实

hobo_vr的python端

主要用来写假发

在位置跟踪、串行/套接字/蓝牙通信等方面有许多有用的实用程序

具有异步套接字服务器

安装

要安装模块,请运行以下命令:

python -m pip install virtualreality

如果您想要基于相机的跟踪,请使用camera额外的

^{pr2}$

要安装开发版本,请执行以下操作:

git clone https://github.com/okawo80085/hobo_vr
cd ./hobo_vr
python -m pip install -e .

简单的例子

importasyncioimporttimeimportnumpyasnpfromvirtualrealityimporttemplatesclassMyPoser(templates.PoserTemplate):def__init__(self,*args,**kwargs):super().__init__(*args,**kwargs)@templates.PoserTemplate.register_member_thread(1/100)asyncdefexample_thread1(self):'''moves the headset in a circle'''h=0whileself.coro_keep_alive["example_thread1"].is_alive:try:self.pose.x=np.sin(h)self.pose.y=np.cos(h)h+=0.01awaitasyncio.sleep(self.coro_keep_alive["example_thread1"].sleep_delay)exceptExceptionase:print(f"example_thread1 failed: {e}")breakself.coro_keep_alive["example_thread1"].is_alive=False@templates.PoserTemplate.register_member_thread(1/100,runInDefaultExecutor=True)defexample_thread2(self):'''moves the left controller up and down'''h=0whileself.coro_keep_alive["example_thread2"].is_alive:try:self.pose_controller_l.y=1+np.cos(h*3)/5h+=0.01time.sleep(self.coro_keep_alive["example_thread2"].sleep_delay)exceptExceptionase:print(f"example_thread2 failed: {e}")breakself.coro_keep_alive["example_thread2"].is_alive=Falseposer=MyPoser()asyncio.run(poser.main())

poser客户端示例

importasyncioimporttimeimportnumpyasnpfromvirtualrealityimporttemplatesposer=templates.PoserClient()@poser.thread_register(1/60)asyncdefexample_thread():'''moves the headset in a circle'''h=0whileposer.coro_keep_alive["example_thread"].is_alive:poser.pose.y=round(np.sin(h),4)poser.pose.x=round(np.cos(h),4)h+=0.01awaitasyncio.sleep(poser.coro_keep_alive["example_thread"].sleep_delay)@poser.thread_register(1/60,runInDefaultExecutor=True)defexample_thread2():'''moves the controller up and down'''whileposer.coro_keep_alive["example_thread2"].is_alive:poser.pose_controller_l.x=1+np.cos(h*3)/5time.sleep(poser.coro_keep_alive["example_thread2"].sleep_delay)asyncio.run(poser.main())

udu poser客户端示例

u - unlimited
d - devices
u - upgrade

但它更像是一种模式

这里有一个例子

"""udu poser client examplemore info: help(templates.UduPoserTemplate)"""importasyncioimporttimeimportnumpyasnpimportpyrrfromvirtualrealityimporttemplatesfromvirtualreality.serverimportserverposer=templates.UduPoserClient("h c t")#                                 ^^^^^#                                 this dictates devices used#                                 for this example its:#                                 hmd controller tracker# poser = templates.UduPoserClient("h c c") btw normal posers use this device configuration@poser.thread_register(1/60)asyncdefexample_thread():# spins all devices in an orbith=0whileposer.coro_keep_alive["example_thread"].is_alive:x,y,z,w=pyrr.Quaternion.from_y_rotation(h)foriinrange(len(poser.poses)):poser.poses[i].x=np.sin(h/(i+1))poser.poses[i].z=np.cos(h/(i+1))poser.poses[i].r_x=xposer.poses[i].r_y=yposer.poses[i].r_z=zposer.poses[i].r_w=wh+=0.01awaitasyncio.sleep(poser.coro_keep_alive["example_thread"].sleep_delay)# any poser can do this actually@poser.thread_register(1/60)asyncdefexample_receive_haptics_thread():whileposer.coro_keep_alive["example_receive_haptics_thread"].is_alive:# check for new readsifposer.last_read:print(poser.last_read)# print receivedposer.last_read=b""# resetawaitasyncio.sleep(poser.coro_keep_alive["example_receive_haptics_thread"].sleep_delay)asyncio.run(poser.main())

不同于普通的poser,udu poser在开始时生成pose结构

然后需要在驱动程序配置中使用这些pose结构作为DeviceManifestList的值

more info on udu

更多示例

hobo_vr's examples

还有一个^{},它是一个具有实际3dof(仅hmd)跟踪的udu poser(更多信息请参见示例本身)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
用户界面java,使用gui连接到另一台计算机/服务器的文件系统   运行sbt的ubuntu返回错误:“javahome需要<path>参数”   java如何在Android中处理许多ImageView而不出现内存问题?   查询中非法字符的java相同URL失败   安卓取消引用可能会产生“java”。lang.NullPointerException'   java中的indexoutofboundsexception“java.lang.ArrayIndexOutOfBoundsException”错误   xml Java将dom保存到文件>文件在程序结束后由另一个进程打开   Java的垃圾收集器是如何工作的?   Java如何筛选值(列表)   java处理字符串我怎样才能像在真实的书籍中一样在上面部分生成“小数字”呢?   java SonarQube是否有一个API来获取所有项目分析的一部分?   java startActivity(intent)什么都不做   JAVAutil。扫描器类Java   java如何从Firebase更新电子邮件?UpdateMail方法已被弃用   java Hibernate。如何正确组织带有注释的onetomany关系?   在java中获得卷标和驱动器号之间的映射(而不是FileSystemView)的解决方法是什么   java查找文件的路径