强化学习机械臂

news2024/11/15 17:56:05

一.前言

        这里记录一下我学习强化学习的一些知识,并希望在今后可以通过仿真成功验证算法,如果时间允许的情况下希望可以结合到真实机械臂上。

二.学习过程

机械臂强化学习实战(stable baselines3+panda-gym)

这里我先用anaconda创建了一个虚拟环境rl

环境:Linux,Python 3.10.14。

安装stb3

Stable Baselines3(SB3)是一个建立在PyTorch之上的强化学习库,旨在提供清晰、简单且高效的强化学习算法实现。

以下是Stable Baselines3的一些主要特点:

  1. 算法实现: SB3将一些先进的强化学习算法进行了打包,用户可以直接使用这些预训练的模型而无需从头开始编写网络架构和训练过程。
  2. 易于使用: 通过SB3,用户只需要定义环境和算法,然后便可以优雅地完成训练和评估。例如,使用现成的RL算法和Gym环境,可以通过简单的一行代码进行训练。
  3. 支持多种输入: SB3为图像输入(CnnPolicies)、其他类型的输入特征(MlpPolicies)以及多个不同输入(MultiInputPolicies)提供了策略网络(policy networks)。
  4. 改进自OpenAI Baselines: SB3由OpenAI Baselines改进而来,它在主体结构上进行了重塑,并对代码进行了清理,使得算法结构更为统一。
  5. 适用于研究和开发: 对于希望在强化学习项目中轻松使用现代深度强化学习算法的研究人员和开发者来说,SB3是一个极为有用的工具。

综上所述,Stable Baselines3是一个强大的强化学习库,它简化了强化学习项目的实现过程,并有助于推广强化学习技术的应用和发展。

安装完成后运行如下代码,可检查是否正常:

通过比较不同迭代轮数的统计数据,我们可以分析模型训练过程中的变化情况。以下是对给定数据的具体分析:

1. **平均回合长度(`ep_len_mean`)和平均奖励值(`ep_rew_mean`):**
   - 在第一轮迭代中,平均回合长度为26,平均奖励值为26。
   - 第二轮迭代时,这两个值分别增加到了37.1。
   - 第三轮迭代时,平均回合长度和平均奖励值再次增加,达到了48.9。
   - 第四轮迭代时,这两个值进一步增加到了63.5。

   这表明随着训练的进行,智能体在每个回合中生存的时间变长,获得的奖励也相应增加,这可能是由于智能体学习到了更好的策略。

2. **时间统计(`time_elapsed` 和 `fps`):**
   - 每秒帧数(`fps`)在所有迭代中保持不变,为45。
   - 随着迭代次数的增加,`time_elapsed` 也在逐渐增加,从89秒到179秒再到223秒。

   这意味着随着训练的进行,每个迭代所需的时间在增加,这可能是因为随着智能体策略的改进,每个时间步的决策变得更加复杂。

3. **训练统计(`loss`, `policy_gradient_loss`, `value_loss`):**
   - `loss` 从第一轮的8.17增加到第四轮的32.7,这表明随着训练的进行,总损失在增加。
   - `policy_gradient_loss` 从-0.0122变化到-0.0195,表明策略梯度损失略有增加,但变化不大。
   - `value_loss` 从47.6显著增加到62.7,表明价值损失有较大的增长。

   损失的增加可能是由于智能体在探索更复杂的策略,或者是因为智能体开始过拟合训练数据。

4. **其他统计信息(`approx_kl`, `clip_fraction`, `entropy_loss`, `explained_variance`, `learning_rate`):**
   - `approx_kl` 从0.008182803逐渐增加到0.010889582,这表明随着训练的进行,策略之间的KL散度有所增加,但整体上仍然较小,说明策略更新相对稳定。
   - `clip_fraction` 从0.0751逐渐减少到0.0545,然后又增加到0.0867,最后又略微减少到0.0867。这表明梯度裁剪的比例有所波动,但整体上保持在合理范围内。
   - `entropy_loss` 从-0.687变化到-0.604,表明熵损失(即随机性的惩罚)有所减少,这可能是智能体策略变得更加确定的信号。
   - `explained_variance` 从0.000582增加到0.305,这表明价值函数对状态价值的预测能力有所提高。
   - `learning_rate` 在所有迭代中保持恒定,为0.0003,这表明学习率没有变化。

总结来说,随着训练的进行,智能体的性能似乎有所提高,表现为平均回合长度和平均奖励值的增加。然而,总损失和价值损失的增加可能表明智能体在训练过程中遇到了一些挑战,可能需要进一步调整训练策略或增加训练时间以改善性能。

安装panda-gym

panda-gym 基于 PyBullet 引擎开发,围绕 panda 机械臂封装了 reach、push、slide、pick&place、stack、flip 等 6 个任务,主要也是受 OpenAI Fetch 启发,发表在了 NeurIPS 2021 的 workshop 上。

测试panda-gym是否安装成功

这段代码是使用gymnasium库和panda_gym库创建一个名为PandaPush-v3的环境,并使用随机动作进行1000次迭代。在每次迭代中,从环境的动作空间中随机选择一个动作,并将该动作传递给环境的step方法。如果环境终止或截断,则重置环境。最后关闭环境。

开始训练

以 PandaReach-v3任务为例,训练 DDPG/TD3/SAC/HER 算法,方便做横向对比。

reach 任务比较简单,要求机械臂到达指定位置,误差在一定范围之内即代表成功,默认采用稀疏奖励。

运行上面代码后会生成以下目录

查看训练过程

安装一下tensorboard帮助我们之后看训练过程

TensorBoard是TensorFlow的官方数据可视化工具套件。

它的主要目的是提供一个直观的界面,用于监控、调试和优化TensorFlow程序。以下是TensorBoard的几个关键功能:

1. **模型架构可视化**:通过TensorBoard可以清晰地展示神经网络的结构和各层之间的连接情况。
2. **跟踪训练指标**:它能记录关键的性能指标,如损失(loss)和准确率(accuracy),并在训练过程中实时更新这些数据。
3. **张量分布与直方图**:TensorBoard能展示张量的分布情况,以直方图的形式呈现,帮助用户理解权重、偏差等变量在训练过程中的变化。
4. **高维数据投影**:对于高维数据,TensorBoard可以将它们映射到低维空间以便更直观地查看和分析。
5. **非表格数据展示**:TensorBoard还支持图像、文本和音频等非表格数据的显示,这对于处理复杂数据非常有帮助。

此外,TensorBoard的使用通常包括启动一个本地服务器,监听指定的端口(默认为6006),并通过网页浏览器访问该端口来查看可视化结果。

综上所述,TensorBoard是一个强大的工具,它不仅可以帮助研究人员和开发人员更好地理解他们的模型和数据,还可以提高机器学习工作流程的效率和透明度。

运行完毕后,终端输入命令

在浏览器打开链接

查看训练出的模型的真实效果

逐步搭建机器人(机械臂)强化学习环境 Pybullet + Gym + Stable Baselines3

机械臂强化学习抓取

目录结构

 

测试代码Fr5_test.py

这段代码是一个使用Stable Baselines 3库训练和测试强化学习模型的示例。

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

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

相关文章

【原创教程】电气电工常用剥线钳和压线钳(入门篇)

今天我们来看一下电气电工经常会用到的工具,剥线钳和压线钳。 首先我们看剥线钳做什么用?主要就是剥线,让内部的铜丝裸露。我们来看一下,我们经常用到的剥线钳。 1、带刃口剥线钳 2、自动剥线钳 3、鸭嘴剥线钳 下面看压嘴剥线钳…

Nodejs的使用

1.安装nodejs服务器。 java 项目可以运行在 tomcat 服务器,开始完成前后端完全分离。前端有自己独立的工程。我们需 要把前端独立的工程运行起来。 --- 运行在 nodejs 服务器下。 理解为 tomcat 服务器 安装成功后在命令窗口查看 1.1 安装npm java 项目需要依赖…

finalshell连接kali-Linux失败问题略谈

如果你正在使用fianlshell或者xshell等终端软件远程连接Linux进行工作,但是突然有一天,你死活连不上了,报错提示如下: java.net.ConnectException: Connection refused: connect 就像这样: 哪怕是重装虚拟机&#xff0…

HardSignin _ 入土为安的第十二天

有壳 55 50 58 用010 把vmp改成upx ctrlf2,查找main函数 点第三个 Ctrlx交叉引用 把花指令改了90 一共三处 找db按c 找函数按p封装,按f5反编译函数 smc 用pythonida绕一下 from ida_bytes import * addr 0x00401890 for i in range(170):patch_byte(addr i,…

排序算法----冒泡,插入,希尔,选择排序

冒泡排序 原理 冒泡排序实际上是交换排序,将大的数据通过交换的方式排到一边,依次进行 代码实现 void Swap(int* p1, int* p2) {int temp *p1;*p1 *p2;*p2 temp; }void BullerSort(int* a, int n) {for (int end n - 1; end > 0; end--){for …

卷积神经网络理论(CNN)·基于tensorflow实现

传统神经网络的输入是一维的数据(比如28*28的图片,需要转化为一维向量)。 而卷积神经网络的输入是一个三维的(比如RGB)。 结构 卷积神经网络有以下结构: 输入层卷积层池化层全连接层 输入层 顾名思义,输入层就是输入数据(可以是图片等数…

仅缺一位作者,年内书号

《工程测量学概论》缺第三 《风景园林设计与施工技术研究》缺第二 《对外汉语教学方法与实践研究》缺第三 《基于视觉传达设计下的民间艺术发展研究》缺第三 《英语教学基础与翻译技巧》缺第三 《博物馆学体系与博物馆探究学习》缺第三 《新时期高校辅导员工作与队伍建设研究》…

迈向数智金融:机器学习金融科技新纪元的新风采

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

怎么通过 ssh 访问远程设备

文章目录 什么是 SSH背景环境配置前置准备在 linux 系统中安装 ssh 组件 什么是 SSH ssh 全称是 Secure Shell, 有时候也被叫做 Secure Socket Shell, 这个协议使你能通过命令行的方式安全的连接到远端计算机。当连接建立就会启动一个 shell 会话,这时你就能在你的…

Kubernetes中间件监控指标解读

监控易是一款功能强大的IT监控软件,能够实时监控和分析各种IT资源和应用的状态,为企业提供全面而深入的监控服务。在Kubernetes中间件监控方面,监控易提供了详尽的监控指标,帮助用户全面了解Kubernetes集群的运行状态和性能表现。…

一键PDF翻译成中文,划重点轻松get

现在信息多得跟海一样,PDF文件里全是宝贵的资料和文章。但是,看着满屏幕的外国字,你是不是也头疼过?别发愁,今天咱们就来好好聊聊pdf翻译成中文的工具,帮你轻松搞定语言障碍,一点按钮&#xff0…

电测量数据交换DLMS∕COSEM组件第61部分:对象标识系统(OBIS)(上)

1.范围 GB/T 17215.6的本部分规定了对象标识系统(OBIS)的总体结构并将测量设备中的所有常用数据项映射到其标识代码。 OBIS为测量设备中的所有数据都提供唯一的标识符,不仅包括测量值,而且还包括仪表设备的配置或获取测量设备运行状态的抽象数据。本部分定义的ID代码用作标…

论文解析——CRNN算法

论文paper地址:An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition 本文的主要目的是识别图片中的序列文字的识别。CRNN的主要贡献在于提出了一个网络架构,这种架构具有以下…

基于飞腾平台的Kafka移植与安装

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

java基础 之 集合与栈的使用(一)

文章目录 集合特点(从整体性来看)区别List接口(一)实现类:ArrayList(二)实现类:LinkedList 集合 java集合可分为Set、List、Queue和Map四种体系。其中List、Set、Queue均继承自Coll…

ADC静态误差

0 前言 图1 表示测量数据精密度高,但准确度较差;图2 表示测量数据的准确度高,但精密度差;图3 表示测量数据精密度和准确度都好,即精确度高。 1 简介 模数转换器(ADC)广泛用于各种应用中&…

Spring Cloud开发实战(一)- 搭建一个Eureka+Feign+LoadBalancer 项目

Spring Cloud开发实战(一)- 搭建一个EurekaFeignLoadBalancer 项目 文章目录 Spring Cloud开发实战(一)- 搭建一个EurekaFeignLoadBalancer 项目0.内容简介1.Eureka服务注册与发现1.1.什么是服务注册与发现1.2.Eureka注册中心1.2.…

Android 系统与SDK和JDK版本对照表

Android 系统与SDK和JDK版本对照表 传说中的兼容问题是指在高版本 SDK 平台开发的软件,可能在低版本 Android 系统中运行时出现各种问题。而低版本 SDK 开发的软件在高版本 Android 系统中运行时基本没有兼容问题的。 Android版本SDK/API版本JDK版本备注Android 14…

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…

unplugin-vue-components 插件配置 忽略 部分目录下的组件自动导入

背景 vue3 项目 为了省略 第三方库ui 组件 全局组件的注册代码,使用了 unplugin-vue-components 插件 原理 组件识别 在编译阶段,unplugin-vue-components 会扫描 Vue 单文件组件(.vue 文件)的模板部分,识别出所有使…