Body Control

Proprioception

Robot state (Exteroception / proprioception) -> (through policy) -> PD control -> (get torque for joints) -> Motor driver -> (through current) -> Robot

Proprioception 包含了机器人内部的各种信息,比如 joint position / velocity,IMU (Inertial Measurement Unit) 有 accelerometer (线加速度器),gyroscope(陀螺仪,感受角速度).

一些 Exteroception 包括了一些比如 vision 信息,lidar point cloud,RGBD 什么的.

Sim2real gap 很大,所以需要在 stimulator 中加噪声.

Represent body pose 可以通过 joint space 和 Link space. Joint space 只记录角度和角加速度,Link space 记录了每个 link 的 position 和速度和加速度. Link space 可以记录在世界坐标系下的东西,可以 encode spatial relation,所以在跳舞这种 task 一般用 Link space. Joint space 只记录自己坐标系下的,维度更低,相对更容易 train,维护自身平衡什么的更多.

Policy 的输出是一个 residual DoF Position,\(\theta_0\) 是每个关节的不动的一个 reference position,\(\theta\) 是当前 position,网络输出 target position 关于 \(\theta_0\) 的 shift,然后通过 \(e(t)=\pi(s_t)+\theta_0-\theta\) 得出 error term,然后再 PD Control \(\tau_t=K_pe(t)+K_d\frac{d}{dt}e(t)\).

当然也可以用关于 velocity 的 PD control,或者直接做 torque control. 但是这两者的 sim2real gap 太大了. 还有一个事情就是 torque 的更新频率要很高(1000Hz),显然不能直接用 policy 算 torque.


reward

terminal reward:只有最后结果有 reward. 不容易学好. 但是真机就只能这样.

在 stimulator 中信息都可以得到,所以可以做更多的 reward.

一个四足机器人的可能的一些 reward: height(保证高度),feet contact(保证脚在地面上),upright(保证是背的法向指着天),energy(penalize 太高的 energy),joint limit(penalize 太大的 joint angle)

reward 的系数并不好调. 和需要先做到哪个再做到哪个也有关系(先做到什么什么系数就大一点).


Q Learning:通过学 \(a=\mu(s)\),然后最大化 \(Q(s,\mu(s))\). 可以支持更 off-policy 的东西,有更高的 sample efficiency. 比如 DDDG,SAC.

真机的强化学习可以使用 SAC 这样的方法. 因为真机环境需要很高的 sample efficiency.


耗能问题:如果纯靠 RL 学出来,为了能在 domain randomization 中存活下来,动作偏保守,在真实世界中耗能很大.


Curriculum Learning:不断在学习中加入 obstacle,环境不断变困难.

Hierarchical Learning:划分层级,从 high level perception module,往下走到 navigation module,再往下到 locomotion module. locomotion 有 skill library 供 navigation module 调用. (ANYmal Parkour)

Privileged Learning

Privileged Learning:现在考虑加入视觉信息. 但是一个问题是直接接入 visual encoder 之后其实也还是训不好. 因为一方面很大,一方面 variance 也很大,传到 visual encoder 的信息已经没什么营养了. 如果直接先训 locomotion 锁住再训 encoder 那么又会导致 locomotion 也在学 high level 的东西,显然不大好. 一个方法是,在训 locomotion 的时候直接把能通过视觉得到的一些 state 信息(称为 privilege information,即 proprioception 无法得到的 state 信息)给传进去(即训出一个 state-based model,而不是 proprioception-based model).

Policy Distill

Policy Distillation:在我们有了一个 state-based model 之后,对于从 \(\pi_{\theta}\) 中采的 state \(s\),我们可以用这个 teacher model 去得到 \(a\),然后让 \(\theta\) 去学这个 \(a\). 所以就直接监督学习就完了. 注意,当我们的 state 太强了,超越了视觉能看到的信息,就会效果很不好.

一个需要注意的一点是,RL 出来的 teacher 可能也不知道在一个随机的 student 的分布上应该怎么走. 如果 student 能够成功走到 teacher 的轨迹上那就可以学,否则可能怎么学都学不到 teacher 的轨迹上.

Asymmetric Actor-Critic: actor-critic 中,Critic 可以拥有 privilege information,可以 state based. 但效果不如 Policy Distill.

Bipedel

双足比四足难很多.

双足非常依赖 IMU. 这个也容易导致 sim2real,因为实际中 IMU 有若干噪声,所以必须在 sim 中加上对 IMU 的噪声.

一个方法是人动捕,然后将这个信息适配到机器人的上面,然后再一帧一帧修,得到机器人应该做的动作.

每个舞都是在一个基础的 model 上单独去 overfit 的,而不是很 universal 的.

unitree 的小人比较轻,关节负担小,适合做一点比较大的动作.

Domain Randomization 可以 randomize 一些 center of mass,mass,friction.

RL in sim 然后再 2 real 实际效果有点神秘,还要调一大堆参数.

Manipulation

最基本的是 pick,然后 place. 稍微难一点就 assembly,还有 peg-in hole,这种 contact-rich 的操作.

GAIL

一个 on-policy 的 grasping RL:先分为若干个 stage,然后每个 stage 需要一个 RL,结合了 IL(GAIL,用 GAN 训练一个 reward generator)和 RL(PPO).

GAIL 的思想:有 demonstration 但是不想自己造 reward 怎么训 RL?GAIL 提出的想法是,使用 GAN 的思想,训一个 discriminator 来看生成的轨迹和 demo 的轨迹是否足够像,然后 reward 就用 discriminator 给的分数,然后再用一个 PPO.

GA-DDPG

使用以 Q-Learning 为中心的方法. Q Learning 先学 \(Q(s,a)\)(用 bootstrap loss (or, Bellman Loss)),最小化 \(E_{(s,a,r,s')\sim D}[||Q(s,a)-(r+\gamma Q(s',\mu_{\theta}(s'))||_2]\)), \(\theta\) 的目标是最大化 \(E_{s\sim D}[Q(s,\pi_{\theta}(s))]\),其中 \(D\) 为 replay buffer.

GA 指的是在 DDPG 的基础上,考虑 replay buffer 里面放一些 goal oriented 的数据.

Dex Manipulation