PPO学习与应用笔记(一):环境构建 —— 航天器交会建模

🚀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. 奖励函数设计

奖励函数设计考虑以下三部分:

  1. 距离改善奖励:与自然漂移状态相比,若当前状态相对目标更接近,则获得正向奖励;
  2. 速度方向奖励:若服务星的相对速度朝向目标星位置方向,则奖励;
  3. 动作惩罚项:较大的推力施加将产生能耗惩罚;
  4. 终止奖励:若成功接近则获得额外奖励,若任务失败则惩罚。

综合考虑后,奖励函数表达为:

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(r nar )+w2(v (r^))w3a +Rterminal

其中:

  • r ⃗ \vec{r} r :当前相对位置向量;
  • r ⃗ na \vec{r}_{\text{na}} r na:无动作(自然漂移)情况下积分后的相对位置;
  • 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动力学建模,状态与动作空间简洁明了,适合训练与分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值