
FutureConcepts
How do we determine our attitude in space?
- Size
- 103.5 × 103.5 mm
- Copper layers
- 2
- Thickness
- 1.6 mm
- Parts
- 44
- Nets
- 197
- Pads
- 595
- Tracks, vias
- 0, 0
- Routed
- Not yet
- KiCad
- KiCad 9.0 (file 20241229)
- Created
- 21 Jul 2025
- Updated
- 7 Oct 2025
Overview
FutureConcepts is an open-source printed circuit board by IvaylooTs, from the IvaylooTs/StarTracker repository on GitHub. It is a 2-layer board of 103.5 × 103.5 mm with 44 parts on 197 nets.
Its parts include 20 resistors, 8 capacitors, 4 ICs and 2 connectors. It belongs with the Raspberry Pi (Linux) boards of this library.
README
README.mdRepo: Star Tracker
Team Name: CASSI
Project Name: CASSI (Celestial Alignment System for Satellite Inertial-control)
Official Category: Star Tracker 1
Team Members:
Michael Yan, Ivaylo Tsekov, Alexandra Nedela, Dilyana Vasileva, Tsvetomir Staykov
Note: for full and final documentation please read Star_Tracker_3.pdf
Problem
How do we determine our attitude in space?
Project Overview and End Goal
This project implements a star tracking system using a Raspberry Pi with an AI camera to determine the orientation of the system based on captured star images using a deterministic algorithm. Once calibrated, the system works in tandem with an IMU (Inertial Measurement Unit) to track orientation without continuous visual input. When drifting occurs, due to environmental variables, power loss, or other factors, the system automatically recalibrates.
Current Available Demo
Go to the digital_twin folder in the src directory. It contains:
main.py– main file with all the systemsstar_distances_sorted.db– database with calculated angular distances, sorted in ascending orderstar_identified.png– sample image from previous teststest_images– dir with images from Stellarium for testing purposes (uses specific resolution and FOV)create_hash.py- a script to generate a hash map from database table "AngularDistances"catalog_hash.py- an already generated hash with the script above using 2 degree tolerancestellarium360_new.js- a script to be pasted into stellarium console for testing purposesscript_images- dir with images generated from the above script
To run the script, you will need the sqlite3 and cv2 libraries installed on your system, and Python 3.
To run the script, use:
python3 main.py The results in your terminal should be:
- Indicator of which image you are currently processing
- Which mode you're in (Lost-in-Space / Tracking)
- The resulting quaternion from either of the two modes if one is produced
- The mapping of image star to HIP ID if one is produced
Files that should be generated when you run the script:
- For each image that you're processing you should get a file generated in this format "stars_identified_[index]"
System Architecture
![]()
![]()
Software
Database Structure
We have two tables in our database.
Table 1 – "Stars" contains the HIP of each star according to the Hipparcos catalog, the magnitude of each star, and x, y, z coordinates of a unit vector corresponding to their RA and DEC coordinates in the equatorial coordinate system.
Table 2 – "AngularDistances" contains the calculated angular distance between each pair of stars in Table 1, sorted from lowest to highest value.
The stars are filtered based on:
- Brightness
- Size
- Eccentricity
Lost-in-Space Algorithm
We're implementing a Lost-in-Space approach based on pair matching. The algorithm has four main parts:
- Image Processing and Feature Extraction
- Angular Distance Calculations
- Mapping to Catalog
- Attitude Determination
1. Image Processing and Feature Extraction
The stars in the image are filtered based on: Brightness, Size, and Eccentricity.
Then we select the N brightest stars in our image using blob detection and the cv2 Python module. From this, we get the (x, y) coordinates of the center of each star in the image.
2. Angular Distance Calculations
- We center the (x, y) coordinates of the stars based on our image's center, then convert them into vectors with the focal length as the coordinate along the z-axis
- Convert them into unit vectors to reduce unnecessary computation
- Calculate the angular distance between each pair (using the cosine of the dot product of the two vectors)
3. Mapping Stars to Catalog
- For each pair of stars in our image, we get the candidates ID pairs from our catalog hash
- Then we assign the candidate IDs for each image star based on a voting system
- Afterwards we run a DFS on this graph-like structure to find all possible mappings (even if incomplete)
- In the end we score the solutions we got from the DFS to get the best one
4. Attitude Determination
- From the final mapping of each star to a certain HIP in our database (from step above), we can now retrieve unit vectors from Table 1
- We build the attitude profile matrix from the two sets of image and catalog vectors
- We then build the attitude profile matrix in quaternion form
- We solve for the eigenvector with the largest eigenvalue which corresponds to our orientation quaternion
Tracking algorithm
- For tracking we use a previous orientation quaternion to predict where the stars in our previous image are going to be in the next one based on a certain amount of euclidian distance threshold this way we can make small and fast corrections to. We use the hungarian algorithm
Hardware
Hardware Integration
- The initial orientation determined via camera is stored as a reference
- The IMU is zeroed at this orientation
- Subsequent orientation tracking is performed using only the IMU until recalibration is required due to drift
Notes and Ideas:
- A simple way to recalibrate would be to do it periodically
- For improved accuracy, consider using Kalman filtering
Mechanical Design
-
Modular, layered physical design:
- Raspberry Pi
- IMU module
- Camera mounted perpendicular to the Raspberry Pi board
-
3D CAD models and assembly diagrams are available in the
DOCS/directory
Current Progress
Software
- Define project requirements
- Find algorithm for identification of stars
- OpenCV star identification on image
- Test model with math on hand
- Get angular distances between stars
- Create database of parameters for comparison (star 1 HIP, star 2 HIP, angular distance)
- Select candidates for possible stars in specific locations
- Identify the correct stars
- Orientation in quaternion form
- Testing
Hardware
- Configure Raspberry Pi
- Connect required modules
- Camera
- IMU (Gyroscope, Accelerometer, Magnetometer)
- Calibrate IMU at hardware level
- Measure drift
- Research drift correction
- Calibrate IMU at software level
- Add interface for communication with Arduino (I2C is a good candidate)
- Develop firmware
- Auto boot configuration
CAD
- Construct simple box for fit testing and basic implementation
- Build a better box for testing and protection
- Satellite enclosure with removable modules
- Bottom panel
- Sliders
- Test sliders
- Side protection panels
- CASSI module
Additional
- Testing | Make black box for testing using images on a monitor
- Visualization | Make control panel
- 3D visualization
- Live video
- OpenCV calculations
- Control buttons
- Check if static IP is needed (just in case)
- Study commercial star tracker manuals
- Consider handling edge cases such as solar flares, moonlight, sun/earth stray light, etc.
Parts
44| Qty | Value | Footprint | References |
|---|---|---|---|
| 20 | R | Resistor_SMD:R_2010_5025Metric_Pad1.40x2.65mm_HandSolder | R1, R2, R3, R4, R5, R10, R11, R12, R13, R14, R15, R16, R17, R18, R19, R20 +4 |
| 8 | C | Capacitor_SMD:C_Elec_6.3x5.4 | C1, C2, C3, C4, C5, C6, C7, C8 |
| 1 | CAT24M01W | Package_SO:SOIC-8_3.9x4.9mm_P1.27mm | U2 |
| 1 | CAT811MTBI-GT3 | Package_TO_SOT_SMD:SOT-143 | U3 |
| 1 | ComputeModule5-CM5 | CM5IO:Raspberry-Pi-5-Compute-Module | Module1 |
| 1 | LOGO | LOGO | G*** |
| 1 | LTC2358-16 | Package_QFP:LQFP-48_7x7mm_P0.5mm | U1 |
| 1 | RJ45_Abracon_ARJP11A-MASA-B-A-EMU2 | Connector_RJ:RJ45_Abracon_ARJP11A-MA_Horizontal | J2 |
| 1 | USB3_A_Stacked | Connector_USB:USB3_A_Molex_48406-0001_Horizontal_Stacked | J1 |
| 1 | VSC8541XMV-0x | Package_DFN_QFN:QFN-68-1EP_8x8mm_P0.4mm_EP5.2x5.2mm | U4 |
The 36 most common of 44 parts.
Questions
How big is the FutureConcepts PCB?
It measures 103.5 × 103.5 mm and has 2 copper layers, 1.6 mm thick.
What parts does the FutureConcepts use?
44 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the FutureConcepts KiCad files?
From the IvaylooTs/StarTracker repository on GitHub, at the commit this page was made from: the board is Docs/schematics/FutureConcepts/FutureConcepts.kicad_pcb and its schematic Docs/schematics/FutureConcepts/FutureConcepts.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the FutureConcepts design in my own project?
Its repository states no licence, so its author keeps all rights: ask IvaylooTs before reusing the design.
Similar boards
- 2 layers78 × 60 mm

- 2 layers115 × 14.5 mm

- 2 layers37.7 × 20 mm

- 2 layers88.9 × 88.4 mm

- 2 layers125 × 98 mm

3-in-1
mudmin/AnotherMaker
This is where I will store code snippets for AnotherMaker Videos
44 parts258 - 2 layers65 × 56.5 mm

RPiG3iMac
qbancoffee/imac_g3_ivad_board_init
iMac G3 IVAD board initialization with an arduino
44 parts240LGPL-3.0 - 2 layers54.4 × 49.3 mm

Fx3 tn20k adapter
Stefan-Olt/MISRC
MISRC Is a multi channel RF capture device for FM RF, S-Video, CVBS RAW capture and anything else, but intended and supported for the decode family of projects vhs-decode, ld-decode, hifi-decode.
44 parts236CC-BY-4.0 - 2 layers250 × 32 mm
