Orientation Logging Hardware Design for Panorama Alignment

Panoramas can be created by stitching several images from multiple cameras mounted on a rig together. One of the problems with stitching these images together is the alignment of the final output of the panorama itself. Ideally we would want to have all of our panoramas to have the same azimuth orientation and altitude angle for consistency. We can control the orientation with an electromechanical gimbal or we can post process the panoramas by using the orientation data. 

Our panoramic rig, the H3PRO7, is made by 360 Heros to hold 7 GoPros. While there are several 3-axis gimbals, similar to the Feiyu G3, that can lock in the motion for a single GoPro, they can not support the mass of our 7 GoPro rig. Stabilizers would also be an option, but while most of them could handle the load, most of them do not have azimuth lock. The DJI Ronin is a 3-axis gimbal stabilizer that could handle a load; however, the frame would be in the way of the panoramas. Even if we were to find a suitable stabilizer for our rig, we would need to ensure that we lock the azimuth to north before we take off for taking panoramas.

Another option is to post-process the panoramas with orientation data. To collect orientation data we need at least an accelerometer and a magnetometer. There are several breakout boards on the market available that could work:

IMU List
Product Provider Accelerometer Magnetometer Gyroscope Barometer Fusion GPS Port DOF Cost
Adafruit 10-DOF IMU Breakout Adafruit LSM303DLHC LSM303DLHC L3GD20 BMP180     10 $29.95
Adafruit 9-DOF IMU Breakout Adafruit LSM303DLHC LSM303DLHC L3DG20H       9 $19.95
Adafruit 9-DOF Accel/Mag/Gyro+Temp Breakout Board Adafruit LSM9DS0 LSM9DS0 LSM9DS0       9 $24.95
Adafruit 9-DOF Absolue Orientation IMU Fusion Breakout Adafruit BNO055 BNO055 BNO055   Yes   9 $34.95
ADXL335 Adafruit ADXL335           3 $14.95
Triple-axis Accelerometer+Magnetometer (Compass) Board Adafruit LSM303 LSM303         6 $14.95
ADXL345 Triple Axis Accelerometer Adafruit ADXL345           3 $17.50
ADXL326 5V ready triple-axis accelerometer Adafruit ADXL326           3 $17.95
ADXL377 High G Triple Axis Accelerometer Adafruit ADXL377           3 $24.95
Adafruit Triple Axis Accelerometer Adafruit MMA8451           3 $7.95
L3GD20H Triple Axis Gyro Breakout Board Adafruit     L3G4200       3 $12.50
Triple-axis Magnetometer Board Adafruit   HMC5883L         3 $9.95
SparkFun 9 DOF Sensor Stick SparkFun ADXL345 HMC5883L ITG3200       9 $49.95
9 Degrees of Freedom Razor IMU SparkFun ADXL345 HMC5883L ITG3200   Yes   9 $74.95
SparkFun 6 DOF IMU Digital Combo Board SparkFun ADXL345   ITG3200       6 $39.95
SparkFun IMU Fusion Board SparkFun ADXL345   IMU3000   Yes   6 $39.95
DIYDrones ArduIMU+ V3 SparkFun MPU6000 HMC5883L MPU6000   Yes Yes   $79.95
SparkFun 9 DOF Breakout SparkFun MPU6050 AK8975 MPU6050   Yes   9 $34.95
SparkFun 9 DOF IMU Breakout SparkFun LSM9DS0 LSM9DS0 LSM9DS0       9 #29.95
Sparkfun Triple Axis Accelerometer and Gyro Breakout SparkFun MPU6050   MPU6050   Yes   6 $39.95
SparkFun Tri-Axis Gyro Breakout SparkFun     L3G4200D       3 $49.95
SparkFun Gyro Breakout SparkFun     LPY503AL       3 $29.95
SparkFun Triple Axis Accelerometer Breakout SparkFun LIS331HH           3 $27.95
SparkFun Triple Axis Accelerometer Breakout SparkFun ADXL345           3 $17.95
SparkFun Triple Axis Accelerometer Breakout SparkFun ADXL335           3 $14.95
SparkFun Single Axis Accelerometer Breakout SparkFun ADXL193           1 $29.95
UM7-LT Orientation Sensor Pololu / CHRobotics MPU6050 AK8975 MPU6050   Yes Yes 9 $129.95
Pololu AltIMU-10 v4 Pololu LSM303D LSM303D L3GD20H LPS25H     10 $27.95
Pololu MinIMU-9 v3 Pololu LSM303D LSM303D L3GD20H       9 $19.95
Pololu LSM303D Pololu LSM303D LSM303D         6 $9.95
MMA7361LC 3-Axis Accelerometer Pololu MMA761LC           3 $11.95
MMA7341LC 3-Axis Accelerometer Pololu MMA7341LC           3 $11.95
L3GD20H 3-Axis Gyro Pololu     L3GD20H       3 $12.95
10 DOF Mems IMU Sensor DFRobot ADXL345 HMC5883L ITG3205 BMP085     10 $39.50
6 DOF Sensor DFRobot MPU6050   MPU6050       6 $9.90
LSM303 Breakout Board - Tilt Compensated Compass DFRobot LSM303DLH LSM303DLH         6 $15.55
CMPS11 Tilt Compensated Magnetic Compass DFRobot CMPS11 CMPS11 CMPS11   Yes   9 $29.90
Gyro Breakout Board DFRobot     ADXRS610       3 $49.50
Triple-Axis Digital-Output Gyro DFRobot     ITG3200       3 $49.95
Triple Axis Accelerometer DFRobot ADXL345           3 $7.90
Triple Axis Accelerometer Tiny DFRobot BMA220           3 $4.90
Gyroscope Module 3-Axis Parallax     L3G4200D       3 $29.99
Memsic 2125 Dual-axis Accelerometer Parallax MXD2125           2 $29.99
4-Direction Tilt Sensor Parallax / Simply Tronics 2           2 $9.99
MMA7455 3-Axis Accelerometer Module Parallax MMA7455L           3 $29.99
Compass Module 3-Axis Parallax   HMC5883L         3 $29.99
GYRO click MikroE     L3GD20       3 $25.00
Compass click MikroE   LSM303DLH         3 $25.00
Accel click MikroE ADXL345           3 $19.00
Three-Axis Accelerometer Board MikroE ADXL330           3 $26.90
MPU IMU click MikroE MPU6000   MPU6000   Yes   6 $39.00
MPU 9DOF click MikroE MPU6050 AK8975 MPU6050   Yes   9 $42.00
Tessel Accelerometer Module Tessel MMA8452Q           3 $25.00
Xadow IMU 9DOF Seeed Studio MPU6050 AK8975 MPU6050   Yes   9 $39.90

There are still other breakout boards out there on the market. Many of them fit into a specific platform and are difficult to use outside of the platform. I tried to include many different providers in this list.

The best candidates were those with sensor fusion that could produce an orientation, rather than just the raw data. Raw data is noisy and need filtering. While sensors can be filtered, such as with a Kalman filter, error reduction is greater when all of the sensors are combined together to help reduce the overall error. Additionally, after the raw data is filtered, it needs to be converted into useful units, such as degrees in Euler angles or as values for a quaternion.

Another desirable option was to include GPS and altitude as part of the solution. While 10DOFs typicaly have a barometer and claim they can provide the altitude, GPS is the only way to get global X-Y coordinates. The ability for the sensor to integrate and use the GPS data was a plus for the UM7 and the ArduIMU, which also happen to be the most expensive options in the list. Eventually we decided on the UM7, as it claims the onboard STM32F103T8U6 can fuse the GPS data with the IMU. Also the UM7 board has a few features that makes it easier to integrate with a GPS module and be able to communicate with a microcontroller. The UM7 board has a secondary Serial UART specifically targeted to connect to a GPS module. The onboard microprocessors takes the data from the MPU9150 through I2C, filters it, fuses it with the GPS data, and produces data accessible via a Serial UART port on the front for communication with a microcontroller.

We also took a look at different low-cost GPS modules available on the market:

GPS Modules
Product Provider Channels Max Rate Chip Cost
Ultimate GPS Module Adafruit 66 10Hz MTK3339 $29.95
Ultimate GPS Breakout Adafruit 66 10Hz MTK3339 $39.95
GPS Receiver SparkFun 50 5Hz GP635T $39.95
GPS Receiver SparkFun 66 5Hz MTK3339 $59.96
GPS Receiver Module Pololu 66 10Hz MTK3339 $49.95
GPS Receiver for Arduino DFRobot 50 5Hz G6010 $29.90
LS20031 GPS Receiver DFRobot 32 5Hz MT3318 $60.00
GPS Smart Module SimplyTronics 20 1Hz GSC3e/LP $34.99
GPS Module U-Blox 56 10Hz PAM-7Q $49.99
GPS Click MikroE 50 5Hz LEA-6 $49.00
GPS2 Click MikroE 48 5Hz Quectel L30 $44.00
GPS3 Click MikroE 66 10Hz Quectel L80 $44.00
GPS Clikc L10 MikroE 66 5Hz Quectel L10 $44.00
SmartGPS Board MikroE 50 5Hz LEA-6S $49.60
GNSS Click MikroE 99 10Hz Quectel L86 $46.00
Xadow GPS Seeed Studio 99 10Hz Fastrax IT530M $44.90

Some GPS chipsets, such as the MTK3339, are quite prevalent. Also the MTK3339 has 66 channels to access the 22 GPS satellites. The max rate and cold start up lock time were not important for us, but if we use this module for something else, it might be beneficial to have. Also the max rate seems to be somewhat correlated with the quality of the signal, after all you can't have a higher rate without a good signal in the first place. The cost of the Adafruit Ultimate GPS Breakout was less than other comparable models. Also the breakout is designed for an external GPS antenna which would allow us to have a more flexible design for the placement of the GPS module as it relates to the GPS signal interference.

We selected the Adafruit Pro Trinket 3V for the microcontroller. It will be easy to code in Arduino and it contains all the pins we need for communicating with the UM7 through a UART Serial connection. As this is a logger, we also added an SD card reader and writer to the design, which uses SPI pins. The Pro Trinket has SPI pins and it also has 2 hardware interrupts. Pin 3 can be used for triggering a recording of the orientation and positional data to the SD card. Here is the final hardware design for the logger.

In another post, we will discuss how the GoPro system is integrated with our logger, how we designed the case for the positioning of these hardware elements for use, and how the captured positional data is used with the photo sequence to auto align the panoramas during panorama construction.


Matthew Swarts


Research Faculty

Georgia Institute of Technology

College of Architecture