pyBullet学习笔记(2)Hello pybullet_pybullet模型从天上掉下来_观棋Orz的博客-程序员宅基地

技术标签: python  机器学习  pyBullet学习笔记  

系列文章目录

上篇:pyBullet学习笔记(1)环境搭建

前言

pybullet网上可查到的资料并不多,大多都是对官方文档的机械翻译。
pybullet官方文档

官方文档对于新手是挺不友好的,文档本身更像是函数说明。其中有对于每个函数用法的参考例子,但是例子本身并不成系统,各个知识点的嵌套十分复杂,很难帮助理解。另外这份文档的另一个不足是对于函数用法的说明不够具体,有些参数只是说了一下干什么,没有具体解释意义,在使用的过程中难免就会一头雾水。

由上面两点,我个人觉得文档本身只能作为学习过程中的工具书,学习的主体在于安装pybullet时候的官方examples,在看examples的过程中,对函数不理解时,在文档中搜索查询解释。

pyBullet官方examples

那么,下面就从hello_pybullet.py开始学习。

一、hello_pybullet.py

hello_pybullet.py

import pybullet as p
from time import sleep
import pybullet_data

physicsClient = p.connect(p.GUI)

p.setAdditionalSearchPath(pybullet_data.getDataPath())

p.setGravity(0, 0, -10)
planeId = p.loadURDF("plane.urdf")
cubeStartPos = [0, 0, 1]
cubeStartOrientation = p.getQuaternionFromEuler([0, 0, 0])
boxId = p.loadURDF("r2d2.urdf", cubeStartPos, cubeStartOrientation)
cubePos, cubeOrn = p.getBasePositionAndOrientation(boxId)

useRealTimeSimulation = 0

if (useRealTimeSimulation):
  p.setRealTimeSimulation(1)

while 1:
  if (useRealTimeSimulation):
    p.setGravity(0, 0, -10)
    sleep(0.01)  # Time in seconds.
  else:
    p.stepSimulation()

二、代码分析

hello_pybullet.py展示了pybullet最基本的操作:如何加载一个模型。

步骤如下:

  1. 连接到物理模拟:p.connect(p.GUI) 根据官方文档,连接物理模拟不仅可以通过本机作为主机,也可以通过网络连接到其他主机。
  2. 设置data目录的路径:p.setAdditionalSearchPath(pybullet_data.getDataPath()) 主要是用来设置模型文件的路径方便加载。
  3. 设置重力:p.setGravity(0, 0, -10) 参数里的三个数分别对应xyz,这里-10的负数就是方向向下。
  4. 设置场地:planeId = p.loadURDF("plane.urdf") 这里是加载一个地面,如果没有地面,就相当于无底深渊,模型就会在重力的作用下一直掉下去。
  5. 加载模型:boxId = p.loadURDF("r2d2.urdf", cubeStartPos, cubeStartOrientation) 这里到了重点函数,loadURDF。这个函数用于加载场地和模型。必要的参数是模型所在路径,可选参数通常有模型加载的位置方向(basePosition, baseOrientation),是否固定(useFixedBase)等,具体说明可以参考说明文档。这里需要注意的是,pyBullet里,位置Position的参数通常为xyz,而方向Orientation的参数通常为四元数。由于四元数不容易计算,所以官方提供了getQuaternionFromEuler函数用来从欧拉角转换为四元数。
  6. 开始仿真:p.setRealTimeSimulation() & p.stepSimulation() 仿真提供了两种方式,一种是实时仿真,一种是一步一步仿真。实时仿真只需要将p.setRealTimeSimulation() 参数设置为1就能开启,而stepSimulation是一帧一帧进行仿真,通常需要使用for循环或while循环来保证运转,同时需要加入延时,否则模拟时画面会和开了加速器似的十分鬼畜。

总结

到这里,最基本的如何载入模型就完成了。我个人感觉仿真过程中最重要的三件事是:载入模型,控制模型,获取反馈数据,现在已经完成了第一步。下一篇我会谈一谈如何控制模型。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sp51844/article/details/113769043

智能推荐

vector简单用法-程序员宅基地

STL–vector简介Vector是将元素置于一个动态数组中加以管理的容器。Vector可以随机存取元素(支持索引值直接存取,用[]操作符或at()方法,这个等下会详讲)。定义和初始化对象包含在头文件#include<vector>类模版:vector<T> vect;vector<int> vecInt; //一个存放int的v...

使用EJB3 Java 持久化API来标准化Java的持久化操作-程序员宅基地

持久化对于大部分企业应用来说都是至关重要的,因为它们需要访问关系数据库,例如Oracle Database10g。如果你正使用java开发应用程序,你可能会负责一些很乏味的工作,例如使用JDBC和SQL来编写更新或者读取数据库的代码。在过去的几年中,一些对象-关系映射框架,例如Oracle TopLink和JBossHibernate,已经非常流行了,因为它们简化了持久化操作,将Jav..._java ejb 产品实体的持久化操作

通过小波变换判断数据是否平稳波动及其代码实现_如何验证数据波形图是否具有规律性-程序员宅基地

小波变换理解小波变换就是把一个波形分解成N个低频部分和M个高频部分的和;同一个小波基函数可以通过平移和缩放生成不同的小波基;小波变换就是把原始信号与小波基函数以及尺度函数进行内积运算,所以一个小波基和一个尺度函数就确定了一个小波变换;类比理解:小波基就相当于一个标准正交基;原始信号与小波基作内积相当于向量在标准正交基上做投影;..._如何验证数据波形图是否具有规律性

【安全】Web渗透测试(全流程)-程序员宅基地

1 信息收集1.1域名、IP、端口域名信息查询:信息可用于后续渗透IP信息查询:确认域名对应IP,确认IP是否真实,确认通信是否正常端口信息查询:NMap扫描,确认开放端口如果不会用Nmap,看这里:NMAP 基础教程(功能介绍,安装,使用)发现:一共开放两个端口,80为web访问端口,3389为windows远程登陆端口,嘿嘿嘿,试一下发现:是Window..._web渗透测试

传统的网站防御工具已经没用了?来看看新型防御工具高防CDN的优势_高防工具-程序员宅基地

从网站漏洞中牟利让很多人都趋之若鹜,而传统的网站防御工具只能单一的防御部分外部攻击,无论是DDoS攻击还是其他外部攻击,都在不断地发展和变化,因此网站防护就显得尤为重要。而高防CDN从1.0到3.0,从最初的只能加速传输到现在的全方位防护,做出了质的跨越,实力不容小觑。高防CDN连接云防御力,智能化安全防护,掩藏源站IP,避免网络黑客获得源站真正IP,维护网址杜绝DDOS进攻。保证加快特性的前提条件下全面提升网站安全。网站防护选用高防CDN有下列好多个优点︰1.平稳迅速合理防御力DDoS、CC进攻_高防工具

python日志分析库_纯Python实现的事件跟踪日志文件解析器-程序员宅基地

etl-parserEvent Trace Log file reader in pure Pythonetl-parser is a pure Python 3 parser library for ETL Windows log files. ETL is the default format for ETW as well as the default format for the Kern..._python解析消息跟踪文件

随便推点

Python_数据结构与算法-程序员宅基地

数据结构和算法基础什么是数据结构和算法:兵法,计算的方法。算法是独立存在的一种解决问题的方法和思想。算法的特征:输入:算法具有0个或多个输入输出:算法至少有1个或多个输出有穷性:算法在有限的步骤之后会自动结束而不会无限循环,并且每一个步骤可以在可接受的时间内完成确定性:算法中的每一步都有确定的含义,不会出现二义性可行性:算...

linux发挥显卡性能,Sandy Bridge集成显卡总算支持Linux 开源性能实测-程序员宅基地

Sandy Bridge集成显卡总算支持Linux 开源性能实测出处:快科技 2011-02-11 12:48:20 作者:上方文Q 编辑:上方文Q[爆料] 收藏文章Sandy Bridge处理器及其集成图形核心HD Graphics 2000/3000的性能都是相当优秀的,但对Linux系统用户来说却是个不小的噩梦,因为集成显卡驱动始终都是个坑。直到现在,开源驱动才总算较好地...

PySimpleGUI制作复杂界面及制作批量重命名软件_simplegui可以给每个输入框特殊命名吗-程序员宅基地

PySimpleGUI制作复杂界面及制作批量重命名软件1 界面设计的基本方式2 制作持续显示的界面3 文字元素3.1单行输入元素的设置3.2 多行显示/输入文字元素3.3 多行显示/输入文字元素更新、输出方法4 列表元素4.1 下拉列表4.2 列表选项5 滑动条元素6 单选框元素7 多选框元素8 加载图片9 按钮元素10 进度条元素11 Frame框架元素12 主题配色13 实战:批量重命名软件制作手动反爬虫:原博地址 知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于_simplegui可以给每个输入框特殊命名吗

原创:struts2-045漏洞浅析-程序员宅基地

这是小弟写的第一篇网文,文笔一般,请大家多包涵。近期发生了很多事,使我醒悟要回归自我的同时,要作些改变,所以开始写网文,且把这些网文分享至个人的微信公众号(公众号名:永记士多)和程序员宅基地(博客账号:rossrocket,昵称:永记士多)。此微信公众号和程序员宅基地现定位为:专门研究web应用的漏洞,性能,并发量,框架选择等问题,技术涵盖编程语言(java,php,python)、应用框架(st_struts2-045

[GIS热点] 3S技术集成-新技术革命下集成模式_地图地理系统3s及程开发-程序员宅基地

3S技术集成【3S技术集成】将全球定位系统(GPS)、航天航空遥感(RS)技术和地理信息系统(GIS)技术根据应用需要,有机地组合成一体化进而形成功能更强大的新型系统技术和方法。新技术革命下的集成模式新技术革命带来的是黑洞效应,它们势力所及的大量资源被吸引过去,不仅如此,也慢慢的带动着许多传统产业的革新,催化着各个产业概念的泛化,各个产业间的融合。而3S也正是如此,在新技术革命下,三者相互..._地图地理系统3s及程开发

PHP单词_php常用单词-程序员宅基地

PHP:PHP is HyperText Proprocessorhosts:hosts文件DNS:Domain Name Server域名服务器load:装载Module:模块LoadModule:装载模块File:文件Match:匹配FilesMatch:文件匹配AddType:添加类型application:应用程序Info:Information_php常用单词