PDA

View Full Version : How to call Oculus Remote


Lenticularis
03-23-2017, 10:37 AM
Hi

I want to add an action by pressing a button on the Oculus Remote.
But how do I call the remote? And how do I associate a button press of the remote with an action?
The reference page about the Oculus HMD wasn't very helpful. :confused:

Lenticularis
03-23-2017, 11:24 AM
To further clarify:

The ultimate goal is to use the remote as a replacement for all keyboard and mouse input. But for a start, I want to associate the press of the enter key on the remote with the left mouse button, in order to select options with the remote instead of the mouse.

Jeff
03-23-2017, 11:57 PM
Are you referring to selecting options within a GUI object? If so, take a look at the GUI canvas (http://docs.worldviz.com/vizard/#GUI_canvas.htm) page and canvasExample.py script (File > Quick Open: type canvasExample). Using the GUI canvas, set the cursor style to viz.CANVAS_MOUSE_VIRTUAL and apply updates to the cursor based on oculus remote signals. The example script shows how to manually update the cursor position and send mouse button events using keypresses in the ManualCursorPositionTask and ManualCursorButtonTask functions. In your case you would change the keypress checks to button checks.

Lenticularis
04-11-2017, 12:57 PM
Hi again

Thanks for your answer.
I'm referring to the canvas example script, yes.

I tried to change the keypresses to button checks but I can't get it working. Is there a mistake somewhere in my script?

I'd be really glad for any kind of advice.



import viz
import vizact
import vizcam
import vizdlg
import vizinfo
import viztask

###
canvas = viz.addGUICanvas()
canvas.setRenderWorldOverlay([800,600],50,3)
canvas.setPosition([0,0,0])

viz.mouse.setTrap(True)
viz.mouse.setVisible(False)
canvas.setMouseStyle(viz.CANVAS_MOUSE_VIRTUAL)
# Apply settings
viz.MainWindow.setDefaultGUICanvas(canvas)
###

import oculus
hmd = oculus.Rift()
viz.link(hmd.getSensor(), viz.MainView)

viz.go()

###########################
remoteEnter = viz.addButton(oculus.BUTTON_REMOTE_ENTER)
remoteUp = viz.addButton(oculus.BUTTON_REMOTE_UP)
remoteDown = viz.addButton(oculus.BUTTON_REMOTE_DOWN)
remoteLeft = viz.addButton(oculus.BUTTON_REMOTE_LEFT)
remoteRight = viz.addButton(oculus.BUTTON_REMOTE_RIGHT)
###########################

# Load environment models
worlds = [ viz.addChild('maze.osgb'), viz.addChild('gallery.osgb'), viz.addChild('dojo.osgb') ]
for i, model in enumerate(worlds):
model.visible(i == 0)

controlPanel = vizinfo.InfoPanel(text='Navigate with WASD', title='Canvas Example')

controlPanel.addSeparator()
manual_cursor = controlPanel.addLabelItem('Manual Cursor',viz.addCheckbox())

######################
def ManualCursorPositionTask():
"""Use arrow keys to manually move canvas cursor"""

while True:

pos = canvas.getCursorPosition(viz.CANVAS_CURSOR_PIXELS)
inc = 250.0 * viz.getFrameElapsed()

# if viz.key.isDown(viz.KEY_UP):
# pos[1] += inc
# if viz.key.isDown(viz.KEY_LEFT):
# pos[0] -= inc
# if viz.key.isDown(viz.KEY_DOWN):
# pos[1] -= inc
# if viz.key.isDown(viz.KEY_RIGHT):
# pos[0] += inc
#
# canvas.setCursorPosition(pos, viz.CANVAS_CURSOR_PIXELS)

if remoteUp.get() == viz.DOWN:
pos[1] += inc
if remoteLeft.get() == viz.DOWN:
pos[0] -= inc
if remoteDown.get() == viz.DOWN:
pos[1] -= inc
if remoteRight.get() == viz.DOWN:
pos[0] += inc

canvas.setCursorPosition(pos, viz.CANVAS_CURSOR_PIXELS)

yield viztask.waitFrame(1)

######################
def ManualCursorButtonTask():
"""Use spacebar to manually simulate mouse press/release on canvas"""

while True:

# yield viztask.waitKeyDown(' ', priority=viz.PRIORITY_GUI_HANDLER-1)
#
# canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.DOWN)
#
# yield viztask.waitKeyUp(' ', priority=viz.PRIORITY_GUI_HANDLER-1)
#
# canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.UP)

yield viztask.waitButtonDown(remoteEnter, priority=viz.PRIORITY_GUI_HANDLER-1)

canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.DOWN)

yield viztask.waitButtonUp(remoteEnter, priority=viz.PRIORITY_GUI_HANDLER-1)

canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.UP)

def ToggleManualCursorTask():
"""Handle toggling of manual cursor mode"""

notice_panel = vizinfo.InfoPanel('Arrow keys control cursor.\nSpacebar simulates button press.', title='Manual Cursor Enabled', align=viz.ALIGN_RIGHT_TOP, key=None, icon=False)
notice_panel.visible(False)

while True:

yield viztask.waitButtonDown(manual_cursor)

# Enable manual cursor control
UpdateMouseStyle()
pos_task = viztask.schedule(ManualCursorPositionTask())
button_task = viztask.schedule(ManualCursorButtonTask())
notice_panel.visible(True)

yield viztask.waitButtonUp(manual_cursor)

# Disable manual cursor control
UpdateMouseStyle()
pos_task.remove()
button_task.remove()
notice_panel.visible(False)

viztask.schedule(ToggleManualCursorTask())

Jeff
04-12-2017, 03:38 AM
First get a handle to the remote controller:


hmd = oculus.Rift()
remote = hmd.getRemoteController()


Then in the function that updates the cursor check the remote controller button states:

if remote.isButtonDown(oculus.BUTTON_REMOTE_UP):
pos[1] += inc
if remote.isButtonDown(oculus.BUTTON_REMOTE_LEFT):
pos[0] -= inc
if remote.isButtonDown(oculus.BUTTON_REMOTE_DOWN):
pos[1] -= inc
if remote.isButtonDown(oculus.BUTTON_REMOTE_RIGHT):
pos[0] += inc

Does this work for you?

Lenticularis
04-13-2017, 12:43 PM
That's exactly what I was looking for, thanks!

But how would you change the ManualCursorButtonTask function?
def ManualCursorButtonTask():
"""Use spacebar to manually simulate mouse press/release on canvas"""

while True:

yield viztask.waitKeyDown(' ', priority=viz.PRIORITY_GUI_HANDLER-1)

canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.DOWN)

yield viztask.waitKeyUp(' ', priority=viz.PRIORITY_GUI_HANDLER-1)

canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.UP)

Jeff
04-13-2017, 11:24 PM
Try using the viztask.waitSensorDown (http://docs.worldviz.com/vizard/#commands/viztask/waitSensorDown.htm) and viztask.waitSensorUp (http://docs.worldviz.com/vizard/#commands/viztask/waitSensorUp.htm) commands:

def ManualCursorButtonTask():

while True:
yield viztask.waitSensorDown(remote, oculus.BUTTON_REMOTE_ENTER, priority=viz.PRIORITY_GUI_HANDLER-1)
canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.DOWN)
yield viztask.waitSensorUp(remote, oculus.BUTTON_REMOTE_ENTER, priority=viz.PRIORITY_GUI_HANDLER-1)
canvas.sendMouseButtonEvent(viz.MOUSEBUTTON_LEFT, viz.UP)

Lenticularis
04-20-2017, 12:32 PM
Thanks very much!