Phase 1: Vehicle Blockout
To create a hypothetical test vehicle, I used real-world, commercial thruster and high-pressure tank specifications to design a plausible propane/N2O biprop rocket-powered craft. I chose a minimal-ish thruster design to reduce weight but still allows for fully decoupled 6DOF maneuvering.
Phase 2: Body Design
Refined model and defined and exported specifications for MATLAB.
Phase 3: MATLAB Algorithm Development
For my control algorithm, I chose a direct allocation scheme¹ which directly evaluates a geometric representation² of the attainable control set Φ to determine required actuations, rather than solving a linear program at runtime, in the interest of simplicity and predictable cost.
Precompute valid firing modes (Computed and stored at startup) Enumerate the thrusters of the craft, their force and moment, and create a set of all possible combinations of zero, one, or two thrusters along with its net wrench, two thrusters being an imposed maximum due to hypothetical fuel system constraints.
Construct attainable-wrench geometry A convex polytope is generated from these firing modes, each vertex representing a firing mode wrench in 6D [Fx Fy Fz Mx My Mz]ᵀ. This hull then represents the bounds, or maximum control authority, of the controllability volume Φ, each simplex thus representing a combination space of a subset of related firing modes.
Allocation A ray is cast, representing the desired wrench input to the controller. The intersected simplex vertices thus correspond to a schedule of firing modes needed to represent the desired wrench. The intersection's barycentric determines each firing mode's α contribution. Finally, each α is scaled by the ratio of the intersection's λ and desired wrench ||v||.
Multiplexing Because the thrusters used are pulsed, each thruster ID and its α are passed to a scheduler module that then time-multiplexes the firing modes into a sequence required to approximate the ideal mixture of values.
Accumulation The multiplexer's output sequence feeds into an accumulator which accounts for the thrusters' minimum impulse bit. Commands that are shorter than MIB are accumulated until the requested thruster firings exceed the minimum.³
Note: the figure below is a 3D projection of separated force and moment spaces overlaid for visualization and debugging purposes.
Phase 4: Plant Model
Unreal Engine-based flight and sensor simulation, using custom physics. Communicates agnostically with any external program or hardware device set up to send and receive compatible UDP packets on a shared socket. No other special setup or requirements.
Simulates imperfections such as non-linear thrust response curves, with many other details planned.
Planned features: Camera/electro-optical feed. Simulated sensors with imperfections, noise, dropouts. Random and on-demand failure states. More robust protocols like shared memory and Serial/CAN/Ethernet.
System Block Diagram
¹Durham, W. C. (1992). Constrained control allocation (AIAA Paper 92-4550). NASA Technical Reports Server. https://ntrs.nasa.gov/citations/19920072638
²Pei, J., Choueri, M., Elandt, R., Peck, M., & Finch, P. (2018). An innovative control allocation scheme to address reaction thruster interactions on a 3U CubeSat. AIAA Science and Technology Forum and Exposition, Kissimmee, FL, United States. NASA Technical Reports Server. https://ntrs.nasa.gov/citations/20190000430
³Pei, J., Murchison, L., BenShabat, A., Stewart, V., Rosenthal, J., Follman, ]., Branchy, M., Sellers, D., Elandt, R., Elliott, S., Choueiri, M., & Finch, P. (2017). Ground demonstration on the autonomous docking of two 3U CubeSats using a novel permanent-magnet docking mechanism. NASA Technical Reports Server. https://ntrs.nasa.gov/citations/20170001226