卡尔曼滤波(二)姿态融合
这一篇继续以训练好的 TienKung 人形机器人为例,在 Isaac Lab 中加入一个 IMU 传感器,然后手动给理想测量叠加陀螺仪固定零偏、陀螺仪白噪声和加速度计白噪声,最后对比融合互补滤波、普通卡尔曼滤波和误差状态卡尔曼滤波三种姿态估计方法。 因为本来想验证一下卡尔曼滤波,但是实现过程中发现欧拉角三个方向的旋转有耦合,所以调研到了ESKF的方法,这里由于时间原因没有细纠,这部分还有待仔细推导,先埋个点[TODO] 当前实验使用三轴角速度和三轴加速度,没有磁力计或其他绝对航向观测。因此Roll和Pitch可以利用重力方向进行校正,Yaw主要依靠陀螺仪传播,长时间运行仍然可能出现漂移。 需要先说明,这里新增的三种滤波器只用于学习、绘图和对比,不会把滤波结果传给强化学习策略。策略使用的仍然是环境原来定义的 observation,因此这一部分不会改变训练好的控制策略。 Isaac Lab IMU 输出首先在 play_kaleman.py 中临时继承原来的场景配置,然后给机器人 pelvis 部分加入一个 IMU。这样不会修改原来的训练场景配置。 123456789101112...
TienKung-Lab AMP源码阅读(二)
这篇记录继续整理 TienKung-Lab 里的 AMP 实现,主要围绕 AmpOnPolicyRunner 和 AMPPPO 展开。普通 rsl_rl 训练使用 OnPolicyRunner,这个工程注册的是 AmpOnPolicyRunner,在原有 PPO 采样和更新之外增加了 AMP expert data、policy AMP replay buffer 和 discriminator。 首先是最终的训练效果: AmpOnPolicyRunner.__init__()初始化阶段主要创建这些对象: 12345678并行仿真环境 envActor-Critic policyAMP discriminator专家数据 amp_dataAMP 特征 normalizerAMPPPO 算法对象 self.algPPO rollout storage日志和模型保存相关对象 critic 不是单独创建的类,它和 actor 一起包含在 ActorCritic 对象中。 runner 先保存训练配置、算法配置、policy 配置、设备和环境,然后配置多 GPU: 123456self...
TensorBoard 使用记录:视频和 Histograms
主要是记录当前项目里 TensorBoard 视频和 Histograms 的记录方式。 TensorBoard 除了记录 reward 曲线和训练曲线,也可以看 Histograms 直方图,还可以把训练过程中的视频帧写进去。这里用天工 AMP 项目里的改法来记一下。原工程里不带这几项,是后面自己补的,所以这篇主要关注实现位置和变量对应关系。 当前实现方式这次修改主要涉及三个文件: 123legged_lab/scripts/train.pyrsl_rl/rsl_rl/runners/amp_on_policy_runner.pylegged_lab/envs/tienkung/tienkung_env.py 它们分别处理三件事: · train.py 负责解析命令行参数,并把视频、直方图相关配置传给 runner。· amp_on_policy_runner.py 负责在训练循环里写 Histograms 和视频。· tienkung_env.py 负责提供 render(),并控制录视频时的相机视角。 训练脚本里增加参数位置:legged_lab/scripts/tra...
Isaac Lab 轮足机器人强化学习(三):速度课程与地形课程
Isaac Lab 轮足机器人强化学习(三):速度课程与地形课程前两篇已经完成工程搭建和平地行走训练。平地版本能够在 $[-0.3,0.3]\ \mathrm{m/s}$ 的纵向速度指令内稳定行走后,接下来要做的是逐渐扩大速度范围,并把训练场景从平面换成包含粗糙地面、斜坡、方块和台阶的混合地形。 速度课程从较小速度范围开始直接把指令范围设成最终目标,会让训练初期同时面对更快的轮速、更大的姿态变化和更宽的状态分布。因此平地行走先从下面的纵向速度范围开始: 1234567PHASE2_COMMAND_CFG = { "resampling_time_range": (2.5, 2.5), "rel_standing_envs": 0.4, "lin_vel_x": (-0.3, 0.3), "lin_vel_y": (0.0, 0.0), "ang_vel_z": (-0.5, 0.5),} 速度课程只修改 base_velocity ...
AMP(一)算法框架和判别器
AMP(一)算法框架和判别器这篇是看天工开源项目时顺手补的 AMP 笔记,但这一篇先不拆具体代码,只讲 AMP 原理 AMP,全称是 Adversarial Motion Priors。这名字看起来挺抽象,拆开以后其实就是:用对抗学习从 motion dataset 里学一个“运动先验”,然后把这个先验变成 style reward,和任务奖励一起给 PPO 用。 这里的核心不是让 policy 精确跟踪某一帧动作,而是让 policy 生成的状态转移整体看起来像动作数据集里的运动。 AMP 解决的核心痛点在 DeepMimic 这种方法里,一般会有一条明确的参考轨迹: \hat q_0,\hat q_1,\hat q_2,\ldots策略在当前 phase 下,去跟踪对应时刻的目标姿态。奖励通常是人工设计的: r_{\text{imit}} = w_p r_{\text{pose}} + w_v r_{\text{vel}} + w_e r_{\text{end-effector}} + \cdots这样做能把单条动作模仿得很好,但问题也很明显: · 必须知道当前该模仿哪...
摆线针轮减速器设计记录:原理与核心参数
摆线针轮减速器设计在本科刚开始接触三维建模的时候,尤其是高教杯这种建模比赛的时候,最容易出现的就是一类题目:减速器。那时候更多的是以传统齿轮为主的,比如行星齿轮,蜗轮蜗杆这些。然而在众多减速器中,有一种减速器他不在需要传统复杂的齿形加工,以一种非常巧妙的方式来传递里,他就是摆线针轮减速器,他凭借体积紧凑、传动比大、抗冲击承载能力强这些特点,在高扭矩密度场景里经常出现,比如四足机器人的关节、高精度伺服控制、一些小体积大扭矩执行器。还有一点就是,他不需要繁杂的齿形加工,我觉得他是最适合3D打印材料的减速器了。 这篇先不把所有齿廓细节都展开成完整工程校核,主要梳理摆线针轮减速器到底怎么转起来,以及设计初期必须先定下来的核心参数。 然后实物的话后续做完再更。 后续有时间再更谐波减速器,又是另一种机械仙品 一、前置原理一个圆绕三倍于其周长的一根木棒滚动,会转三圈。 把木棒弯成一个圆,然后一个小圆在外面绕着三倍于其周长的大圆滚动,会多转一圈,因为它不仅自己滚,还绕大圆公转了一圈,所以外滚时是四圈。 如果小圆是在大圆内部滚动,则会少一圈,所以是两圈。 这件事本质上就是:当小圆沿着大圆滚一圈时...
手撕PPO(三)多环境并行
PPO 第三版:多环境这次把 PPO 从“单个 Pendulum 环境一局一更新”的版本变成多环境并行,强化学习怎能不并行呢 1. 上一版的问题训练主循环大概是这样的: 12345只创建一个 `Pendulum-v1` 环境。每个 episode 跑最多 200 步。每一步让 Actor 采样一个动作。送进环境前,对动作做 `action.clip(ACTION_LOW, ACTION_HIGH)`。一局结束后,用这一条轨迹做一次 PPO update。 这个版本已经比最初版稳定,因为它至少避免了 Pendulum 收到非法动作。但它还有几个明显问题。 首先采样效率低。PPO 是 on-policy 算法,每次更新都必须先采新数据。上一版只跑一个环境,一局最多 200 个 transition,样本量小,更新频率高,噪声也比较大。想让训练更稳,要么攒更多 episode 再更新,要么同时跑多个环境。 其次动作边界处理还不够完善和通用。上一版 Actor 里确实用了 tanh,但它作用在 mean 上,而且是手动乘 2: 1mean = self.tanh(self.fc_mea...
Isaac Lab 轮足机器人强化学习(一):项目创建与环境搭建
Isaac Lab 轮足机器人强化学习(一):项目创建与环境搭建最近在看 Isaac Lab 的官方文档,借这个机会整理几篇文章,记录一个轮足机器人强化学习工程从创建、行走训练到课程学习的完整过程。这里没有直接使用开源的人形或四足模型,而是使用自己建模的双轮足机器人,目的就是把模型导入、环境搭建、训练和验证这条链路完整跑通。 整个工程参考了 Isaac Lab 的项目模板和教程,采用外部工程、Manager-based 环境与 RSL-RL。本文先完成项目创建、机器人导入和站立训练;下一篇再记录如何把机器人从“站住”逐步训练到能够稳定行走。速度课程和地形课程放到第三篇。 本工程对应的本地环境为 Isaac Lab 2.3.2、Isaac Sim 5.1.0、rsl_rl 5.4.1、PyTorch 2.7.0+cu128 和 Python 3.11.15。下面的接口和配置都以这个工程的实际代码为准。 Isaac Lab 与参考资料Isaac Lab 中常见的强化学习任务主要有 Direct 和 Manager-based 两种组织方式。Direct 环境把观测、奖励、终止条件和动...
Isaac Lab 轮足机器人强化学习(二):从站立到稳定行走
Isaac Lab 轮足机器人强化学习(二):从站立到稳定行走上一篇先把工程、机器人模型和 Manager-based 环境搭了起来,并通过站立任务确认整条训练链路能够工作。接下来真正让机器人走起来时,奖励函数、PD 参数、网络动作缩放、执行器力矩限制和速度限制都会共同影响训练结果。 加入通用奖励后训练变得不稳定站立训练完成后,把之前训练机器狗时常用的一批奖励项加了进来,结果机器人并没有自然地从站立过渡到行走,反而开始剧烈晃动,甚至无法站稳。 这个时候的可能奖励和执行器部分都存在问题,首先是奖励部分绝对有问题。 所以改变思路,一点一点加奖励,机器人出现一种明确行为后,再针对这种行为增加约束。 机器人不动(增加速度方向奖励)首先是只打开速度跟踪奖励这个时候发现机器人不走动,只会站立 查看各奖励项的变化后发现,在整体奖励下降时,部分惩罚项比如joint_acc反而上升且数值超过了速度奖励。 最开始的想法是继续提高速度跟踪奖励,也就是“重金之下有勇夫”,但实际没有解决问题,大奖励反而会让训练变得不稳定,机器人会盲目向前,且摔倒。 最后经过一系列调参和调研后,添加了速度方向的奖励: ...
Flipper Zero 二次开发记录
Flipper Zero 二次开发这篇主要记录一下 Flipper Zero 的二次开发流程。现在先不碰完整固件源码,主要基于三方优化系统 Momentum 做 External App,也就是最后生成 .fap 插件,放到 SD 卡里运行。 目前基于三方优化系统 Momentum 来进行学习,该系统被公认为目前三方里比较好用的一版。 一、上位机、固件和文件系统Windows 上位机安装。 本地安装包原来放的是: 1flipper zero电脑管理软件.exe 安装三方固件时,用的是 Momentum 的更新包: 1flipper-z-f7-update-mntm-dev-42630e91.tgz 这里不要再在文章里直接引用本机 Downloads 路径。博客部署之后读不到本地路径,所以只记录文件名,实际文件按自己的电脑位置导入即可。 文件系统大概长这样: 这里后面会用到的是 SD 卡里的 apps 目录。External App 编译出来之后,本质上就是把 .fap 文件放进对应分类目录,比如 apps/Tools。 二、开发环境先创建工作目录: 12mkdir Flipp...







