Pybulle中确定UR机械臂末端姿态方法

在Pybullet仿真环境中确定机械臂末端姿态总是一件令人头痛的事情,什么RPY、欧拉角绕哪个坐标轴旋转,等等一些绕来绕去的非常混乱,依然不明白期望的末端姿态应该如何设置。因此,本文详细梳理了如何通过旋转XYZ欧拉角得到我们期望的末端姿态。

主要使用的函数为getQuaternionFromEuler,阅读pybullet_quickstartguide手册,可以了解:
The pybullet API uses quaternions to represent orientations. Since quaternions are not very intuitive for people, there are two APIs to convert between quaternions and Euler angles.
The getQuaternionFromEuler input arguments are:
在这里插入图片描述getQuaternionFromEuler returns a list of 3 floating point values, a vec3.

大致意思为使用四元数表示姿态具有很多优点(避免奇异点),但是四元数对于人们不是很直观,因此Pybullet内置的API可以将欧拉角转换为四元数。函数getQuaternionFromEuler输入的是绕XYZ轴旋转的角度,顺序不要错了,分别绕XYZ轴旋转。这里的XYZ是固定的世界坐标系。
具体步骤:
1、首先确定机械臂末端坐标系:
a.通常情况下机械臂末端接近物体的方向为Z轴,即接近矢量a(approach)
b.若夹爪为两指夹爪,两指的连线方向为Y轴,即方位矢量o(orientation)
c.通过右手法则确定X轴,即法向矢量n(normal)
reference:华科大赵欢老师机器人学导论课程
在这里插入图片描述

2、其次确定机械臂末端绕XYZ轴转0度时的初始姿态,即getQuaternionFromEuler(0,0,0)
3、机械臂初始姿态下,末端坐标系如何通过绕世界坐标系的XYZ轴转动到达我们期望的末端姿态,这里是分别绕XYZ轴转动,顺序千万不要弄错。例如,末端姿态朝下(Z轴朝下),便于桌面级抓取;又或是末端姿态朝前(Z轴朝前),便于水果采摘等等。

注意事项:
A、绕世界坐标XYZ轴的旋转,始终是绕固定的世界坐标系。
B、仔细考虑旋转角度的正负号,世界坐标系的箭头朝向自己,逆时针为正,顺时针为负。

例子:
此时为机械臂在getQuaternionFromEuler(0,0,0)时的初始姿态。
在这里插入图片描述
若希望末端姿态朝下抓取,只需绕世界坐标系的Y轴旋转pai/2的角度,即
getQuaternionFromEuler(0,pai/2,0)
当然也有其他方式,例如:
getQuaternionFromEuler(-pai,pai/2,0)

逻辑正确,完结撒花!!!

### 机械路径规划与末端执行器姿态调整 #### 路径规划概述 机械路径规划涉及从起点到目标点设计一条可行的路径,同时满足几何、运动学和动力学约束条件。路径规划不仅关注空间上的可达性,还需要考虑时间、速度和其他动态特性[^1]。 对于2DOF机械而言,路径规划通常采用图搜索算法(如A*算法)、基于采样的算法(如RRT算法),或者人工势场法等技术来解决障碍物规避和最优路径寻找问题[^3]。具体来说,在MATLAB环境中实现路径规划时,可以通过定义一系列中间点(waypoints)并利用特定算法生成具体的轨迹计划[^2]。 #### 动力学建模与D-H参数法 为了精确控制机械的动作,首先需要构建其运动学模型。常用的方法是通过Denavit-Hartenberg (D-H) 参数描述各关节之间的关系,并据此完成正向和反向运动学求解过程[^4]: - **正运动学**:已知各个关节角度或位移量的情况下计算出末端效应器的位置及方向; - **逆运动学**:给定期望的目标位置,则需找出能使实际到达该处所需的相应输入变量集合; 以下是简单的Python代码片段展示如何设置DH表用于进一步分析: ```python import numpy as np def dh_matrix(a, alpha, d, theta): """ Create a Denavit-Hartenberg transformation matrix. Parameters: a : Link length along X-axis of previous joint to next one's origin alpha : Angle about common normal measured from old Z to new Z axis d : Offset along preceding frame’s z direction towards current link offset theta : Rotation around last revolute/prismatic pair Returns: Transformation Matrix based on provided DH parameters """ sa = np.sin(alpha); ca = np.cos(alpha); st = np.sin(theta); ct = np.cos(theta); T = [[ct,-st*ca,st*sa,a*ct], [st,st*ca+ct*sa,-ca*sa,a*st], [0 ,sa ,ca ,d ], [0 ,0 ,0 ,1 ]] return np.array(T) # Example usage with hypothetical values for each parameter set per segment/joint connection within robot arm structure definition... segments_dh_params = [(a_i,alpha_i,d_i,theta_i)] # Replace placeholders accordingly! T_total = eye(4) for seg in segments_dh_params: Ti = dh_matrix(*seg) T_total @= Ti print("Final Homogeneous Transform:", T_total) ``` 此脚本展示了创建单个转换矩阵的过程以及累积乘积得到最终齐次变换表示形式的方式。 #### 末端执行器的姿态调整策略 当涉及到末端执行器的姿态调整时,主要依赖于逆运动学解决方案以确保能够达到指定的方向矢量需求。此外还可以引入额外自由度辅助补偿误差或是应用更高级别的控制器比如PID调节机制提升响应性能水平。 一些先进的方法可能还会融合视觉反馈数据实时校准偏差情况从而提高精度等级。总之整个流程包含了但不限于以下几个方面的工作要点: - 明确设定理想状态下的方位角信息作为参考依据; - 利用解析手段或者是数值迭代方式获取对应联杆配置组合方案; - 结合实际情况考量外部干扰因素影响制定鲁棒性强的操作指令序列.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值