【机器人】PyBullet四足机器狗仿真

随着科技的迅猛发展,机器人技术正日益成为现实生活中的重要组成部分。而在机器人研究领域,仿真技术的应用扮演着不可或缺的角色。它不仅可以节约大量资源和成本,更为工程师和研究者提供了一个安全、高效的实验平台。在这个博客中,将探讨PyBullet仿真引擎,并着重介绍如何利用PyBullet进行四足机器狗的仿真。

PyBullet概述

       PyBullet是一个开源的物理仿真引擎,专为机器人学、虚拟现实和游戏开发等领域设计。它由Erwin Coumans开发,最初作为Bullet物理引擎的Python绑定,因此得名PyBullet。Bullet物理引擎是一款广泛使用的高性能三维碰撞检测与物理仿真引擎,其主要用途是模拟现实世界中物体的运动和碰撞。PyBullet通过Python的简洁易用性,为机器人研究者、游戏开发者和仿真爱好者提供了一个强大且灵活的工具,使得他们能够快速构建和测试复杂的物理系统,从简单的刚体到复杂的多体动力学系统,以及各种类型的机器人模型。

image-20230804104945052

PyBullet具有的特点和优势:

  1. 开源和跨平台:PyBullet是开源软件,可以在各种操作系统上运行,包括Windows、Linux、macOS等。
  2. Python接口:PyBullet使用Python编程语言作为主要接口,简化了API的使用,加速了原型开发和实验的速度。
  3. 高性能:PyBullet底层使用C++实现,继承了Bullet物理引擎出色的性能表现。
  4. 丰富的功能:支持刚体动力学、碰撞检测、约束条件、软体物体、多体动力学、关节等丰富的物理特性。
  5. 灵活性:PyBullet可以模拟多种物体之间的复杂关系,让用户能够自由定义物体之间的交互行为。
  6. 可扩展性:用户可以轻松添加自定义的模型、控制器和碰撞几何体,以满足不同场景的需求。
  7. 学习资源丰富:由于Bullet和PyBullet在机器人和游戏领域的广泛应用,因此有许多优秀的教程和社区支持,便于学习和解决问题。

四足机器狗简介

       四足机器狗,也被称为四足机器人,是一类仿生机器人,模仿了真实狗类动物的外形和运动方式。这些机器狗通常由四条腿支撑,通过类似狗类的步态来移动和保持平衡。四足机器狗的概念可以追溯到二十世纪中期,但真正的实现始于近几十年,21 世纪初,机器人BigDog在 Boston Dynamics 正式问世,如图所示,BigDog 如其名,外形仿照哺乳动物狗建造,且能负重大体积货物,在驱动关节运动的执行器上,BigDog 设计并改进了液压驱动装置,腿部装有抗压缓冲机构,在山地,崎岖,冰面等环境下负载作业均获得了优异的效果,且机身上装载的计算机与传感器能够获取机器狗的各个状态及信息。随着机器人技术、传感器和控制算法的不断发展,四足机器狗的设计和性能得到了巨大的提升。为了实现稳定的移动和平衡,四足机器狗采用各种复杂的步态。常见的步态包括步行、奔跑、跳跃和旋转等,这些步态需要高度协调的动作和精确的控制。四足机器狗在各个领域都有潜在的应用。例如,它们可以用于灾难救援,探索危险环境,进行地质勘探,或者在军事和安保领域执行任务。此外,它们还可以成为日常生活中的助理机器人,辅助人们完成各种任务。

image-20230804190450584

安装PyBullet和相关依赖

# 使用Conda创建一个名为'bullet'的新虚拟环境,并指定Python版本为3.6
conda create -n bullet python=3.6# 激活名为'bullet'的虚拟环境
conda activate bullet# 在'bullet'虚拟环境中使用pip安装'numpy'包
pip install numpy# 在'bullet'虚拟环境中使用pip安装'transforms3d'包
pip install transforms3d# 在'bullet'虚拟环境中使用pip安装'pybullet'包
pip install pybullet# 如果下载速度慢,可以使用清华源进行下载
pip install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple
# 使用pip从清华大学的PyPI镜像安装名为'package_name'的包
# 使用'-i'标志指定了清华大学镜像的URL
# 将'package_name'替换为你想要安装的实际包名

image-20230804202730843

创建仿真场景

下载宇树科技四足机器狗的pybullet模型包:GitHub - unitreerobotics/unitree_pybullet

image-20230804202839186

加载模型文件

# 导入numpy库,这是一个用于处理数组和矩阵的库,可以用于数学计算
import numpy as np
# 导入pybullet库,这是一个用于3D物理仿真的库,可以用于创建和操作机器人模型
import pybullet as p# 定义最大力id,这个id将被用来获取或设置四足机器人的最大推力
maxForceId = None
# 定义相机距离id,这个id将被用来获取或设置相机与机器人的距离
cameraDistId = None
# 定义关节id列表,这个列表将被用来存储机器人的所有关节id
jointIds = []
# 定义四足机器人对象,这个对象将被用来操作和控制机器人
quadruped = None
# 定义关节状态id列表,这个列表将被用来存储机器人所有关节的状态id
jointStateIds = []
# 定义预设位置列表,这个列表将被用来存储机器人的预设位置信息
pre_pos = []
# 使用列表推导式生成traceIds列表,这个列表将被用来存储跟踪机器人运动的轨迹id
traceIds = [i * 4 + 5 for i in range(4)]# 速度id
x_velId = None
y_velId = None
dog_pos = None
target_pre_pos = None
obs_init_pos = []def load_robot():# 全局变量global maxForceIdglobal cameraDistIdglobal quadrupedglobal traceIdsglobal x_velIdglobal y_velIdglobal obs_init_posglobal target_pre_pos# 连接仿真环境p.connect(p.GUI, options="--width=1000 --height=700 --xPos=10 --yPos=10")plane = p.loadURDF("plane.urdf")p.setGravity(0, 0, -9.8)p.setTimeStep(1. / 100)# p.setDefaultContactERP(0) #设置默认的接触误差修正参数(ERP)# urdfFlags = p.URDF_USE_SELF_COLLISION+p.URDF_USE_SELF_COLLISION_EXCLUDE_ALL_PARENTSurdfFlags = p.URDF_USE_SELF_COLLISION  # 启用机器人模型的自碰撞功能,允许模型的不同部分之间发生碰撞。quadruped = p.loadURDF("a1/urdf/a1.urdf", [0, 0, 0.48], [0, 0, 0, 1], flags=urdfFlags, useFixedBase=False)  # 加载模型for i in traceIds:pre_pos.append(p.getLinkState(quadruped, i)[0])  # 位置信息# enable collision between lower legsfor j in range(p.getNumJoints(quadruped)):  # 打印关节信息print(p.getJointInfo(quadruped, j))lower_legs = [2, 5, 8, 11]for l0 in lower_legs:for l1 in lower_legs:if (l1 > l0):enableCollision = 1print("collision for pair", l0, l1, p.getJointInfo(quadruped, l0)[12], p.getJointInfo(quadruped, l1)[12], "enabled=", enableCollision)# 这行代码设置了链接2和链接5之间的碰撞过滤。它使用p.setCollisionFilterPair()函数来配置链接之间的碰撞关系,# 以及是否允许它们之间发生碰撞。enableCollision变量的值被用于确定是否允许碰撞。p.setCollisionFilterPair(quadruped, quadruped, 2, 5, enableCollision)maxForceId = p.addUserDebugParameter("maxForce", 0, 100, 20)  # 力的最大cameraDistId = p.addUserDebugParameter("cameraDist", 0, 5, 1)  # 摄像头距离x_velId = p.addUserDebugParameter("x_vel", -1, 1, 0)y_velId = p.addUserDebugParameter("y_vel", -1, 1, 0)for j in range(p.getNumJoints(quadruped)):p.changeDynamics(quadruped, j, linearDamping=0, angularDamping=0)  # 将线性阻尼和角度阻尼都设置为0,这将减少关节的阻尼效果,使得机器人的运动更自由。info = p.getJointInfo(quadruped, j)  # 关节信息# print(info)jointName = info[1]jointType = info[2]if (jointType == p.JOINT_PRISMATIC or jointType == p.JOINT_REVOLUTE):jointIds.append(j)if len(jointIds) % 3 == 0:jointStateIds.append(-np.pi / 2)elif len(jointIds) % 3 == 2:jointStateIds.append(np.pi / 4)else:jointStateIds.append(0)p.setRealTimeSimulation(0)p.configureDebugVisualizer(p.COV_ENABLE_GUI, 0)  # 不显示GUI上的控件target_pre_pos = p.getLinkState(quadruped, 0)[0]if __name__ == '__main__':load_robot()while True:pass

点击【机器人】PyBullet四足机器狗仿真 - 古月居 可查看全文

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

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

相关文章

hanlp中文分词器(ing...)

目前的工作中需要对文本进行分词分析词性,找出热词,经过一系列的调研感觉hanlp这个库还不错,想先试用看看 介绍 HanLP(Han Language Processing)是一个由一系列模型与算法组成的NLP工具包,目标是普及自然语言处理在生产环境中的应用。HanLP…

工地安全监测识别摄像机

工地安全监测识别摄像机是一种在建筑工地和施工现场广泛使用的智能监控设备,主要用于监测施工过程中可能出现的安全隐患和违规行为,以确保工地人员和设备的安全。通过高清摄像头、智能算法和远程监控系统的结合,该摄像机可以实时监测工地各个…

node.js 中的require用法 和import的区别

node.js 中的require用法 在Node.js中,require是一个内置的函数,用于在当前模块中加载和缓存其他模块。这是Node.js模块系统的基础,允许你导入第三方库或其他模块文件。这里是一些基本用法和注意事项: 基本用法 导入核心模块&am…

【gitlab】修改默认存放存放目录

流程 共享文件路径是 /mnt/hgfs/project停掉gitlab gitlab-ctl stop修改gitlab的配置文件,找到 vim /etc/gitlab/gitlab.rb找到 git_data_dirs里面的path 换成共享文件路径 # git_data_dirs({ # "default" > { # "path" > "/mnt/hgfs/…

C#设计简单的WinForms多窗口应用程序[示例]

这个程序是一个简单的多窗口应用程序,使用了 Windows 窗体(WinForms)来创建用户界面。让我们逐步分析它的结构: 1. **命名空间(Namespace):** 整个程序位于名为 MultiWindowApp 的命名空间中…

电商社交新零售:创新引领新趋势,变革新零售思维格局-亿发

新零售O2O模式是如何颠覆传统零售商业模式? 传统电商出现瓶颈: 传统电商在发展过程中逐渐出现了瓶颈,主要表现在市场竞争激烈、用户获取成本上升、用户黏性下降等问题。传统电商往往只能通过价格竞争或促销活动来吸引用户,而这种…

重构数据访问层-优化数据访问的开发

重新整理了一下过去开发的框架,在准备开发新项目时候,重新整理了一下思路,感觉数据访问层还是很鸡肋。过去几年中,急于完成项目开发和交付,框架都是迭代过来的,虽然满足了开发需求,但是&#xf…

软考118-上午题-【软件工程】-能力成熟度模型

一、考试题型 选择题(13题) 二、能力成熟度模型CMM 能力成熟度模型CMM的研究目的是:提供一种评价软件承接方能力的方法,同时它可帮助软件组织改进其软件过程。 CMM 将软件过程改进分为以下5个成熟度级别: 1、初始级…

二叉树的遍历——bfs广度优先搜索

1、BinNode类的创建 (1)代码总览 ##(2)测试示例 2、二叉树的遍历 (1)图示 (2)代码总览 (3)测试示例

ai智能电销机器人的核心技术,工作原理和作用

科技快速发展的同时,带来了人工智能产品的普及。而ai智能电销机器人则成为推进电销行业的产物,那么ai智能电销机器人是如何帮助企业高效触客,有效地工作,效果又如何呢?我们一起来看看吧! 一、ai智能电销机器…

区块链与数字身份:探索Facebook的新尝试

在数字化时代,随着区块链技术的崛起,数字身份成为了一个备受关注的话题。作为全球最大的社交媒体平台之一,Facebook一直在探索如何利用区块链技术来改善数字身份管理和用户数据安全。本文将深入探讨Facebook在这一领域的新尝试,探…

二叉树的遍历的递归与非递归算法

一.二叉树的遍历: 按照一定规律对二叉树的每个结点进行访问且仅访问一次; 这里的访问:可以是计算二叉树中的结点数据,打印该结点的信息,也可以是对结点进行的任何其它操作! 为什么需要遍历二叉树&#x…

精品PPT-数据治理总体解决方案新版(免费下载)

1、知识星球下载: 如需下载完整PPTX可编辑源文件,请前往星球获取:https://t.zsxq.com/19F4dDDrv 2、免费领取步骤: 【1】关注公众号 方案驿站 【2】私信发送 数据治理新版 【3】获取本方案PDF下载链接,直接下载即可…

spring.rabbitmq.listener.simple.default-requeue-rejected = false 和放入死信队列的区别

目录 一、场景 二、使用 spring.rabbitmq.listener.simple.default-requeue-rejected false 2.1 特点 三、 放入死信队列 四、两种区别 一、场景 当我们使用RabbitMq的时候,我们如果业务中有异常,很有可能造成死循环,因为 在RabbitMQ和…

转让名称带中国的金融控股集团公司要多少钱

随着公司的发展和市场竞争的影响,越来越多的创业者希望注册一家好名称的公司,以提高企业知名度和竞争力。但是,注册中字头无地域公司需要满足一定的条件和流程。本文将对中字头无地域公司注册条件及流程进行详细的介绍。可以致电咨询我或者来…

U2004A是德科技U2004A功率传感器

181/2461/8938产品概述: Keysight U2004A (Agilent) USB 功率传感器可快速设置和测量,无需功率计,只需将 USB 传感器电缆插入 PC,即可使用 FREE Power Panel (N1918A) 软件控制 USB 功率传感器。 Keysight U2004A USB 功率传感器…

Astra深度相机在Ubuntu18.04系统下实现相机标定

问题: 当使用Astra相机的启动的指令启动相机后,使用rviz查看相机所发布的rgb数据时,在终端会出现如下的提示信息: Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found. Camera calibration fil…

flood_fill 算法|图形渲染

flood fill 算法常常用来找极大连通子图,这是必须掌握的基本算法之一! 图形渲染 算法原理 我们可以利用DFS遍历数组把首个数组的值记为color,然后上下左右四个方向遍历二维数组数组如果其他方块的值不等于color 或者越界就剪枝 return 代码…

【http】常见http headers

相关文章:http 状态码 和http methods及restful api 常见http headers 1 常见的Request Headers Accept 浏览器可接收的数据格式 Accept-Encoding 浏览器可接收的压缩算法,gzip Accept-language 浏览器可接收的语言 Connection:keep-alive 一次TCP连接…

react的闭包陷阱

React 的闭包陷阱是指在使用 React Hooks 时,由于闭包特性导致在某些函数或异步操作中无法正确访问到更新后状态或 prop 的值,而仍旧使用了旧值。下面通过几个代码示例来具体说明闭包陷阱的几种常见情形: 示例 1: useState 闭包陷阱 import…