Monthly Archives: November 2016
Assignments At Yost Labs

The PrioVR Utility Application

My first true assignment was the Utility. It was made so that users could have some tool to use to setup, test, calibrate, debug, and experiment with their suit. It was developed with web tech. The app base is Electron, which is based on Chromium, which is nearly identical to Google Chrome. So the app appearance is written in HTML and CSS, the functionality is written in JavaScript. Usage of the PrioVR suit requires access to USB ports, which requires me to drop down to native levels for that. If I am going to go to native code at all, why not use our PrioVR API? So I wrote a binding. This idea has been done at Yost Labs before with MoCap Studio. So what we do is this: We take a C++ library known as JSON-RPC and use that to make this binding possible. Then we have a server run in the background on app startup. The JavaScript will send RPC requests to the server and it will call a C++ function with arguments given by the JavaScript. The C++ will call an API function and return the results to the JavaScript.  Here is a screenshot of the app on my Mac.

app

This app is complicated and does so many things it is untrue. It is by far the biggest project I have done. Biggest in scope, importance, code size, and time. I also wrote an updater, which is yet to be deployed at the time of this writing, which is complex and soon to be open source. So the Utility took me months to make, along with the API server, and the Updater took a couple weeks. All of the coding was done by me alone. Sure others helped, like the authors of the PrioVR API, the Electron team for the base, and much more. But the act of assembling it all and making it work was all me, and I am happy.

My next project, which was just assigned last week, is a rewrite of the 3-Space Sensor Suite. The old one is not maintainable as the tech is unique and the original creators no longer are with the company. Below is what I have managed to accomplish so far.

app1

It is pretty, but not functional at all. I just got the Main UI 90% done Monday. Since then I have been working on the API server for this app. It is a different API so I need to write another binding. I just got the new binding done Wednesday and so development hasn’t truly started yet.

 

It has been great working at Yost Labs and I hope to work there for quite some more time.

An Update : Internship at Yost Labs

So it has been quite a while since I’ve posted an update on this site. I’m going to try start being more active since I have some new topics to provide discourse on.

 

yl_logo

The first thing I am going to talk about is my internship at Yost Labs. So back in May, I applied for and received my first real job as a programmer. At first, I worked as a researcher. My focus was mostly on a dreaded topic known as magnetometer calibration. Before I talk about that though, I should say what Yost Labs does.

Primarily, as far as I can tell, we make accurate orientation sensors. This sensor knows how you are holding it. Normally I would just say, “Just use a gyroscope, why buy a more expensive sensor?”. The reason is that a gyroscope will drift. The readings have noise and so if you code your orientation based solely on that, the sensor will become more inaccurate over time. Eventually it will be really wrong and have no way of knowing. Yost Labs, and others, solve this problem by using a technique called Sensor Fusion. You take three components and use their readings together to calculate your orientation. You need a gyroscope, accelerometer, and a magnetometer. The gyroscope does most of the work, but the other sensors are used to reassert correct position and prevent drift. For those who don’t know what these components are, I will explain quickly. A gyroscope measures angular velocity, which how fast you are rotating. The accelerometer measures general acceleration, which measures how fast you are moving. The magnetometer measures the Earth’s magnetic field and can tell where North is. Using this data and a complex piece of code called a filter, you can provide accurate orientation over long periods of time. The sensor technology is called 3-Space.

OK, so now that that is out of the way, we can move on. So my first real tasks were to do with 3-Space magnetometer calibration. The components need to be calibrated for them to work correctly.  The magnetometer especially needs calibration. The gyroscope, and the accelerometer do not need to be calibrated as often as the magnetometer. It needs calibrated each time you change location, usually only on a large scale, like miles. To calibrate, you need to take samples, and then calculate an offset and a matrix. It is really complicated so I’m not going any farther on that topic. My next major assignment was the PrioVR Utility App. PrioVR is a bunch of special sensors that you wear on your body and they can be used to find out the user’s body orientation, and position. Yost Labs had a Kickstarter about two years ago for PrioVR. After it was funded development started and was great at first. Then some stuff went down and we were massively delayed. I came in right as PrioVR was getting close to release. At the time, we still didn’t have a app for users to setup their suit with, so I built it. It had a lot of new challenges for me and I will detail the App as well as my new assignment in my next post.

It is pretty cool working here, and I can’t wait to provide more detail.