强化学习入门——Pybullet初体验

news2024/11/17 11:54:22

Pybullet

最近一直在想如何进行RL的学习,在学习RL的过程中,好的模拟仿真平台是非常重要的。除了Gym,还了解到Pybullet模块可以简便快捷地创建仿真环境,所以学习一下。

1.简介

PyBullet 是一个用于机器人学、游戏开发和图形研究的开源物理仿真库。它是基于 Bullet Physics SDK,这是一个成熟的、广泛使用的开源物理引擎。
PyBullet 提供了 Python 接口,使得开发者能够利用 Bullet 强大的物理仿真能力,同时享受 Python 的易用性。

官方文档介绍:
PyBullet 是一个快速、易用的 Python 模块,用于机器人仿真和机器学习,重点是仿真到真实的传输。 使用 PyBullet,您可以从 URDF、SDF、MJCF 和其他文件格式加载铰接体。 PyBullet 提供正向动力学仿真、逆向动力学计算、正向和逆向运动学、碰撞检测和射线交汇查询。 Bullet 物理 SDK 包含 PyBullet 机器人示例,如模拟 Minitaur 四足动物、使用 TensorFlow 推理运行的人形机器人和抓取物体的 KUKA 机械臂。 还原坐标多体、刚体和变形体由统一的 LCP 约束求解器处理,类似于本论文中的Articulated Islands Algorithm,它使用Articulated Body Algorithm进行线性时间前向动力学和求解器 A 矩阵的创建。
除物理模拟外,PyBullet 还绑定了渲染功能,包括 CPU 渲染器(TinyRenderer)、OpenGL 3.x 渲染和可视化,以及对 HTC Vive 和 Oculus Rift 等虚拟现实头显的支持。 PyBullet 还具有执行碰撞检测查询(最近点、重叠对、光线交叉测试等)和添加调试渲染(调试线和文本)的功能。 PyBullet 内置跨平台客户端-服务器,支持共享内存、UDP 和 TCP 网络。 因此,您可以在连接 Windows VR 服务器的 Linux 上运行 PyBullet。

官方网站:https://pybullet.org/wordpress/
官方文档:https://docs.google.com/document/d/10sXEhzFRSnvFcl3XxNGhnD4N2SedqwdAvK3dsihxVUA/edit?pli=1
GitHub:https://github.com/bulletphysics/bullet3

2.特点

多体动力学仿真: PyBullet 能够精确模拟多体系统的动态行为,包括刚体和软体动力学。
机器人学支持: 它支持加载 URDF(统一机器人描述格式)文件,这是一种在机器人学中广泛使用的标准格式。
逆向动力学和运动规划: PyBullet 提供了逆向动力学求解器和运动规划算法,这对于机器人的路径规划至关重要。
渲染和可视化: 它包括一个简单的直接渲染器,也可以通过 VR 接口进行更高级的渲染。
强化学习环境: PyBullet 与 OpenAI Gym 兼容,为强化学习提供了标准化的环境和接口。
跨平台: 它可以在 Windows、Linux 和 macOS 上运行。

优点:
开源: 作为一个开源工具,PyBullet 有一个庞大的社区,不断有新的改进和功能添加。
性能: 对于复杂的仿真任务,PyBullet 提供了良好的性能和实时仿真能力。
易于学习: Python 接口简化了与物理引擎的交互,使得非专家也能轻松上手。
多功能性: 可以用于研究、教育和商业项目,覆盖了从基本物理仿真到高级机器人学习的各种需求。

缺点:
文档: 尽管社区支持广泛,但某些特定功能的文档可能不够详尽,新用户可能需要一段时间来熟悉。
资源消耗: 对于非常大型或复杂的仿真,PyBullet 可能需要较多的计算资源。
渲染限制: 内置的直接渲染器功能有限,对于需要高级图形的应用,可能需要额外的渲染工具。

3.安装

pip3 install pybullet

4.Pybullet初体验

import pybullet as p
import time
import pybullet_data
physicsClient = p.connect(p.GUI)#or p.DIRECT for non-graphical version
p.setAdditionalSearchPath(pybullet_data.getDataPath()) #optionally
p.setGravity(0,0,-10)
planeId = p.loadURDF("plane.urdf")
startPos = [0,0,1]
startOrientation = p.getQuaternionFromEuler([0,0,0])
boxId = p.loadURDF("r2d2.urdf",startPos, startOrientation)
#set the center of mass frame (loadURDF sets base link frame) startPos/Ornp.resetBasePositionAndOrientation(boxId, startPos, startOrientation)
for i in range (10000):
    p.stepSimulation()
    time.sleep(1./240.)
cubePos, cubeOrn = p.getBasePositionAndOrientation(boxId)
print(cubePos,cubeOrn)
p.disconnect()

在这里插入图片描述

接下来我们将仿真一个物理世界,并在世界中放置两个球体,模拟两个球体碰撞。

import pybullet as p
import pybullet_data
import time

# 启动仿真引擎的GUI
p.connect(p.GUI)

# 设置重力加速度
p.setGravity(0, 0, -9.81)

# 加载URDF模型路径
p.setAdditionalSearchPath(pybullet_data.getDataPath())

# 加载平面模型作为地面
planeId = p.loadURDF("plane.urdf")

# 设置两个球体的初始位置
ball1StartPos = [-1, 0, 0.5]
ball2StartPos = [1, 0, 0.5]

# 加载第一个球体模型
ball1Id = p.loadURDF("sphere2.urdf", ball1StartPos)

# 加载第二个球体模型
ball2Id = p.loadURDF("sphere2.urdf", ball2StartPos)

# 设置初始速度,使两个球体朝对方运动
p.resetBaseVelocity(ball1Id, linearVelocity=[5, 0, 0])
p.resetBaseVelocity(ball2Id, linearVelocity=[-5, 0, 0])

# 设置模拟循环和时间步长
timeStep = 1./100.
p.setTimeStep(timeStep)

# 模拟循环,持续一定时间
for i in range(500):
    p.stepSimulation()
    time.sleep(timeStep)

# 断开与仿真引擎的连接
p.disconnect()

在这里插入图片描述

此段程序引用自:

PyBullet 四足机器人仿真入门(1)

如果你出现以下报错则按图片下方的方法解决:
在这里插入图片描述

要解决这个问题,可以降低numpy版本

pip install numpy==1.26.4

当然,Pybullet也有一些自带的示例:

python3 -m pybullet_envs.examples.enjoy_TF_AntBulletEnv_v0_2017may

python3 -m pybullet_envs.examples.enjoy_TF_HumanoidFlagrunHarderBulletEnv_v1_2017jul

python3 -m pybullet_envs.deep_mimic.testrl --arg_file run_humanoid3d_backflip_args.txt

python -m pybullet_robots.panda.loadpanda

5.Pybullet关键函数

import pybullet as p

5.1 connect()建立连接

这个函数用于连接到 PyBullet 仿真引擎。可以将一个GUI参数传入此函数,p.GUI 参数告诉 PyBullet 使用带有图形用户界面的模式,返回一个数字代表服务器的ID。还有其他模式比如 p.DIRECT,它运行仿真但不会打开GUI窗口,常用于后台运行或测试。

导入 PyBullet 模块后,要做的第一件事就是 "connect "到物理仿真。 PyBullet 是围绕客户端-服务器端驱动的 API 设计的,客户端发送命令,物理服务器返回状态。 PyBullet 内置了一些物理服务器: DIRECTGUI。 GUI 和 DIRECT 连接将在与 PyBullet 相同的进程中执行物理模拟和渲染。
请注意,在 DIRECT 模式下,您无法访问 OpenGL 和 VR 硬件功能,如 "虚拟现实 "和 "调试图形用户界面、线条、文本、参数 "章节所述。 直接模式允许通过 "getCameraImage "API 使用内置软件渲染器渲染图像。 这对于在没有 GPU 的服务器上运行云模拟非常有用。
你可以提供自己的数据文件,也可以使用 PyBullet 附带的 PyBullet_data 包。 为此,请导入 pybullet_data,并使用 p.setAdditionalSearchPath(pybullet_data.getDataPath()) 注册目录。

5.2 disconnect()断开连接

此函数的目的是断开当前的 PyBullet 会话,关闭 GUI 窗口。这是在仿真结束时进行清理所必须的。可以通过传入参数关闭指定的物理服务器,默认参数为0,也就是创建的第一个物理服务器的ID.

5.3 setGravity()设置重力

默认情况下,没有启用重力。 setGravity 可以设置所有对象的默认重力。
setGravity 的输入参数为: (无返回值)

requiredgraXfloatgravity force along the X world axis
requiredgravYfloatgravity force along the Y world axis
requiredgravZfloatgravity force along the Z world axis
optionalphysicsClientIdintif you connect to multiple physics servers, you can pick which one.

5.4 loadURDF, loadSDF, loadMJCF加载各种格式的模型文件

如函数loadURDF(),用于加载URDF文件。loadURDF 会向物理服务器发送命令,从通用机器人描述文件(URDF)中加载物理模型。 ROS 项目(机器人操作系统)使用 URDF 文件来描述机器人和其他对象,该文件由 WillowGarage 和开源机器人基金会(OSRF)创建。 许多机器人都有公开的 URDF 文件,您可以在这里找到相关说明和教程: http://wiki.ros.org/urdf/Tutorials
重要提示:大多数关节(滑块、外旋式、连续式)都默认启用了电机,以防止自由运动。 这类似于带有高摩擦谐波驱动的机器人关节。 您应使用 p.setJointMotorControl2 设置关节电机控制模式和目标设置。 更多信息请参见 setJointMotorControl2 API。
警告:默认情况下,PyBullet 会缓存一些文件以加快加载速度。 您可以使用 setPhysicsEngineParameter(enableFileCaching=0) 来禁用文件缓存。

5.5 stepSimulation()一步仿真

进行一步物理仿真迭代。在循环中调用,以连续模拟物理环境的变化。

for i in range(500):
    p.stepSimulation()

在循环中调用 p.stepSimulation() 使得仿真逐步前进,每次调用对应一个时间步长。

stepSimulation 将在一个正演动力学仿真步骤中执行所有操作,如碰撞检测、约束求解和积分。 默认的时间步长为 1/240 秒,可以使用 setTimeStepsetPhysicsEngineParameter API 进行更改。

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

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

相关文章

mycat读写分离中间件

5、部署Mycat读写分离中间件服务 5.1安装Mycat服务 将Mycat服务的二进制软件包Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz上传到Mycat虚拟机的/root目录下,并将软件包解压到/use/local目录中 5.2赋予解压后的mycat目录权限 5.3向/etc/profile系统变量…

PyQt5与Html的关于地图位置显示的动态交互

PyQt5与Html的关于地图位置显示的动态交互 1 前言2 python部分3 HTML代码4 注意总结 1 前言 上篇本是放弃关于Folium的动态显示,但是在仔细对比Folium在python的直接应用与Html中的写法,其实两者没有什么区别,都是基于Leaflet上建立区域&…

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究

[大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究 目录 文章目录 [大语言模型-论文精读] 词性对抗性攻击:文本到图像生成的实证研究目录文章研究背景 文章标题摘要1 引言2 相关工作3 数据集创建3.1 数据收集3.2 目标提示生成3.3 数据集注…

[ACS_C]:以 H2和 O2等离子体处理的 Al2O3为载体的 Pt 催化剂用于液态有机氢载体对二苄基甲苯和全氢二苄基甲苯的加氢和脱氢

摘要:二苄基甲苯 (DBT) 是一种很有前途的液态有机氢载体 (LOHC),理论储氢量为 6.2 wt%,可与可再生能源发电系统耦合。本工作采用一种方便、环保的等离子体处理方法改性氧化铝表面羟基和表面氧空位 (SOV)。通过浸渍处理后的氧化铝制备了不同的…

如何修复变砖的手机并恢复丢失的数据

您可能之前听说过“变砖”,但您知道什么是变砖手机吗?正如许多论坛中经常提出的问题一样,我如何知道我的手机是否变砖了?好吧,手机变砖主要有两种类型,即软件变砖和硬变砖。软变砖手机意味着重启后您仍然可…

MATLAB guide选择图片和全局变量使用

文章目录 前言一、按键选取文件二、全局化变量使用全局华使用 总结 前言 提示:这里可以添加本文要记录的大概内容: 项目需要: 提示:以下是本篇文章正文内容,下面案例可供参考 一、按键选取文件 [filename,pathname]…

想要编辑 PDF 文件?使用这 10 种最佳 PDF 编辑工具

您是否遇到过利益干系人要求您对 PDF 文件进行细微更改的情况? 通常我们会这样做! 但是,对你来说,做出要求的改变有多难呢? 好吧,当您没有用于创建 PDF 文件的源文件时,问题就来了。是的&…

如何选购适合自己的内衣洗衣机?五款热门卓越型号测评推荐

相信不少小伙伴都跟我一样,一方面,认为内裤、袜子与大件的上衣、裤子放一块清洗,会感觉很不卫生,而且穿在身上也不安心。但是另一方面,本身又很懒惰,也不想自己用手洗,不但经常会遗漏一些污渍&a…

探索 DaPy:Python 中的 AI 数据处理新贵

文章目录 探索 DaPy:Python 中的 AI 数据处理新贵背景介绍DaPy 是什么?如何安装 DaPy?DaPy 的简单函数使用方法加载数据数据筛选数据聚合数据可视化自定义函数 DaPy 在实际场景中的应用数据预处理数据分析数据处理与集成 常见 Bug 及解决方案…

蓝牙资讯|2024可穿戴市场的手表将出现下滑,耳机和戒指将增长

市场调查机构 IDC 发布博文,预测 2024 年全球可穿戴设备出货量达到 5.379 亿台,同比增长 6.1%。IDC 预计新兴市场的进一步普及和成熟市场的更新周期的开始将推动听力设备的发展,因为消费者希望更换大流行病时期购买的产品。 IDC 预估 2024 …

VS2017安装Installer Projects制作Setup包

下载安装扩展包 VS2017默认未安装Installer Projects Package,需要联机下载: 也可网页上下载离线InstallerProjects.vsix文件: https://visualstudioclient.gallerycdn.vsassets.io/extensions/visualstudioclient/microsoftvisualstudio20…

Spring Boot 进阶-Spring Boot 如何实现自定义的过滤器详解

在上一篇文章中我们讲解了关于拦截器的相关内容,并且通过一个防抖的例子来讲解了拦截器在实际开发中的使用。这篇文章我们为大家带来的就是关于过滤器的相关内容的分享。下面我们首先来介绍一下什么是过滤器。 什么是过滤器? 过滤器Filter,是Servlet技术中最常用的技术,开…

K8S精进之路-控制器DaemonSet -(3)

介绍 DaemonSet就是让一个节点上只能运行一个Daemonset Pod应用,每个节点就只有一个。比如最常用的网络组件,存储插件,日志插件,监控插件就是这种类型的pod.如果集群中有新的节点加入,DaemonSet也会在新的节点创建出来…

【Router】路由功能之DMZ(Demilitarized Zone)功能介绍及实现

DMZ(Demilitarized Zone) DMZ(非军事化区域)是一个位于内部网络和外部网络之间的分段区域。在一个网络中,DMZ通常包含运行公共服务的服务器或其他设备。 DMZ是一个位于内部网络和外部网络之间的分段区域,用…

wpa_cli支持EAP-TLS认证运行设计

wpa_cli支持EAP-TLS认证运行设计 1 输入 1.1启动wpa_supplicant 和 wpa_cli 在OpenHarmony开发板或华为开发机的命令行中输入 wpa_supplicant -Dnl80211 -c/data/service/el1/public/wifi/wpa_supplicant/wpa_supplicant.conf -gabstract:/data/service/el1/public/wifi/sock…

【笔记】Java 栈 java.util.Stack

目标:了解Java编程语言里栈和队列是什么样的。 概念 在Java中,Stack 类表示一个后进先出(LIFO,Last-In-First-Out)的对象栈。它继承自 Vector 类,并提供了五个操作,允许将向量(Vector)视为栈来处理。这些操作包括常用的: 压栈(push)出栈(pop)操作用于查看栈顶元…

物理加密机的高性能操作

物理加密机,也被称为硬件安全模块(HSM)或加密锁,是一种用于保护敏感数据和软件应用的物理设备。以下是关于物理加密机的详细介绍: 一、定义与功能 物理加密机通过提供强大的加密功能和访问控制,确保数据在存储、处理和传输过程中的…

GIS--为研究区准备数据

一、实验目的 掌握空间数据的分幅组织方法,掌握常用的空间数据处理技术 二、实验内容 计算图幅号;空间配准、投影定义、投影转换;拼接、裁切,获取研究区内的土地利用数据 三、实验原理与方法 实验原理:空间数据组…

【火狐浏览器 - 数据同步】使用Mozilla账户登录

不要使用火狐通行证 解决方法 在国内下载 开发版本的firefox, 即可数据同步 https://www.mozilla.org/zh-CN/firefox/all/ 登录成功 其他 如果还不同步, 试下这个插件 http://mozilla.com.cn/thread-343905-1-1.html

可控硅光耦——工业自动化智能转型的护航先锋

随着工业自动化程度的持续深化,对安全性、可靠性和智能化水平的要求愈发严苛。在这一浪潮中,可控硅光耦凭借其卓越性能,正逐渐成为工业自动化领域的核心驱动力。本文将深入探讨可控硅光耦在工业自动化智能转型中的创新应用与价值。 提升生产…