Skip to content

Observation,Action.Reward,Hyper Params

Flood Sung edited this page May 8, 2023 · 1 revision

1 Observation

policy_obs root_h, root_rot_obs, local_root_vel, local_root_ang_vel, dof_pos, dof_vel, flat_local_key_pos, commands, jump_sigcommands包含了lin_vel_x, lin_vel_y, ang_vel_yaw, jump_up_height, loc_height,其中,jump_up_height是root目标跳跃高度范围,在[0.4, 0.7]之间随机采样,loc_height是正常locomotion过程中的root高度,目前是固定设置为0.32,后期也可随机采样jump_sig是触发jump的信号,在{0, 1}之间取值,1为jump,0为locomotion,训练期间定时随机采样,当agent到达目标目标高度后,对应的jump_sig置0
critic_obs 与policy_obs一致
amp_policy_obs policy_obs去掉commands以及jump_sig
amp_expert_obs 与amp_policy_obs一致

2 Action

12个DOF的位置(实际上网络输出的是与默认初始位置下对应DOF角度的偏移量),经过PD控制器输出12个电机的torques,控制API用的set_dof_actuation_force_tensor(最新的代码已改为位置控制)

policy net输出增加了tanh,把action映射到[-1, 1]之间(原始的AMP4Hardware输出是linear,似乎不太合理?因为 $$r_{disc}=max[0, 1-0.25(D(s_{t}, s_{t+1})-1)^2]$$ ),用linear输出的情况下,discriminator的性能不好,无法实现jump。 在ASE中, $$r_{disc}=-log(1-D(s_{t}, s_{t+1}))$$ ,policy net输出嵌套了sigmoid,把action映射到了[0, 1]之间。

3 Reward

_reward_jump_up Jump root高度差:$e^{h}{jump}=||x^{h}-\hat{x}^{h}{jump}||{2}$Loc root高度差:$e^{h}{loc}=||x^{h}-\hat{x}^{h}{loc}||{2}$其中,$\hat{x}^{h}{jump}$和$\hat{x}^{h}{loc}$分别是jump时的目标root高度和locomotion时的目标root高度If jump_sig==1,$r_{jump}=exp(-e^{h}{jump})$If jump_sig==0时,$r{jump}=exp(-e^{h}{loc})$If jump_sig==1 and $e^{h}{jump}<0.05$,$r_{jump}=100$
其余reward 和locomotion一致

4 Hyper-parameters

列举几个在cmd jump中比较关键的参数:

jump_up_height 设置在[0.4, 0.7]之间似乎更合理,如果直接设置为0.7基本很难跳起来,因为mocap中的jump高度没有这么高,随机初始化的时候很难获得到达目标高度的奖励
disc_grad_penalty Amp loss中的梯度惩罚系数,这里设置为大概0.02以下才能完成jump任务,在AMP4Hardware中为5.0,在AMP humanoid backflip中为0.2,对于高动态的动作,这个参数需要尽可能小一些
learning_rate [5e-5, 5e-4]区间内比较合理,另外发现,在训练cmd jump时,需要用adaptive lr,不然一些时候value funtion会阶越式地输出很大的值
amp_task_reward_lerp 决定task和style reward的权重,设置为0.3比较合理
jump_goal 到达目标高度时给予的奖励,实验中设置的100,值太小也跳不起来,具体什么范围比较合理暂时没有做实验
   
Clone this wiki locally