PyBullet开荒笔记
文章目录
- 安装
- 第一个demo
- 查看机器人信息
- 我的知乎系列笔记
基于gazebo_ros的机器人开发不是很适合RL的研究,所以我看了看网上大致主流的几款机器人模拟的平台。一般来说,大家会在gym上来做RL的第一个实例,后来我查到opencv在gym的基础上,基于bullet物理引擎开发了一款机器人仿真平台:roboschool,但是我在他们的github主页上发现roboschool已经被丢弃了,失望之余,一个新的链接给了我希望,这也就是下面目前开始学习的PyBullet。
安装
首先最大的坑就是安装啦,这也是PyBullet的优点之一,不同于装到自闭,demo还跑不通的openai_ros或者其余的平台,PyBullet的安装很简单:
python3 -m pip install pybullet
我使用的平台是Ubuntu18,请根据自己平台安装pybullet。
然后PyBullet内部的一些demo需要额外下载,也就是pybullet的baselines模块,通过以下命令来下载:
git clone https://github.com/openai/baselines.git
cd baselines
pip3 install -e .
由于pybullet内部的一些开箱即用的RL算法是由tensorflow实现的,所以在运行pybullet内部现成的算法前,需要确保安装了tensorflow。
第一个demo
我们来构建第一个pybullet程序,召唤一个星球大战中的r2d2机器人:
#!/usr/bin/python3
import pybullet as p
import pybullet_data
from time import sleep# 链接物理引擎
p.connect(p.GUI)# 设置模型加载路径
datapath = pybullet_data.getDataPath()
p.setAdditionalSearchPath(datapath)# 加载模型
robot_id = p.loadURDF("r2d2.urdf", [0, 0, 0.5])# 在这停顿
sleep(1000)
out:
鼠标滚轮可以调整观察的远近,Ctrl+拖动鼠标可以调整观察位置
查看机器人信息
查看机器人的信息主要有getNumJoints()
和getJointInfo()
两个函数。
getNumJoints()
接受两个参数,其中第一个参数为机器人ID,第二个参数可选,一般不需要选,因为只有多平台开发时才用得到。该函数返回该ID机器人的关节数量。
getJointInfo()
接受三个参数,其中第三个参数和上面那个函数的第二个参数一样,有关平台,可以不填,前两个参数为需要查看的机器人的ID和需要查看的该机器人的关节序号。该函数返回一个tuple,该tuple的长度为17。具体含义可看下面的代码:
可以试着打印关于机器人的信息:
#!/usr/bin/python3
import pybullet as p
import pybullet_data
from time import sleep# 链接物理引擎
p.connect(p.GUI)# 设置模型加载路径
datapath = pybullet_data.getDataPath()
p.setAdditionalSearchPath(datapath)# 加载模型
robot_id = p.loadURDF("r2d2.urdf", [0, 0, 0.5])# 输出基本信息
joint_num = p.getNumJoints(robot_id)
print("r2d2的节点数量为:", joint_num)print("r2d2的信息:")
for joint_index in range(joint_num):info_tuple = p.getJointInfo(robot_id, joint_index)print(f"关节序号:{info_tuple[0]}\n\关节名称:{info_tuple[1]}\n\关节类型:{info_tuple[2]}\n\机器人第一个位置的变量索引:{info_tuple[3]}\n\机器人第一个速度的变量索引:{info_tuple[4]}\n\保留参数:{info_tuple[5]}\n\关节的阻尼大小:{info_tuple[6]}\n\关节的摩擦系数:{info_tuple[7]}\n\slider和revolute(hinge)类型的位移最小值:{info_tuple[8]}\n\slider和revolute(hinge)类型的位移最大值:{info_tuple[9]}\n\关节驱动的最大值:{info_tuple[10]}\n\关节的最大速度:{info_tuple[11]}\n\节点名称:{info_tuple[12]}\n\局部框架中的关节轴系:{info_tuple[13]}\n\父节点frame的关节位置:{info_tuple[14]}\n\父节点frame的关节方向:{info_tuple[15]}\n\父节点的索引,若是基座返回-1:{info_tuple[16]}\n\n")# 在这停顿
sleep(1000)
除去基本的环境连接与结束的信息外,打印信息如下:
r2d2的节点数量为: 15
r2d2的信息:
关节序号:0关节名称:b'base_to_right_leg'关节类型:4机器人第一个位置的变量索引:-1机器人第一个速度的变量索引:-1保留参数:0关节的阻尼大小:0.0关节的摩擦系数:0.0slider和revolute(hinge)类型的位移最小值:0.0slider和revolute(hinge)类型的位移最大值:-1.0关节驱动的最大值:0.0关节的最大速度:0.0节点名称:b'right_leg'局部框架中的关节轴系:(0.0, 0.0, 0.0)父节点frame的关节位置:(0.22, 0.0, 0.25)父节点frame的关节方向:(0.0, -0.7070904020014416, 0.0, 0.7071231599922604)父节点的索引,若是基座返回-1:-1关节序号:1关节名称:b'right_base_joint'关节类型:4机器人第一个位置的变量索引:-1机器人第一个速度的变量索引:-1保留参数:0关节的阻尼大小:0.0关节的摩擦系数:0.0slider和revolute(hinge)类型的位移最小值:0.0slider和revolute(hinge)类型的位移最大值:-1.0关节驱动的最大值:0.0关节的最大速度:0.0节点名称:b'right_base'局部框架中的关节轴系:(0.0, 0.0, 0.0)父节点frame的关节位置:(0.2999999996780742, 0.0, -1.3898038463944216e-05)父节点frame的关节方向:(0.0, 0.7070904020014416, 0.0, 0.7071231599922604)父节点的索引,若是基座返回-1:0关节序号:2关节名称:b'right_front_wheel_joint'关节类型:0机器人第一个位置的变量索引:7机器人第一个速度的变量索引:6保留参数:1关节的阻尼大小:0.0关节的摩擦系数:0.0slider和revolute(hinge)类型的位移最小值:0.0slider和revolute(hinge)类型的位移最大值:-1.0关节驱动的最大值:100.0关节的最大速度:100.0节点名称:b'right_front_wheel'局部框架中的关节轴系:(0.0, 0.0, 1.0)父节点frame的关节位置:(0.0, 0.133333333333, -0.085)父节点frame的关节方向:(0.0, -0.7070904020014416, 0.0, 0.7071231599922604)父节点的索引,若是基座返回-1:1关节序号:3关节名称:b'right_back_wheel_joint'关节类型:0机器人第一个位置的变量索引:8机器人第一个速度的变量索引:7保留参数:1关节的阻尼大小:0.0关节的摩擦系数:0.0slider和revolute(hinge)类型的位移最小值:0.0slider和revolute(hinge)类型的位移最大值:-1.0关节驱动的最大值:100.0关节的最大速度:100.0节点名称:b'right_back_wheel'局部框架中的关节轴系:(0.0, 0.0, 1.0)父节点frame的关节位置:(0.0, -0.133333333333, -0.085)父节点frame的关节方向:(0.0, -0.7070904020014416, 0.0, 0.7071231599922604)父节点的索引,若是基座返回-1:1......
我的知乎系列笔记
呼~,我在知乎上写了不少了,贴在这儿吧:
PyBullet笔记(一)pybullet及其依赖项的安装、pybullet初探
PyBullet笔记(二)从hello world开始的杂谈(引擎连接,URDF模型加载,查看信息)
PyBullet笔记(三)createMultiBody创建带有碰撞箱性质的模型对象
PyBullet笔记(四)机器人控制,相机追踪与状态记录
PyBullet笔记(五)碰撞检测与模拟激光探测
PyBullet笔记(六)Debug模块与GUI的正确食用姿势
PyBullet笔记(七)获取键盘事件和鼠标事件
PyBullet笔记(八)强化学习环境的引入与训练
PyBullet开荒笔记相关推荐
- 论文笔记(二十二):Soft Tracking Using Contacts for Cluttered Objects to Perform Blind Object Retrieval
Soft Tracking Using Contacts for Cluttered Objects to Perform Blind Object Retrieval 文章概括 摘要 1. 介绍 2 ...
- 《中国通史》纪录片100集笔记(持更)
注:本人是从看了殷商兴亡开始才有做笔记的打算,然鹅前面六集忘光光了,强迫症使我想要整齐的笔记,故前六集借鉴了豆瓣上的一个笔记,第七集开始自己写,豆瓣只到十一集,十一集后纯原创 https://movi ...
- 论文笔记(十七):Brax - A Differentiable Physics Engine for Large Scale Rigid Body Simulation
Brax - A Differentiable Physics Engine for Large Scale Rigid Body Simulation 文章概括 摘要 1 捐款摘要 2 动机 3 使 ...
- 论文笔记(十七):Brax — A Differentiable Physics Engine for Large Scale Rigid Body Simulation
Brax - A Differentiable Physics Engine for Large Scale Rigid Body Simulation 文章概括 摘要 1 捐款摘要 2 动机 3 使 ...
- 【读书笔记】知易行难,多实践
前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...
- 【运维学习笔记】生命不息,搞事开始。。。
001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...
- SSAN 关系抽取 论文笔记
20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...
- pandas以前笔记
# -*- coding: utf-8 -*- """ Created on Sat Jul 21 20:06:20 2018@author: heimi "& ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
最新文章
- 粉丝该从哪里来?搞定这8种吸粉渠道
- html5 去掉 li的样式,css li 去掉点的样式写法
- java 正则 实例_Java正则表达式实例详解
- 阿里给所有卖家发福利:全球首个人工智能中文字库免费用
- 从资深遥控器在家工作的5个技巧
- matplotlib —— fill between
- ubuntu下c 调用java_ubuntu下使用JNI Java调用C++的例子
- code collection 0.44版 发布
- element-ui 固定弹窗底部的按钮
- 通过编译TPC-DS生成测试数据并发送到benchmark进行查询测试
- 【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
- JavaScript获取汉字的区位码
- 快速理清Paxos、Zab、Raft协议
- 忙于事业疏于情感老婆网上找情人
- Arduino 实时时钟DS1302模块
- 三维场景中创建镜面反射效果(three.js实战9)
- 硬件加油站 | 传感器 - PIR 人体红外传感器
- Unity 3D中的内存管理与优化游戏运行性能的经验
- Android实现第三方登录并获取到头像、名字
- 北大青鸟的班主任好当吗_【北大青鸟班主任就业前景怎么样|做北大青鸟班主任有前途吗】-看准网...