Inertial Position and Orientation Tracking System Home

Introduction

This system is designed to accurately track the position and orientation of a high power rocket (levels L2 and L3) during its flight from launch to apogee. I'm not exactly sure what measurement range I'll need to capture the acceleration and angular velocity of the vast majority of L2 and L3 rockets without saturating but I think 100 g and 500 dps is a useful baseline. It may be useful to add a barometer to capture altitude and igniter input/output connectors to use motor launch controllers as a trigger for recording and then use an onboard driver to ignite the rocket motor.

Analysis

It's important to understand exactly what's required from the system before designing it so I'm going to calculate required accelerations and recording time.

1 Found via Internet search, not verified

2 \( a = \dfrac{F_T - mg}{m} \), where a is acceleration, \(F_T\) is thrust, \(m\) is mass and \(g = 9.81 \, \text{m/s}^2\)

Microcontroller

I'm using the RP2350 with the following pinout.

Pin Type GPIO Description Alternate Functions
A0AnalogGPIO41ADC1SPI1 CS, UART1 RX, I2C0 SCL, PWM8 B
A1AnalogGPIO42ADC2SPI1 SCK, I2C1 SDA, PWM9 A
A2AnalogGPIO43ADC3SPI1 MOSI, I2C1 SCL, PWM9 B
A3AnalogGPIO44ADC4SPI1 MISO, UART0 TX, I2C0 SDA, PWM10 A
A4AnalogGPIO45ADC5SPI1 CS, UART0 RX, I2C0 SCL, PWM10 B
A5AnalogGPIO46ADC6SPI1 SCK, I2C1 SDA, PWM11 A
SCLDigitalGPIO21I2C0 ClockSPI0 CS, UART1 RX, PWM2 B
SDADigitalGPIO20I2C0 DataSPI0 MISO, UART1 TX, PWM2 A
D23DigitalGPIO23Digital I/OSPI0 MOSI, I2C1 SCL, PWM3 A
D22DigitalGPIO22Digital I/OSPI0 SCK, I2C1 SDA, PWM3 A
D11DigitalGPIO11Digital I/OSPI1 MOSI, I2C1 SCL, PWM5 B
D10DigitalGPIO10Digital I/OSPI1 SCK, I2C1 SDA, PWM5 A
D9DigitalGPIO9Digital I/OSPI1 CS, UART1 RX, I2C0 SCL, PWM4 B
D8DigitalGPIO9Digital I/OSPI1 MISO, UART1 TX, I2C0 SDA, PWM4 A
D7DigitalGPIO7Digital I/OSPI0 MOSI, I2C1 SCL, PWM3 B
D6DigitalGPIO6Digital I/OSPI0 SCK, I2C1 SDA, PWM3 A
D5DigitalGPIO5Digital I/OSPI0 CS, UART1 RX, I2C0 SCL, PWM2 B
D4DigitalGPIO4Digital I/OSPI0 MISO, UART1 TX, I2C0 SDA, PWM2 A
D3DigitalGPIO3Digital I/OSPI0 MOSI, I2C1 SCL, PWM1 B
D2DigitalGPIO2Digital I/OSPI0 SCK, I2C1 SDA, PWM1 A
TXDigitalGPIO0UART0 TXSPI0 MISO, I2C0 SDA, PWM0 A
RXDigitalGPIO1UART0 RXSPI0 CS, I2C0 SCL, PWM0 B
MISODigitalGPIO28SPI1 MISOUART0 TX, I2C0 SDA, PWM6 A
SCKDigitalGPIO30SPI1 SCKI2C1 SDA, PWM7 A
MOSIDigitalGPIO31SPI1 MOSII2C1 SCL, PWM7 B
SD_CARD_DETECTMicroSDGPIO40Card DetectSPI1 MISO, UART1 TX, I2C0 SDA, PWM8 A
SD_CSMicroSDGPIO39Chip SelectSPI0 MOSI, I2C1 SCL, PWM11 B
SDIO_DATA2MicroSDGPIO38SDIO Data 2SPI0 SCK, I2C1 SDA, PWM11 A
SDIO_DATA1MicroSDGPIO37SDIO Data 1SPI0 CS, UART1 RX, I2C0 SCL, PWM10 B
SD_MISOMicroSDGPIO36SPI0 MISOUART1 TX, I2C0 SDA, PWM10 A
SD_MOSIMicroSDGPIO35SPI0 MOSII2C1 SCL, PWM9 B
SD_SCKMicroSDGPIO34SPI0 SCKI2C1 SDA, PWM9 A

Sensors

LSM9DS1

Component I2C Address ODR (Hz) Measurement Range FIFO Buffer
Accelerometer 0x6B 10, 50, 119, 238, 476, 952 ±2 / ±4 / ±8 / ±16 g 32 levels
Gyroscope 0x6B 14.9, 59.5, 119, 238, 476, 952 ±245 / ±500 / ±2000 dps 32 levels
Magnetometer 0x1E 0.625, 1.25, 2.5, 5, 10, 20, 40, 80 ±4 / ±8 / ±12 / ±16 gauss
Temperature 0x6B

ADXL375

Component I2C Address ODR (Hz) Measurement Range FIFO Buffer
Accelerometer 0x53 0.1, 0.2, 0.39, 0.78, 1.56, 3.13, 6.25, 12.5,
25, 50, 100, 200, 400, 800, 1600, 3200
±200 g (fixed) 32 levels

Firmware

I'm using arduino-pico and a RP2350 microcontroller. Originally I wanted to use MicroPython or CircuitPython but MicroPython and CircuitPython don't have true multicore support. CircuitPython doesn't have multicore support at all and MicroPython hangs up when writing to microSD card while attempting to drain FIFO buffers. There are a few goals for the firmware which define success.