目前比较火爆的开源:
- 四足框架为legged_gym
- 双足框架为humanoid-gym
humanoid-gym
本节以迁移小hi硬件模型至humanoid-gym训练架构为例:
可以分为以下几步
- urdf模型路径验证。urdf模型中需要有路径指示出mesh(.stl)
- state调整。根据不通关节的命名进行修改
- initial state值(=DoF)
- PD control系数(=DoF)
- Observation的数量
- _reward_base_height上矩阵维度不对。(待解决,2024.07.18,疑似是foot indice没有读入正确)。
- feet_indice是从feet_names中读取foot在
- feet_names是从hi_cfg中定义的foot_name中识别出来的
- 因此需要找到hi_cfg中修改foot_name定义
- <问题解决>
- 矩阵1和矩阵2维度不通,无法进行乘积!
- 其中需要对齐的是291和219。219*768是给派定义的输入维度。
- pai的219和hi的291是由num_critic_obs,即评论家网络的观测维度决定的。
- pai网络的219可以追溯到Hi_cfg.env中的参数num_privileged_obs = int(c_frame_stack * (single_num_privileged_obs)),3*73=219。
- 下面确定hi的291输入维度。可以追溯到hi_env.compute_observations中的self.privileged_obs_buf
- hi_env中的critic_history默认按stack=3,在初始化的时候默认的第一轮history为73个0,但是self.privileged_obs_buf计算出来为109*2,cat()在一起就变成了291。
- 因此解决问题的关键在于,因此需要找到hi_cfg中修改single_num_privileged_obs,为109即可
- <问题解决>
至此调通,可以进行正常训练。
Legged_gym
本节以迁移小pi硬件模型至legged_gym训练架构为例:
分为几步:
- 直接拷贝pai_config和pai_env进入envs目录下。开始编译调试
- 在make_env步骤中,legged_robot._process_of_props()中,的soft limits没有被定义。**<尚未明晰soft limits的作用>**目前先注释掉soft limits观察效果。
- 在make_env中,pai_env.reset_idx()中的obs_history没有被定义。obs_history在humanoid-gym中的legged_robot._init_buffers是被额外定义为actor和critic的观测历史,也同时引入了frame_stack的概念,是利用基于C++的deque库,是一个双向队列(double-ended queue),用来作为stl的容器。
- [问题]:为什么legged_robot不需要观测历史?[答]zzs:观测历史主要是为了利用状态估计获取线速度。legged_gym里是默认输入量有线速度这一项,但是实际中线速度是无法直接获取的。
- 在make_env中,pai_env.compute_observations的self.privileged_obs_buf定义中:
- base_eular_xyz、env_friction、body_mass未被定义,已复制humanoid定义
- cat()维度不对,已解决
- 至此make_env中的问题解决完毕。
- 在make_env中,pai_env.reset_idx()中的obs_history没有被定义。obs_history在humanoid-gym中的legged_robot._init_buffers是被额外定义为actor和critic的观测历史,也同时引入了frame_stack的概念,是利用基于C++的deque库,是一个双向队列(double-ended queue),用来作为stl的容器。
- 进入make_alg_runner阶段。
- check_termination
遗留问题
- legged_gym:soft limits的作用