🚀PPO学习与应用笔记(一):环境构建 —— 航天器交会建模
作者:风会记得2002
时间:2025/5/12
本节将介绍一个用于深度强化学习训练的环境构建方法,任务是模拟两个航天器(服务星与被服务星)在低轨轨道中的交会对接过程。该环境将用于后续的PPO算法训练,是整个任务的基础。
🎈任务背景
在航天任务中,交会对接是一项关键技术,涉及一个“服务星”(chaser)在轨道上追赶并接近一个“被服务星”(target),最终实现位置和速度上的匹配。为简化问题,我们做出如下假设:
- 被服务星在一个固定轨道上运动;
- 服务星在其近邻轨道内相对运动;
- 忽略姿态控制,仅考虑轨道动力学;
- 推力变化可以脉冲表示。
🎗️动力学建模:Clohessy-Wiltshire 方程
服务星与目标星之间的相对运动可以通过Clohessy-Wiltshire(CW)方程建模。CW方程在近圆轨道、惯性参考系下的形式为:
x ¨ = 3 n 2 x + 2 n y ˙ y ¨ = − 2 n x ˙ z ¨ = − n 2 z \begin{aligned} \ddot{x} &= 3n^2x + 2n\dot{y} \\ \ddot{y} &= -2n\dot{x} \\ \ddot{z} &= -n^2z \end{aligned} x¨y¨z¨=3n2x+2ny˙=−2nx˙=−n2z
其中, n n n 是参考轨道的平均角速度,由公式计算得到:
n = μ a 3 n = \sqrt{\frac{\mu}{a^3}} n=a3μ
μ \mu μ 是地球的引力常数, a a a 是目标星的轨道半长轴。该方程假设目标星在圆轨道上运动,服务星的相对状态则由上述微分方程决定。
🎐状态空间与动作空间定义
环境中的状态为服务星与目标星的相对状态,用六维向量表示:
s = [ x , y , z , x ˙ , y ˙ , z ˙ ] \mathbf{s} = [x, y, z, \dot{x}, \dot{y}, \dot{z}] s=[x,y,z,x˙,y˙,z˙]
其中前3维为相对位置,后3维为相对速度。
动作空间为服务星在每个时间步施加的脉冲速度变化量(即 Δ v ⃗ \Delta \vec{v} Δv),表示为:
a = [ Δ v x , Δ v y , Δ v z ] \mathbf{a} = [\Delta v_x, \Delta v_y, \Delta v_z] a=[Δvx,Δvy,Δvz]
智能体每一步决策后,将当前速度向量增加一个有限幅度的瞬时速度增量,实现脉冲推力建模:
r ˙ ← r ˙ + a \dot{\mathbf{r}} \leftarrow \dot{\mathbf{r}} + \mathbf{a} r˙←r˙+a
这是一种**离散脉冲控制(impulsive control)**方式,常用于轨道交会任务的简化建模中,符合霍曼转移等燃料优化策略的基本假设。
动作空间定义为:
self.action_space = Box(low=-0.1, high=0.1, shape=(3,), dtype=np.float32)
🍧环境结构设计
我们定义了一个 SpacecraftRendezvousEnv
类,其继承自 Gymnasium 的 Env
类,主要包含以下组件:
1. 状态转移机制
在每一步中,我们将当前状态通过 CW 微分方程进行积分求解,预测下一个状态:
sol = solve_ivp(
fun=self._relative_motion,
t_span=[0, dt],
y0=self.relative_state,
method='RK45'
)
self.relative_state = sol.y[:, -1]
数值积分采用 Runge-Kutta 方法。
2. 奖励函数设计
奖励函数设计考虑以下三部分:
- 距离改善奖励:与自然漂移状态相比,若当前状态相对目标更接近,则获得正向奖励;
- 速度方向奖励:若服务星的相对速度朝向目标星位置方向,则奖励;
- 动作惩罚项:较大的推力施加将产生能耗惩罚;
- 终止奖励:若成功接近则获得额外奖励,若任务失败则惩罚。
综合考虑后,奖励函数表达为:
r = w 1 ⋅ ( ∥ r ⃗ na ∥ − ∥ r ⃗ ∥ ) + w 2 ⋅ ( v ⃗ ⋅ ( − r ^ ) ) − w 3 ⋅ ∥ a ⃗ ∥ + R terminal r = w_1 \cdot (\| \vec{r}_{\text{na}} \| - \| \vec{r} \|) + w_2 \cdot (\vec{v} \cdot (-\hat{r})) - w_3 \cdot \| \vec{a} \| + R_{\text{terminal}} r=w1⋅(∥rna∥−∥r∥)+w2⋅(v⋅(−r^))−w3⋅∥a∥+Rterminal
其中:
- r ⃗ \vec{r} r:当前相对位置向量;
- r ⃗ na \vec{r}_{\text{na}} rna:无动作(自然漂移)情况下积分后的相对位置;
- v ⃗ \vec{v} v:当前相对速度向量;
- a ⃗ \vec{a} a:当前动作(推力);
- r ^ = r ⃗ / ∥ r ⃗ ∥ \hat{r} = \vec{r} / \| \vec{r} \| r^=r/∥r∥:目标方向的单位向量;
- R terminal R_{\text{terminal}} Rterminal:终止奖励,定义为:
R terminal = { + 100 , 如果 ∥ r ⃗ ∥ < 10 米 − 10 , 如果达到最大步数仍未完成任务 0 , 否则 R_{\text{terminal}} = \begin{cases} +100, & \text{如果} \ \| \vec{r} \| < 10 \text{米} \\ -10, & \text{如果达到最大步数仍未完成任务} \\ 0, & \text{否则} \end{cases} Rterminal=⎩ ⎨ ⎧+100,−10,0,如果 ∥r∥<10米如果达到最大步数仍未完成任务否则
权重项取值示例:
- w 1 = 0.5 w_1 = 0.5 w1=0.5:鼓励距目标更近;
- w 2 = 0.1 w_2 = 0.1 w2=0.1:鼓励速度朝向目标;
- w 3 = 0.01 w_3 = 0.01 w3=0.01:限制动作幅度。
这种奖励结构鼓励服务星以节能的方式快速靠近目标星,最终实现交会。
3. 终止条件
环境终止条件包括:
- 服务星距离目标星小于10米;
- 达到最大步数上限(例如200步)。
🍬核心代码结构
环境类结构如下:
class SpacecraftRendezvousEnv(Env):
def __init__(self):
...
self.relative_state = np.array([100.0, 100.0, 100.0, 0.0, 0.0, 0.0])
self.action_space = Box(low=-0.1, high=0.1, shape=(3,))
self.observation_space = Box(low=-np.inf, high=np.inf, shape=(6,))
...
def step(self, action):
...
self.relative_state = solve_ivp(...).y[:, -1]
reward = self.reward_calculator.compute_reward(...)
done = (distance < 10 or step >= max_steps)
return self.relative_state, reward, done, False, {}
def reset(self, ...):
self.relative_state = np.array([100.0, 100.0, 100.0, 0.0, 0.0, 0.0])
return self.relative_state, {}
✈️测试示例
创建环境并进行一次测试回合:
env = SpacecraftRendezvousEnv()
obs, _ = env.reset()
done = False
while not done:
action = env.action_space.sample()
obs, reward, done, _, _ = env.step(action)
小结
本节构建了一个完整的航天器交会对接环境,为后续基于PPO算法的强化学习训练打下基础。环境基于Clohessy-Wiltshire动力学建模,状态与动作空间简洁明了,适合训练与分析。