IsaacLab入门级食用方法
Isaac Lab External 项目完整工作流 本教程面向已经配置好Isaaclab强化学习环境的新手玩家 项目仓库:https://github.com/Leggedsys/legged_train/tree/main 第一次新建一个空的IsaacLab外部项目,除了跑一跑倒立摆的示例,我也不知道下一步要做什么。仓库是新的,我的目标是训练一条机器狗,下一步要干啥?:先放URDF ?写 env ?先写 PPO 配置?还是去啃官方教程?本人想做一篇文档教程作为参考,把训练一台机器狗这个事,完整记录一下。 整个过程其实比较简单:先把项目变成一个能被IsaacLab 识别的Python扩展,再把机器人资产接进来,然后围绕这台机器人写配置、场景、环境和奖励,最后再接上PPO训练与回放脚本。难点从来不在于某一步特别神秘,我们第一次做isaaclab项目时,大概已经知道我要做的无非就这些事,但不知道从何开始,也不知道这些文件到底是干啥的。只要这条线理顺了,后面想加入平地gait、rough terrain、抗扰动或者sim-to-real 扩展,其实都会顺很多。 项目环境准备 我的项目...
四足机器人 MPC 的数学建模与 QP 推导
四足机器人 MPC 的数学建模与 QP 推导 很多关于四足机器人 MPC 的文章,要么停留在“模型预测控制很适合动态 locomotion”的概念层面,要么直接从论文里搬出一组矩阵,读者知道符号长什么样,却不知道这些矩阵为什么会这样出现。真正做开发时,最难的部分并不是把现成公式抄进代码,而是要把几个问题真正想清楚:为什么整机建模时通常从单刚体模型开始,而不是直接从全身动力学开始;为什么优化变量通常选足端接触力,而不是关节力矩;连续时间动力学怎样走到离散时间模型;离散预测模型怎样进一步变成一个标准的二次规划问题;摩擦锥、摆动腿零力和法向力上下限这些约束又是怎样写进 QP 的。 这篇文章就只做一件事:把四足机器人 MPC 里最核心的数学链条,从建模一路推到 QP。它不是一篇 broad overview,也不是一篇以工程经验为主的调参手册,而是偏理论和可实现之间的那一层。写完这一篇之后,你至少应该能够回答下面几个关键问题。第一,MPC 在四足机器人中控制的对象到底是什么。第二,单刚体模型的状态变量和输入变量该怎样选。第三,为什么预测控制问题最终会落成一个 QP,而不是一堆看不出结构的...
C语言中的函数指针与虚函数表模拟
C语言中的函数指针与虚函数表模拟 在上一篇《C语言模拟面向对象》中,讨论了一个常见但容易被误解的话题:为什么很多嵌入式项目会把 C 语言写得“像面向对象”一样。 这种写法并不是为了“显得高级”,而是因为当系统开始管理越来越多的设备、模块和控制逻辑时,单纯依靠一堆分散的函数和条件分支,代码会越来越难维护。 在C语言模拟面向对象的技巧里,函数指针和虚函数表风格的操作表,是最核心的一层机制。 这篇文章就专门讨论这个问题: 在机器人嵌入式系统中,如何用 C 语言的函数指针模拟“对象方法”,再进一步模拟“虚函数表”和“多态调用”? 一、为什么普通 C 写法会越来越难维护 先看最朴素的写法。 假设我们有两类电机: DJI 电机 DM 电机 一开始也许只需要做“使能”: if (motor_type == DJI_MOTOR) { dji_motor_enable();} else if (motor_type == DM_MOTOR) { dm_motor_enable();} 后来需求变多了,还要设置目标值、解析反馈、执行控制更...
C语言模拟面向对象
C语言模拟面向对象 很多人第一次看到这种代码风格时,都会有一个问题:“用 C 语言写出面向对象的样子,是不是显得更专业” 我的看法是:专业不在于“像不像 C++”,而在于这套写法能不能真正解决工程问题。 对于机器人嵌入式控制系统来说,系统里往往同时存在底盘、电机、升降机构、武器机构、CAN 通信、PID 控制、任务调度等多个层次。如果继续用“满地全局变量 + 一堆 switch-case + 到处散落的初始化函数”去组织代码,随着功能变多,系统很快就会变得难以维护。 这时候,C 语言里的几个经典手段——结构体封装、函数指针、组合关系、统一初始化接口、对象注册——就能模拟出一套足够实用的“面向对象”风格。 这篇文章就结合一套机器人电机控制代码,聊聊: 为什么嵌入式系统里要用 C 模拟面向对象 你的这套代码到底“对象化”在什么地方 这种写法在机器人控制系统里有什么实际价值 这种设计什么时候值得用,什么时候会过度设计 基于现有代码,还能做哪些工程上的改进 1. 为什么 C 语言也要“对象化”? 在桌面开发里,大家很容易直接想到 C++、Rust 这类更现代的语言;但在嵌入式世界,...
rsl_rl库源码解读
很多人第一次看 rsl_rl,会以为它只是“又一个 PPO 仓库”。但如果把源码真正拆开,你会发现它的核心价值并不只是实现了 PPO,而是把 模型结构、观测组织、采样存储、训练更新、蒸馏部署 这些环节统一进了一套非常清晰的接口里。 对于足式机器人来说,这种设计尤其重要。原因很简单:机器人强化学习不是只写一个 policy(obs) 就结束了。真实工程里你常常会同时面对这些问题: actor 和 critic 看到的观测不一样; 训练时可以用 privileged information,部署时却不能用; 有些任务只需要 MLP,有些任务要加 CNN 或 RNN; 训练时要高效支持并行环境、PPO、多卡同步,部署时又要能导出 JIT / ONNX。 而这组源码恰好把这些问题都落到了具体实现里。 本文会围绕你给出的几个核心文件,从 理论公式 和 工程实现 两条线同时解读 rsl_rl: MLP / MLPModel 如何构成整套模型抽象; CNNModel 和 RNNModel 如何复用这套接口; PPO 的采样、GAE、裁剪目标、KL 自适应学习率如何映射到代码; Disti...
Q-learning
Q-learning:从入门到理解,再到足式机器人中的应用 Q-learning 是强化学习(Reinforcement Learning, RL)中最经典的算法之一。很多人第一次接触强化学习,都是从它开始的。它结构简单、思想清晰,而且把强化学习中几个最核心的问题都体现得很完整:状态是什么、动作怎么选、奖励如何定义、以及智能体如何通过试错逐步学会更优策略。 对于初学者来说,Q-learning 是理解强化学习的最佳入口;对于做机器人,尤其是足式机器人的人来说,它虽然未必直接用于高维连续控制,但它背后的思想——通过与环境交互不断更新动作价值——仍然是后续很多现代算法的基础。 这篇文章会从以下几个方面展开: Q-learning 解决的是什么问题 它的数学基础是什么 它为什么能学到“更好”的动作 具体更新公式如何理解 一个简单的 Python 示例 它在足式机器人中的意义与局限 1. 强化学习到底在做什么? 在监督学习里,我们通常有一批带标签的数据,模型要做的是拟合输入和输出之间的映射。而在强化学习里,没有人直接告诉智能体“正确答案是什么”,智能体只能通过和环境不断交互,根据环...
(科普向)四足机器人的技术路线全景:从运动学、WBC、MPC到强化学习
四足机器人的技术路线全景:从运动学、WBC、MPC到强化学习 四足机器人自从宇树机器狗出圈后得到频繁讨论,原因在于足式机器人几乎把机器人领域里核心的、先进的问题都搬到了一台机器上,要面对机构设计,电机驱动,运动学,动力学,状态估计,轨迹规划,全身控制,强化学习以及仿真到实机的迁移。所以这类足式机器人给作为初学者的我造成不小的困扰,问题不在于技术的细节,路线很多,但它们之间的关系不那么清晰,如何做到力位混合控制?如何将学习策略和模型控制结合?我们常常缺少一条完整的技术脉络。 当你开始做机器人,最关键的不是先选一个最先进的策略,而是看你的目标任务是要跑一条结构化的赛道?或者跑通用的locomotion?还是要面对复杂的环境?层出不穷的技术路线不应该简单堆叠在一起,而是要回答一个更实际的问题:如果要把一台四足机器人从能站、能迈步,逐步做到稳定奔跑、跳跃越障、复杂地形适应,甚至进一步做到学习型 locomotion,那么中间到底要跨过哪些层次,每一层又解决什么问题。 四足机器人的发展可以理解成一条不断抬高控制层级的路线。最底层解决的是几何问题,也就是腿在哪里、足端在哪里、关节该转多少;再...
光刻技术
光刻工艺 光刻的要求 分辨率(高) 曝光视场(大) 图形对准精度(高) ——1/3最小特征尺寸 产率(大) 缺陷密度(低) 掩模版制作 CAD设计、模拟、验证后由图形发生器产生数字图形 x1掩模版制作——光刻式 x4或x5投影光刻版——投影式光刻 x4或x5投影光刻版在制版时容易检查缺陷 版上缺陷可以修补 蒙膜保护防止颗粒玷污 通过电子束在光刻胶层写入目标电路图案 对涂覆的光刻胶进行显影,得到与目标图案对应的光刻胶掩模 以光刻胶为掩膜,刻蚀下方的铬层,江图案转移至铬层 剥离剩余的光刻胶,露出铬层上的图案 检测图案的关键尺寸,确保尺寸精度符合要求 验证图案的位置精度,保证各特征的相对位置精确 清洁掩模版表面的残留杂质 检测掩模版上的缺陷(如针孔、多余铬点) 对检测处的缺陷进行修复,保留图案的完整性 在加装防尘膜前,再次清洁掩模版表面 安装防尘膜,避免后续使用中颗粒物污染掩模图案 完成所有工序得到掩模版 三种硅片曝光模式及系统 接触式光刻机 MERCURY LAMP汞灯:提供光刻所需的紫外光源,是图案转移的能量来源 MIRROR反射镜+CONDENSER LE...








