Jeff Loomis
BIOPAC provides a large range of monitoring devices for detecting physical or physiological changes over time. The BIOPAC virtual reality platform provides:
Using physical data with Vizard
Vizard supports interaction with the data provided from these devices using the biopacndt.py module, a Python API for connecting to BIOPAC’s AcqKnowledge software with Network Data Transfer (NDT).
Note: biopacndt.py is included with the NDT license; contact support@biopac.com if needed.
The connection to AcqKnowledge can be made locally or over the network. As long as the Respond to auto-discovery requests option is enabled in AcqKnowledge there is no need to specify a remote machine’s IP address in Vizard.
If you have AcqKnowledge installed, the biopacndt.py file is found in the following location: C:\Program Files\BIOPAC Systems, Inc\AcqKnowledge\Network Data Transfer Examples\Python 2\source Copy and paste the file to the Vizard Python folder: (C:\Program Files\WorldViz\Vizard\python). Placing files in the Vizard Python folder will ensure each Vizard project can load them.
Software setup in AcqKnowledge
Enable the NDT Network Data Transfer protocol in AcqKnowledge in order to stream data to and from Vizard. (NDT is a licensed feature add-on.)
This configuration only needs to be done once.
To see event markers in AcqKnowledge, have the events bar visible.
You can also toggle to show the “Event Palette” to see a timeline of events.
Vizard to AcqKnowledge
In the code below, Vizard sends a signal to drop an event marker in AcqKnowledge:
'''
Press A to toggle acquisition
Press spacebar to drop a marker
'''
import sys
import biopacndt
import viz
import vizact
import vizinfo
# Connect to the AcqKnowledge server
try:
acqServer = biopacndt.AcqNdtQuickConnect()
except biopacndt.ACQException:
viz.log(viz.LOG_ERROR, 'Exiting application, no AcqKnowledge servers found')
sys.exit()
viz.go()
vizinfo.InfoPanel()
viz.clearcolor(viz.SLATE)
#You can change the label “stimulus” to whatever you want the event to be labeled as
def insert_marker():
acqServer.insertGlobalEvent('stimulus', '', '')
vizact.onkeydown(' ', insert_marker)
vizact.onkeydown('a', acqServer.toggleAcquisition)
AcqKnowledge to Vizard
In the following code, Vizard prints out the data streaming from AcqKnowledge:
'''
Press A to toggle acquisition
Press S to start the data server
Press D to stop the data server
The data server can only be started once
'''
import sys
import biopacndt
import viz
import vizact
import vizinfo
# Connect to the AcqKnowledge server.
try:
acqServer = biopacndt.AcqNdtQuickConnect()
except biopacndt.ACQException:
viz.log(viz.LOG_ERROR, 'Exiting application, no AcqKnowledge servers found')
sys.exit()
# Change data connection method to single. The single data connection
# mode means that AcqKnowledge will make a single TCP network connection to
# deliver the data, all channels being delivered over that same connection.
if acqServer.getDataConnectionMethod() != 'single':
acqServer.changeDataConnectionMethod('single')
print('Data Connection Method Changed to: single')
def print_data(index, frame, channelsInSlice):
print(index, frame)
enabledChannels = acqServer.DeliverAllEnabledChannels()
singleConnectPort = acqServer.getSingleConnectionModePort()
dataServer = biopacndt.AcqNdtDataServer(singleConnectPort, enabledChannels )
dataServer.RegisterCallback('print_data',print_data)
viz.go()
vizinfo.InfoPanel()
viz.clearcolor(viz.SLATE)
vizact.onkeydown('a', acqServer.toggleAcquisition)
vizact.onkeydown('s', dataServer.Start)
vizact.onkeydown('d', dataServer.Stop)