| name | shenzhen22-rocket-design-automation |
| description | Automate rocket design and manufacturing workflows with TypeScript-based calculation, modeling, and production tools |
| triggers | ["design a model rocket with automated calculations","generate rocket thrust and stability calculations","automate rocket manufacturing specifications","calculate rocket trajectory and performance","design rocket fins and body tube dimensions","optimize rocket motor selection and staging","generate rocket manufacturing blueprints","validate rocket stability and center of pressure"] |
Shenzhen22 Rocket Design Automation
Skill by ara.so — Design Skills collection.
A TypeScript-based automation program for designing and manufacturing model rockets, developed by students at Shenzhen 22 High School. This tool automates complex calculations for rocket stability, thrust, trajectory, and generates manufacturing specifications.
Installation
git clone https://github.com/Kevin100202/Rocket-Design-and-Manufacturing-Automation-Program-from-Shenzhen22highschool.git
cd Rocket-Design-and-Manufacturing-Automation-Program-from-Shenzhen22highschool
npm install
npm run build
npm start
Project Structure
The project typically includes modules for:
- Stability Calculations: Center of gravity (CG) and center of pressure (CP)
- Thrust Calculations: Motor performance and impulse
- Trajectory Modeling: Flight path simulation
- Fin Design: Aerodynamic surface optimization
- Body Tube Sizing: Structural dimensions
- Manufacturing Output: Blueprints and cut lists
Core API Usage
Basic Rocket Design
import { RocketDesign, StabilityCalculator, ThrustCalculator } from './rocket-design-automation';
const rocket = new RocketDesign({
name: "Student Rocket Alpha",
bodyTubeDiameter: 50,
bodyTubeLength: 600,
finCount: 3,
finRootChord: 100,
finTipChord: 40,
finHeight: 80,
motorType: "C6-5"
});
const stabilityCalc = new StabilityCalculator(rocket);
const stability = stabilityCalc.calculate();
console.log(`Center of Gravity: ${stability.cg}mm from nose`);
console.log(`Center of Pressure: ${stability.cp}mm from nose`);
console.log(`Stability Margin: ${stability.margin} calibers`);
console.log(`Stable: ${stability.isStable ? 'Yes' : 'No'}`);
Thrust and Performance Analysis
import { ThrustCalculator, Motor } from './rocket-design-automation';
const motor = new Motor({
designation: "C6-5",
totalImpulse: 10,
averageThrust: 6,
burnTime: 1.6,
propellantMass: 12.5,
totalMass: 24,
delay: 5
});
const thrustCalc = new ThrustCalculator(rocket, motor);
const performance = thrustCalc.calculatePerformance();
console.log(`Maximum Velocity: ${performance.maxVelocity.toFixed(2)} m/s`);
console.log(`Maximum Altitude: ${performance.maxAltitude.toFixed(2)} m`);
console.log(`Acceleration: ${performance.maxAcceleration.toFixed(2)} m/s²`);
console.log(`Thrust-to-Weight: ${performance.thrustToWeight.toFixed(2)}`);
Trajectory Simulation
import { TrajectorySimulator, WindConditions } from './rocket-design-automation';
const wind = new WindConditions({
velocity: 5,
direction: 270,
altitude: 100
});
const simulator = new TrajectorySimulator(rocket, motor, wind);
const trajectory = simulator.simulate({
timeStep: 0.01,
maxTime: 30
});
trajectory.dataPoints.forEach((point, index) => {
if (index % 100 === 0) {
console.log(`t=${point.time.toFixed(2)}s: ` +
`h=${point.altitude.toFixed(2)}m, ` +
`v=${point.velocity.toFixed(2)}m/s`);
}
});
console.log(`Apogee: ${trajectory.apogee.toFixed(2)}m at ${trajectory.apogeeTime.toFixed(2)}s`);
console.log(`Landing distance: ${trajectory.landingDistance.toFixed(2)}m from pad`);
Fin Design Optimization
import { FinDesigner, FinShape } from './rocket-design-automation';
const finDesigner = new FinDesigner(rocket);
const fins = finDesigner.design({
shape: FinShape.TRAPEZOIDAL,
rootChord: 100,
tipChord: 40,
height: 80,
sweepAngle: 30,
thickness: 3,
material: "balsa"
});
const optimized = finDesigner.optimize({
targetStability: 1.5,
minFinHeight: 60,
maxFinHeight: 120,
constraints: {
maxWeight: 50,
minStrength: "moderate"
}
});
console.log(`Optimized fin height: ${optimized.height}mm`);
console.log(`Optimized root chord: ${optimized.rootChord}mm`);
console.log(`Resulting stability: ${optimized.stability} calibers`);
Manufacturing Blueprint Generation
import { ManufacturingGenerator, OutputFormat } from './rocket-design-automation';
const generator = new ManufacturingGenerator(rocket);
const templates = generator.generateTemplates({
includeFinTemplate: true,
includeCentering: true,
includeNoseCone: true,
scale: 1.0
});
await generator.export({
format: OutputFormat.SVG,
filename: "rocket-templates.svg",
outputPath: "./manufacturing/"
});
await generator.export({
format: OutputFormat.PDF,
filename: "rocket-blueprints.pdf",
outputPath: "./manufacturing/"
});
const partsList = generator.generatePartsList();
console.log("Manufacturing Parts List:");
partsList.forEach(part => {
console.log(`${part.name}: ${part.quantity}x - ${part.material} - ${part.dimensions}`);
});
Complete Design Workflow
import {
RocketDesign,
DesignWorkflow,
ValidationResult
} from './rocket-design-automation';
const workflow = new DesignWorkflow();
const design = workflow.createDesign({
targetAltitude: 300,
bodyDiameter: 50,
finCount: 4,
motorClass: "C"
});
const validation: ValidationResult = workflow.validate(design);
if (!validation.isValid) {
console.error("Design validation failed:");
validation.errors.forEach(error => console.error(`- ${error}`));
const fixed = workflow.autoFix(design, validation);
console.log("Applied automatic fixes");
}
const optimized = workflow.optimize(design, {
objective: "max_altitude",
constraints: {
maxWeight: 200,
maxLength: 800,
stabilityMargin: [1.0, 2.5]
}
});
const manufacturing = workflow.generateManufacturing(optimized);
await workflow.exportPackage({
design: optimized,
manufacturing: manufacturing,
outputPath: "./rocket-build/",
formats: ["pdf", "svg", "json"]
});
console.log("Complete rocket design package generated!");
Configuration
Create a rocket-config.json file in the project root:
{
"units": {
"length": "mm",
"mass": "g",
"force": "N"
},
"safety": {
"minStabilityMargin": 1.0,
"maxStabilityMargin": 2.5,
"minThrustToWeight": 5.0
},
"simulation": {
"timeStep": 0.01,
"dragCoefficient": 0.75,
"airDensity": 1.225
},
"manufacturing": {
"tolerances": {
"linear": 0.5,
"angular": 1.0
},
"materials": {
"bodyTube": "cardboard",
"fins": "balsa",
"noseCone": "plastic"
}
},
"output": {
"defaultFormat": "svg",
"precision": 2
}
}
Load configuration in code:
import { ConfigLoader } from './rocket-design-automation';
const config = ConfigLoader.load('./rocket-config.json');
const workflow = new DesignWorkflow(config);
Common Patterns
Batch Design Generation
import { BatchProcessor } from './rocket-design-automation';
const batch = new BatchProcessor();
const designs = batch.generate({
baseDesign: {
bodyDiameter: 50,
bodyLength: 600,
finCount: 3
},
variations: {
finHeight: [60, 70, 80, 90, 100],
motorType: ["C6-5", "C6-7", "D12-5"]
}
});
const results = batch.analyze(designs);
const best = results.findBest({
criteria: "max_altitude",
constraints: { stability: [1.0, 2.5] }
});
console.log(`Best design: ${best.name} - ${best.maxAltitude}m altitude`);
Real-time Design Validation
import { RocketDesign, RealtimeValidator } from './rocket-design-automation';
const validator = new RealtimeValidator();
const rocket = new RocketDesign({ });
validator.watch(rocket);
validator.on('stabilityWarning', (data) => {
console.warn(`Stability margin ${data.margin} outside safe range`);
});
validator.on('weightWarning', (data) => {
console.warn(`Total weight ${data.weight}g exceeds recommendation`);
});
rocket.setFinHeight(120);
rocket.setMotor("D12-5");
Troubleshooting
Unstable Design
if (!stability.isStable) {
rocket.setFinHeight(rocket.finHeight * 1.2);
rocket.setFinPosition(rocket.finPosition + 20);
rocket.addNoseWeight(10);
const newStability = stabilityCalc.calculate();
}
Insufficient Thrust
if (performance.thrustToWeight < 5.0) {
console.log("Consider:");
console.log("- Using lighter materials");
console.log("- Upgrading to next motor class");
console.log(`- Current T/W: ${performance.thrustToWeight.toFixed(2)}`);
}
Simulation Errors
try {
const trajectory = simulator.simulate({ timeStep: 0.01, maxTime: 30 });
} catch (error) {
if (error.message.includes('divergence')) {
const trajectory = simulator.simulate({
timeStep: 0.001,
maxTime: 30
});
} else if (error.message.includes('invalid motor')) {
console.error("Motor data incomplete or invalid");
}
}
Export Issues
import { ManufacturingGenerator } from './rocket-design-automation';
const generator = new ManufacturingGenerator(rocket);
try {
await generator.export({
format: OutputFormat.SVG,
filename: "templates.svg",
outputPath: process.env.OUTPUT_PATH || "./output/"
});
} catch (error) {
if (error.code === 'ENOENT') {
console.error("Output directory does not exist");
} else if (error.message.includes('permission')) {
console.error("Insufficient write permissions");
}
}
Environment Variables
export ROCKET_UNITS=metric
export ROCKET_OUTPUT_PATH=./manufacturing/
export ROCKET_PRECISION=3
export ROCKET_SIMULATION_TIMESTEP=0.01
Use in code:
const config = {
units: process.env.ROCKET_UNITS || 'metric',
outputPath: process.env.ROCKET_OUTPUT_PATH || './output/',
precision: parseInt(process.env.ROCKET_PRECISION || '2'),
simulation: {
timeStep: parseFloat(process.env.ROCKET_SIMULATION_TIMESTEP || '0.01')
}
};