乐于分享
好东西不私藏

纪念一个起点:我第一次在电脑里看见火箭真正进入轨道

纪念一个起点:我第一次在电脑里看见火箭真正进入轨道

今天,我想认真记下一件事。

不是因为项目已经完成了,而是因为它终于走到了一个值得被纪念的起点。

过去这段时间,我一直在做一个商业航天方向的仿真项目。它的外表并不浪漫,无非是参数、代码、轨迹、速度、动压、关机时刻、入轨条件,还有一遍又一遍的推演和调试。很多时候,屏幕上只有曲线在变,数字在跳,日志在刷新,安静得几乎不像是在接近“航天”这件事。

但对我来说,它从来不只是一个程序。

我想做的,不只是让一个模型“飞起来”,而是尽可能从系统逻辑上去逼近一件真正复杂的事情:一枚火箭如何起飞,如何分级,如何建立轨道速度,如何让一级返回,并最终实现受控着陆。说得再直白一点,我想验证的是,靠自己的理解、建模、推演和调优,能不能把一套完整闭环真正跑通。而今天,答案第一次变得清晰了。

这是今天调优后的版本Balanced。它不是最激进的版本,也不是单项指标最夸张的版本,但它很可能是目前为止最像“工程方案”的版本。因为在这组结果里,我第一次同时看到了两件事:这枚Balanced火箭,在仿真中已经实现了入轨,并且一级火箭完成了受控返回着陆。

这两个“真正”,对我来说意义完全不同于此前那些“差一点”。

过去更早的版本,也不是完全没有成果。有些版本速度够了,有些版本高度很好看,有些版本甚至也能勉强形成闭合轨道。但问题往往也很明显:轨道形状不好,近地点太低、远地点太高,像被拉得过长的椭圆;又或者一级只是理论上算出了落点,实际上依然是在高速砸向地面。那种状态更像是在证明“理论上有希望”,而不是证明“系统已经闭环”。

但这一次不一样。

这次的轨道,终于开始变得像一条真正能看的轨道。它不再是那种夸张的大椭圆,而是明显更接近近圆轨道。更重要的是,二级末段的速度方向终于被真正“打平”了——不是靠继续抬头把远地点送高,而是把绝大部分速度变成了水平速度,让飞行器以接近局部水平的姿态进入轨道。对于火箭来说,这是一种本质上的变化。因为真正的入轨,从来不是“飞得足够高”,而是“横着飞得足够快”。

而一级回收的结果,更让我有一种很深的触动。

这一次,它不是“掉下来”,而是“回来了”。终端点火存在,着陆段真实参与控制,最终落地速度被压到了一个非常低的水平。虽然落点精度还没有做到特别漂亮,回收过程中的载荷环境也依然偏激进,但从性质上说,它已经不再是一个纸面上的回收设想,而是一次真正成立的回收闭环。

基础参数如下:

第一,火箭本身:

  • 直径 0.35 米
  • 参考面积 0.096 平方米
  • 起飞总质量 18708 千克

直径 0.35 米,说明它是一枚相对细长的小型运载器。起飞质量接近 18.7 吨,说明它已经不是一个玩具级小模型,而是一个具备真实运载逻辑的两级火箭设定。

第二,上升段:

  • 一级发动机工作到 92 秒
  • 93.5 秒 级间分离
  • 94 秒二级点火
  • 二级一直工作到 334 秒

一级分离高度 56218 米,也就是大约 56 公里

这意味着一级火箭在大约 56 公里的高空完成分离,已经把飞行器送到了比较稀薄的大气层中。这个高度很重要,因为越往上,空气越稀薄,阻力越小,二级就能更专心地把推进剂用在“加速入轨”上,而不是跟空气阻力硬碰硬。

第三,飞行最高高度 194418 米

  • 最大速度 7838 米/秒

194 公里高度,说明它已经飞到了大气层上方,进入了典型的近地轨道高度区间。而 7.84 公里/秒,则已经非常接近真实近地轨道所需要的速度量级。

关机时水平速度 7828 米/秒

它和总速度几乎一样,说明到二级关机时,这枚火箭已经把绝大部分速度都转化成了沿着地球表面方向的横向速度。这正是“入轨”最核心的动作。

第四,入轨参数是:

  • 轨道近地点高度 165612 米
  • 轨道远地点高度 346105 米
  • 轨道偏心率 0.0136
  • 轨道周期 5369 秒(89.5 分钟绕地球一圈

轨道高度:

  • 近地点约 166 公里
  • 远地点约 346 公里

可以把它理解成:这条轨道离地球最近的时候,大约在 166 公里高;最远的时候,大约在 346 公里高。

这是一条已经比较接近圆形的低轨道,而不是那种被拉得很夸张的长椭圆。这个判断来自另一个重要参数:

  • 偏心率 0.0136

偏心率越接近 0,轨道越圆。0.0136 这个值已经很小了,说明这次入轨的轨道形状还凑活。

第五,一级火箭回收

  • 一级落地时间 482.5 秒
  • 落地距离发射点 4148 米
  • 着陆速度 2.14 米/秒
  • 回收剩余推进剂 254 千克

很多项目最难跨过去的,从来不是最后那一步,而是前面那道看不见的门槛。跨过去之前,你知道理论,知道方向,也知道别人曾经怎么做过,但你始终不知道:自己手里的这套逻辑,到底能不能真的跑通。那种不确定,不是外人能看见的。别人看到的只是你在改参数、看结果、继续改参数,但只有自己知道,那其实是在一点点和“是否可行”较劲。

所以今天最值得纪念的,不是某个单独的数字,不是某一张图突然特别漂亮,而是我第一次非常明确地知道:这条路不是空想,这套逻辑是通的,这个项目值得继续往前做。

当然,它离真正成熟还很远。轨道近地点仍然偏低,一级回收过程中的动压和热环境还需要优化,落点精度也还有很大提升空间。今天不是终点,更不是胜利宣言。它只是一个很安静、但很清晰的确认:这个项目已经从“会飞的想法”,进入到了“可以持续优化的系统”阶段。

对我来说,这就足够重要了。

我想纪念今天,不是因为已经成功,而是因为我终于看见了起点。很多真正有价值的事,最初都没有掌声,也没有观众,只有一个人对着屏幕,一次次推演,一次次修正,然后在某一天,看见那条本来断开的轨迹,终于闭合起来。

从一条仿真轨迹开始,向更远的地方出发。

以下是V.5版的全部参数,mark一下

vehicle_id: balanced

vehicle_plot_label: Balanced

diameter_m: 0.35

reference_area_m2: 0.0962112750161874

initial_mass_kg: 18708.0

cd_subsonic: 0.33

cd_transonic: 0.66

cd_supersonic: 0.43

scan_target_tilt_stage1_deg: 50.0

stage1_pitch_from_horizontal_deg: 40.0

stage2_target_pitch_from_horizontal_deg: -6.0

max_height_m: 194418.70853483398

time_at_max_height_s: 314.5

apogee_height_m: 194418.70853483398

apogee_time_s: 314.5

apogee_horizontal_range_m: 755078.7501982414

burnout_time_s: 334.0

burnout_x_m: 731336.709502504

burnout_y_m: 512045.14411731885

burnout_z_m: 132633.2335241416

burnout_speed_mps: 7828.773282680466

burnout_horizontal_speed_mps: 7828.392517116562

burnout_flight_path_angle_deg: -0.5650948696528802

orbit_perigee_altitude_m: 165611.91311092395

orbit_apogee_altitude_m: 346104.53460530005

orbit_eccentricity: 0.013618264899991697

orbit_specific_energy_jkg: -30074616.68373656

orbit_period_s: 5368.74157281532

orbit_success: True

orbit_score: 0.7660801674512399

best_orbit_time_s: 453.5

best_orbit_score: 0.769678993382446

best_orbit_perigee_altitude_m: 165250.55733353738

best_orbit_apogee_altitude_m: 344079.60161371715

best_orbit_horizontal_speed_mps: 7837.95988087437

best_orbit_flight_path_angle_deg: -0.48507779625814873

best_orbit_success: True

orbit_preview_end_time_s: 1300.0

orbit_preview_duration_s: 966.0

separation_x_m: 28011.600502516656

separation_y_m: 19611.64361053673

separation_z_m: 56218.68844606339

recovery_landing_time_s: 482.51831607738393

recovery_landing_horizontal_range_m: 4147.806506789459

recovery_pad_error_m: 4147.806506789459

recovery_propellant_remaining_kg: 254.41302360708653

recovery_propellant_used_kg: 2445.5869763929136

boostback_propellant_used_kg: 702.0

reentry_propellant_used_kg: 216.0

landing_propellant_used_kg: 1527.5869763929136

terminal_start_time_s: 357.5

terminal_start_altitude_m: 8492.136363178492

terminal_duration_s: 125.01831607738393

touchdown_speed_mps: 2.1389622890313253

landing_time_s: 482.51831607738393

landing_horizontal_range_m: 4147.806506789459

ascent_termination_reason: t_end

ascent_termination_time_s: 453.5

recovery_termination_reason: ground

recovery_termination_time_s: 482.51831607738393

descent_termination_reason: ground

descent_termination_time_s: 482.51831607738393

termination_reason: ground

termination_time_s: 482.51831607738393

flight_time_total_s: 453.5

ascent_duration_s: 453.5

recovery_duration_s: 389.01831607738393

descent_duration_s: 389.01831607738393

max_speed_mps: 7838.240788505857

time_at_max_speed_s: 453.5

max_dynamic_pressure_pa: 494132.3080039617

time_at_max_q_s: 357.5

max_mach: 26.509457754757133

time_at_max_mach_s: 453.5

recovery_max_dynamic_pressure_pa: 494132.3080039617

recovery_max_mach: 6.279022309609869

recovery_max_terminal_thrust_N: 420000.00000000006

burnout_stage1_time_s: 92.0

separation_time_s: 93.5

stage2_ignite_time_s: 94.0

stage2_burn_end_s: 334.0

burnout_mass_final_kg: 500.0

final_x_m: 3398.025258311606

final_y_m: 2378.5968892692417

final_z_m: -1.3502041002857166

horizontal_range_m: 4147.806506789459