当前位置: 首页 > news >正文

IsaacLab学习记录(四)

强化学习三要素:奖励、观测、动作

​模块​​强化学习中的作用​
​观测• 构建状态空间 st​,驱动策略决策
• 提供环境交互的实时反馈(如脚部触地力)
• 噪声注入(Unoise)提升策略鲁棒性
​动作• 将策略输出 at​∈[−1,1] 映射到物理可行空间
• 通过 scale 平衡探索效率与稳定性
• offset 利用先验知识(初始姿态)加速收敛
​奖励• 定义优化目标 rt​,引导策略学习方向
• 负奖励(weight=-0.1)抑制不良行为(脚滑)
• 奖励函数即课程设计(Curriculum)
​三者的闭环关系​• ​​观测​​输入策略网络生成​​动作​
• ​​动作​​改变环境状态并触发​​奖励​​计算
• ​​奖励​​通过梯度更新优化策略

四、奖励

  • 如定义一个名为 feet_slide 的奖励项,用于惩罚脚部滑动。
  • 在奖励函数中,通过接触传感器检测脚部是否接触地面,并计算接触时脚部的水平速度(x和y方向),将接触时的速度范数求和作为惩罚项(乘以一个负权重)。
  • 在 RobotRewards 中引入了这个奖励项,并设置权重为-0.1,同时指定了传感器和实体的配置(指定了具体的身体名称)。

1、奖励定义义:/source/isaaclab_tasks/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/mdp/rewards.py

def feet_slide(env, sensor_cfg: SceneEntityCfg, asset_cfg: SceneEntityCfg = SceneEntityCfg("robot")) -> torch.Tensor: # Penalize feet sliding contact_sensor: ContactSensor = env.scene.sensors[sensor_cfg.name]  contacts = contact_sensor.data.net_forces_w_history[:, :, sensor_cfg.body_ids, :].norm(dim=-1).max(dim=1)[0] > 1.0 asset = env.scene[asset_cfg.name] body_vel = asset.data.body_lin_vel_w[:, asset_cfg.body_ids, :2] reward = torch.sum(body_vel.norm(dim=-1) * contacts, dim=1) return reward

2、奖励引入:your_env_cfg:RobotRewards(RewardsCfg)

feet_slide = RewTerm( func=mdp.feet_slide, weight=-0.1, params={ "sensor_cfg": SceneEntityCfg("contact_forces", body_names="Link_ankle_.roll"), "asset_cfg": SceneEntityCfg("robot", body_names="Link_ankle*_*.*_roll"), }, )

3、奖励配置:your_env_cfg:RobotRoughEnvCfg(LocomotionVelocityRoughEnvCfg):

环境场景设置(Scene)、域随机化配置(Domain Randomization Events)、奖励函数权重调整(Rewards)、指令采样范围(Commands)、终止条件设置(Terminations)、事件配置 (EventCfg),具体查看LocomotionVelocityRoughEnvCfg

五、观测

  • 在观测配置类 PolicyCfg 中添加了多个观测项,如基础线速度、基础角速度、投影的重力、速度指令、关节位置、关节速度、上一个动作、高度扫描和接触力。
  • 每个观测项都指定了处理函数(如 mdp.base_lin_vel)和噪声配置(如均匀噪声)。
  • 其中,contact_force 观测项使用了接触力传感器,指定了身体名称为匹配“FOOT”的模式。

1、观测添加:/source/isaaclab_tasks/isaaclab_tasks/manager_based/locomotion/velocity/velocity_env_cfg.py中的

ObservationsCfg类下的PolicyCfg

@configclass class PolicyCfg(ObsGroup): ... base_lin_vel = ObsTerm(func=mdp.base_lin_vel, noise=Unoise(n_min=-0.1, n_max=0.1)) base_ang_vel = ObsTerm(func=mdp.base_ang_vel, noise=Unoise(n_min=-0.2, n_max=0.2)) projected_gravity = ObsTerm(func=mdp.projected_gravity, noise=Unoise(n_min=-0.05, n_max=0.05)) velocity_commands = ObsTerm(func=mdp.generated_commands, params={"command_name": "base_velocity"}) joint_pos = ObsTerm(func=mdp.joint_pos_rel, noise=Unoise(n_min=-0.01, n_max=0.01)) joint_vel = ObsTerm(func=mdp.joint_vel_rel, noise=Unoise(n_min=-1.5, n_max=1.5)) actions = ObsTerm(func=mdp.last_action) height_scan = ObsTerm(func=mdp.height_scan, ...) contact_force = ObsTerm( func=mdp.contact_forces, params={"sensor_cfg": SceneEntityCfg("contact_forces", body_names=".*FOOT")}, noise=Unoise(n_min=-5.0, n_max=5.0) )

2、具体数据处理函数:mdp.py中的 base_lin_vel, joint_pos_rel 等

六、动作

  • 配置了动作规范,使用关节位置控制(JointPositionActionCfg)。
  • 指定了资产名称为“robot”,关节名称为正则表达式“.*”(匹配所有关节),缩放比例为0.5,并使用默认的初始位置偏移。

velocity_env_cfg.py中的ActionsCfg类

@configclass class ActionsCfg: """Action specifications for the MDP.""" joint_pos = mdp.JointPositionActionCfg( asset_name="robot", joint_names=[".*"], # 匹配所有关节 scale=0.5, # 动作缩放 use_default_offset=True # 使用初始位置偏移 )

policy 输出 -> [a1, a2, ..., an] → 映射成 joint position commands → 缩放后用于控制机器人动作

步骤技术实现强化学习作用
Policy 输出神经网络原始输出 ai​∈[−1,1]智能体的决策能力体现
关节命令映射目标位置 = 初始位置 + ai​× scale归一化动作空间,提升训练稳定性
物理控制发送位置命令至关节电机环境交互的执行层,生成后续状态/奖励
http://www.lryc.cn/news/594479.html

相关文章:

  • Linux文件系统三要素:块划分、分区管理与inode结构解析
  • [CVPR]DVFL-Net:用于时空动作识别的轻量级蒸馏视频调焦网络
  • Python知识点2-if语句
  • FreeRTOS学习笔记之内存管理
  • Raz解决问题:You are offline.
  • [Linux]进程 / PID
  • 【开源项目】基于RuoYi-Vue-Plus的开源进销存管理系统
  • Spring Boot 配置文件解析
  • USB技术发展史:从1.0到USB4的演进之路
  • Matplotlib Contourf 标注字体详细设置
  • Spring之AOP面向切面编程详解
  • 【数据结构】双向循环链表的实现
  • MyBatis从浅入深
  • day24——Java高级技术深度解析:单元测试、反射、注解与动态代理
  • 高性能熔断限流实现:Spring Cloud Gateway 在电商系统的实战优化
  • `SearchTransportService` 是 **协调节点与数据节点之间“搜索子请求”通信的运输层**
  • 4种快速创建SpringBoot项目的方法
  • Claude Code 逆向工程分析,探索最新Agent设计
  • JavaScript 中Object、Array 和 String的常用方法
  • 金融工程、金融与经济学知识点
  • 数据结构与算法汇总
  • 连接语言大模型(LLM)服务进行对话
  • GaussDB select into和insert into的用法
  • 机器学习基础:从数据到智能的入门指南
  • python生成密钥
  • Self-Consistency:跨学科一致性的理论与AI推理的可靠性基石
  • An End-to-End Attention-Based Approach for Learning on Graphs NC 2025
  • JAVA面试宝典 -《API设计:RESTful 与 GraphQL 对比实践》
  • 《通信原理》学习笔记——第五章
  • 【1】YOLOv13 AI大模型-可视化图形用户(GUI)界面系统开发