四足机器人步态仿真(二)PyBullet 机械臂运动学仿真(以绘制圆形路径为例)

本文主要是介绍四足机器人步态仿真(二)PyBullet 机械臂运动学仿真(以绘制圆形路径为例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

观前提醒:本章主要内容是通过PyBullet仿真kuka机械臂,并控制机械臂末端按照预定轨迹运动

一、什么是运动学?
运动学是物理学的一个分支,专注于物体的运动描述,包括位移、速度、加速度等,而不考虑这些运动是如何产生的(即不考虑力和质量)。运动学可以应用在很多领域,包括机械工程、机器人学、生物力学等。

在机器人学中,运动学特别指的是机器人各个部件之间的运动关系。机器人的运动学可以分为两个主要的部分:

  • 正运动学(Forward Kinematics, FK):这部分处理从给定的关节角度(机器人的配置)到确定机器人手臂末端执行器(例如工具、爪子等)的位置和方向的转换。在正运动学中,你知道每个关节的角度,你要计算的是末端执行器的确切位置。这通常是通过机器人的几何参数来实现的,比如关节的长度和它们之间的固定角度。
  • 逆运动学(Inverse Kinematics, IK):这部分处理的是相反的问题,即确定使机器人的末端执行器达到特定位置和方向所需的关节角度。逆运动学在机器人编程中尤其重要,因为通常我们知道机器人的工具需要在哪个位置执行任务,但我们需要计算出为了达到这个位置,各个关节应该如何移动。逆运动学可能有多个解(即不同的关节配置可以导致末端执行器在相同的位置),也可能没有解(当期望位置超出机器人的工作范围时)。

运动学解析一般需要考虑到机器人的物理结构,例如关节的类型(旋转关节或滑动关节)、关节的排列(串联或并联)以及每个关节的限制等。在复杂的系统中,运动学分析可能需要运用到数学和计算工具,如矩阵代数、三角学和数值方法。

二、如何在PyBullet中实现正逆运动学
正运动学

在PyBullet中,正运动学的计算通常是隐式进行的。当你设置了机器人关节的状态后,PyBullet会自动计算出机器人末端执行器的位置和方向。例如:

resetJointState(bodyUniqueId, jointIndex, targetValue, targetVelocity)

resetJointState函数用于直接设置机器人的某个关节到一个特定的状态。这个函数可以在不运行物理引擎的情况下,直接改变关节的位置和速度。通常,这个函数被用于初始化仿真环境,或者在进行非物理学的运动学研究时设置机器人的起始状态。这个函数不会考虑动力学约束,比如碰撞或者关节之间的相互影响。
在执行上述代码后,PyBullet会根据给定的关节角度desiredJointAngle计算出机器人的每一部分的位置,包括末端执行器。
参数解释:

  • bodyUniqueId:机器人或其他物体的唯一ID,这个ID是在创建或加载物体时由PyBullet返回的。
  • jointIndex:要设置状态的关节索引。
  • targetValue:关节目标位置(通常是角度,对于旋转关节;或者是直线位移,对于滑动关节)。
  • targetVelocity:关节目标速度(这是可选参数)。

逆运动学
逆运动学通常比正运动学复杂,因为它可能有多个解,或者在某些情况下没有解。在PyBullet中,可以使用calculateInverseKinematics函数来求解机器人的逆运动学。这个函数通过末端执行器的期望位置和方向(如果给定)来计算每个关节应该达到的角度。并且通常使用数值方法来寻找解,所以说它可以处理复杂的机器人模型,包括那些解析解难以找到或不存在的情况。

jointPoses = p.calculateInverseKinematics(robotId, endEffectorIndex, targetPosition, targetOrientation)
  • bodyUniqueId:机器人的唯一ID。
  • endEffectorIndex:末端执行器的链条索引,这个索引标识了机器人的哪个部分是末端执行器。
  • targetPosition:一个列表或元组,指定了末端执行器期望到达的目标位置的世界坐标(通常是[x, y, z])。
  • targetOrientation:一个列表或元组,指定了末端执行器期望到达的目标方向的四元数。这是可选参数,如果不提供,逆运动学解将不考虑末端执行器的方向。
  • …other parameters…:PyBullet 的逆运动学函数还允许设置其他参数,比如关节的上下限、解的逼近度等,可以用来进一步控制逆运动学求解的过程。

calculateInverseKinematics返回的jointAngles是一个列表,包含了所有关节达到目标位置所需的角度值。
可是逆运动学问题会有多个解,这种现象称为逆运动学的多解性(kinematic redundancy),那么calculateInverseKinematics会返回所有的解吗?
答案是:不会! calculateInverseKinematics函数只返回一个解,这个解是根据内部算法(通常是基于数值优化的方法)所决定的。

三、机械臂模型建立
pybullet预装了一些模型,其中就有一个机械臂模型:“kuka_iiwa/model.urdf”
我们可以使用pybullet_data.getDataPath() 来设置附加的搜索路径,这个路径指向 pybullet 预装的数据目录,目录里面包括了一些基本的URDF模型和环境。

 四、仿真程序编写

点击四足机器人步态仿真(二)PyBullet 机械臂运动学仿真(以绘制圆形路径为例) - 古月居可查看全文

这篇关于四足机器人步态仿真(二)PyBullet 机械臂运动学仿真(以绘制圆形路径为例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033871

相关文章

hdu2544(单源最短路径)

模板题: //题意:求1到n的最短路径,模板题#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#i

poj 1734 (floyd求最小环并打印路径)

题意: 求图中的一个最小环,并打印路径。 解析: ans 保存最小环长度。 一直wa,最后终于找到原因,inf开太大爆掉了。。。 虽然0x3f3f3f3f用memset好用,但是还是有局限性。 代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#incl

【WebGPU Unleashed】1.1 绘制三角形

一部2024新的WebGPU教程,作者Shi Yan。内容很好,翻译过来与大家共享,内容上会有改动,加上自己的理解。更多精彩内容尽在 dt.sim3d.cn ,关注公众号【sky的数孪技术】,技术交流、源码下载请添加微信号:digital_twin123 在 3D 渲染领域,三角形是最基本的绘制元素。在这里,我们将学习如何绘制单个三角形。接下来我们将制作一个简单的着色器来定义三角形内的像素

Flutter 进阶:绘制加载动画

绘制加载动画:由小圆组成的大圆 1. 定义 LoadingScreen 类2. 实现 _LoadingScreenState 类3. 定义 LoadingPainter 类4. 总结 实现加载动画 我们需要定义两个类:LoadingScreen 和 LoadingPainter。LoadingScreen 负责控制动画的状态,而 LoadingPainter 则负责绘制动画。

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

【408DS算法题】039进阶-判断图中路径是否存在

Index 题目分析实现总结 题目 对于给定的图G,设计函数实现判断G中是否含有从start结点到stop结点的路径。 分析实现 对于图的路径的存在性判断,有两种做法:(本文的实现均基于邻接矩阵存储方式的图) 1.图的BFS BFS的思路相对比较直观——从起始结点出发进行层次遍历,遍历过程中遇到结点i就表示存在路径start->i,故只需判断每个结点i是否就是stop

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

图的最短路径算法——《啊哈!算法》

图的实现方式 邻接矩阵法 int[][] map;// 图的邻接矩阵存储法map = new int[5][5];map[0] = new int[] {0, 1, 2, 3, 4};map[1] = new int[] {1, 0, 2, 6, 4};map[2] = new int[] {2, 999, 0, 3, 999};map[3] = new int[] {3, 7

基于树梅派的视频监控机器人Verybot

最近这段时间做了一个基于树梅派 ( raspberry pi ) 的视频监控机器人平台 Verybot ,现在打算把这个机器人的一些图片、视频、设计思路进行公开,并且希望跟大家一起研究相关的各种问题,下面是两张机器人的照片:         图片1:                   图片2                    这个平台的基本组成是: