Difference between revisions of "Zspace Linux Fix"

From Immersive Visualization Lab Wiki
Jump to: navigation, search
(New page: ==Project Overview== The Camelot project involves the stitching of 50+ synchronized video cameras to produce large, completely immersive videos/images. My involvement in this project is to...)
 
 
(39 intermediate revisions by 3 users not shown)
Line 1: Line 1:
 
==Project Overview==
 
==Project Overview==
The Camelot project involves the stitching of 50+ synchronized video cameras to produce large, completely immersive videos/images. My involvement in this project is to reverse engineer how two GoPro camera's synchronize for stereoscopic recordings and extend this to N-number of cameras with custom hardware.
+
The goal of this project is to create a fix for the zspace's stereo display of content, which gets mixed up from time to time. Using additional hardware external to the computer, a fix can be made which determines if the screen is correctly initialized and displaying content with the proper stereo orientation. In other words, an Arduino with a photocell oriented above part of the zspace screen can identify which side is which and send feedback to the computer.
  
===Milestones===
+
===Arduino Info and Tutorials===
* Obtain an iPhone female-to-male (30-pin) connector with all pins exposed.
+
*Most basically, the [http://arduino.cc/ Arduino homepage] has everything from basic [http://arduino.cc/en/Reference/HomePage language reference] to links and [http://arduino.cc/en/Guide/HomePage tutorials].
* Solder pins to custom iPhone connector and analyze communication between master and slave GoPro's.
+
*Also, there is another [http://www.ladyada.net/learn/arduino/lesson1.html tutorial website] with clearer instructions and copyable codes. A [http://learn.adafruit.com/photocells/using-a-photocell related link] has photocell information.
* Determine logic used to initialize a slave GoPro from a master device.
+
*[http://forefront.io/a/beginners-guide-to-arduino This] is very basic Arduino information presented clearly. I did not use this, but found it while searching for useful, simple URL's.
* Reproduce this behavior with an Arduino unit to drive a slave GoPro from it (the Arduino Uno).
+
*These two links ([http://forum.arduino.cc/index.php?topic=141580.0 here] and [http://playground.arduino.cc//Interfacing/CPPWindows#VisualStudio2008 here]) seemed useful when programming the C++ software seen below.
* Extend this logic to two cameras at the same time.
+
*[http://playground.arduino.cc/Learning/LEDSensor This link] has another version of a brightness detecting program (possibly useful for reference).
* Create a proof of concept with one master GoPro and two slave GoPro's.
+
*Possibly useful [http://webtutsdepot.com/2010/05/01/arduino-visual-c-plus-plus-tutorial/ tutorial] including an example of Arduino/C++ integration (the exact program does not actually work but has useful components).
 +
*Here are some (mostly basic) test programs unrelated to this specific project that help with understanding Arduino: [[Media:Arduinolearning.zip]]
  
 
===Known Bugs/Issues===
 
===Known Bugs/Issues===
* Why use a GoPro?
+
* The ZSpace has a 50/50 chance at initializing the left and right images in an inverted manner.
** There is another capturing device that allows for synchronization between all cameras, but it requires a computer since it needs to be connected to one.
+
** Must be detected so screens can be inverted [again] to their correct positions.
** GoPro's are a lot smaller and, more importantly, are self-contained -- they don't need to be connected to a computer to function and save all data to their removable storage devices.
+
** Requires additional hardware to monitor which screen is being displayed.
** GoPro's are also a cheaper alternative to the other camera in question, which would significantly help save development costs for the Camelot project.
+
** Arduino Uno serves this purpose and reports light intensity of current view back to host OS.
* GoPro availability
+
 
** The version of the GoPro (Hero 2) being used for my proof of concept have been discontinued -- they are widely available on places like the Amazon Marketplace or eBay, however, which could help lower the project's cost.
+
===Milestones===
** The newer version of the GoPro's (Hero 3) are ultimately what we wish to extend this proof of concept to, but GoPro, themselves, haven't even released a synchronization cable for them yet, and using a sync cable from a Hero 2 causes the cameras to not function properly.
+
* Power the light intensity to frequency converter via an Arduino Uno.
* Hero 2 Sync Cable
+
* Obtain light intensity measurement by reading frequency from the diode.
** The connector is an active cable -- there is additional hardware inside the connector, itself. This needs to be analyzed to determine what needs to be reproduced on a per-camera basis and what signals simply need to be buffered and forwarded to additional cameras.
+
* Write an application to read/write light-intensity to/from the Ardunio Uno by means of a tty device (e.g. "/dev/ttyACM0").
** There is an EEPROM inside the connector on both the slave/master ends; all cameras in our GoPro 'network' would need a local EEPROM to interact with to fully emulate a slave connection.
+
* Create a cable with the special diode fastened in place behind a polarized lens.
 +
* Test the cable to make sure the polarized lens makes a difference when switching left/right screens in CalVR.
 +
* Integrate code with CalVR to show proof of concept.
 +
*Connect Arduino software and that on Windows/Linux to establish a way of applying the photocell readings to zspace.
 +
 
 +
===Hardware===
 +
*The Arduino itself, attached to the computer using a COM port (currently programmed as COM3).
 +
*A photocell, attached using a resistor to a pin (currently programmed as Pin13) and the ground pin (GND).
 +
*A resistor is needed (10Kohms?).
 +
 
 +
===Arduino Software===
 +
*The Arduino software needs to be [http://arduino.cc/en/Main/Software downloaded] before the Arduino itself can be programmed.
 +
*The specific COM port to which the Arduino is attached is an important detail involved in the programming. It can be found in the Arduino software under Tools -> Serial Port.
 +
*The Baud rate also should be included in programs (currently programmed at 9600).
 +
*This is the Arduino program that reads and prints a photocell reading from a pin (currently programmed to be pin13) every millisecond.
 +
**[[Media:The_final_project.ino]]
 +
*This is a slightly modified version of the previous program, which hopefully can also identify which pin is being used.
 +
**[[Media:Final_project_pin_identifier.ino]]
 +
 
 +
===Source Code===
 +
* Source code for receiving light-intensity information from the Arduino Uno in Linux (Gray):
 +
** [[Media:HostApp.zip]]
 +
* Source code for actually measuring the light-intensity from the light sensor on the Arduino Uno (Gray).
 +
** [[Media:ArduinoApp.zip]]
 +
*A windows C++ code (visual studio 2010) that prints the Arduino commands (Kubasak). This program includes the assumption that the Arduino is attached to the COM3 serial port.
 +
** [[Media:zspace-controller.zip]]
  
 
===Developers===
 
===Developers===
'''Software Developer'''
+
'''Software Developers'''
 +
* Matthew Kubasak
 
* Thomas Gray
 
* Thomas Gray
  
 
'''Project Advisor'''
 
'''Project Advisor'''
*Jurgen Schulze
+
* Jurgen Schulze

Latest revision as of 11:50, 30 January 2014

Contents

Project Overview

The goal of this project is to create a fix for the zspace's stereo display of content, which gets mixed up from time to time. Using additional hardware external to the computer, a fix can be made which determines if the screen is correctly initialized and displaying content with the proper stereo orientation. In other words, an Arduino with a photocell oriented above part of the zspace screen can identify which side is which and send feedback to the computer.

Arduino Info and Tutorials

  • Most basically, the Arduino homepage has everything from basic language reference to links and tutorials.
  • Also, there is another tutorial website with clearer instructions and copyable codes. A related link has photocell information.
  • This is very basic Arduino information presented clearly. I did not use this, but found it while searching for useful, simple URL's.
  • These two links (here and here) seemed useful when programming the C++ software seen below.
  • This link has another version of a brightness detecting program (possibly useful for reference).
  • Possibly useful tutorial including an example of Arduino/C++ integration (the exact program does not actually work but has useful components).
  • Here are some (mostly basic) test programs unrelated to this specific project that help with understanding Arduino: Media:Arduinolearning.zip

Known Bugs/Issues

  • The ZSpace has a 50/50 chance at initializing the left and right images in an inverted manner.
    • Must be detected so screens can be inverted [again] to their correct positions.
    • Requires additional hardware to monitor which screen is being displayed.
    • Arduino Uno serves this purpose and reports light intensity of current view back to host OS.

Milestones

  • Power the light intensity to frequency converter via an Arduino Uno.
  • Obtain light intensity measurement by reading frequency from the diode.
  • Write an application to read/write light-intensity to/from the Ardunio Uno by means of a tty device (e.g. "/dev/ttyACM0").
  • Create a cable with the special diode fastened in place behind a polarized lens.
  • Test the cable to make sure the polarized lens makes a difference when switching left/right screens in CalVR.
  • Integrate code with CalVR to show proof of concept.
  • Connect Arduino software and that on Windows/Linux to establish a way of applying the photocell readings to zspace.

Hardware

  • The Arduino itself, attached to the computer using a COM port (currently programmed as COM3).
  • A photocell, attached using a resistor to a pin (currently programmed as Pin13) and the ground pin (GND).
  • A resistor is needed (10Kohms?).

Arduino Software

  • The Arduino software needs to be downloaded before the Arduino itself can be programmed.
  • The specific COM port to which the Arduino is attached is an important detail involved in the programming. It can be found in the Arduino software under Tools -> Serial Port.
  • The Baud rate also should be included in programs (currently programmed at 9600).
  • This is the Arduino program that reads and prints a photocell reading from a pin (currently programmed to be pin13) every millisecond.
  • This is a slightly modified version of the previous program, which hopefully can also identify which pin is being used.

Source Code

  • Source code for receiving light-intensity information from the Arduino Uno in Linux (Gray):
  • Source code for actually measuring the light-intensity from the light sensor on the Arduino Uno (Gray).
  • A windows C++ code (visual studio 2010) that prints the Arduino commands (Kubasak). This program includes the assumption that the Arduino is attached to the COM3 serial port.

Developers

Software Developers

  • Matthew Kubasak
  • Thomas Gray

Project Advisor

  • Jurgen Schulze