文章目录

  • 安装
  • 第一个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开荒笔记相关推荐

  1. 论文笔记(二十二):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 ...

  2. 《中国通史》纪录片100集笔记(持更)

    注:本人是从看了殷商兴亡开始才有做笔记的打算,然鹅前面六集忘光光了,强迫症使我想要整齐的笔记,故前六集借鉴了豆瓣上的一个笔记,第七集开始自己写,豆瓣只到十一集,十一集后纯原创 https://movi ...

  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 使 ...

  4. 论文笔记(十七):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 使 ...

  5. 【读书笔记】知易行难,多实践

    前言: 其实,我不喜欢看书,只是喜欢找答案,想通过专业的解答来解决我生活的困惑.所以,我听了很多书,也看了很多书,但看完书,没有很多的实践,导致我并不很深入在很多时候. 分享读书笔记: <高效1 ...

  6. 【运维学习笔记】生命不息,搞事开始。。。

    001生命不息,搞事不止!!! 这段时间和hexesdesu搞了很多事情! 之前是机械硬盘和固态硬盘的测速,我就在那默默的看着他一个硬盘一个机械测来测去. 坐在他后面,每天都能看到这位萌萌的小男孩,各 ...

  7. SSAN 关系抽取 论文笔记

    20210621 https://zhuanlan.zhihu.com/p/353183322 [KG笔记]八.文档级(Document Level)关系抽取任务 共指id嵌入一样 但是实体嵌入的时候 ...

  8. pandas以前笔记

    # -*- coding: utf-8 -*- """ Created on Sat Jul 21 20:06:20 2018@author: heimi "& ...

  9. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

最新文章

  1. 粉丝该从哪里来?搞定这8种吸粉渠道
  2. html5 去掉 li的样式,css li 去掉点的样式写法
  3. java 正则 实例_Java正则表达式实例详解
  4. 阿里给所有卖家发福利:全球首个人工智能中文字库免费用
  5. 从资深遥控器在家工作的5个技巧
  6. matplotlib —— fill between
  7. ubuntu下c 调用java_ubuntu下使用JNI Java调用C++的例子
  8. code collection 0.44版 发布
  9. element-ui 固定弹窗底部的按钮
  10. 通过编译TPC-DS生成测试数据并发送到benchmark进行查询测试
  11. 【Android 逆向】Android 逆向通用工具开发 ( PC 端工具 hacktool 启动 main 函数分析 | hacktool 工程中的核心类 HackCommand 分析 )
  12. JavaScript获取汉字的区位码
  13. 快速理清Paxos、Zab、Raft协议
  14. 忙于事业疏于情感老婆网上找情人
  15. Arduino 实时时钟DS1302模块
  16. 三维场景中创建镜面反射效果(three.js实战9)
  17. 硬件加油站 | 传感器 - PIR 人体红外传感器
  18. Unity 3D中的内存管理与优化游戏运行性能的经验
  19. Android实现第三方登录并获取到头像、名字
  20. 北大青鸟的班主任好当吗_【北大青鸟班主任就业前景怎么样|做北大青鸟班主任有前途吗】-看准网...

热门文章

  1. 网页提交,点击浏览器返回按钮,网页出错
  2. 你为生存做些什么,我不关心
  3. canvas 绘制爱心标语I+爱心+china
  4. ubuntu 20.04更换国内源
  5. Json web token (JWT) golang实现
  6. [竞技对战游戏]魔兽和星际的最大差别是什么?
  7. centos 下默认用户不是root,如何激活root用户
  8. 好压 自解压文件解压完成后创建桌面快捷方式并启动
  9. 工厂模式与抽象工厂模式小览(一)
  10. 送给女友超级炫酷的3D旋转动态图——Python及Matlab代码实现