IsaacGym四足机器人sim to real全过程详细解析(walk these ways方法)

news2024/11/19 1:21:48

四足机器人强化学习控制第三篇

第一篇 Isaac Gym环境安装和四足机器人模型的训练
第二篇 docker中安装ROS 在宇树四足机器人运行 强化学习GenLoco算法


目录

  • 四足机器人强化学习控制第三篇
  • 前言
  • 一、安装和配置
  • 二、训练
    • 1.训练
    • 2.恢复训练
    • 3.训练结果
  • 三、sim to real
    • 1.部署模型
      • 注意
    • 2.更换训练的模型
    • 3.通讯协议介绍
    • 3.更换宇树其他机器人使用教程
      • 重新编译lcm_position.cpp程序
      • 修改机器人配置文件
  • 三、代码解析
    • 1.代码结构
    • 2.主要代码分析
    • 3.ml_logger使用
  • 总结


前言

在这里插入图片描述

本文使用强化学习的方法运行到Aliengo机器人上完成从训练到部署的全过程。

使用的是方法方法是:
Walk these Ways: Tuning Robot Control for Generalization with Multiplicity of Behavior
Conference on Robot Learning, 2022
paper / project page / github
该方法使用的是GO1机器人提供了完整的sim to real代码和遥控器控制代码,所以我们只需要重新训练和部署健康就可以使用在Aliengo上。


一、安装和配置

本人测试了以下三种环境
可以使用:
torch 1.10.0+cu11.4
torch 1.12.0+cu11.6
不能使用:torch 1.13.1+cu11.8

安装pytorch1.12配合CUDA11.6

pip install torch==1.12.0+cu116 torchvision==0.13.0+cu116 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu116

安装Isaac gym
可以看我第一篇文章Isaac Gym环境安装和四足机器人模型的训练

下载github: walk-these-ways 全部文件。
进入目录后

pip install -e .

测试安装是否成功

python scripts/test.py

二、训练

1.训练

硬件需求:至少10G显存,最好12G以上显存。本文测试使用3070笔记本 8G显存只能运行 Cfg.env.num_envs=1500 左右,代码提供训练好的模型大概训练3~4万次迭代,本人估计训练时间60到80个小时。

python scripts/train.py

本文使用的代码结构是改编自legged_gym
所以也可以借鉴我前面的文章Isaac Gym环境安装和四足机器人模型的训练

2.恢复训练

如果想要在训练结束后继续上次的训练需要修改go1_gym_learn/ppo_cse/__init__.py位置的代码
依照Resume training #25进行修改
注意本人在自己训练的模型上进行恢复训练的修改,虽然可以恢复训练但是效果不好,谨慎使用。
分析原因是可能使用.pt模型文件而不是.jit的模型文件。

class RunnerArgs(PrefixProto, cli=False):
    
    ...

    # load and resume
    resume = True
    load_run = -1  # -1 = last run
    checkpoint = -1  # -1 = last saved model

    label = "gait-conditioned-agility/2023-05-18/train" # 需要恢复的模型位置
    dirs = glob.glob(f"../runs/{label}/*")
    logdir = sorted(dirs)[0]

    resume_path = logdir[:]  # 根据自己情况修改只要能找到文件即可
    resume_curriculum = True 
if RunnerArgs.resume:
            # load pretrained weights from resume_path
            from ml_logger import ML_Logger
            # loader = ML_Logger(root="http://escher.csail.mit.edu:8080",
            #                    prefix=RunnerArgs.resume_path)
            loader = ML_Logger(root="http://127.0.0.1:8081",  # ML_Logger 需要若不该会报错
                               prefix=RunnerArgs.resume_path)
            # 原来的loader.load_torch会报错这样该可以使用
            weights = torch.load(RunnerArgs.resume_path + "/checkpoints/ac_weights_last.pt")
            # weights = loader.load_torch(RunnerArgs.resume_path + "/checkpoints/ac_weights_last.pt")

            actor_critic.load_state_dict(state_dict=weights)

            if hasattr(self.env, "curricula") and RunnerArgs.resume_curriculum:
                # load curriculum state
                # distributions = loader.load_pkl(RunnerArgs.resume_path + "/curriculum/distribution.pkl")
                # 原来的loader.load_pkl会报错,使用pickle读取.pkl文件
                f = open(RunnerArgs.resume_path + '/curriculum/distribution.pkl','rb')
                distributions = pickle.load(f)
      			# 也进行了修改,为了找到weights_
                distribution_last = distributions["distribution"]
                gait_names = [key[8:] if key.startswith("weights_") else None for key in distribution_last.keys()]
                for gait_id, gait_name in enumerate(self.env.category_names):
                    self.env.curricula[gait_id].weights = distribution_last[f"weights_{gait_name}"]
                    print(gait_name)                             
# 需要启动ml_dash
python -m ml_logger.server

3.训练结果

9000次迭代后训练结果

aliengo训练结果

三、sim to real

1.部署模型

本文使用的代码是通过lcm通讯的。
根据github上指示教程,使用的是宇树GO1机器人

  1. 建立通讯:可以ping到机器人中tx2主板
    宇树的开发文档查看ip地址。
#go1
ping 192.163.123.15
  1. 下载docker镜像并导入机器人主板中
# 代码会下载一个docker镜像并把本地文件都复制到宇树机器人中
cd go1_gym_deploy/scripts && ./send_to_unitree.sh
  1. 远程控制到机器人中使用
# 密码一般是123
 ssh unitree@192.168.123.15
  1. 在宇树机器人上载入docker镜像
    使用命令
chmod +x installer/install_deployment_code.sh
cd ~/go1_gym/go1_gym_deploy/scripts
sudo ../installer/install_deployment_code.sh
  1. 启动通讯程序
    确保机器人挂起,机器人在阻尼模式下,启动lcm通讯程序。
cd ~/go1_gym/go1_gym_deploy/autostart
./start_unitree_sdk.sh
  1. 启动的docker中控制程序
cd ~/go1_gym/go1_gym_deploy/docker
sudo make autostart

但是本人这样并不能启动控制程序
本人是手动进入docker容器中再启动的

# 启动docker容器
docker start foxy_controller
# 进入docker容器
docker exec foxy_controller bash 
# 启动控制程序
cd go1_gym_deploy/scripts 
python3 deploy_policy.py'

注意

其中注意要修改 go1_gym_deploy/docker/makefile文件中
--volume="/home/unitree/go1_gym:/home/isaac/go1_gym" \参数到你的工作目录。

./send_to_unitree.sh下载的docker镜像是针对jetson arm架构的,并不能在x86机器上运行。
./start_unitree_sdk.sh命令只能运行在arm架构的机器上。不然会报下面错。

./lcm_position: 1: Syntax error: word unexpected (expecting ")")

2.更换训练的模型

  1. 找到训练好的模型位置

训练好的模型位置:walk-these-ways/tree/master/runs/
默认的模型位置为gait-conditioned-agility/pretrain-v0/train代码中使用 $PDIR标记

  1. 替换测试代码中模型地址
    替换/walk-these-ways/blob/master/scripts/play.py #L97 中的label = "$PDIR"
  2. 替换机器人中使用的模型
    替换/walk-these-ways/blob/master/go1_gym_deploy/scripts/deploy_policy.py#L73
    中的label = "$PDIR" 然后在复制到机器人中替换

3.通讯协议介绍

该方法使用lcm进行通讯
首先go1_gym_deploy/unitree_legged_sdk_bin/lcm_position.cpp程序通过UDP和机器人控制板进行通讯获取机器人状态并下达指令。然后又通过lcm进行机器人状态信息的发布和模型命令的获取。
模型端:
使用go1_gym_deploy/utils/cheetah_state_estimator.py程序获取机器人状态信息。
使用go1_gym_deploy/envs/lcm_agent.py发送机器人控制命令

3.更换宇树其他机器人使用教程

重新编译lcm_position.cpp程序

如果有需要更改lcm_position.cpp程序,则需要重新编译。
本人因为要把代码使用在aliengo上,所以需要改变sdk信息进行重新编译。
LCM官方文档链接

  1. 安装lcm的python版
cd lcm-1.4.0/lcm-python
python setup.py install
# 然后到build再安装
cd build
sudo make install
  1. 下载需要更换的sdk文件宇树SDK
  2. 将lcm_position.cpp放到宇树unitree_legged_sdk/examples文件夹下
  3. 根据lcm数据定义文件生成c++头文件
    /unitree/go1_gym_deploy/lcm_types文件夹中使用命令lcm-gen -x leg_control_data_lcmt.lcm生成c++的头文件
  4. 将生成的头文件放到unitree_legged_sdk/include/文件夹中。
  5. 修改在sdk下CMakeLists.txt文件
    增加下面代码
add_executable(lcm_position examples/lcm_position.cpp)
target_link_libraries(lcm_position ${EXTRA_LIBS})
  1. 然后把sdk重新进行编译
mkdir build
cd build
cmake ../
make
  1. build文件夹下生成的lcm_position就是新编译的可执行文件。

修改机器人配置文件

添加新机器人模型在resources/robots文件夹下
根据go1_gym/envs/go1/go1_config.py文件重新制作新机器人参数文件
最后修改scripts/train.py中调用参数的代码。
更换模型出现的问题整理:
参考Isaac Gym环境安装和四足机器人模型的训练中
三、4.关于宇树URDF文件训练中出现的问题 整理的问题

三、代码解析

1.代码结构

unitree
├── go1_gym(训练测试使用机器人参数和奖励计算代码)
├── go1_gym_deploy(sim to real 部署用代码)
├──go1_gym_learn(网络模型代码)
├──logs(真实机器人收集到的数据)
├──resources(机器人模型文件)
├──runs(训练结果的记录和模型参数文件)
└── scripts(训练测试启动代码)

2.主要代码分析

  1. go1_gym/envs/base/legged_robot.py为机器人总类,计算总奖励,环境信息汇总,检查终止,创建仿真,使用actuator_net,训练step和状态初始化。
  2. go1_gym/envs/rewards/corl_rewards.py为计算每个类型的reward
  3. scripts/actuator_net/utils.py为训练actuator_net网络使用的代码,该方法主要参考论文。目的是通过网络预测力矩的输出。
    在机器人参数中,参数control_type=="actuator_net"则使用网络预测。control_type == "P"则是使用计算得出力矩。

3.ml_logger使用

训练时可视化训练结果使用的ml_logger包。
ml_logger的github链接
ml_logger的说明文档
启动ml_dash frontend app

# 启动ml_dash app
python -m ml_dash.app
# cd到代码主目录后 启动ml_dash 服务
python -m ml_dash.server .

出现的问题

# 出现问题
ImportError: cannot import name 'cli_parse' from 'params_proto' #63
# 解决办法更新ml_logger版本 
## !!! 注意会导致其他包不兼容 影响训练和测试等其他程序 最好是新建环境中升级
pip install -U ml-logger ml-dash params-proto jaynes

总结

本文通过walk-these-ways方法简单介绍了四足机器人sim to real的方法,并且分享了walk-these-ways安装和使用方法和分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

重生奇迹MU天空之城玩转攻略

现在依然有众多玩家喜欢重生奇迹MU 游戏,游戏设计非常完善,后续推出了重生奇迹MU 版本,在设计方面更加炫酷,各种游戏玩法以及模式,让众多玩家感受到不错的游戏体验。 游戏由很多的地图组成,重生奇迹MU 大陆…

【Redis】List列表相关的命令

目录 命令LPUSHLPUSHXLRANGERPUSHRPUSHXLPOPRPOPLINDEXLINSERTLLENblpop和brpop 命令 LPUSH 将⼀个或者多个元素从左侧放⼊(头插)到list中。 LPUSH key element [element ...]LPUSHX 在key存在时,将⼀个或者多个元素从左侧放⼊&#xff08…

【好文推荐】openGauss索引推荐功能测试

一、单索引推荐 单索引推荐功能,目前支持select查询,看官方介绍类似oracle中的sql_tunning_adviser,不过只是推荐创建索引。根据sql优化原理,猜测应该时根据选择来推荐索引。 1、查看sqlPanWeiDB# create table t2 as select * from pg_tab…

家政预约服务APP小程序搭建,功能支持定制

家政预约服务APP小程序搭建,功能支持定制,后期升级无忧.团队自主研发家政APP系统,正版源码,售后技术保障! 家政系统客户端 搭建专属私城流量平台,让您插上互联网的翅膀。找月嫂,育婴…

Docker镜像容器简单案例

我们安装完Docker之后就可以练习了. 镜像 案例1-拉取、查看镜像 1)首先去镜像仓库搜索nginx镜像,比如 : Docker Hub Container Image Library | App Containerization 搜索我们想要拉取的镜像 , 例如: nginx 复制命令: docker pull nginx …

性能测试之稳定性测试和并发压力测试的TPS计算

1、稳定性测试TPS计算 ①普通计算公式:TPS总请求数 / 总时间按照需求得到基础数据,在去年第20周,某平台有5万的浏览量那么总请求数我们可以估算为5万(1次浏览都至少对应1个请求)总请求数 50000请求数总时间&#xff1…

Spring Task简单说明

1.导入坐标 说明&#xff1a;自带有spring-context。 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.sdk.oss}</version> </dependency> 2. 启动类添加注解 pac…

ubuntu下查看realsense摄像头查看支持的分辨率和频率

引言&#xff1a; 在实际应用中&#xff0c;摄像头的频率如果过高&#xff0c;可能会造成系统图像处理的压力过大&#xff0c;因此需要选择合适的参数才能达到预期的效果。本文主要探讨设置realsense相关参数 1、打开终端&#xff0c;输入rs-enumerate-devices rs-enumerate-…

超市微信小程序是怎么做的

市微信小程序是利用微信小程序平台为超市或零售商提供线上销售服务的一种应用。通过小程序&#xff0c;超市可以向消费者提供更加便捷、快速、个性化的购物体验&#xff0c;从而提升销售业绩、增加客户满意度。以下是超市微信小程序可以实现的一些主要功能。 一、商品展示与搜索…

现货黄金指标之王是什么

很多现货黄金投资在日常看盘的交易的时候&#xff0c;都会借助各种各样的技术指标来辅助自己的分析&#xff0c;但其实好用的技术指标两三个就足够了。如果有那么一个指标&#xff0c;可以帮助投资者辨清趋势&#xff0c;把握行情走势的大局&#xff0c;一定会是大受市场欢迎。…

spring 事务源码阅读之实现原理

开启事务 使用EnableTransactionManagement注解开启事务 该注解会引入TransactionManagementConfigurationSelector类&#xff0c;然后该类导入两个类AutoProxyRegistrar和ProxyTransactionManagementConfiguration。 1、添加bean后置处理器 AutoProxyRegistrar类的作用是注…

数字IC前端学习笔记:数字乘法器的优化设计(基2布斯乘法器)

相关阅读 数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 ​​​​​​​在之前的文章中&#xff0c;进位保留乘法器、华莱士树乘法器、dadda树乘法器等方法都是优化了部分积累加这个过程。还有一些​​​​​​​方法能对…

再获深交所认可,Smartbi实力领跑金融BI赛道

“十四五”规划中提到&#xff0c;健全具有高度适应性、竞争力、普惠性的现代金融体系&#xff0c;构建有效支撑实体经济的体制机制。《证券期货业科技发展“十四五”规划》作为指导证券期货业科技发展的纲领性文件&#xff0c; 秉承国家“十四五”规划的数字化发展理念&#x…

在PCB走线中线不直,有小疙瘩,让走线变直的方法

在PCB走线中线不直,导线上有小疙瘩,那么如何去除呢? 在PCB走线的过程中,鼠标右击,点击Enhanced Pad Entry(增强焊盘入口)选项去勾。 Enhanced Pad Entry去勾后,然后再走线,走线就很直了。 如下图所示。 博主专注职场硬件设计,如果文章对你有帮助,请关注,点赞,收藏…

clickhouse之readonly解决方法

1&#xff0c;问题描述 日志报错写入ck报错&#xff1a;ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: 192.16.1.19, port: 8123; Code: 242. DB::Exception: Table is in readonly mode: replica_path/clickhouse/tables…

8+肿瘤+多组机器学习+分型。

今天给同学们分享一篇肿瘤多组机器学习分型的生信文章“Integrated multiomics analysis and machine learning refine molecular subtypes and prognosis for muscle-invasive urothelial cancer”&#xff0c;这篇文章于2023年6月5日发表在Mol Ther Nucleic Acids期刊上&…

全志R128芯片应用开发案例——按键输入

按键输入 本文案例代码下载地址按键输入案例代码https://www.aw-ol.com/downloads?cat24 首先我们搭建电路&#xff0c;如下&#xff1a; 引脚按键PA25按键1脚GND按键3脚 载入方案 我们使用的开发板是 R128-Devkit&#xff0c;需要开发 C906 核心的应用程序&#xff0c;所…

金融行业蓄电池监控,究竟有多厉害!

金融行业是现代社会的重要组成部分&#xff0c;金融机构依赖于高度可靠的电力系统来支持其日常运营。随着金融交易日益数字化和自动化&#xff0c;电力中断或失效可能导致严重的财务损失和风险。 因此&#xff0c;金融行业对电力供应的可靠性要求极高&#xff0c;而蓄电池监控正…

Vue3+vite 添加router后的2个坑

废话不多说&#xff0c;发现问题并解决问题 第 1 个坑&#xff1a;关于 …/ router 报红 正常引入页面路由&#xff0c;页面也显示出来了&#xff0c;路径也是正确的&#xff0c;但是却报红了。 原因是&#xff1a;当前路径正则有问题 解决方案&#xff1a; 在 src 文件下 v…

品牌的学习

2023年快消时尚品牌排行榜 时尚快消品牌推荐|除了Zara还有这么多好品牌在向你招手呢&#xff01; - 知乎 (zhihu.com) 2019年快消时尚品牌排行榜 (72 封私信 / 81 条消息) 如何评价UR这个品牌的衣服&#xff1f; - 知乎 (zhihu.com)