HyperIMU is a powerful sensor app developed for mobile devices.

It helps developers and researchers to collect all sensors’ data out of a device in order to perform analysis and processing.
Latest commercial smartphones embed several types of sensors that can be used to develop an uncountable number of applications on many fields.

google-play-badge


Summary

Technology

Designed to be as customizable as possible, HyperIMU streams the sequence of all collected sensors’ values offering both an online and offline data processing.
Main features of HyperIMU are:

  • Streaming protocols: TCP, UDP, File
  • Data formatting: CSV, JSON
  • Fully customizable list of sensors to stream, including both embedded sensors and geolocalization interfaces (GPS, NMEA 0183)
  • Creation of multiple configuration lists for different working setups
  • Customizable sampling rate for all the sensors’ signals
  • Integrated signals’ charts viewer
  • Responsive and user-friendly interface

Network roles

In an online data processing scenario, HyperIMU acts like a network Client, while the processing unit (MAC or PC) is the network Server.
Multiple HyperIMU devices can connect to the same unit Server to provide parallel field data acquisitions.

Data formatting

Each sensor contains a group of three values. Values corresponding to axial sensors (such as Accelerometer, Gyroscope, Magnetometer …) are presented in the order XYZ.
The coordinate-system is defined relative to the screen of the phone in its default orientation. The axes are not swapped when the device’s screen orientation changes.
The X axis is horizontal and points to the right, the Y axis is vertical and points up and the Z axis points towards the outside of the front face of the screen. In this system, coordinates behind the screen have negative Z values.Geolocalization values such as GPS and NMEA are grouped in threes as for the other sensors. With CSV formatting, each NMEA string consists of semicolon separated values string, in order to not be confused with the main HyperIMU CSV packet.

With CSV data formatting, all values are separated by commas, while with JSON protocol, all values are grouped in JSON array for each sensor.

A CSV packet is formatted as follows:

“Timestamp , Accelerometer.x , Accelerometer.y , Accelerometer.z , Gyroscope.x , Gyroscope.y , Gyroscope.z , Magnetometer.x , Magnetometer.y , Magnetometer.z , Orientation.x , Orientation.y , Orientation.z , Ambient_Light.x , Ambient_Light.y , Ambient_Light.z , GPS.lat , GPS.long , GPS.alt”

A JSON packet is sent via TCP protocol only, and it is formatted as follows:

{
“op”:”hyperimu”,
“Timestamp”:1518819953744,
“Accelerometer”:[0.09279 , 0.148016 , 9.7345703] ,
“Gyroscope”:[0.00313534 , -0.014384 , 0.0085291134] ,
“Magnetometer”:[-14.25 , -1 , -39.125] ,
“Orientation”:[92.046875 , -0.3125 , 0.5625] ,
“Ambient Light”:[6 , 0 , 9.8211191] ,
“GPS”:[0 , 0 , 0] ,
}

HyperIMU Server

HyperIMU Server represents a collection of code snippets covering all server-side stream protocols supported by HyperIMU.
Snippets performs basic operation such as internet input streaming, csv sequence chunking are developed in Python and they can be used as reference or a starting point for more sophisticated implementations.

HyperIMU Pharos

HyperIMU Pharos is new a feature which lets the users to configure the HyperIMU app remotely. With Pharos activated, the device acts like a network Server to which a client can send proper configuration commands.
All client commands and server responses consist of case-insensitive string sentences, sent via a TCP client/server connection.
Basically, this feature allows to:

  • configure remotely all settings of HyperIMU such as protocols, ports, packet’s header and trailer
  • fully configure the packet’s content, by including/excluding sensors
  • start/stop the main HyperIMU acquisition

In order to configure any of the options of the HyperIMU app with HIMU Pharos, the Client must enter in host mode, that is a sort of authorization token. Changes to the HyperIMU settings are not allowed outside the host mode.It is possible to have only one Client in host mode at time.
Once the Client ends with modifications requests, it has to exit the host mode in order to close the session and run HyperIMU.

The commands supported by HIMU Pharos are:

Client command Description Server Response
enter host enters the Host mode for the current client if there is no active host session ACK/NACK
exit host exits the Host mode for the current client ACK/NACK
launch launches the HyperIMU main GUI without starting it ACK/NACK
start launches and starts the HyperIMU acquisition ACK/NACK
stop stops the HyperIMU acquisition ACK/NACK
set protocol  sets the protocol to be used by HyperIMU for the streaming. Possible values for  are: TCP, UDP, NONE, JSON, FILE ACK/NACK
get protocol asks for the streaming protocol currently set the current protocol
set port  sets the port number for the protocols TCP, UDP and JSON ACK/NACK
get port asks for the port number currently set the current port number
set ip  sets the ip address for the protocols TCP, UDP and JSON ACK/NACK
get ip asks for the ip address currently set the current ip address
set DT  sets the sampling rate (in ms) for the data acquisition ACK/NACK
get dt asks for the sampling rate currently set the current sampling rate in ms
enable timestamp  enables/disables the timestamp as value to be included to the stream. Possible values for  can be: TRUE or FALSE ACK/NACK
enable MAC  enables/disables the MAC address as value to be included to the stream. Possible values for  can be: TRUE or FALSE ACK/NACK
enable GPS  enables/disables the GPS coordinates as values to be included to the stream. Possible values for  can be: TRUE or FALSE ACK/NACK
enable NMEA  enables/disables the GPS NMEA sentences as values to be included to the stream. Possible values for  can be: TRUE or FALSE ACK/NACK
get names asks for the lists of names of all the sensors inside the device a csv string containing all sensors’ names
get types asks for the lists of types of all the sensors inside the device. A type is a constant number identifying the sensor type code. a csv string containing all sensors’ type codes
set list  configures the list of sensors to be included to the stream.  is a csv list of zeros and ones corresponding to the list of sensors contained inside the devices: sensors correponding to zeros (0) will be excluded from the stream, otherwise they will be included. The length of the list  can be lower than the numer of sensors of the device. ACK/NACK
get list asks for the list of sensors included to the stream. a csv list of zeros(0) and ones(1) corresponding to the list of sensors on board the device: sensors correponding to zeros (0) will be excluded from the stream, otherwise they will be included

The main responses are:

Response Description
ACK positive response: the command was committed
NACK negative response: the command was uncorrect or not allowed

External Links

HyperIMU is supported on Android OS devices (smartphones and tablets) and the latest version can be downloaded for free from the Google Play Store.
Snippets for the HIMU Server are actually hosted as a public Github repo.
Embedded signals’ charts are powered by AChartEngine (The 4ViewSoft Company).