Table of Contents
Augmented/Virtual Reality
~~META: status = suspended &relation firstimage = :project:vr.png ~~
We have Vuzix iWear VR920 and shutter glasses available for projects.
Ideas
- Depth Perception
- Kinect + VR
- Plane Model + Cam
- Wireless Head Mounted Display
Driver
eDimensional
Edimensional controller se inicializuje barevnyma kodoma v horni casti obrazovky. Kody se zjisti z programu E-D.exe na adrese 0x004010A9. Program si uklada nastaveni do registru v rutine na adrese 0x00401491.
Aktivace synchronizace LEFT/RIGHT obrazu se signalizuje pres DDC na VGA konektoru.
sprovozneni pod linuxem (incomplete)
# modprobe i2c-dev $ i2cdetect -l $ cat /sys/bus/i2c/devices/i2c-X/device/device/card0-VGA-1/edid
reference
Vuzix vr920
Bryle se ovladaji pres USB. USB descriptor zarizeni obsahuje krome audio kanalu a headtracking sensoru jeste display controller kterym lze prepinat obraz na levem a pravem oku.
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 4
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 255 Vendor Specific Class
bInterfaceSubClass 0
bInterfaceProtocol 0
iInterface 4 VR920 3D Stereo Control
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x05 EP 5 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
Ovladani displayu probiha na EP 5 OUT (0x05). Inicializace se provadi zpravou typu control transfer v nasledujicim nastaveni:
bmRequestType 0x40 bRequest 0x0009 wValue 0x0302 wIndex 0x0003 wLength 0x0010 data 0x02 0x07 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Kompletni inizializace zarizeni a ovladani leveho/praveho oka v PyUSB:
import usb
# nalezeni zarizeni
dev = usb.core.find(idVendor = 0x1bae, idProduct = 0x0002)
if dev is None:
raise ValueError('Device not found')
for i in range(4):
try:
dev.detach_kernel_driver(i)
dev.detach_kernel_head(i)
except:
pass
# nalezeni EP 5 OUT
epx = None
dev.set_configuration(1)
for cfg in dev:
for intf in cfg:
for ep in intf:
if ep.bEndpointAddress is 0x05 :
epx = ep
if epx is None:
raise ValueError('ep not found')
# inicializace
dev.ctrl_transfer(0x40, 0x9, 0x302, 0x3, "\x02\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
dev.ctrl_transfer(0x40, 0x9, 0x302, 0x3, "\x02\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
epx.write("\x00")
dev.ctrl_transfer(0x40, 0x9, 0x302, 0x3, "\x02\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
# ovladani displayu
epx.write("\x00")
epx.write("\x01")
Obraz je v displayi udrzovan dokud mu neprijde zprava o jeho obnoveni (0x00/0x01).
